Nodes/Muse Collective LTX Timeline/Muse Collective LTX Timeline V10 (V6 + LTX Director CS merge, WIP)
ComfyUI Node

Muse Collective LTX Timeline V10 (V6 + LTX Director CS merge, WIP)

The Kitchen-Sink Director With a GPL Asterisk

By muse-collective-26·Created 3 months ago·Updated 2 months ago· 9
Muse Collective LTX Timeline V10 (V6 + LTX Director CS merge, WIP)
  • 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
◄start_second0.00►
◄end_second10.00►
◄duration_seconds10.00►
◄start_frame0►
◄end_frame240►
◄duration_frames240►
◄timeline_data{}►
◄local_prompts►
◄segment_lengths►
◄global_prompt►
◄guide_strength►
◄epsilon0.0010►
◄frame_rate24.00►
◄display_modeseconds►
◄custom_width960►
◄custom_height544►
◄resize_methodmaintain aspect ratio►
◄divisible_by32►
◄img_compression18►
◄generate_audiotrue►
◄custom_audio_onfalse►
◄lipsynctrue►
◄motion_guide_ontrue►
◄chunk_duration_seconds10.0►
◄auto_chunk_threshold10.0►
◄auto_chunk_by_segmentfalse►
◄carry_frames73►
◄carry_strength1.00►
◄crossfade_frames0►
◄ic_lora_nameNone►
◄ic_lora_strength1.00►
◄stage1_steps8►
◄stage2_steps4►
◄stage2_denoise0.42►
◄cfg1.0►
◄single_stage_modefalse►
◄seed42►
◄filename_prefixmuse►
◄bg_volume1.00►
◄stage1_samplereuler►
◄guide_scale_by0.50►
◄stage2_samplereuler►
◄guide_scale_by_s21.00►
◄guide_upscale_methodbicubic►
◄guide_image_attn_strength1.00►
◄guide_cropcenter►
◄guide_auto_snap_ic_gridtrue►
◄guide_use_tiled_encodefalse►
◄guide_tile_size256►
◄guide_tile_overlap64►
◄timeline_ui►
◄seed_huntfalse►
◄seed_hunt_steps6►
◄seed_hunt_scale0.25►
◄seed_hunt_11►
◄seed_hunt_22►
◄seed_hunt_33►
◄seed_hunt_44►
◄use_seed_hunt_1false►
◄use_seed_hunt_2false►
◄use_seed_hunt_3false►
◄use_seed_hunt_4false►
◄ghost_anchor_buffer2►
◄enable_ambient_passtrue►
◄automation_start—►
◄automation_end—►
◄automation_duration—►
◄segment_override_1—►
◄segment_override_2—►
◄segment_override_3—►
◄segment_override_4—►
◄segment_override_5—►
◄segment_override_6—►
◄segment_override_7—►
◄segment_override_8—►
◄reference_modeOFF►
◄reference_strength1.00►
◄msr_prefix_frames65►
◄negative_prompt►
◄nag_scale11.0►
◄nag_alpha0.25►
◄nag_tau2.5►
◄nag_bypassfalse►

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 with MusePromptSplitter, 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_steps becomes 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_seconds and auto_chunk_threshold are 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_prompt plus nag_scale/nag_alpha/nag_tau with nag_bypass as a hard kill-switch. Requires the comfyui-kjnodes package's LTX2_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.md in 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.

CategoryMuse Collective

Inputs (92)

