LTXV Add Guide Multi (JSON) FC
Same storyboard guides as its sibling, but driven by JSON — for LLMs and repeat runs
- positive
- negative
- vae
- latent
- positive
- negative
- latent
- processed_images
- info
This is the "if you don't want to click twenty widgets" version of the pack's multi-guide node. LTXVAddGuideMultiJsonFc does exactly what its sibling LTXVAddGuideMultiFc does - encode guide images, pin them at frame indices in your LTX-2 video via keyframe_idxs, and extend your latent accordingly - except instead of a dynamic combo full of slots, it takes a single JSON string (guides_json) and turns that into all the guides. Same engine, different steering wheel.
Why bother with JSON? Two reasons, and both are the reasons this node exists. First, it's repeatable: your storyboard lives in a file or a string, not buried in widget state, so you can run the same clip with tweaks and actually diff your config. Second, it's LLM-friendly - this is the node the pack's LTX2R2VBrowserLLM is meant to feed. Wire an LLM's output here, describe the beat-by-beat of your scene in the prompt, and let the model write the guide list. It's the "function calling" part of this pack's story made concrete.
The JSON format
guides_json accepts a list or a dict with a guides key, and each item needs an image (a file path or base64 data URI) plus the frame/strength settings:
{
"guides": [
{ "image": "C:/frames/wide.png", "frame_idx": 0, "strength": 1.0 },
{ "image": "C:/frames/closeup.png", "frame": 48, "strength": 0.7 },
{ "image": "data:image/png;base64,iVBORw0KGgo...", "frame_idx": 96 }
]
}
Defaults are kind: frame_idx (alias frame) defaults to 0, strength to 1.0, and each guide independently gets preprocess (default true) and preprocess_crf (default 33) for the LTXVPreprocess step. The node is also happy to take a path to a JSON file instead of inline text - if the string isn't parseable JSON, it tries to load it as a file.
The other inputs are the standard video-conditioning set: positive, negative, vae, latent, plus mask_mode (constant/ramp), ramp_frames, upscale_method, and negative_frame_mode - same knobs as the GUI version, same meanings. Outputs are positive, negative, the extended latent, processed_images (what the guides looked like post-preprocess), and info, which logs the exact frame/latent mapping for each guide so you can verify the LLM didn't pin something past your last frame.
Gotchas
The two failure modes to know: a bad image path throws a "Image not found" error (check the path or hand it base64), and frame_idx past the end of your clip throws "Conditioning frames exceed the length of the latent sequence." Both are the node being honest with you, which is more than most LLM-driven tooling manages. And as with the sibling node, this must run on the video latent before you merge audio - it refuses combined AV latents.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/fangcun010/ComfyUI-LTX2-R2V
Restart and it's under LTX2. No requirements file, no models to fetch - it uses the LTX-2 checkpoint, video VAE, and ComfyUI's built-in LTXVPreprocess. One practical note: the whole pack imports ComfyUI's new io API, so keep ComfyUI updated even though this node's description doesn't call out a minimum version like its DynamicCombo sibling does.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| latent | LATENT | — | |
| mask_mode | COMBO | constant | 2 options: constant, ramp |
| ramp_frames | INT | 11–64 | — |
| upscale_method | COMBO | nearest-exact | 3 options: nearest-exact, bilinear, lanczos |
| negative_frame_mode | COMBO | allow_cross_zero | 2 options: allow_cross_zero, before_start |
| guides_json | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| processed_images | IMAGE | — |
| info | STRING | — |