IAMCCS Cine Shot Planner
Decide where your reference frames land in time, not just what they show
- audio
- plan_json
- total_frames
- total_seconds
- frame_1
- frame_2
- frame_3
- frame_4
- frame_5
- frame_6
- frame_7
- frame_8
- strength_1
- strength_2
- strength_3
- strength_4
- strength_5
- strength_6
- strength_7
- strength_8
- report
Here's the thing about reference-conditioned video generation: it's not just which reference frames you feed, it's when they land. Feed a reference at frame 10 and the model treats it as an anchor; feed it at frame 90 and it's more of a destination. Cine Shot Planner is the node that answers the "when" - it takes up to eight reference positions and strengths and computes exactly which frame each one fires at, plus the total duration math.
It's a planner in the strict sense: no conditioning in, no images in. You give it timing and it gives you numbers.
The inputs that matter:
duration_source-manual(default),audio, ormax_manual_audio. If you feed an optionalaudioinput,audioderives duration from the audio's length andmax_manual_audiotakes the longer of the two.duration_seconds,fps(default 24), andtotal_frames_override- the timeline. The override, if nonzero, wins.ltx_round_mode-up,nearest,down, ornone. LTX wants frame counts rounded to 8n+1, and this is where you decide which way. (This is the earlier, simpler version of theup_8n_plus_1modes on the newer planners.)preset-shot_reverse_shot,room_coverage,two_reference_dialogue,beat_markers, orcustom. Presets seed sensible reference timings for common dialogue scenes;customlets you set everything by hand.reference_count- how many references (1–8) your plan uses.position_mode-ratio,seconds, orframes. How to interpret thepositionslist. Withratio(default) positions are 0–1 fractions of the timeline.positionsandstrengths- multiline lists, one per line. The default (0 / 0.30 / 0.58 / -1) reads: reference at the start, at 30%, at 58%, and "-1" as a stop marker.min_spacing_frames(default 8) - a floor on how close two references can be, so you don't stack them on the same frame.
The outputs. plan_json (the whole plan as JSON), total_frames, total_seconds, and then frame_1 through frame_8 with a matching strength_1 through strength_8 - the resolved frame numbers and strengths for each reference slot, ready to wire into whatever consumes timed references (the shotboard/FLF path, or a manual setup). report describes the plan.
Install. Same pack, same drill: ComfyUI Manager (search "IAMCCS"), or git clone https://github.com/IAMCCS/IAMCCS-nodes into custom_nodes, restart. ComfyUI ≥ 0.3.0, Python ≥ 3.12. The audio-duration modes need an audio input and ideally the pack's audio helper nodes; nothing else needs downloading.
Gotchas. The positions list format trips people up - with ratio mode, lines are fractions, not frame numbers, and -1 is the terminator, not a position. If your plan comes out with weird totals, check whether you meant seconds or frames mode. And this node only computes; it doesn't inject anything. It's upstream of the nodes that actually condition the sampler, so an unconnected plan_json is just a nice number printout.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| duration_source | COMBO | manual | 3 options: manual, audio, max_manual_audio |
| duration_seconds | FLOAT | 8.000.01–36000 | — |
| fps | FLOAT | 24.000.001–240 | — |
| total_frames_override | INT | 00–10000000 | — |
| ltx_round_mode | COMBO | up | 4 options: up, nearest, down, none |
| preset | COMBO | shot_reverse_shot | 5 options: shot_reverse_shot, room_coverage, two_reference_dialogue, beat_markers, custom |
| reference_count | INT | 21–8 | — |
| position_mode | COMBO | ratio | 3 options: ratio, seconds, frames |
| positions | STRING | 0 0.30 0.58 -1 | — |
| strengths | STRING | 0.95 0.78 0.72 0.90 | — |
| min_spacing_frames | INT | 80–100000 | — |
| audioopt | AUDIO | — |
Outputs (20)
| Name | Type | Description |
|---|---|---|
| plan_json | STRING | — |
| total_frames | INT | — |
| total_seconds | FLOAT | — |
| frame_1 | INT | — |
| frame_2 | INT | — |
| frame_3 | INT | — |
| frame_4 | INT | — |
| frame_5 | INT | — |
| frame_6 | INT | — |
| frame_7 | INT | — |
| frame_8 | INT | — |
| strength_1 | FLOAT | — |
| strength_2 | FLOAT | — |
| strength_3 | FLOAT | — |
| strength_4 | FLOAT | — |
| strength_5 | FLOAT | — |
| strength_6 | FLOAT | — |
| strength_7 | FLOAT | — |
| strength_8 | FLOAT | — |
| report | STRING | — |