Nodes/ComfyUI-WAN-ClipSkip/CLIP Skip (WAN)
ComfyUI Node

CLIP Skip (WAN)

WAN's text encoder has a CLIP skip too — here's how to use it

By thezveroboy·Created about a year ago·Updated about a year ago· 1
CLIP Skip (WAN)
  • clip
  • clip
skip_layers1

CLIP skip is supposed to be dead. On everything that encodes your prompt with a modern LLM - Flux, Z-Image, Klein - the old "skip the last layer" knob is gone, because there's no CLIP left to skip. But Alibaba's Wan video line is different: its umt5_xxl text encoder is a UMT5-XXL (a T5-style multilingual LLM, 24 layers), and this node brings the old trick back for it. CLIPSkip (shown as "CLIP Skip (WAN)") sits between your CLIPLoader and the text encode step and drops the last N encoder layers, which trades literal prompt fidelity for a more abstract read of it. Whether you actually want that is a taste question - but it's a real dial, not a gimmick.

What it actually does

The mechanism is blunt and honest. The node clones your loaded CLIP object, walks down to cond_stage_model.umt5xxl.transformer, and monkeypatches the encoder's forward so it runs only 24 - skip_layers blocks before the final layer norm, all wrapped in torch.no_grad(). Set skip_layers to 0 and it's a pass-through. That's the whole thing - no retraining, no extra weights, no model file beyond the encoder you already load.

One important clarification: this is not "Skip Layer Guidance," the popular Wan 2.1 trick that swaps the unconditional pass of the diffusion denoiser to boost contrast. That's a different mechanism entirely (and a different pack). This node only touches how your prompt gets embedded. Both have "skip" in the name; that's where the similarity ends.

The intuition carries over from the SD 1.5 era, where anime models were trained expecting the penultimate CLIP layer and skipping gave "more general, more artistic" interpretations. Earlier layers of UMT5 hold the coarser, more abstract understanding of your words; later layers pin them down literally. Skip 1–2 and Wan should follow your meaning more loosely; leave it at 0 and it reads you like a dictionary.

The inputs (and the one output)

Only two inputs, and only the second is worth touching:

  • clip (CLIP) - wire this from a CLIPLoader configured for type wan with the umt5_xxl file. The author explicitly targets umt5_xxl_fp8_e4m3fn_scaled.safetensors in ComfyUI/models/text_encoders/.
  • skip_layers (INT, 0–24, default 1) - how many of the last encoder layers to cut. Start at 1, A/B against 0, and don't go wild; skipping more than a couple of layers just removes meaning.

The output is a single clip (CLIP), which you feed straight into the WAN text encode node you already use. Wiring is CLIPLoader → CLIPSkip → CLIPTextEncode.

Installing it

Standard custom node fare. Via ComfyUI Manager, search for "ComfyUI-WAN-ClipSkip" and hit install. Or, in your custom_nodes directory:

git clone https://github.com/thezveroboy/ComfyUI-WAN-ClipSkip

Then restart ComfyUI. No extra dependencies - the requirements file is literally "nothing beyond ComfyUI," and it uses ComfyUI's own model management, so nothing else to download. You do need the WAN text encoder file above if you don't already have it for your Wan workflows.

Where people get burned

Two traps, one cosmetic and one real.

The README is a template that was never fully edited: it talks about "CLIP Vision" and CLIPVisionLoader (wrong - this takes a text CLIP), and even tells you to clone https://github.com/yourusername/... (that's not a real URL). Ignore the prose; the node itself is fine.

The real gotcha is subtler and lives in ComfyUI, not this pack: CLIP.clone() shares the underlying cond_stage_model by reference. So when this node patches forward, it's patching the same object the original loader returned. If you use that same CLIP output elsewhere in the graph - an edit pass, a second encode branch - the skip applies there too. The author calls it a clone; it isn't an isolation boundary. If you only want the skip on one branch, give that branch its own CLIPLoader.

Should you bother?

This is a tiny, lightly-maintained personal pack (one node, comments in Russian, no release cadence), so set expectations: nobody has converged on "the" skip value the way SD 1.5 did, and the effect is subtle. It's a seasoning dial, not a quality switch - worth one afternoon of A/B tests, easy to leave at 0 forever. But if you've ever wished a Wan model would stop hugging your prompt's every word, this is the cheapest way to find out what that feels like.

Categoryconditioning

Inputs (2)

NameTypeDefaultDescription
clipCLIPCLIP model (e.g., from CLIPLoader with type 'wan', like umt5_xxl)
skip_layersINT10–24Number of CLIP layers to skip (0 = no skip)

Outputs (1)

NameTypeDescription
clipCLIP