Clip Vision Encode Cond
The reference-image encoder that makes the rest of this pack work
- clip_vision
- clip_image
- CONDITIONING
Clip Vision Encode Cond - the node with the generic name - is the most-searched node in ComfyUI-RefUNet, and that's fair, because it's the one that actually makes a reference-image workflow feel like it's working. Its whole job is turning a still image into CONDITIONING that tells the model "this is what your character looks like." If you're animating a reference image with a reference UNet (FollowYourEmoji, MusePose, AnimateAnyone), this is the appearance signal that keeps the animated frames attached to the source.
How it works is worth knowing, because it explains why you need two specific pieces. The node preprocesses your image to 224×224, runs it through a CLIP vision model, and takes the last_hidden_state embedding. Then it does something the stock CLIPVisionEncode doesn't: it projects that 1024-dimensional embedding down to 768 with a small linear layer - clip_fc.safetensors, which ships inside the pack's models/ folder. That projection is what maps the vision encoder's space onto the SD1.5 text-encoder space the reference UNet expects. It's the same "image variations" trick the original AnimateAnyone-style pipelines used, just packaged as a node.
The inputs that matter:
clip_vision- aCLIP_VISIONmodel loaded with a regularCLIPVisionLoader. For FollowYourEmoji you want thesd-image-variations-encoder-fp16.safetensorsfrom Kijai's HF repo.clip_image- your referenceIMAGE, straight out of aLoadImage.strength- a float from 0 to 10, default 1. It scales the embedding. This is the one knob you'll actually touch; 0.5–1 is the sane band, and above ~1.5 you're overdriving it.
The single output is CONDITIONING, and you wire it into the positive (and usually a ConditioningZeroOut into negative) of the sampler running your animation pass.
Install is the standard ComfyUI dance: ComfyUI Manager → search "ComfyUI-RefUNet", or cd ComfyUI/custom_nodes && git clone https://github.com/logtd/ComfyUI-RefUNet, then restart. The README is explicit that there are no Python requirements for the pack - the only thing you must have is the CLIP vision model file in models/clip_vision/.
Two traps. First, this node is a specialty part: on its own it's just an IPAdapter-style encoder, and it's only meaningful inside a reference-UNet graph where a WriteSampler/ReadSampler pair is feeding the model. Second, don't confuse it with the pack's ConfigureRefNet - that node changes the UNet itself; this one only prepares the prompt-side conditioning. The example workflow actually leans on Kijai's FYEClipEmbedToComfy for the same role, so if your workflow loads with a missing-node error, that's the pack doing the same job differently. Worth knowing which one you're actually running.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| clip_vision | CLIP_VISION | — | |
| clip_image | IMAGE | — | |
| strength | FLOAT | 1.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |