Process a recording after the fact
Post-hoc processing takes synchronized videos you already recorded and reconstructs a 3D skeleton from them, use it any time you want to process, or reprocess, a session that's already on disk rather than recording live.
This workflow is still early. Expect some rough edges, including the two specific bugs noted below.
Before you begin
You'll need a recording with synchronized videos from at least two cameras, laid out roughly like this:
recording_folder/
├── synchronized_videos/
│ ├── camera_0.mp4
│ ├── camera_1.mp4
│ └── ...
└── ...
Process an existing recording
- Select the recording. Open the Playback tab, choose the recording, and click Continue to Mocap Setup.
- Confirm the processing directory. Under Processing Directory,
select the recording's top-level folder, the one containing
synchronized_videos/. If you add or change files afterward, use the re-check button to refresh.Bug: if the Process Mocap button stays disabled even after you've selected a valid recording, press Re-check Folder.
- Select the calibration. Under Calibration, confirm the right
camera calibration is loaded, either an existing TOML from the
recording folder, an imported TOML, or fresh calibration videos. A
calibration is only valid while the cameras stay exactly where they
were when it ran, see
get a calibration you can trust.
Bug: when selecting calibration videos, choose the outer top-level recording folder, the one containing
synchronized_videos/, not that folder itself, or it won't find the videos. - Choose a detector. MediaPipe or RTMPose, plus a model and confidence threshold, see choose a tracking model. RTMPose doesn't have a working Blender export yet, you'll still get 3D data either way, but Blender export currently requires MediaPipe.
- Configure Blender export, if you want it. Turn off Export to
Blender after mocap processing if you only need the data files, or
leave it on and optionally enable auto-opening the finished
.blendfile. See open your recording in Blender. - Click Process Mocap. The pipeline progress window shows the current stage. Keep FreeMoCap open until it reports completion. Processing time depends on recording length, camera count and resolution, the detector you chose, and your available CPU/GPU.
Find and review the results
Results land inside the recording folder:
recording_folder/
├── synchronized_videos/
├── annotated_videos/
├── output_data/
│ ├── *.npy
│ ├── *.csv
│ ├── *.parquet
│ └── per_camera_weights.npy
├── tracker_schema.json
└── camera_calibration.toml
annotated_videos/ has your camera footage with detected 2D keypoints
drawn on top, the fastest way to sanity-check tracking by eye.
output_data/ has the reconstructed 3D data itself, see
find and read your output for what each
file is. Reload the recording in Playback afterward to inspect the
synchronized videos alongside the reconstructed skeleton.
Reprocessing
You can reprocess a recording with a different detector or
configuration at any time. Earlier annotated videos may get renamed with
a .prev suffix when new ones are generated; other output files can be
overwritten outright. Copy anything you want to keep before reprocessing
a recording that matters.
Current alpha limitation
The 3D reconstruction settings shown under Point Gate, One Euro Filter, and FABRIK aren't wired into post-hoc processing yet, changing them won't affect post-hoc output in this build. What is passed through: the recording directory, the calibration, the detector and its settings, and the Blender export settings.
Troubleshooting
Video frame counts don't match. Check synchronized_videos/ for
stray files left over from another session. Every video in that folder
should be from the same recording and have the same frame count.
Calibration or camera-ID error. The calibration has to have been created with the exact same cameras used in the recording, camera IDs in the recording must match camera IDs in the calibration TOML.
Reconstructed skeleton looks distorted or misplaced. Most likely a camera moved after calibration, the wrong calibration was selected, the calibration didn't cover the full capture volume, or a keypoint wasn't visible in enough camera views. Check the annotated videos first: if the 2D detections look right but the 3D doesn't, redo the calibration and reprocess.
Processing fails or stops unexpectedly. When reporting it, include your FreeMoCap version, OS and GPU, the recording's camera count, detector and model used, which pipeline stage it stopped at, and the full error and log output.