CD · Shot Lock
Prompt, camera, duration, and seed pinned down
- project
- scene
- character
- shot
- shot_json
- shot_hash
Most single-shot generation is chaos in a good way - you're iterating, the seed is randomizing, the camera is a vibe. Multi-shot video is the opposite: every shot needs to be reproducible, or you can't go back and re-render take four without the whole edit falling apart. CDShotLock is the node that turns a single shot into an auditable record: the prompt, the negative prompt, the camera description, the duration, and the seed all live in one place, hashed, and ready to feed the rest of the production chain.
It's from Continuity Director, a 20-node pack for repeatable AI video production, and it sits at the bottom of the "lock" stack - project, character, scene, then shot. Unlike the first three, this one can actually ingest the others.
What you set
- shot_id - your key, e.g.
shot-001. - prompt and negative_prompt - the actual generation text.
- camera - prose, default
medium shot, eye level. Keep it descriptive; this is the field that keeps shot two from feeling like a different cinematographer took over. - duration_seconds - 0.1 to 600, default 3.
- seed - the reproducibility lever. Default 1, which is a fine "I don't care, just be stable" value; set it deliberately when a take matters.
The wiring that makes it powerful
Beyond the widgets, there are three optional typed inputs: project, scene, and character. Wire them in and the shot record captures their IDs - so a shot knows which project, which room, and which character it belongs to without you re-typing any of it. That's the pipeline's spine: project → scene → character → shot → manifest.
Outputs are the standard lock trio: shot (CD_SHOT wire for other Continuity Director nodes), shot_json (text), and shot_hash (SHA-256 fingerprint). Change the camera text and the hash changes - downstream nodes can see the drift instead of silently building on stale state.
The seed trap everyone hits once
A seed field that sits on a widget has the same gotcha as every seed in ComfyUI: control_after_generate decides what happens to it after the run, and the default behavior can overwrite the number you're staring at. The modidex node-plumbing notes capture the community wisdom: set widget control mode to "before" once per install so the number in the box is the one actually used, and if you lose a good seed, drag the output image back into ComfyUI - the workflow and seed ride along in the PNG. CDShotLock's seed is most useful when it's fixed and shared across takes via CDBatchDirector, because then every take is a deliberate variation on a locked base rather than a fresh roll of the dice.
Installing it
Same easy story as the whole pack: no models, no keys, zero Python dependencies. In ComfyUI Manager search "Continuity Director" and restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/xinjian0101/continuity-director.git ComfyUI-ContinuityDirector
Restart ComfyUI - nodes appear as CD · ... with a Continuity Director sidebar that has an "Add starter chain" button to scaffold the whole chain for you. Update with git pull.
The honest take
CDShotLock is the most immediately useful of the lock nodes, because it's the one that maps directly onto something you already do: describe a shot and give it a seed. The pack is young (v0.8.42, actively maintained preview), so treat its JSON as the source of truth and keep exported packages around. And remember the pack's own framing: it makes decisions inspectable and reproducible - it won't guarantee pixel-perfect output. But "can re-render shot seven and get the same framing" is a very real thing it buys you.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| shot_id | STRING | shot-001 | — |
| prompt | STRING | — | |
| negative_prompt | STRING | — | |
| camera | STRING | medium shot, eye level | — |
| duration_seconds | FLOAT | 3.00.1–600 | — |
| seed | INT | 10–2147483647 | — |
| projectopt | CD_PROJECT | — | |
| sceneopt | CD_SCENE | — | |
| characteropt | CD_CHARACTER | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| shot | CD_SHOT | — |
| shot_json | STRING | — |
| shot_hash | STRING | — |