Frequently asked questions
Does realtime-calib run headless, without a GUI?
Yes. The service runs in Docker on the machine the cameras are plugged into: no desktop environment or GUI is needed on that host. You drive the whole calibration from a web app on any device on the same local network. See Installation.
Can I run a calibration from a phone or a tablet?
Yes. The operator interface is a responsive web app served over your LAN in plain HTTP; desktop, tablet and phone all work, in landscape or portrait. The heavy computation stays on the server.
Do I need a GPU for camera calibration?
No. Everything (board detection, live overlays, intrinsic and extrinsic solves, bundle adjustment) runs on CPU. No cloud either: camera streams never leave your local network. See the architecture overview.
Which calibration board should I use?
It depends on the step.
For intrinsic calibration, use a ChArUco board (the intrinsic solve requires one). Its ArUco markers make detection robust to occlusion and partial views, while its interpolated chessboard corners give subpixel accuracy: a good fit when the board fills a fair part of the frame, one camera at a time.
For extrinsic calibration in a large volume (a room, a hall, a wide capture space), a single ArUco marker is often the better choice. Seen from across a large volume, the squares of a ChArUco board become too small in the image to detect reliably; the alternative, printing a very large ChArUco board, is bulky and expensive. A single ArUco marker stays detectable at a distance, so a small, cheap board is enough to link the cameras.
Whichever you use, measure it with calipers after printing and enter the real size: that measurement sets the metric scale. See Define a calibration board and the best practices.
Can I calibrate videos I have already recorded?
Yes. Load from files on the Dashboard imports an archive (ZIP or tar) of pre-recorded videos, named cam_<n> under intrinsics/ and optionally extrinsics/, and runs the whole wizard on them with no camera attached. A Caliscope recording drops in as it is; videos without real timestamps are synchronized the way Caliscope aligns them. See Start or load a session.
Can I export the calibration to Unity, Unreal, Blender, three.js, ROS or OpenCV?
Yes. Export writes one file per selected target with the axis remap and handedness already applied: three.js / OpenGL (Y-up, right-handed), Blender / ROS (Z-up, right-handed), Unity (Y-up, left-handed), Unreal (Z-up, left-handed), plus a versioned OpenCV JSON that OpenCV pipelines read without conversion, Caliscope's camera_array.toml and the aniposelib TOML used by Pose2Sim and anipose. See Export.
Is realtime-calib compatible with Caliscope?
Yes, both ways. camera_array.toml is written in the layout Caliscope v0.11.5 loads, translations in metres, with project-specific fields strictly additive; the aniposelib export covers Pose2Sim, anipose and older Caliscope projects. And Caliscope recordings can be imported and calibrated here. For a full comparison, see realtime-calib vs Caliscope.
Do my cameras need hardware synchronization (genlock)?
No hardware sync is required. Each frame is stamped with the camera driver's own buffer timestamp, and frames are grouped into synchronized instants within just under one frame period. Groups where the target moved between the cameras' exposures are detected and set aside, and you can tighten the maximum sync spread (in milliseconds) when preparing the extrinsic solve.
Why does the live preview look lower-quality than the resolution I selected?
That is expected, and it does not affect your calibration. To keep the CPU encoder and the network light, the live preview streamed to your browser is downscaled to at most 960 px wide (e.g. 960×540 from a 1080p camera), and the live detection overlay is computed on that preview. It is a display stream only.
Recording and the calibration itself run at the full resolution you selected: every compute re-detects the board on the native recordings. You can confirm it by checking the resolution of the recorded videos in the session folder: they are written at the capture resolution, not at 960 px. See Configure cameras for how the calibration resolution is chosen.
What operating system does the camera server need?
A Linux host: cameras are read via V4L2 and the stack runs with Docker Compose. The operator device only needs a modern browser, on any OS. See Installation.
Can I use RTSP or IP cameras, or only USB cameras?
Right now, only USB cameras are supported for live capture: they are read via V4L2 on the Linux host. RTSP streams and IP cameras are not supported yet, though videos recorded by any camera can be imported.
Live RTSP / IP-camera support is a natural extension. If you need it, open an issue or a feature request on GitHub: demand is what drives the roadmap.
How accurate is the calibration?
realtime-calib follows the same calibration lineage as Caliscope and OpenCV: ChArUco intrinsics with the classic 5-coefficient distortion model, stereo-initialized extrinsics refined by a bundle adjustment that holds the target to its printed geometry (methodology and sources). On recorded hand-held sweeps, the per-camera reprojection error lands between 0.1 and 0.8 px at the output resolution, with the reconstructed target rigid to under 0.5 mm. Accuracy still depends mostly on your capture (board quality, tilt, frame coverage): see the best practices. Each result comes with its own quality report, so you can judge it rather than trust it. Public benchmarks are being assembled.
How do I know the metric scale is right?
The scale comes from the size you measured on the printed target: a print 2 % off makes every distance 2 % off, and no internal check can see it, since the whole solve scales together. To check it, write a site template with a few camera-to-camera distances measured with a tape: the export then compares the calibration's scale against them and names a distance that disagrees. See Export.
Is realtime-calib free?
Yes: free and open source under AGPL-3.0. If you need to embed it in a proprietary product or offer it as a closed service, a commercial license and custom development are available.