MinusZone - KolorsUNETLoaderV2
The Kolors loader that just works
- model
This is the loader you want for Kolors. MZ_KolorsUNETLoaderV2 takes the model from models/unet/, hands you a single ready-to-sample MODEL, and skips all the V1 ceremony. Where the legacy MZ_KolorsUNETLoader forced you to carry a separate hid_proj layer out of the loader and into the text encoder, V2 builds the projection into the model itself. You load, you wire into KSampler, you go.
How it works
Kolors' UNet expects 2048-dim text conditioning, but its ChatGLM3 text encoder emits 4096. The bridge is encoder_hid_proj, a linear projection. V1 surfaced it as a loose object you had to route manually; V2's hook wraps the UNet in a KolorsUNetModel that owns that linear internally (nn.Linear(4096, 2048)), so the projection happens inside the model forward pass and the text encoders never have to think about it. The load path also switched to ComfyUI's native load_unet_state_dict, which is why V2 keeps tracking core ComfyUI updates better than the hand-rolled V1 converter. The one output, model, is a plain MODEL you can drop straight into KSampler.
Inputs and outputs
One input, one output. unet_name is a dropdown of everything in models/unet/. The model output is what it says - your Kolors UNet, ready for sampling. This is as close to a "just load it" node as this pack gets.
Install and models
ComfyUI Manager (search "ComfyUI-Kolors-MZ") or:
cd ComfyUI/custom_nodes
git clone https://github.com/MinusZoneAI/ComfyUI-Kolors-MZ
then restart. The pack has no pip requirements - the model download is the real install:
diffusion_pytorch_model.fp16.safetensorsfromKwai-Kolors/Kolors→models/unet/- ChatGLM3 (required for text) from
Kijai/ChatGLM3-safetensors→models/LLM/ - Optionally the Kolors-Inpainting UNet →
models/unet/if you want inpaint workflows.
Where V2 gets opinionated
One thing V2 changed that trips people up: the 2024-07-25 update tuned its sampling settings to match Kolors' own scheduler_config.json, which is not the classic SDXL schedule. If your results look different from old V1 workflows at the same sampler settings, that's why - and the pack's MZ_ApplySDXLSamplingSettings node exists specifically to force the model back to the plain SDXL scheduler. Load with V2, and if a sampler behaves differently than you remember, that node is your revert switch.
Common issues
If the loader can't detect the model type, you likely have the checkpoint flavor of Kolors (one merged .safetensors) rather than the diffusers UNet layout - the README's own advice is to just try both loaders, and MZ_KolorsCheckpointLoaderSimple covers the other case. And if you see errors about missing attributes from comfy.model_detection, update ComfyUI core; V2 rides native loading and tracks it closely.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| unet_name | COMBO | 0 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |