IAMCCS Cine V2V Timeline Director
Write a shot list in one text box, get a plan back
- source_video_1
- source_video_2
- source_video_3
- source_video_4
- source_video_5
- source_video_6
- source_video_7
- source_video_8
- audio_1
- audio_2
- audio_3
- audio_4
- audio_5
- audio_6
- audio_7
- audio_8
- timeline_plan_json
- shot_plan_json
- shot_prompt
- dialogue_text
- voice_direction
- shot_label
- shot_render_id
- current_segment
- total_segments
- shot_number
- total_scene_seconds
- shot_start_seconds
- shot_duration_seconds
- shot_total_frames
- source_video_index
- source_start_frame
- source_end_frame
- source_frame_count
- primary_reference_index
- secondary_reference_index
- audio_index
- audio_duration_seconds
- cut_mode
- recommended_generation_mode
- use_context_bridge
- recommended_overlap_frames
- report
Your whole scene's shot plan, written as a table
V2V with LTX-2 means a chain of re-rendered clips with continuity - and if you've ever built that by hand, you know the actual work is deciding, per shot: how long it runs, what cut type, which source video, what prompt, what dialogue, which v2v mode. This node turns that decision list into a plain-text table you type once, and it does the segment math for the whole scene from there.
The timeline language
The magic is timeline_lines, and the tooltip spells out the column order: seconds | cut_mode | source_video | source_range | reference | audio | label | prompt | dialogue | voice | v2v_mode. Look at the default - it's three example lines, and they read like a shooting script:
4.0 | hard_cut | 1 | all | 1 | 1 | field_A | V2V close-up on character A speaking, keep source motion | I knew you would come back. | tired low voice | v2v_source_plus_reference
3.5 | hard_cut | 2 | all | 2 | 2 | reverse_B | V2V reverse angle on character B answering | I never really left. | calm low voice | v2v_source_plus_reference
6.0 | continuity_cut | 1 | 48+145 | 1>2 | 0 | return_A | Continue from source video 1, slow push-in and reaction | | | two_segments_if_long
Each pipe-separated column is a field: shot duration, cut mode, which source video index, a frame range (all or 48+145 meaning a range from source), which reference frames to use (1>2), which audio track, a human label, the shot prompt, dialogue, voice direction, and the v2v mode. You can leave columns empty and let defaults fill in - the third line leaves dialogue and voice blank, and the mode two_segments_if_long tells the planner to split long shots.
That's the whole product: parse this text, resolve every segment's duration, frames, audio bounds, references, and cut strategy, and emit the plan for the generation chain.
The knobs that shape the math
Beyond the table, a set of defaults governs anything you leave blank: default_cut_mode (hard_cut), default_v2v_mode, default_duration_seconds (4), prompt_mode (scene_plus_shot vs shot_only), and the reference-strength pair default_reference_strength (0.88) and tail_reference_strength (0.72). The overlap knobs matter for continuity: hard_cut_overlap_frames (0) vs continuity_overlap_frames (9) - continuity cuts borrow a 9-frame tail so the next shot doesn't jump-cut on a moving subject. max_single_v2v_seconds caps how long any one v2v pass can be before the planner splits it.
What you get back
A wall of useful outputs: shot_prompt, dialogue_text, voice_direction, shot_label, shot_render_id, current_segment/total_segments, shot_start_seconds, shot_duration_seconds, shot_total_frames, source_start_frame/source_end_frame, recommended_generation_mode, use_context_bridge, and recommended_overlap_frames - plus the full timeline_plan_json and shot_plan_json for saving or debugging. Wire the per-shot values into your V2V conditioning and the next shot's numbers are just there.
It ships in IAMCCS-nodes (Manager: "IAMCCS", or clone the repo into custom_nodes). The honest catch: this node is the brain, not the muscles - it needs the pack's Cine V2V backend stages and a working LTX-2 audio-video pipeline around it to be useful. Start from one of the author's example timelines rather than inventing columns from scratch.
Inputs (34)
| Name | Type | Default | Description |
|---|---|---|---|
| segment_index | INT | 00–100000 | — |
| render_id | STRING | v2v_scene01 | — |
| scene_prompt | STRING | A cinematic V2V sequence with coherent continuity, controlled cuts, natural motion. | — |
| timeline_lines | STRING | 4.0 | hard_cut | 1 | all | 1 | 1 | field_A | V2V close-up on character A speaking, keep source motion | I knew you would come back. | tired low voice | v2v_source_plus_reference 3.5 | hard_cut | 2 | all | 2 | 2 | reverse_B | V2V reverse angle on character B answering | I never really left. | calm low voice | v2v_source_plus_reference 6.0 | continuity_cut | 1 | 48+145 | 1>2 | 0 | return_A | Continue from source video 1, slow push-in and reaction | | | two_segments_if_long | seconds | cut_mode | source_video | source_range | reference | audio | label | prompt | dialogue | voice | v2v_mode |
| fps | FLOAT | 24.000.001–240 | — |
| ltx_round_mode | COMBO | up | 4 options: up, nearest, down, none |
| duration_mode | COMBO | max_line_audio_source | 4 options: line_seconds, source_range_when_known, audio_when_available, max_line_audio_source |
| 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_v2v_mode | COMBO | v2v_source_plus_reference | 5 options: v2v_source_plus_reference, v2v_source_context, i2v_from_reference, two_segments_if_long, loop_if_long |
| prompt_mode | COMBO | scene_plus_shot | 2 options: scene_plus_shot, shot_only |
| default_reference_strength | FLOAT | 0.880–1 | — |
| tail_reference_strength | FLOAT | 0.720–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 | — |
| max_single_v2v_seconds | FLOAT | 10.00.1–3600 | — |
| source_video_1opt | IMAGE | — | |
| source_video_2opt | IMAGE | — | |
| source_video_3opt | IMAGE | — | |
| source_video_4opt | IMAGE | — | |
| source_video_5opt | IMAGE | — | |
| source_video_6opt | IMAGE | — | |
| source_video_7opt | IMAGE | — | |
| source_video_8opt | IMAGE | — | |
| 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 (27)
| Name | Type | Description |
|---|---|---|
| timeline_plan_json | STRING | — |
| shot_plan_json | STRING | — |
| shot_prompt | STRING | — |
| dialogue_text | STRING | — |
| voice_direction | STRING | — |
| shot_label | STRING | — |
| shot_render_id | STRING | — |
| current_segment | INT | — |
| total_segments | INT | — |
| shot_number | INT | — |
| total_scene_seconds | FLOAT | — |
| shot_start_seconds | FLOAT | — |
| shot_duration_seconds | FLOAT | — |
| shot_total_frames | INT | — |
| source_video_index | INT | — |
| source_start_frame | INT | — |
| source_end_frame | INT | — |
| source_frame_count | INT | — |
| primary_reference_index | INT | — |
| secondary_reference_index | INT | — |
| audio_index | INT | — |
| audio_duration_seconds | FLOAT | — |
| cut_mode | STRING | — |
| recommended_generation_mode | STRING | — |
| use_context_bridge | BOOLEAN | — |
| recommended_overlap_frames | INT | — |
| report | STRING | — |