IAMCCS_Ltx2HelperModules Planner
The planner that ends LTX-2 segment-math headaches
- audio
- upstream_contract
- linx
- planner_payload
- contract
- linx
- segment_count
- continuation_loops
- current_segment_start_frames
- current_segment_unique_frames
- current_source_end
- report
- total_frames
- unique_segment_frames
- first_segment_raw_frames
- continuation_raw_frames
- fps_out
Anyone who's built a long LTX-2 workflow by hand knows the pain: frame math everywhere, VAE logic split across half the graph, and one wrong value breaks everything three segments later. That's the author's own framing, and it's accurate. Ltx2HelperModules Planner is the node that makes it stop - it computes the entire segment plan for an audio+image→video project in one place, then hands a single JSON planner_payload to the other helper modules so they all agree on the numbers without you doing arithmetic in your head.
This is the head of the "au_img2vid" (audio + image → video) SuperNode-style pipeline. It doesn't generate anything - it plans. Everything downstream (AudioTimeline, KeyframeTimeline, Continuity, Finalize…) reads its payload, which is why in a helper-module graph this node's STRING output is the trunk everything branches from.
How it works
Give it a target duration, FPS, and segment length, and it computes total frames, segment count, per-segment start/end frames, and the source range for the current segment - all rounded to LTX-legal values (ltx_round_mode applies the 8n+1 rule on top of the raw math). Key behaviors:
duration_source- where the "how long is this project" answer comes from:target_duration_seconds, the length of youraudioclip, ormax_audio_target(whichever is longer). For audio-driven pieces, feeding the audio in and pickingaudiois the reliable way to keep video and audio lengths aligned.goal1_preset- presets that set sane defaults for the whole chain:lowram_safe_videoclip,lowram_fast_videoclip,normal_quality_videoclip,lowram_monologue, orcustom. These driveplanning_mode,content_profile, overlap, andbackend_binding- pick one that matches your hardware and let it do the thinking.segment_index- which segment you're currently planning. The node returns the current segment's numbers (current_segment_start_frames,current_segment_unique_frames,current_source_end) plus project-wide totals. In a loop, you increment this each pass.planning_mode-manual_segment_seconds(you set the segment length) orauto_profile(the preset picks lengths).
The inputs and outputs that matter
The widgets you actually set: fps (24), target_duration_seconds, segment_seconds, segment_index, and maybe duration_source + goal1_preset. The rest ride the presets.
Outputs: planner_payload (STRING JSON - the handshake object), contract and linx (the pack's supernode plumbing for chaining wrappers), then convenience values: segment_count, continuation_loops, current_segment_start_frames, current_segment_unique_frames, current_source_end, total_frames, unique_segment_frames, first_segment_raw_frames, continuation_raw_frames, fps_out, plus report. The INT outputs let you wire numbers into your sampler's length without parsing JSON - that's why there are so many.
Installing it
This node lives in IAMCCS-nodes under IAMCCS/Ltx2 Helper Modules. Install via Manager (search "IAMCCS") or:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart ComfyUI. The planner itself has no heavy dependencies - but the full helper-module chain expects ComfyUI's native LTXV audio-video nodes and, for audio-driven planning, MTB's Audio Duration node.
Common issues
The most common stumble is feeding it audio but leaving duration_source on target_duration_seconds - you'll get video/audio mismatch further down the chain and won't know why. Pick the duration source deliberately. Second: the planner_payload is a plain STRING, so it's easy to accidentally wire into the wrong node - if a downstream module returns "missing planner fields," you've connected it somewhere that isn't expecting a payload. And remember segment_index counts from 0; off-by-one here produces a plan for the wrong segment, which shows up as garbage audio timing, not an error.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| goal1_preset | COMBO | custom | 5 options: custom, lowram_safe_videoclip, lowram_fast_videoclip, normal_quality_videoclip, lowram_monologue |
| fps | FLOAT | 24.000.001–240 | — |
| segment_seconds | FLOAT | 10.000.01–3600 | — |
| target_duration_seconds | FLOAT | 30.000.01–36000 | — |
| duration_source | COMBO | target_duration_seconds | 3 options: target_duration_seconds, audio, max_audio_target |
| planning_mode | COMBO | auto_profile | 2 options: manual_segment_seconds, auto_profile |
| content_profile | COMBO | videoclip | 2 options: videoclip, monologue |
| overlap_frames | INT | 90–4096 | — |
| ltx_round_mode | COMBO | up | 3 options: up, nearest, down |
| segment_index | INT | 00–100000 | — |
| surface_profile | COMBO | compact | 3 options: compact, progressive, debug_surface |
| backend_binding | COMBO | ltx_audio_guided_lowram | 3 options: ltx_audio_guided_lowram, ltx_audio_guided_normal, custom |
| audioopt | AUDIO | — | |
| upstream_contractopt | IAMCCS_SUPERNODE_CONTRACT | — | |
| linxopt | IAMCCS_SUPERNODE_LINX | — |
Outputs (14)
| Name | Type | Description |
|---|---|---|
| planner_payload | STRING | — |
| contract | IAMCCS_SUPERNODE_CONTRACT | — |
| linx | IAMCCS_SUPERNODE_LINX | — |
| segment_count | INT | — |
| continuation_loops | INT | — |
| current_segment_start_frames | INT | — |
| current_segment_unique_frames | INT | — |
| current_source_end | INT | — |
| report | STRING | — |
| total_frames | INT | — |
| unique_segment_frames | INT | — |
| first_segment_raw_frames | INT | — |
| continuation_raw_frames | INT | — |
| fps_out | FLOAT | — |