CamMatch™ logo

Engineering Dynamics Company

CamMatch™

Camera Matching & Visualization for Blender

CamMatch™ — How-To Guide

A practical, step-by-step guide to solving a camera with CamMatch. It follows the add-on's panels in the order you actually use them and reflects the current UI.

CamMatch is built for fixed-focal-length footage — a camera whose lens does not zoom or change focus during the shot. You calibrate the lens once and that single calibration governs every solved frame. Zoom/variable-lens footage is supported as an advanced exception (see Lens type), but the whole workflow below assumes a fixed lens.

New to the add-on? Read Core concepts first — the rest of the guide assumes you know the difference between intrinsics and pose, and between a track and a 3D point.


Table of contents

  1. Core concepts
  2. The panels at a glance
  3. The full workflow
  4. Track list legend (icons & colors)
  5. Fixed lens vs variable lens — which to use
  6. Tips for reliable solves
  7. Troubleshooting

Core concepts

CamMatch answers one question: given 2D image points that you know the real 3D location of, where was the camera (and what lens did it have)? That's the PnP ("Perspective-n-Point") problem.

You supply two things and CamMatch matches them:

You provide In Blender this is Example
2D points — where a feature appears in the footagea track (marker) in the Movie Clip Editorthe corner of a stop sign, tracked frame by frame
3D points — where that feature really is in the worldan object (usually an Empty) placed at the surveyed coordinatethe same stop-sign corner at its measured survey point

A link ties one track to one object. With enough good links on a frame, CamMatch can solve that frame.

Two things get solved, and it helps to keep them separate:

CamMatch's intended workflow is fixed-focal-length: the lens is assumed not to change during the shot, so you calibrate the lens once and then solve the camera's pose on every frame you need — the one calibration governs the entire shot. This keeps the lens well-constrained and every frame mutually consistent. Zoom/focus-pull footage (a variable lens) is the exception; see Lens type.


The panels at a glance

CamMatch is split into collapsible panels in the Clip Editor sidebar, top to bottom:

Panel What it's for
Quick Actions (top, always open)Camera selection, the big Calibrate / Solve buttons, links refresh, diagnostics, report export, background transparency, render overscan. Your day-to-day controls.
Status & ReprojectionA live read-out of the last solve/calibration: message, mean/worst error, inlier count, and which frame it came from.
CalibrationIntrinsics: which lens parameters to solve, distortion model, single-frame Calibrate Camera, and Multi-Frame Calibration.
Solve CameraPose: PnP method, acceptance gates, Solve Camera Pose, pose uncertainty settings, and Solve Multi-Frame.
Track & LinksThe track↔object link table, auto-linking, filtering, error thresholds, and per-track cleanup.
SettingsThe raw tracking-camera parameters (focal, sensor, optical center, distortion) for inspection/manual edits.
DiagnosticsOpen the generated heatmap / calibration / solve overlay images. Verbose logging toggle.
ResetReset Session — only if things get into a bad state.

The 3D Viewport > Sidebar (N) > CamMatch tab has a small Quick Point Creation tool for placing control-point Empties by clicking in the viewport.


The full workflow

1. Set up footage and 3D points

  1. Open the Movie Clip Editor and load your footage.
  2. Bring your known 3D coordinates into the scene as objects (Empties are ideal). You can:
  3. Accuracy of these 3D points directly determines solve accuracy. Use real measurements wherever you can.

2. Track features in the clip

Use Blender's normal tracking tools to place a track on each image feature that corresponds to one of your 3D points. Each track needs a marker on every frame you intend to solve. Give tracks sensible names — matching names make linking automatic (next step).

Open Track & Links.

  1. Click the Refresh button (⟳, top of the side button column) to populate the table from the clip.
  2. Link tracks to objects using whichever is convenient:
  3. Each row shows a checkbox (usage), the reprojection Err % with a colored status dot, the Track name, and the linked Object. See the legend for what the icons mean.

Handy filters (under Auto-Link, Filter & Sort):

4. Calibrate the lens (intrinsics)

Skip this only if you already trust the lens values. Open Calibration.

  1. Choose which parameters to solve (toggle buttons):
  2. Pick a distortion model and enable the coefficients to solve (K1/K2/K3, plus K4 and P1/P2 for Brown-Conrady).
  3. Calibrate the fixed lens. Multi-Frame Calibration is the recommended path:
  4. The panel shows the calibration status — e.g. Calibrated (multi-frame) @ 14, 28, 40-56 · stored @ Y (or (single-frame) @ frame X) — and the Status & Reprojection box reports the RMS error. Diagnostic images and the compositor undistort nodes are created automatically.
  5. When you're happy, enable Lock Intrinsics to prevent accidental recalibration or reset. For a fixed lens this is the norm: calibrate once, then lock. (Locking only guards the Calibrate/Reset buttons — it never changes values you've already solved.)

Reset Intrinsics returns the lens to a sensible default (focal length scaled from the sensor width), available when intrinsics aren't locked.

5. Solve the camera pose

Open Solve Camera (or use the Solve button in Quick Actions).

  1. Confirm the target camera in Quick Actions (the dropdown next to Auto-Create Camera). Leave Auto-Create Camera on to let CamMatch make one if needed. The button beside it selects the camera in the scene.
  2. Pick the PnP function and method, or click Best Method to have CamMatch compare the available algorithms and automatically switch to the one with the lowest reprojection error.
  3. Set the acceptance gates (these apply to both single and multi-frame solves):
  4. Click Solve Camera Pose. The camera jumps into place, per-track errors populate the list, and diagnostics regenerate. The camera stays selected.

6. Solve a moving camera (multi-frame)

This solves the camera's pose on many frames — the camera moves through space, but the lens stays fixed (calibrated once in step 4). In Solve Camera, enable Solve Multi-Frame.

  1. Choose Use Scene Range, or turn it off and type specific frames/ranges in Frames (e.g. 14, 28, 40-56, 89).
  2. Options:
  3. Click Solve Scene Range / Solve Multi-Frame. Each frame is solved and keyframed using the acceptance gates above; the status line reports how many frames were accepted, skipped, rejected, or failed.

Every solved frame gets pose keyframes (and, if Key Intrinsics is on, lens keyframes too). Frames that fail the gates are left un-keyed so they don't pollute the result.

7. Review and clean up errors

After any solve, Status & Reprojection shows the mean/worst error and inlier count, and the Track & Links rows show each track's error and status dot.

Tools for finding and fixing bad correspondences (Track & Links > Auto-Link, Filter & Sort):

Automatic per-frame cleanup (in Solve Camera):

Per-track manual control lives in the list:

Selecting a track in the list also selects its linked 3D point in the viewport and outliner (and vice-versa when you move a track in the clip), so you can quickly see which control point is misbehaving. Turn on Show Error Points in 3D (Quick Actions) to visualize error-colored points in the viewport.

8. Recalibrating: stale frames

Recalibration changes the lens, so any frame you already solved against the old lens is now geometrically inconsistent.

Multi-frame calibration turns Key Intrinsics off on success, so the single calibration governs every solved frame.

9. Pose uncertainty

CamMatch estimates how sensitive each solved pose is to noise, automatically, on every solve (Monte-Carlo perturbation). In Solve Camera:

Results (translation and rotation standard deviation and 95th percentile, per frame) appear in the exported reports.

10. Diagnostics images

Diagnostic images are created automatically after each calibration and solve. Open them from the Diagnostics panel:

The Diagnostics button in Quick Actions opens the current frame's overlays directly. Enable Verbose Logging (bottom of Diagnostics) for detailed console output when troubleshooting.

11. Compositing and rendering

12. Export reports

Click Generate Reports (Quick Actions). Choose a folder and CamMatch writes one HTML file per report plus a combined AllReports file. Open any of them in a browser and use Print > Save as PDF for a PDF.

Reports include lens parameters, solve quality (per frame), track details, per-track-over-time, camera trajectory, pose uncertainty, a forensic summary, and a methodology section. Distances are reported in the active scene's length units. Frames whose camera pose keyframe was deleted are pruned automatically on export.


Track list legend (icons & colors)

Usage checkbox (left column):

Icon Meaning
Filled check / filled keyframeTrack is used on this frame (keyframe icon = a per-frame usage key is set)
Empty check / hollow keyframeTrack is not used on this frame
Hidden (eye-off)Track has no marker on this frame

Error status dot (Err % column):

Color Meaning
🟢 GreenError below the Warn threshold — good
🟡 YellowBetween Warn and Critical
🔴 RedAt/above Critical (a used inlier) — problem
🟠 Orange + OUTRANSAC outlier — the solve didn't use it
🟠 Orange + AUTOAuto-disabled (critical) — the solver dropped it this frame
⚪ GrayNot used on this frame (no marker or toggled off)

The 🔘 dot next to a track name means it's currently selected/active in the Clip Editor.


Fixed lens vs variable lens — which to use

Calibration precedence, briefly: calibration always writes an intrinsic keyframe at its own frame (constant interpolation). With Key Intrinsics off, a solved frame holds the most recent calibration forward — so recalibrating and re-solving picks up the new lens. With it on, a solved frame owns its lens and won't inherit a later recalibration.


Tips for reliable solves


Troubleshooting

Symptom Fix
OpenCV not foundClick Install OpenCV in Edit > Preferences > Add-ons > CamMatch (it installs the bundled copy, and falls back to downloading from the internet automatically), then restart Blender. Still stuck? See If OpenCV still won't install below.
Panels are empty / "Load a movie clip"Load footage in the Movie Clip Editor and make sure it's in Tracking mode.
Solve fails: "needs at least N points"Add more valid current-frame links. Under 6 points CamMatch falls back to methods that need fewer, but more points solve better.
Many RANSAC outliersCheck the track↔object links, re-track low-quality markers, and verify 3D point positions.
High reprojection errorUse the overlays and the Outside Critical filter to find bad correspondences; disable or fix them and re-solve.
Multi-frame calibration frame looks misalignedFixed — the overlay now uses the scene frame for its background plate. Update to the latest version.
Report shows a frame with no 2D pointsDelete that frame's camera pose keyframe, or re-export (stale-key frames are pruned on export).
A report frame is marked ⚠️ staleYou recalibrated after solving it. Click Re-solve Stale Frames in the Solve Camera panel.
Intrinsics changed unexpectedlyEnable Lock Intrinsics after calibration.
Range solve skips framesCheck Min Points / Min Inliers / Min Inlier Ratio, the Reject/Auto-Disable Critical gates, and whether the tracks have markers on those frames.
Session in a weird stateReset panel > Reset Session.

If OpenCV still won't install

CamMatch tries the bundled offline copy first and then the internet automatically, and it works with the numpy that Blender already ships — so a Python-version mismatch (for example Blender 5.1 on Python 3.13) no longer blocks it. If it still can't install — an offline-only machine, or a corporate firewall blocking PyPI — install OpenCV into Blender's own Python by hand:

  1. Close Blender completely.
  2. Find Blender's bundled Python. It lives next to blender.exe — for example ...\Blender 5.1\5.1\python\bin\python.exe on Windows.
  3. In a terminal, install the headless build (Blender already bundles numpy, so no extra pin is needed): "<path-to>\python.exe" -m pip install "opencv-python-headless<5"
  4. Verify it imports: "<path-to>\python.exe" -c "import cv2; print(cv2.__version__)" should print a version number.
  5. Reopen Blender, open CamMatch, and click Diagnostics — the warning should be gone.

If OpenCV imports in Blender's Python but CamMatch still reports it missing, disable and re-enable the CamMatch extension (or restart Blender once more) so its dependency check re-runs.


CamMatch™ is a trademark of Engineering Dynamics Company (Anthony Cornetto). The source code is GPL v3. CamMatch is a measurement/visualization aid, not a substitute for professional engineering judgment — independently validate every result. See NOTICE.md and README.md for licensing and the full disclaimer.