LTX Director Extender
The drag-and-drop timeline node that powers LTX Director extension passes
- model
- clip
- audio_vae
- optional_latent
- model
- positive
- video_latent
- audio_latent
- guide_data
- frame_rate
- combined_audio
The star of the LTXDirector-Extender fork, and the node that gives the pack its name. If you've ever generated a 5-second LTX clip you liked and wished you could just keep going, this is the node that makes "keep going" a real workflow instead of a hope. It's a timeline-flavored Prompt Relay Encode: instead of typing comma-separated segment lengths like a caveman, you drag colored blocks on a visual timeline inside the node, assign each block a local prompt, and it encodes the whole thing into a patched model plus conditioning that fires the right prompt at the right frames.
Prompt Relay, in case you've only seen it in passing, is the scheduling trick from Gordon Chen's Prompt-Relay project (the ComfyUI implementation reference is kijai's ComfyUI-PromptRelay): you keep one global prompt that anchors the whole video and split the rest into per-segment local prompts, then the node builds a soft token mask so each segment's text conditions only its own frames. It's the mainstream answer to "how do I get different actions at different times without the video melting."
How it works. The node parses the JSON your timeline editor produces, extracts the image segments into guide_data (each image resized, optionally snapped to a divisible_by size, and optionally run through H.264 compression for that LTX guide look), auto-generates an empty LTXV latent if you don't feed one, then does the relay encode: raw tokenizer, token ranges for global + locals, segment lengths converted from pixel space to latent frames, and the model attention masked per segment. It also assembles the timeline audio into one combined_audio output via PyAV and, if you connect an audio_vae, encodes an audio latent so the LTX-2/2.3 audio path has something to chew on.
The inputs that actually matter. Feed it model and clip, write a global_prompt (it "anchors persistent characters, objects, and scene context" - treat it as the anti-drift insurance), then the timeline editor autopopulates local_prompts, segment_lengths, timeline_data, and guide_strength for you. epsilon (default 0.001) controls how sharp the boundaries are - below ~0.1 they're all knife-edge; bump it to 0.5+ for softer prompt crossfades. duration_frames only sets the timeline's visual scale when you bring your own optional_latent; if you let the node auto-generate the latent, it sets the actual length (duration_frames + 1 frames), so don't assume it's decorative. use_custom_audio (ON = encode your timeline audio, OFF = let LTX generate sound from scratch) and img_compression (CRF of the H.264 pass on guide images, 0 = off) round out the fun knobs.
Outputs: model and positive go to your sampler, guide_data feeds the guide node, video_latent/audio_latent are what you sample, plus frame_rate and combined_audio.
Install is the standard fork dance:
cd ComfyUI/custom_nodes
git clone https://github.com/Yogurt1192/LTXDirector-Extender.git
Restart ComfyUI. No models to download, and the only real extra dependency is PyAV (av), which a modern ComfyUI almost certainly already has; if you hit ModuleNotFoundError: No module named 'av', pip install av. Note the repo targets ComfyUI 0.22.x (its pyproject.toml pins >=0.22.1,<0.23.0), so on a much older or much newer core the node definitions can fail to load.
Where people get burned. The README is blunt about the big one: the duration you set here must match the duration inside the extender sampler subgraph, set by hand in both places, or the extension drifts off its overlap and continuation timing. Also expect long runs to eat RAM - tested to ~150s on 16 GB VRAM, but with occasional 64 GB system RAM exhaustion near the end; 10–15 second extension chunks are the safe default. And remember this is a one-author fork, not the mainline WhatDreamsCost pack, so treat it as validated-for-one-workflow, not a promise.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| global_prompt | STRING | Conditions the entire video. Anchors persistent characters, objects, and scene context. | |
| duration_frames | INT | 1201–10000 | Total timeline length in pixel-space frames. Used by the editor for visual scale only. |
| duration_seconds | FLOAT | 5.000.1–1000 | Total timeline duration in seconds (computed/synced from frames). |
| timeline_data | STRING | JSON state of the timeline editor (auto-managed; do not edit by hand). | |
| local_prompts | STRING | Auto-populated from the timeline editor. | |
| segment_lengths | STRING | Auto-populated from the timeline editor (pixel-space frame counts). | |
| epsilon | FLOAT | 0.00100.0001–0.99 | Penalty decay parameter. Values below ~0.1 all produce sharp boundaries (paper default 0.001). For softer transitions, try 0.5 or higher. |
| guide_strength | STRING | Auto-populated from the timeline editor (comma-separated guide strengths for image segments). | |
| audio_vaeopt | VAE | Optional. Connect an Audio VAE to generate audio latents. | |
| optional_latentopt | LATENT | Optional. Connect a latent to override the auto-generated one. | |
| use_custom_audioopt | BOOLEAN | false | Toggle between using timeline audio (ON) and generating audio from scratch (OFF). |
| frame_rateopt | FLOAT | 241–240 | Frames per second — only affects how time is displayed in the timeline editor when time_units is set to 'seconds'. |
| display_modeopt | COMBO | seconds | Display the ruler, segment ranges, length input, and total in frames or seconds. Internal storage is always pixel-space frames. |
| custom_widthopt | INT | 00–8192 | Target output width for all image segments. Set to 0 to use the original image width. |
| custom_heightopt | INT | 00–8192 | Target output height for all image segments. Set to 0 to use the original image height. |
| resize_methodopt | COMBO | maintain aspect ratio | How to resize image segments to fit the target dimensions. |
| divisible_byopt | INT | 321–256 | Snap the final output image dimensions to be divisible by this number (e.g. 32 for LTX). |
| img_compressionopt | INT | 180–100 | H.264 CRF compression to apply to each guide image. 0 = no compression, higher = more artefacts. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| video_latent | LATENT | Auto-generated LTXV empty latent (only populated when no latent is connected). |
| audio_latent | LATENT | Auto-generated audio latent (uses custom audio if enabled). |
| guide_data | GUIDE_DATA | — |
| frame_rate | FLOAT | The frame rate used for the timeline. |
| combined_audio | AUDIO | Combined timeline audio layout. |