NameTypeDefaultDescription
modelMODEL—
clipCLIP—
audio_vaeVAE—
vaeVAE—
spatial_upscalerLATENT_UPSCALE_MODEL—
start_secondFLOAT0.000–3600—
end_secondFLOAT10.000–3600—
duration_secondsFLOAT10.000–3600—
start_frameINT00–86400—
end_frameINT2400–86400—
duration_framesINT2401–86400—
timeline_dataSTRING{}—
local_promptsSTRING—
segment_lengthsSTRING—
global_promptSTRING—
guide_strengthSTRING—
epsilonFLOAT0.00100–1—
frame_rateFLOAT24.001–120—
display_modeCOMBOseconds2 options: seconds, frames
custom_widthINT96064–4096—
custom_heightINT54464–4096—
resize_methodCOMBOmaintain aspect ratio5 options: maintain aspect ratio, stretch to fit, crop, pad, pad green
divisible_byINT321–256—
img_compressionINT180–51—
generate_audioBOOLEANtrueLTX generates ambient/sfx audio from [SOUNDS] prompts.
custom_audio_onBOOLEANfalseUse audio file(s) from the AUDIO timeline track.
lipsyncBOOLEANtrueSync mouth movements to custom audio. Requires Custom Audio ON and talking head LoRA.
motion_guide_onBOOLEANtrueUse motion guide segments from the timeline.
chunk_duration_secondsFLOAT10.02–120—
auto_chunk_thresholdFLOAT10.00–3600—
auto_chunk_by_segmentBOOLEANfalseWhen 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_framesINT731–240Reference frames from previous chunk locked at chunk start. 73 ≈ 3s at 24fps.
carry_strengthFLOAT1.000–1—
crossfade_framesINT00–120—
ic_lora_nameCOMBONone1 options: None
ic_lora_strengthFLOAT1.00-10–10—
stage1_stepsINT81–50—
stage2_stepsINT41–50—
stage2_denoiseFLOAT0.420–1—
cfgFLOAT1.00–20—
single_stage_modeBOOLEANfalseON: 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.
seedINT420–18446744073709550000—
filename_prefixSTRINGmuse—
bg_volumeFLOAT1.000–2—
stage1_samplerCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
guide_scale_byFLOAT0.500.01–8—
stage2_samplerCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
guide_scale_by_s2FLOAT1.000.01–8—
guide_upscale_methodCOMBObicubic5 options: bicubic, bilinear, nearest-exact, area, bislerp
guide_image_attn_strengthFLOAT1.000–1—
guide_cropCOMBOcenter2 options: center, disabled
guide_auto_snap_ic_gridBOOLEANtrue—
guide_use_tiled_encodeBOOLEANfalse—
guide_tile_sizeINT25664–512—
guide_tile_overlapINT6416–256—
timeline_uiSTRING—
seed_huntBOOLEANfalseON + 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_stepsINT61–50—
seed_hunt_scaleFLOAT0.250.05–1Unused 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_1INT10–18446744073709550000Unused 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_2INT20–18446744073709550000—
seed_hunt_3INT30–18446744073709550000—
seed_hunt_4INT40–18446744073709550000—
use_seed_hunt_1BOOLEANfalse—
use_seed_hunt_2BOOLEANfalse—
use_seed_hunt_3BOOLEANfalse—
use_seed_hunt_4BOOLEANfalse—
ghost_anchor_bufferINT20–20Ghost 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_passBOOLEANtrueON (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_audiooptAUDIO—
base_modeloptMODELBase model without talking-head LoRA. Connect the UNETLoader output directly here so the ambient audio pass generates sounds without speech.
optional_latentoptLATENTConnect 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_startoptFLOATAutomation (connection-only). Start time in SECONDS. Overrides the panel start when connected.
automation_endoptFLOATAutomation (connection-only). End time in SECONDS. When connected (and duration is not), the render length is derived from start..end.
automation_durationoptFLOATAutomation (connection-only). Duration in SECONDS. Overrides the panel duration and sets the render length when connected.
segment_override_1optSTRINGOverrides segment 0's prompt text if connected and non-empty.
segment_override_2optSTRINGOverrides segment 1's prompt text if connected and non-empty.
segment_override_3optSTRINGOverrides segment 2's prompt text if connected and non-empty.
segment_override_4optSTRINGOverrides segment 3's prompt text if connected and non-empty.
segment_override_5optSTRINGOverrides segment 4's prompt text if connected and non-empty.
segment_override_6optSTRINGOverrides segment 5's prompt text if connected and non-empty.
segment_override_7optSTRINGOverrides segment 6's prompt text if connected and non-empty.
segment_override_8optSTRINGOverrides segment 7's prompt text if connected and non-empty.
reference_modeoptCOMBOOFFOFF: 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_imagesoptIMAGEExtra 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_strengthoptFLOAT1.000–5Guide strength applied to the character/ref reference images.
msr_prefix_framesoptINT659–200Licon 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_promptoptSTRINGText to steer generation away from (e.g. 'moles, blemishes, skin spots'). Requires comfyui-kjnodes' LTX2_NAG node. Empty = no effect.
nag_scaleoptFLOAT11.00–100Strength of the negative-guidance effect. 0 disables NAG entirely.
nag_alphaoptFLOAT0.250–1—
nag_tauoptFLOAT2.50–10—
nag_bypassoptBOOLEANfalseHard kill-switch — when ON, NAG is never touched at all, regardless of nag_scale or negative_prompt. Checked first, before anything else.

Outputs (12)

NameTypeDescription
last_chunk_framesIMAGE—
audioAUDIO—
stage1_framesIMAGE—
seed_hunt_preview_1IMAGE—
seed_hunt_preview_2IMAGE—
seed_hunt_preview_3IMAGE—
seed_hunt_preview_4IMAGE—
seed_hunt_audio_1AUDIO—
seed_hunt_audio_2AUDIO—
seed_hunt_audio_3AUDIO—
seed_hunt_audio_4AUDIO—
reference_imageIMAGE—