Muse Collective LTX Timeline V10 (V6 + LTX Director CS merge, WIP)
The Kitchen-Sink Director With a GPL Asterisk
- model
- clip
- audio_vae
- vae
- spatial_upscaler
- bg_audio
- base_model
- optional_latent
- ref_images
- last_chunk_frames
- audio
- stage1_frames
- seed_hunt_preview_1
- seed_hunt_preview_2
- seed_hunt_preview_3
- seed_hunt_preview_4
- seed_hunt_audio_1
- seed_hunt_audio_2
- seed_hunt_audio_3
- seed_hunt_audio_4
- reference_image
V10 is the director node at its most ambitious - and the one you should read the licensing section of before you share anything built with it. It's a fork of V2.5 merged with CGlide's "LTX Director CS," which drags in Ghost Mask's Licon MSR reference-guide logic and a pile of pipeline features: LLM-driven segment overrides (now eight of them), single_stage_mode, NAG negative-prompt support, per-segment chunking, and Seed Hunt. It's the kitchen-sink version.
The honest framing from the README: this is WIP, and it ships with a real legal asterisk. The Ghost Mask/MSR code in V10 is ported from CGlide's GPLv3 fork, not clean-room rewritten, so the repo is a mixed MIT/GPLv3 codebase. Fine for private use - GPL obligations only bite on distribution - but you can't publish, sell, or share the repo itself as MIT until that code is rewritten. If you just want to generate video on your own machine, that doesn't affect you. If you're building something to ship, it does.
What V10 adds
The headline features, with the ones you'll actually touch first:
segment_override_1..8- the V2.5 override system extended to eight segments. Pairs withMusePromptSplitter, which parses up to eight labeled prompts (and informational durations) out of one LLM text block. This is the "let an LLM direct the whole timeline" pipeline.single_stage_mode- skip Stage 2 entirely and sample once, directly, at full target resolution. The tooltip's advice matters:stage1_stepsbecomes your only step count, so raise it (8 is a draft value meant for the two-stage flow).auto_chunk_by_segment- chunk boundaries snap to your timeline segment boundaries: one chunk per segment, never straddling.chunk_duration_secondsandauto_chunk_thresholdare ignored while it's on. This fixes a real bug class where a chunk boundary split a segment and the carry-frame overlap corrupted the prompt mapping.- NAG negative-prompt support -
negative_promptplusnag_scale/nag_alpha/nag_tauwithnag_bypassas a hard kill-switch. Requires the comfyui-kjnodes package'sLTX2_NAG- a dependency the README doesn't list. ghost_anchor_buffer- fixes a confirmed artifact where Ghost Mask (End) built up hallucinated "watermark/archway" overlay content in the last ~6-12 frames of a chunk.enable_ambient_pass- kill switch for the LoRA-free ambient audio pass, which the notes identify as the source of a duplicated/echoed-voice artifact in generated-audio mode.reference_mode/ref_images/msr_prefix_frames- the character-reference modes, fed through the timeline's character-card panel rather than graph sockets (deliberate).automation_start/automation_end/automation_duration- connection-only inputs so an external automation node can drive the render window.optional_latent- override the auto-generated empty latent for chunk 1 (ported from CGlide), ignored if the shape doesn't match.
Seed Hunt carries over, as does everything from V2.5.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/muse-collective-26/muse-ltx-timeline
Restart, pip install av torchaudio soundfile, LTX 2.3 stack. If you use NAG, install comfyui-kjnodes separately.
Gotchas
- Read
V10_NOTES.mdin the repo - it's the internal changelog and it's unusually candid about which features fixed real bugs (Ghost Mask anchor artifact, ambient-pass duplicate voice). - The GPL thing again: private use, fine; distribution, not fine until the ported code is rewritten. That's not FUD, it's the author's own warning in the README.
- V10 loads as a WIP module in a try/except. Missing kjnodes won't kill the pack, but NAG features will be inert or the node may not register.
V10 is what happens when a power user gets to spec a director node: more switches than you'll ever use, but the ones you do use - segment overrides, single-stage mode, NAG - are genuinely good. Just don't build a business on the current license state.
Inputs (92)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| audio_vae | VAE | — | |
| vae | VAE | — | |
| spatial_upscaler | LATENT_UPSCALE_MODEL | — | |
| start_second | FLOAT | 0.000–3600 | — |
| end_second | FLOAT | 10.000–3600 | — |
| duration_seconds | FLOAT | 10.000–3600 | — |
| start_frame | INT | 00–86400 | — |
| end_frame | INT | 2400–86400 | — |
| duration_frames | INT | 2401–86400 | — |
| timeline_data | STRING | {} | — |
| local_prompts | STRING | — | |
| segment_lengths | STRING | — | |
| global_prompt | STRING | — | |
| guide_strength | STRING | — | |
| epsilon | FLOAT | 0.00100–1 | — |
| frame_rate | FLOAT | 24.001–120 | — |
| display_mode | COMBO | seconds | 2 options: seconds, frames |
| custom_width | INT | 96064–4096 | — |
| custom_height | INT | 54464–4096 | — |
| resize_method | COMBO | maintain aspect ratio | 5 options: maintain aspect ratio, stretch to fit, crop, pad, pad green |
| divisible_by | INT | 321–256 | — |
| img_compression | INT | 180–51 | — |
| generate_audio | BOOLEAN | true | LTX generates ambient/sfx audio from [SOUNDS] prompts. |
| custom_audio_on | BOOLEAN | false | Use audio file(s) from the AUDIO timeline track. |
| lipsync | BOOLEAN | true | Sync mouth movements to custom audio. Requires Custom Audio ON and talking head LoRA. |
| motion_guide_on | BOOLEAN | true | Use motion guide segments from the timeline. |
| chunk_duration_seconds | FLOAT | 10.02–120 | — |
| auto_chunk_threshold | FLOAT | 10.00–3600 | — |
| auto_chunk_by_segment | BOOLEAN | false | When ON, chunk boundaries automatically match your timeline segment boundaries exactly — one chunk per segment, never straddling a segment. chunk_duration_seconds and auto_chunk_threshold are ignored while this is on. When OFF (default), chunking works as before (fixed chunk_duration_seconds, segments may straddle a chunk boundary). |
| carry_frames | INT | 731–240 | Reference frames from previous chunk locked at chunk start. 73 ≈ 3s at 24fps. |
| carry_strength | FLOAT | 1.000–1 | — |
| crossfade_frames | INT | 00–120 | — |
| ic_lora_name | COMBO | None | 1 options: None |
| ic_lora_strength | FLOAT | 1.00-10–10 | — |
| stage1_steps | INT | 81–50 | — |
| stage2_steps | INT | 41–50 | — |
| stage2_denoise | FLOAT | 0.420–1 | — |
| cfg | FLOAT | 1.00–20 | — |
| single_stage_mode | BOOLEAN | false | ON: skip Stage 2 (upscale + refine) entirely and sample once, directly, at full target resolution — stage1_steps becomes the single pass's full step count (raise it accordingly; 8 is a draft-only value meant for the two-stage flow). Seed Hunt is ignored while this is on, since there's no Stage 2 for a scouted candidate to be refined into. |
| seed | INT | 420–18446744073709550000 | — |
| filename_prefix | STRING | muse | — |
| bg_volume | FLOAT | 1.000–2 | — |
| stage1_sampler | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| guide_scale_by | FLOAT | 0.500.01–8 | — |
| stage2_sampler | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| guide_scale_by_s2 | FLOAT | 1.000.01–8 | — |
| guide_upscale_method | COMBO | bicubic | 5 options: bicubic, bilinear, nearest-exact, area, bislerp |
| guide_image_attn_strength | FLOAT | 1.000–1 | — |
| guide_crop | COMBO | center | 2 options: center, disabled |
| guide_auto_snap_ic_grid | BOOLEAN | true | — |
| guide_use_tiled_encode | BOOLEAN | false | — |
| guide_tile_size | INT | 25664–512 | — |
| guide_tile_overlap | INT | 6416–256 | — |
| timeline_ui | STRING | — | |
| seed_hunt | BOOLEAN | false | ON + no candidate chosen: run a 4-seed Stage-1-resolution preview instead of the full pipeline. ON + one use_seed_hunt_N chosen: commit to that candidate — Stage 2 refines its actual cached latent instead of regenerating Stage 1 from scratch. |
| seed_hunt_steps | INT | 61–50 | — |
| seed_hunt_scale | FLOAT | 0.250.05–1 | Unused as of 1.0.4 — Seed Hunt now scouts at Stage 1's real resolution automatically (so the picked candidate's actual latent can carry forward into Stage 2). Kept as a widget only so older saved workflows still load correctly. |
| seed_hunt_1 | INT | 10–18446744073709550000 | Unused as of 1.0.4 — scouting now draws a fresh random seed for each candidate every run instead of reusing these fixed values (the actual latent carries forward on commit, so the seed number no longer needs to be fixed or reproducible). |
| seed_hunt_2 | INT | 20–18446744073709550000 | — |
| seed_hunt_3 | INT | 30–18446744073709550000 | — |
| seed_hunt_4 | INT | 40–18446744073709550000 | — |
| use_seed_hunt_1 | BOOLEAN | false | — |
| use_seed_hunt_2 | BOOLEAN | false | — |
| use_seed_hunt_3 | BOOLEAN | false | — |
| use_seed_hunt_4 | BOOLEAN | false | — |
| ghost_anchor_buffer | INT | 20–20 | Ghost Mask (End) only. Extra empty latent frames inserted between the real visible content and the hidden reference tail, pushing the anchor further from the last visible frames. 2026-07-29/30 debugging found quality degradation (hallucinated overlay content) building up in the final ~6-12 visible frames right before the anchor, on a clip with 0 buffer. Still padding/crop only — never decoded, so raising this costs a little extra compute per chunk but no visible content. |
| enable_ambient_pass | BOOLEAN | true | ON (default): run the second, LoRA-free ambient/SFX audio pass and layer it under the main speech, in both generated-audio and custom-audio modes — needed because the talking-head LoRA suppresses ambient sound in the main pass regardless of audio mode. OFF: skip it entirely (faster; main pass audio only, no separate ambient layer) — useful for testing whether this pass is the source of duplicated/echoed speech in the background, since it does watch the actual talking video as visual context. |
| bg_audioopt | AUDIO | — | |
| base_modelopt | MODEL | Base model without talking-head LoRA. Connect the UNETLoader output directly here so the ambient audio pass generates sounds without speech. | |
| optional_latentopt | LATENT | Connect a latent to override the auto-generated empty one for chunk 1 only (ported from CGlide's LTX Director CS). Ignored if its shape doesn't match the expected chunk-1 shape, or on chunk 2+. | |
| automation_startopt | FLOAT | Automation (connection-only). Start time in SECONDS. Overrides the panel start when connected. | |
| automation_endopt | FLOAT | Automation (connection-only). End time in SECONDS. When connected (and duration is not), the render length is derived from start..end. | |
| automation_durationopt | FLOAT | Automation (connection-only). Duration in SECONDS. Overrides the panel duration and sets the render length when connected. | |
| segment_override_1opt | STRING | Overrides segment 0's prompt text if connected and non-empty. | |
| segment_override_2opt | STRING | Overrides segment 1's prompt text if connected and non-empty. | |
| segment_override_3opt | STRING | Overrides segment 2's prompt text if connected and non-empty. | |
| segment_override_4opt | STRING | Overrides segment 3's prompt text if connected and non-empty. | |
| segment_override_5opt | STRING | Overrides segment 4's prompt text if connected and non-empty. | |
| segment_override_6opt | STRING | Overrides segment 5's prompt text if connected and non-empty. | |
| segment_override_7opt | STRING | Overrides segment 6's prompt text if connected and non-empty. | |
| segment_override_8opt | STRING | Overrides segment 7's prompt text if connected and non-empty. | |
| reference_modeopt | COMBO | OFF | OFF: no character-reference guide. Ghost Mask (End): appends the timeline's character-card images + ref_images as hidden guide frames past the end of the clip, then crops them off. Licon MSR (Prefix): real IC-LoRA identity guide injected as a prefix (UNTESTED PORT, 2026-07-27) — requires vae connected and ComfyUI-LTXVideo installed; crop downstream with the stock LTXVCropGuides node, not MuseCropGuides. |
| ref_imagesopt | IMAGE | Extra reference image(s) (e.g. an object, not a character) — a single image or a batch. Appended after the timeline's character-card images. | |
| reference_strengthopt | FLOAT | 1.000–5 | Guide strength applied to the character/ref reference images. |
| msr_prefix_framesopt | INT | 659–200 | Licon MSR (Prefix) only. Pixel-frame budget for the reference slideshow, shared across however many identity images + background are provided — more images means less budget per image unless you raise this. Should be 1 + a multiple of 8 (LTX's VAE frame rule); other values get floored to the nearest valid count automatically. |
| negative_promptopt | STRING | Text to steer generation away from (e.g. 'moles, blemishes, skin spots'). Requires comfyui-kjnodes' LTX2_NAG node. Empty = no effect. | |
| nag_scaleopt | FLOAT | 11.00–100 | Strength of the negative-guidance effect. 0 disables NAG entirely. |
| nag_alphaopt | FLOAT | 0.250–1 | — |
| nag_tauopt | FLOAT | 2.50–10 | — |
| nag_bypassopt | BOOLEAN | false | Hard kill-switch — when ON, NAG is never touched at all, regardless of nag_scale or negative_prompt. Checked first, before anything else. |
Outputs (12)
| Name | Type | Description |
|---|---|---|
| last_chunk_frames | IMAGE | — |
| audio | AUDIO | — |
| stage1_frames | IMAGE | — |
| seed_hunt_preview_1 | IMAGE | — |
| seed_hunt_preview_2 | IMAGE | — |
| seed_hunt_preview_3 | IMAGE | — |
| seed_hunt_preview_4 | IMAGE | — |
| seed_hunt_audio_1 | AUDIO | — |
| seed_hunt_audio_2 | AUDIO | — |
| seed_hunt_audio_3 | AUDIO | — |
| seed_hunt_audio_4 | AUDIO | — |
| reference_image | IMAGE | — |