LTXV Add Ref Multi (JSON) FC
Reference images, configured in JSON — the LLM-friendly twin of the ref node
- positive
- negative
- vae
- latent
- positive
- negative
- latent
- processed_images
- frame_step
- info
The reference node, but for people who'd rather hand it a JSON blob than click through a dynamic combo. LTXVAddRefMultiJsonFc is the sibling of LTXVAddRefMultiFc: it encodes your reference images, places each one at an automatically assigned negative frame index before the start of your LTX-2 video, and extends your latent with that conditioning context. The only real difference is the input - refs_json instead of a num_refs dropdown and per-image slots.
If that sounds niche, it is, but it's the niche the pack is built around. This is the node an LLM feeds: the pack's LTX2R2VBrowserLLM writes a refs list, you pipe it straight in, and your "keep this character consistent" config is now generated rather than hand-wired. It's also the version you want if you're scripting or batching clips and don't want your references scattered across widget state.
The JSON format
refs_json takes a list or a dict with a refs key. Each item just needs an image - a file path or a base64 data URI - and the optional strength/preprocess knobs:
{
"refs": [
{ "image": "C:/char/hero.png", "strength": 1.0 },
{ "image": "data:image/png;base64,iVBORw0KGgo...", "strength": 0.8 },
{ "image": "C:/char/prop.png" }
]
}
strength defaults to 1.0, preprocess to true, preprocess_crf to 33 - same defaults as everywhere in this pack. You can also pass a path to a JSON file instead of inline text; the node falls back to reading it as a file if it isn't valid JSON.
Placement is automatic, exactly like the GUI version: step_multiplier (default 2) spaces references out before frame 0, each one frame_step * step_multiplier apart, where frame_step is the VAE's time-compression factor. The rest of the inputs are the shared set - positive, negative, vae, latent, mask_mode, ramp_frames, upscale_method, negative_frame_mode - and the outputs are positive, negative, latent, processed_images, plus frame_step (INT) and info so you can see exactly where each reference landed.
The short version of gotchas
Same as its siblings: references must be applied to the video-only latent before you merge audio (combined AV latents are rejected), and the whole pack assumes a recent ComfyUI since it imports the new io API at module level. If the node eats a bad path you get a clear "Image not found" error; if the LLM hands you too many references for your latent length, the node will tell you. Honestly, for a pack this new (single commit, screenshots-only README, no real docs), the error messages are refreshingly honest.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/fangcun010/ComfyUI-LTX2-R2V
Restart and it's under LTX2, next to the guide JSON node. No dependencies beyond ComfyUI itself and no model downloads - it uses your existing LTX-2 checkpoint, video VAE, and the built-in LTXVPreprocess. If you're never going to drive it from an LLM, grab the GUI version instead; if you are, this is the one that slots into your function-calling loop.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| latent | LATENT | — | |
| step_multiplier | INT | 21–100 | — |
| 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 |
| refs_json | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| processed_images | IMAGE | — |
| frame_step | INT | — |
| info | STRING | — |