ConcatConditioning
The conditioning-staple node you might not need at all
- conditioning_to
- conditioning_from
- CONDITIONING
ConcatConditioning does one boring thing: it glues two CONDITIONING tensors together along the token dimension so both can condition the sampler at once. In this pack its job is the SeeCoder trick - take the image embedding from SEECoderImageEncode and staple it onto a regular CLIP text embedding, so the model sees your words and your reference picture at the same time. That combined 768-dim run is exactly what Prompt-Free Diffusion's "text + image conditioning" approach wants.
Here's the honest take, and the reason this article is short: ComfyUI already ships a core node called ConditioningConcat that does this identical concat. The built-in one is right there in the Add Node menu under conditioning, no pack required. This node exists mostly so a SeeCoder workflow can stay self-contained in one repo. If you're reaching for ConcatConditioning for any reason other than following a SeeCoder template, you can swap in the core ConditioningConcat and nothing changes about the result.
How it works
Mechanically it's a torch.cat along the sequence dimension: every conditioning entry in conditioning_to gets conditioning_from's embedding appended to it, and the pooled conditioning metadata from the first input is carried through unchanged. One quirk worth knowing: if conditioning_from contains more than one conditioning (say, a batch), it silently only applies the first one and prints a warning to the console telling you so. It won't crash - it'll just ignore the extras.
The inputs
- conditioning_to - the conditioning you're appending onto (typically your CLIP text conditioning from CLIPTextEncode).
- conditioning_from - the conditioning appended on the end (typically the SeeCoder image encoding).
Output is a single CONDITIONING that goes straight into your sampler's positive or negative. Order matters: the model reads the concatenated tokens in sequence, so put the text first and the image second for the same arrangement the original Prompt-Free Diffusion code used.
Installing
It ships in the same pack as SEECoderImageEncode, so one install gets you both. Via ComfyUI Manager, search "SeeCoder"; or:
cd ComfyUI/custom_nodes
git clone https://github.com/BlenderNeko/ComfyUI_SeeCoder
Restart ComfyUI and that's it. This particular node needs no model files at all - it only shuffles conditioning tensors around. The SeeCoder .safetensors files from shi-labs/prompt-free-diffusion on HuggingFace are only required if you're also running SEECoderImageEncode (they go in ComfyUI/models/seecoders).
Troubleshooting
The only failure mode you're likely to hit is the console warning about conditioning_from containing more than one cond - that's the node working as written, not a bug. If you get a dimension mismatch, it's not this node's fault: concat only works when both inputs have the same per-token width (768 for SD 1.5), so a mismatched encoder or a non-SD1.5 model is the real culprit. And if a downloaded workflow won't load because this node is missing, remember the built-in ConditioningConcat is a drop-in substitute for whatever the workflow was actually doing.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning_to | CONDITIONING | — | |
| conditioning_from | CONDITIONING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |