Slapshot — Tracking
Camera tracking without learning Syntheyes (or burning your GPU)
- video
Ever wanted to drop a 3D object into a video you didn't shoot with a tracked camera? That's the job this node does. Slapshot_Tracking runs a camera solve on your footage - in the cloud - and hands back tracking data you can feed a compositor or 3D app. It's the matchmove step that normally means learning Syntheyes, PFTrack, Nuke's CameraTracker, or Blender's motion tracker. This is the "skip all that" button.
The wider context matters here. ComfyUI is a generation tool; camera tracking is a measurement tool, and the two barely overlap in the node ecosystem. People who need a solved camera usually leave ComfyUI entirely - that's the standing state of the VFX handoff corner. Slapshot's bet is that you'd rather not leave. You generate a clip, you want to composite a CG element into it so the geometry sits on the ground plane and moves with the camera, and you need a solved camera to do it. That's exactly what this node produces, and the download button is your handoff to the comp.
How it works
Same machinery as every node in this pack: the node copies your video, checks it's an .mp4/.mov under 3500 frames, uploads it to Slapshot's storage, and submits a tracking job. A background thread polls every 60 seconds until the solve completes, then Download Tracking Data enables. The node remembers the job_id, and the Download Previous Job Result button re-fetches any earlier job.
What makes this node interesting is what you feed the solver - the optional camera and scene parameters are the actual matchmove craft.
The inputs that matter
video- anything outputting aVIDEOsocket (.mp4/.mov).
Then the hints, all optional, all plain numbers:
working_fps- your real frame rate (e.g.23.98), so the solve's timing is right.lens- the focal length in mm. Set it andfix_focal_lengthtoTrueto lock the lens instead of letting the solve float it. Floating = the solver guesses the lens; Fixed = you tell it, which usually means a stiffer, more usable solve on locked-off or drone shots.sensor_width/sensor_height- the sensor size in mm, and they must be provided together or the node errors. This plus a fixed focal length pins down the camera's field of view.fix_sensor_size- defaults toTrue(Fixed). Set toFalseto float it.estimated_closest_point/estimated_farthest_point- in metres, how far the camera is from the nearest and farthest thing you care about. Rough numbers are fine; they seed the solver's depth range so it doesn't chase the horizon.calculate_distortion- set toTrueand the solve also works out the lens distortion, and you get ST maps with the export for it.
That's the genuinely useful part: you don't need to fill any of this in for a first pass. Try it bare, then lock the lens or sensor if the solve drifts.
Install and API key
Via ComfyUI Manager (search Slapshot) or:
cd ComfyUI/custom_nodes
git clone https://github.com/slapshot-ai/comfyui-slapshot
then restart. The pack's requirements.txt pulls requests, opencv-python-headless, and imageio[ffmpeg] (the README only mentions requests - the source uses OpenCV for frame counting, so the extra wheels are doing real work).
Every node in the pack needs a Slapshot API key: sign up at app.slapshot.ai, Profile → INTEGRATIONS → ComfyUI, generate one, and set it in ComfyUI's root .env (SLAPSHOT_API_KEY=your-key-here) or in custom_nodes/comfyui-slapshot/config.ini under [API]. .env takes precedence. Restart after changing either.
Gotchas
sensor_widthandsensor_heightmust be entered together. One without the other is a hard error, by design.- Every numeric field must actually be a number. Paste a stray letter into
lensand the node refuses with a parse error rather than silently dropping it. - Free tier is 1000 frames total across all Slapshot jobs; tracking a long clip burns that fast.
- 3500-frame cap per video.
- Your footage is uploaded to Slapshot's servers and lives there for the job. Not the tool for footage you can't send off-machine.
Reputation, honestly: this pack is new (repo up since mid-2026, version 0.1.10) and essentially undiscussed in the community - it's aimed at compositors, who don't hang around r/comfyui. Vendor-published, MIT, small codebase. Skim it once before you hand it your key; that's the right habit for any node built to call home with your credential.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| working_fpsopt | STRING | — | |
| lensopt | STRING | — | |
| fix_focal_lengthopt | COMBO | 2 options: False, True | |
| sensor_widthopt | STRING | — | |
| sensor_heightopt | STRING | — | |
| fix_sensor_sizeopt | COMBO | 2 options: True, False | |
| estimated_closest_pointopt | STRING | — | |
| estimated_farthest_pointopt | STRING | — | |
| calculate_distortionopt | COMBO | 2 options: False, True |
Outputs (0)
No outputs