π LTXV Timeline Editor
A timeline editor that turns a text shot list into the images and script the extenders need
- script_string
- guide_images
Despite the name, LTXVTimelineEditor is not a video editor. It's the authoring frontend for this pack's scene-script format - the tool that turns a wall of [MM:SS-MM:SS] prompt | audio:"line" | first:$0 | end:$1 into something you can see, drag, and point images at. It's the piece the author built on request for another node dev to drop into their workflow, and it's the most immediately usable node in the pack: no model, no VAE, no VRAM. Just you and a script.
Open it in your graph and click - a dark overlay opens with your script rendered as blocks on a timeline track. Each block is a scene. You can click one to edit its prompt, set its audio spec (silent, ambient, or dialogue), and upload guide images straight into it via the upload boxes. Mid-scene markers let you pin an image at a specific timestamp. When you hit Save & Close, it serializes everything back into the pipe-separated format and pushes it to the node's output.
How it works
Two halves. The JavaScript half (in js/ltxv_timeline_editor.js) parses your script into scene objects, renders the track, and handles all the dragging and uploading. The Python half does the clever conversion: it looks for image references written as filenames - first:closeup.png, end:wide.png, mid:00:05:detail.png - loads each file through ComfyUI's normal input-path resolution, dedupes repeated files, resizes everything to a uniform batch, and rewrites the refs to the $0, $1, $2β¦ indexing that the scene extenders actually consume. So the editor is what makes "drag a PNG onto this scene" become "guide image #4 at the 5-second mark," without you ever counting indices by hand.
Inputs and outputs
It takes exactly one input: script (a multiline string) - your draft scene script, in the same format the extenders use. Paste whatever you've got; empty string starts you from nothing.
Two outputs:
script_string- the edited script, with filename refs rewritten to$index. Wire this into thescene_scriptinput ofLTXVSceneExtenderorLTXVSceneExtenderMVP.guide_images- the batch of images the script references, loaded and deduped. Wire it into theguide_imagesinput of the same nodes. If your script references no images, this comes back empty - the extenders treatguide_imagesas optional, so that's fine.
That pairing is the whole workflow: Timeline Editor β Scene Extender. One node to write the shot list, one to film it.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/erosDiffusion/ComfyUI-Erosdiffusion-LTX2
or search "Erosdiffusion LTX2" in ComfyUI Manager, then restart ComfyUI. No pip dependencies; the frontend loads from the pack's js/ directory, so make sure you restart after install rather than just reloading the browser. Same pre-alpha caveat as the rest of the pack - but since this node touches no models, "pre-alpha" here mostly means rough edges in the UI rather than broken generations.
Troubleshooting
- Images don't load - the backend resolves filenames through ComfyUI's input paths, so your reference PNGs need to live somewhere ComfyUI can find them by name (your
inputfolder or a path the file tools recognize). A typo in the filename is the usual culprit; the console logs the load failure. - Script won't parse - the format is pipe-separated directives:
[MM:SS-MM:SS] prompt | audio:spec | first:ref | end:ref. A line missing its brackets or a dialogue string with unquoted spaces tends to come back mangled. Keepaudio:"dialogue text"quoted. - Refs come back as
$0and the extenders complain - that's expected; the extenders only understand$index. If you paste a script that's already using$index, the editor leaves it alone, but it's built to work from filenames.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| script | STRING | Visual Timeline Script |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| script_string | STRING | β |
| guide_images | IMAGE | β |