UniWorld Siglip Encoder
Pixel-exact SigLIP, because generic encode_image isn't good enough
- clip_vision
- image
- CLIP_VISION_OUTPUT
UniWorldSiglipEncoder is a supporting player in the ComfyUI-UniWorld-jd17 pack, and it exists for one stubborn reason: the UniWorld-V1 conditioning path wants SigLIP image embeddings computed with its exact preprocessing, and ComfyUI's built-in clip-vision encode won't give you that. If you're running this pack's main UniWorld Encoder (Qwen2.5VL) node, this is the node that feeds its siglip_vision_output socket.
Why it can't just use the built-in node
ComfyUI's normal CLIPVisionEncode applies its own resize and normalization pipeline to whatever vision model you loaded. The UniWorld project trained with a specific recipe - resize to 512×512 with bicubic resampling, then normalize by 0.5 mean/std - so the node bypasses ComfyUI's generic path and reproduces that preprocessing by hand before calling the vision model's forward pass. Same model, same weights; different pixel distribution in. When you're feeding embeddings into a model trained on that exact distribution, "close enough" is how you get subtle color and adherence drift.
The inputs and output
- clip_vision - a CLIP_VISION from
CLIPVisionLoader. The shipped workflow usesgoogle/siglip2-so400m-patch16-512, and you should too; feed it a different vision model and the embeddings shift out of distribution. - image - the same reference image that also goes to the encoder node.
The single output, CLIP_VISION_OUTPUT, carries the last hidden state plus pooled image embeds in the format ComfyUI expects, and wires straight into UniWorldEncoderNode's siglip_vision_output input. It's a pure preprocessing-and-run node: nothing to tune, no model loading of its own.
Install
No separate model download beyond the SigLIP2 safetensors, which the CLIPVisionLoader fetches. The node uses torchvision transforms, which ship with ComfyUI's environment, and the pack's shared transformers==4.50.0 pin (the author found 4.52.3 errors out) doesn't really bite here. Install the pack via Manager or:
cd ComfyUI/custom_nodes
git clone https://github.com/judian17/ComfyUI-UniWorld-jd17
then restart and grab the siglip2 model through the loader.
When you'd bother with it
On its own, this node does nothing visible - it's purely a preconditioner for the encoder. The one knob you actually have is choosing the right clip_vision, and the default from the example workflow is correct. If you ever see the encoder produce weak or washed-out edits, check that this node is actually feeding it (the console prints a confirmation line), because running the encoder without the SigLIP path is allowed and gives a subtly different result. That's the whole job, and for a node this thin, that's fine.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| clip_vision | CLIP_VISION | — | |
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CLIP_VISION_OUTPUT | CLIP_VISION_OUTPUT | — |