LTX-2.3 EditAnything Reference Patch ⚡
Inject a person into an LTX-2.3 scene, without the ten-node dance
- model
- vae
- reference_image
- MODEL
"Add a person to this video" is the request that exposes how little of the LTX-2.3 edit pipeline is one node. The EditAnything recipe - ported faithfully from Wan2GP's real pipeline - needs extra cross-attention layers, a timestep modulation shift, and a reference photo VAE-encoded and injected as clean tokens, all happening inside a video model whose attention blocks aren't the same class as the base model's. This node packages the whole mechanism so you can bolt it onto any conditioning-prep node you like.
The primary way to use EditAnything is LTX-2.3 VidToVideo's built-in editanything_lora/editanything_module_path selectors, which do everything in one place. This standalone patch exists for the other cases: you want the reference-conditioning on a model ahead of a different node - LTXV23ImgToVideo, or a plain text-to-video graph with no vid2vid involved. The mechanism is identical to the built-in path, exposed with its full dial set.
How it works
Give it a patched model, a video VAE, your reference photo, and the EditAnything .module.safetensors file, and it does the four things the trained recipe requires: VAE-encodes the reference image and appends it as clean reference tokens (the identity carrier); the module's extra layers add a ref-attention residual and an AdaLN timestep shift; and your conditioning-prep node supplies the text. The .module file is not a LoRA - it's real extra layers that ship from the same release as its .standard.safetensors half, which you load separately with stock LoraLoaderModelOnly before this node. Both files come from DeepBeepMeep/LTX-2 (edit_anything_reference_v0.1_r128_*) and live in models/loras.
The inputs
model,vae(the loader'svideo_vae),reference_image- required. One clean subject photo, plain/white background strongly recommended (that's what the mechanism was trained on; a SAM3 matte composited onto white works).module_path- dropdown over yourlorasfolder, picks the.module.safetensors.reference_mode-per_batch_item(each image in the batch is its own distinct reference, image i drives sample i), orfirst_frame_only(justreference_image[0], the vid2vid recipe).
Output is a single MODEL to feed your sampler.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install --upgrade gguf
Restart. You'll need the LTX-2.3 A/V kit (DiT, Gemma-3 encoder, both VAEs) from the README's file table, plus the EditAnything files above. Node under 🤖 CCTech/LTX-2.3.
Gotchas
Two that burn people. First, wire the same reference photo into this node's reference_image and your conditioning node's image input - the guide-token append and the EditAnything path are complementary, not alternatives. Second, resolution: run the EditAnything sampling pass at half your target resolution, then LTX-2.3 Latent Upscale x2 and a refine (3 steps) sampler pass - at full res the source-video guide dominates and the add never appears (verified both ways on real generations). And the prompt format is imperative: Add <appearance>, <placement>, <relation to the scene> - not a caption, not "replace…".
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| vae | VAE | Video VAE - encodes reference_image into the same latent space the module's proj layers expect. | |
| reference_image | IMAGE | The person/subject to inject. A batch of N images gives N distinct references, one per generation in the sampling batch (tiled/truncated to fit) - see reference_mode for the vid2vid case. | |
| module_path | COMBO | The EditAnything .module.safetensors file, from the loras folder (it's not a LoRA itself, but ships from the same release - keep it next to its .standard.safetensors half, which loads separately via LoraLoaderModelOnly). | |
| reference_mode | COMBO | per_batch_item | per_batch_item: each image in reference_image's batch is encoded and used as its OWN distinct reference (not blended) - image i drives sample i of the sampling batch, tiled/truncated if the counts don't match. first_frame_only: use only reference_image[0], ignore the rest - the vid2vid recipe (one clean reference identity against a single video), avoids a mismatched-count surprise when reference_image's batch isn't meant to map 1:1 onto the sampling batch. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |