Nodes/Kandinsky 2.2 ComfyUI Plugin/Kandinsky2.2 MovQ Decoder
ComfyUI Node

Kandinsky2.2 MovQ Decoder

The MovQ Decoder

By vsevolod-oparin·Created 2 years ago·Updated about a year ago· 9
Kandinsky2.2 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 - the MOVQ output from the Decoder Loader.
  • latents - the LATENT output 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. movq must come from the Decoder Loader's MOVQ output and latents from 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.txt pins an old diffusers commit and accelerate==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.

Categorydecoder

Inputs (2)

NameTypeDefaultDescription
movqMOVQ
latentsLATENT

Outputs (1)

NameTypeDescription
IMAGEIMAGE