Lucy Condition Concat
The boring node that makes Lucy Edit Dev actually work
- model
- concat_latent
- model
- latent
Nobody searches for a channel-concat node by name. You end up here because you loaded the basic-lucy-edit-dev.json workflow from the Lucy Edit pack, stared at a node called "Lucy Condition Concat" sitting between your UNET loader and your sampler, and wondered what it's doing there. Fair. It's the least glamorous node in the pack, and also the one the whole local workflow falls apart without.
What it actually does
Lucy Edit Dev is Decart's open text-guided video editor - the "nano banana for video," as its September 2025 launch put it, built on a Wan 2.2 5B base. Wan-family models like this one don't take the input video as a prompt. They take it as channels: the model's UNet has doubled input channels, and half of them are handed the VAE-encoded source video at every denoising step. The model learns "these channels are the thing I'm editing, these channels are the noise I'm shaping." That's called channel-concatenation conditioning, and it's the same trick behind Wan 2.2's image-to-video and VACE pipelines.
This node is the piece that wires that up. It clones your model, takes the encoded source latent, and installs a wrapper inside the UNet so that every step injects that latent as c_concat into the model's conditioning. Nothing about your prompt changes. Nothing about your sampler changes. The source video just quietly becomes part of the conditioning, and the model edits it according to your text.
The two inputs, the two outputs
model(MODEL) - your loaded diffusion model. In the stock workflow this is thelucy-edit-1.1-dev-cui.safetensorsweight from a UNETLoader.concat_latent(LATENT) - the VAE-encoded source video. In the example workflow: load video → resize to 1280x704 → VAEEncode → here.model(MODEL) out - the patched model, ready to sample. Feed it to ModelSamplingSD3 (the stock workflow uses shift 5) and then to KSampler.latent(LATENT) out - and here's the trap: it's a tensor of zeros, not your edited video. It's the starting noise latent the sampler denoises from. KSampler'slatent_imageinput gets the zeros, the model gets the source video via its conditioning channels, and the edited frames come out of KSampler's output. If you expected this node to hand you the result, you're looking at the wrong wire.
The one thing to actually know: concat_latent must match the generation's shape. The node checks the batch and spatial dimensions against the incoming noise at every step and throws a ValueError if they don't line up - "Batch size of concat_tensor and x do not match" or a spatial-dimensions variant. This is the classic beginner stumble: you set the sampler to generate at 640x360 or 33 frames, but the source latent was encoded at 1280x704 / 81 frames, and the whole run dies. If you see that error, your source encode and your sampling resolution disagree. A single-frame latent gets broadcast to the batch automatically; anything else with a mismatched frame count won't.
Installing and running it
Same pack as everything else Lucy. ComfyUI Manager → search "Lucy-Edit-ComfyUI", or:
cd ComfyUI/custom_nodes
git clone https://github.com/DecartAI/Lucy-Edit-ComfyUI
pip install -r requirements.txt # opencv-python, numpy, requests
Then restart ComfyUI. The local Dev route also needs the actual weights: drop lucy-edit-1.1-dev-cui-fp16.safetensors (or the FP32 build, if you have the VRAM) into models/diffusion_models/, plus a wan2.2_vae.safetensors and the umt5_xxl text encoder. It's a 5B Wan derivative, so budget like one - 81-frame clips are happy on a solid 16GB card, but don't plan a 4K extended cut on a laptop. 81 frames is also what the README recommends over shorter clips: temporal consistency gets noticeably better the longer you let it run.
When to reach for it
Only inside a Lucy Edit Dev workflow, honestly. It's purpose-built for that doubled-channel, concat-conditioned edit setup - the class docstring says "designed for models with doubled input channels (like WAN2.2)" - and there are more general tools for channel-concat conditioning out there. But if you want text-guided video editing locally without masks and without finetuning, this is the node that makes it work. Boring, invisible, and you'll miss it the second it's gone.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| concat_latent | LATENT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| latent | LATENT | — |