Flux Multi Reference Latent ⚡
The hub that feeds up to 8 reference images into any Flux-family model
- positive
- negative
- latent_1
- latent_2
- latent_3
- latent_4
- latent_5
- latent_6
- latent_7
- latent_8
- positive
- negative
Every other node in the ComfyUI-Flux-Reference-Tools pack assumes there are already reference latents riding along in your conditioning. Flux Multi Reference Latent is the node that puts them there. It's the hub - the thing you wire up to eight VAE-encoded images into, and it hands both positive and negative conditioning to everything downstream. If you're building one of the multi-reference edit chains this pack is famous for, this is where the chain starts.
Here's the context that makes it worth understanding. Flux-family models (Kontext, and Flux.2 Klein especially) have reference-image conditioning built into the architecture - that's the whole reason "give the edit model a reference" became the standard 2026 workflow for character consistency rather than IP-Adapter and friends, which stopped loading past SDXL. The stock mechanism hangs off conditioning metadata keys called reference_latents and reference_latents_method. This node just writes those keys the same way comfy's own code does, using node_helpers.conditioning_set_values - no custom conditioning format, nothing Klein-specific.
How it works
Each connected LATENT's batch is split into individual references - a batch of 3 becomes 3 separate references, not one 3-image reference - and the full list is attached to both your positive and negative conditioning at once, using comfy's indexed reference method (reference_latents_method="index"). The "index" layout places references at simple sequential RoPE-index offsets rather than spatial tiling, which is exactly what the token-slice math in the pack's other nodes (Flux Ref Latent Controller, Flux Ref Latent Weight) depends on. Feed it via Flux Multi Reference Latent and the K/V-scaling nodes can find each reference's tokens predictably.
One behavior to know before it bites you: this node overwrites any existing reference_latents rather than appending. Stock ReferenceLatent chains by accumulating; this one replaces. That's deliberate - matching comfy's behavior - but it means you can't stack two of these to get 16 refs, and you should keep the node order in your graph intentional.
The inputs that matter
- positive / negative - your CLIP-encoded conditioning from a Flux text encode (or the ConditioningCombine output). Both get the references; don't skip the negative, the mechanism expects it there too.
- latent_1 (required) through latent_8 (optional) - VAE-encoded reference images. Leave unused ones disconnected.
Outputs are positive and negative CONDITIONING - wire them forward into your reference controllers and finally the KSampler.
Where it sits in the workflow
A typical pack chain from the README:
FluxMultiReferenceLatent (up to 8 LATENT inputs)
│ positive, negative
▼
FluxRefLatentController (per-reference K/V scale + spatial fade)
│ model, conditioning
▼
stock KSampler
The reference-attachment node goes right after your CLIP encoders; detail/text/mask controllers sit between it and the KSampler.
Install
The whole pack installs identically and needs nothing extra - no pip deps beyond what ComfyUI already ships, no model downloads:
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-Flux-Reference-Tools
Restart and search "Flux Multi Reference Latent" under 🤖 CCTech/Flux Reference. ComfyUI Manager finds it as "ComfyUI-Flux-Reference-Tools" too.
Common issues
- References don't show up at all. Two causes dominate: the checkpoint isn't a Flux-family model (the mechanism is baked into comfy's Flux attention blocks - it will do nothing on an SDXL/UNet checkpoint), or the reference never made it into conditioning because you wired the node after something that rebuilt conditioning from scratch.
- Wrong reference is being scaled. Reference ordering matters -
reference_indexon the controller nodes counts latents in the order you attached them here, starting at 0. - You expected chaining and got overwrite. As above - this is replace, not append. Re-order your graph rather than stacking.
It's a new pack (extracted from the author's Comfy-GGUF Klein port in August 2026), so there's not much community lore to lean on yet - but the mechanism is stock comfy, which is the reassuring part: it's not a fork of the sampler, it's a tap into plumbing comfy already exposes.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_1 | LATENT | — | |
| latent_2opt | LATENT | — | |
| latent_3opt | LATENT | — | |
| latent_4opt | LATENT | — | |
| latent_5opt | LATENT | — | |
| latent_6opt | LATENT | — | |
| latent_7opt | LATENT | — | |
| latent_8opt | LATENT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |