Difforum · Camera Shots (director)
A shot list with hard cuts, no keyframe math
- params
- audio
- camera
- info
Camera work in Deforum-style animation usually means one continuous move. Difforum · Camera Shots (director) is for when the clip needs to change - when you want a push-in, then an orbit, then a spiral, stitched across the timeline like cuts in an edit. You write a shot list, one line per cut, in the node's native syntax:
0: dolly_in 1.0 1.0
48: orbit_right 1.2 0.8
96: spiral
That's frame: preset [speed] [intensity], three fields, defaults optional. Out comes the same DIFFORUM_CAMERA track every Difforum renderer consumes, with the camera switching moves at your cut points - hard cuts, not blends. That distinction is the whole design decision: Camera Shots cuts, Camera Keys blends. This node concatenates segments, each running at a constant rate, and the next shot replaces the last outright. The velocity jumps at the boundary, and in Deforum-style animation a hard cut is a feature - it's how a music video punches from verse to chorus. If instead you want the camera to ease out of one move and into the next like a continuous crane shot, that's the Camera Keys node (the pack's own core code spells this out: shots are a cut, keys are a state machine).
Three inputs carry the weight:
shots- the shot list itself, multiline, oneframe: preset [speed] [intensity]per line.frameis absolute, not cumulative, and speeds/intensities default to 1.0 when omitted. The internal parser tolerates plain shot-list syntax, so you can also drop in lines you've seen in Camera Keys format and it degrades gracefully.mode-2d/3d. The familiar rule: 3D axes need a depth map downstream or they silently do nothing.fov- static field of view for the clip (default 40). For lens changes mid-clip, that's Camera Keys' territory.audio(optional) - theDIFFORUM_AUDIOsocket, so your shot boundaries or speeds can be driven by curves rather than fixed numbers.
Outputs: camera and info, a summary that prints the parsed shot list against the frame count so you can see where each cut landed. Given that a mistyped frame number silently moves a cut, that summary is worth a glance before you burn a render.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart ComfyUI (console shows [Difforum] loaded N nodes) or install via ComfyUI Manager → "Difforum". numpy-only dependency.
Common issues
- A cut lands nowhere near where you expected.
frameis absolute and the node trusts you.0: ... 48: ... 96: ...on a 120-frame clip cuts at 0/48/96 - but if yourmax_framesis 60, the 96 shot never plays. Verify againstinfo. - "3D shots are static." Same pack-wide gotcha - depth map or bust in 3d mode. Shots with
dolly/orbitpresets are the ones that need it;zoomandrollwork fine in 2d. - The camera jumps between shots. That's not a bug - it's the cut. If you wanted a continuous move you picked the wrong node; see Camera Keys.
The clean workflow: Camera Shots for the edit, Camera Keys for the crane, and if you want both, Film Director generates the shots and the keys from the same timeline. For a music video, though, this is the node - three lines of shot list and your camera behaves like an editor, not an animator.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| params | DIFFORUM_PARAMS | — | |
| shots | STRING | 0: dolly_in 1.0 1.0 48: orbit_right 1.2 0.8 96: spiral | — |
| mode | COMBO | 2d | 2 options: 2d, 3d |
| fov | FLOAT | 401–170 | — |
| audioopt | DIFFORUM_AUDIO | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| camera | DIFFORUM_CAMERA | — |
| info | STRING | — |