Difforum · Camera Import
Block the Move in Blender, Render It With AI
- params
- camera
- info
Most of Difforum hands the camera out to a 3D tool. This is the door going the other way: take a camera someone already animated - in Blender, in After Effects, or in a JSON from a pipeline - and drive the AI shot with it.
What it takes
A .json camera file, either picked from a dropdown of the JSONs sitting in ComfyUI/input or pasted into the json_text widget (handy when someone sends you a camera over chat). The parser accepts what Camera Export writes, plus the files produced by the helper scripts in the pack's tools/ folder - one exports the active Blender camera, one exports the selected After Effects camera.
Those files carry camera-to-world matrices plus focal length per frame, which means the translation isn't just "a move", it's an actual camera path with a real lens. The pack converts OpenCV's coordinate convention (x right, y down, z forward) into Blender's (x right, y forward, z up), and handles the camera-axis flip, which is exactly the sort of thing that produces a mirrored, inside-out move if it's done wrong.
The two settings that decide the result
retime-match framesstretches the imported move to fit your Setup's length;keep source lengthruns it frame for frame. Choose deliberately. If the Blender camera was 240 frames at 24 fps and your Setup says 120,match framesgives you the same move in half the time (twice as fast) - the classic speed-up-a-parked-move accident.keep source lengthtruncates instead, which is usually what you want when matching a pre-existing edit.params- the Setup wire again. This node needs to know your frame count and fps to do the retime, and it won't infer them.
Output
camera and info. It behaves like any other camera track: into the Feedback Sampler, into Guide Frames (where it warps your anchor picture along the imported path), into Storyboard, or into Camera → Prompt to get the move described in words. That last one is quietly excellent - import a camera from Blender and get a sentence describing it for a prompt-driven video model.
Install
ComfyUI Manager → search "Difforum", or:
cd ComfyUI/custom_nodes && git clone https://github.com/chillithebillis/Difforum.git difforum
Restart. Nothing to download, no compiled dependencies. The file dropdown scans ComfyUI/input for .json files, so drop your camera files there - cameras sitting anywhere else simply won't appear in the list.
Where people get burned
Coordinate conventions are the whole ballgame. A camera that arrives mirrored or rolled 180° is nearly always a convention mismatch between the exporting tool and the file, not a bug in your move - check the exporter you used before you start editing the JSON. The tools/ scripts exist precisely because hand-rolling a matrix export is where people go wrong.
Also worth knowing: importing a 3D camera doesn't make your render 3D. If the Feedback Sampler or Guide Frames doesn't get a depth map, the parallax falls back to pseudo-3D and your carefully blocked dolly becomes a zoom. The camera path survives; the depth cue doesn't.
And if you're importing a move that travels a long way sideways, expect the revealed area to be large. That's not a failure, it's the thing Fill Reveal exists to repaint - the depth map only ever described the original view, so everything the camera uncovers is invented, whether you generate it with an inpainting model or leave it to the feedback loop.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| file | COMBO | A camera .json in ComfyUI/input: from Camera Export, the Blender exporter or the After Effects script in tools/. | |
| params | DIFFORUM_PARAMS | From Setup: frame count, fps, width and height. Plug the same Setup everywhere. | |
| retime | COMBO | match frames | match frames = stretch the move to Setup's length; keep source length = frame for frame. |
| json_textopt | STRING | Paste JSON here instead of choosing a file. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| camera | DIFFORUM_CAMERA | — |
| info | STRING | — |