IAMCCS Cine Multi-Generation Director
The multi-shot planner that runs your dialogue scene shot by shot
- audio_1
- audio_2
- audio_3
- audio_4
- audio_5
- audio_6
- audio_7
- audio_8
- multigen_plan_json
- shot_plan_json
- shot_prompt
- dialogue_text
- voice_direction
- shot_label
- shot_render_id
- shot_number
- shot_count
- total_scene_seconds
- shot_start_seconds
- shot_duration_seconds
- shot_total_frames
- primary_reference_index
- secondary_reference_index
- audio_index
- audio_start_seconds
- audio_duration_seconds
- cut_mode
- use_context_bridge
- recommended_overlap_frames
- report
Here's the uncomfortable truth about multi-shot AI filmmaking: each shot is a separate generation, and the moment you stop, the model forgets who your character is, what room they're in, and where the camera was. IAMCCS Cine Multi-Generation Director is this pack's attempt to make that bookkeeping a planning problem instead of a luck problem. You write a scene as a list of shots, and it hands you, for each shot, the exact frame count, references, prompt, dialogue, voice direction, and cut mode - everything a multi-shot pipeline needs to generate shot N and hand continuity to shot N+1.
It's the "director" node in the Cine family, and its default state is a three-person dialogue scene with eyelines, reverse angles, and a photo insert. That's not an accident - dialogue scenes are where multi-shot continuity is both hardest and most worth planning.
How it works
The heart is the shot_lines input, one shot per line:
seconds | cut_mode | ref or ref>ref | audio_index | label | shot prompt | dialogue | voice direction
Example from the default:
4.0 | hard_cut | 1 | 1 | field_A | Medium close-up on character A, he speaks with restrained emotion | I knew you would come back. | tired intimate low voice
For each shot it computes: total scene seconds, shot start/duration, frame counts (with ltx_round_mode for the 8n+1 rule), the primary and secondary reference indices (1>2 means bridge from ref 1 into ref 2), the audio assignment and timing (it can use your audio_1…audio_8 inputs to size and place each shot's sound), the cut mode (hard_cut vs continuity_cut - which sets overlap frames so the next shot starts from the previous one's tail), and whether to bridge context via use_context_bridge. The prompt_mode toggle decides if each shot prompt is scene_plus_shot or shot_only.
The two strengths are the continuity knobs: default_reference_strength (0.92) anchors each shot to its chosen reference, and tail_reference_strength (0.82) controls how hard the end of the shot holds, so the tail becomes a usable anchor for the next shot instead of drift. continuity_overlap_frames (default 9) is the overlap that makes continuity_cut actually continuous.
The outputs that matter
For each shot it emits (among many): shot_prompt, dialogue_text, voice_direction, shot_label, shot_render_id, shot_number/shot_count, total_scene_seconds, shot_start_seconds, shot_duration_seconds, shot_total_frames, primary_reference_index, secondary_reference_index, audio_index, audio_start_seconds, cut_mode, recommended_overlap_frames, plus multigen_plan_json and shot_plan_json for the pipeline. Wire shot_index to a counter/loop and this node becomes the per-iteration brain of a multi-generation loop.
Install
One node in IAMCCS-nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
or Manager → search IAMCCS. README floor: ComfyUI ≥ 0.3.0, Python ≥ 3.12, Torch ≥ 2.8. No extra deps for the planner itself.
Where people get burned
- Continuity is earned, not granted. The plan sets up overlap frames and tail strengths, but if your sampler chain doesn't actually use the previous shot's tail as the next shot's first frame,
continuity_cutis decorative. The outputuse_context_bridgeexists so the pipeline knows to do that. - Line format is strict. Eight pipe-separated fields, in order. A missing field shifts everything. The Cine Line Stacker node exists precisely to build these lines without typos.
- Audio timing surprises.
duration_mode=max_line_audio(default) takes the longer of the line's seconds or the audio's length. If a 2-second line has a 6-second audio, your shot becomes 6 seconds. That's often what you want for dialogue; know it's happening. shot_indexis 1-based here. Unlike its sibling planners, the director starts at 1. Off-by-one errors are the most common "why is shot 0 wrong" confusion when you loop this.- Zero search impressions, one-author tooling, and the README barely covers the Cine family. This node is powerful but it's the centerpiece of a pipeline - budget time to read the
reportoutputs while tuning.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| shot_index | INT | 11–100000 | — |
| render_id | STRING | scene01 | — |
| scene_prompt | STRING | A cinematic dialogue scene with coherent eyelines, natural acting, film lighting. | — |
| shot_lines | STRING | 4.0 | hard_cut | 1 | 1 | field_A | Medium close-up on character A, he speaks with restrained emotion | I knew you would come back. | tired intimate low voice 3.5 | hard_cut | 2 | 2 | reverse_B | Reverse angle on character B, she listens then answers | I never really left. | calm low voice 2.5 | hard_cut | 3 | 0 | insert_photo | Close-up insert of the old photograph on the table | | 4.0 | continuity_cut | 1>2 | 1 | return_A_pushin | Return to character A, slow push-in, visible hesitation | Then why does it feel different? | quiet broken voice | One shot per line: seconds | cut_mode | ref or ref>ref | audio_index | label | shot prompt | dialogue | voice direction |
| fps | FLOAT | 24.000.001–240 | — |
| ltx_round_mode | COMBO | up | 4 options: up, nearest, down, none |
| duration_mode | COMBO | max_line_audio | 3 options: line_seconds, audio_when_available, max_line_audio |
| audio_padding_seconds | FLOAT | 0.200–30 | — |
| default_duration_seconds | FLOAT | 4.000.01–3600 | — |
| default_cut_mode | COMBO | hard_cut | 4 options: hard_cut, continuity_cut, soft_cut, match_cut |
| default_audio_assignment | COMBO | shot_number | 2 options: shot_number, none |
| prompt_mode | COMBO | scene_plus_shot | 2 options: scene_plus_shot, shot_only |
| default_reference_strength | FLOAT | 0.920–1 | — |
| tail_reference_strength | FLOAT | 0.820–1 | — |
| tail_anchor_mode | COMBO | auto | 4 options: auto, same_reference, secondary_only, none |
| hard_cut_overlap_frames | INT | 00–4096 | — |
| continuity_overlap_frames | INT | 90–4096 | — |
| audio_1opt | AUDIO | — | |
| audio_2opt | AUDIO | — | |
| audio_3opt | AUDIO | — | |
| audio_4opt | AUDIO | — | |
| audio_5opt | AUDIO | — | |
| audio_6opt | AUDIO | — | |
| audio_7opt | AUDIO | — | |
| audio_8opt | AUDIO | — |
Outputs (22)
| Name | Type | Description |
|---|---|---|
| multigen_plan_json | STRING | — |
| shot_plan_json | STRING | — |
| shot_prompt | STRING | — |
| dialogue_text | STRING | — |
| voice_direction | STRING | — |
| shot_label | STRING | — |
| shot_render_id | STRING | — |
| shot_number | INT | — |
| shot_count | INT | — |
| total_scene_seconds | FLOAT | — |
| shot_start_seconds | FLOAT | — |
| shot_duration_seconds | FLOAT | — |
| shot_total_frames | INT | — |
| primary_reference_index | INT | — |
| secondary_reference_index | INT | — |
| audio_index | INT | — |
| audio_start_seconds | FLOAT | — |
| audio_duration_seconds | FLOAT | — |
| cut_mode | STRING | — |
| use_context_bridge | BOOLEAN | — |
| recommended_overlap_frames | INT | — |
| report | STRING | — |