Kandinsky2.2 MovQ Decoder
The MovQ Decoder
- movq
- latents
- IMAGE
Every Kandinsky 2.2 workflow ends at this node. The Unet Decoder leaves you with denoised latents; the MovQ Decoder turns those latents into the actual image. If you're used to Stable Diffusion, this is your VAE decode - Kandinsky just gives it its own node and its own name.
What MovQ actually is
MovQ is Kandinsky's vector-quantized image codec, the component that compresses pixels into latents and back. It plays double duty in this pack: the decoder version you use here takes latents and produces an IMAGE, while the same MOVQ handle from the Decoder Loader gets reused by the Image Latents node to encode a source image for img2img. The VAE decode here runs with quantization disabled (force_not_quantize), so you get a proper continuous decode rather than a hard codebook round-trip.
Inputs and output
movq- theMOVQoutput from the Decoder Loader.latents- theLATENToutput from the Unet Decoder (or, if you're testing in isolation, from the Latents node - the result will just be noise, so don't).
Output: IMAGE, which you can preview, save, or pipe into any standard image node. This is the pack's only real terminal node, so every example workflow routes through it to a PreviewImage.
Installing it
Manual install - the README notes the repo isn't in ComfyUI Manager's list:
cd ComfyUI/custom_nodes
git clone https://github.com/vsevolod-oparin/comfyui-kandinsky22
cd comfyui-kandinsky22
python -s -m pip install -r requirements.txt
And the models:
git clone --depth 1 https://huggingface.co/kandinsky-community/kandinsky-2-2-prior
git clone --depth 1 https://huggingface.co/kandinsky-community/kandinsky-2-2-decoder
git clone --depth 1 https://huggingface.co/kandinsky-community/kandinsky-2-2-controlnet-depth
The decoder model lives in the kandinsky-2-2-decoder (or controlnet-depth) repo - the prior repo doesn't contain MovQ.
Gotchas
- Only move these two wires.
movqmust come from the Decoder Loader'sMOVQoutput andlatentsfrom the Unet Decoder. It's a simple node, and that simplicity is its only virtue - everything upstream is where the complexity lives. - Same loading cost as the rest of the pack. MovQ gets loaded from the decoder pipeline in fp16 and offloaded to CPU after use, so the first run carries a heavy load.
- Dependency pin.
requirements.txtpins an olddiffuserscommit andaccelerate==0.27.2, which can clobber other custom nodes' dependencies in the shared environment. - It's a 2023 model doing 2023 things. The look is distinctive and painterly, the community moved on around mid-2024, and this is a curiosity - a fun one, but a curiosity.
If your graph ends in a MovQ Decoder, you're done: the last wire out of it is the picture.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| movq | MOVQ | — | |
| latents | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |