Kandinsky 6 Sampler
The Node That Reads the Checkpoint and Decides
- model
- positive
- negative
- latent_image
- LATENT
Here's the annoying thing about the Kandinsky 6 line: the distilled checkpoints aren't just the same model with fewer steps. They're built to be sampled by a PiFlow policy, a different solver with its own step schedule, which is not what KSampler does. So the pack gives you two samplers and expects you to know which one goes with which file.
Except it doesn't, really. Kandinsky6Sampler looks at the model you loaded and handles it either way.
How it works
On execute it inspects the loaded DiT. If the checkpoint is the plain, non-distilled model, it hands the whole job to ComfyUI's own KSampler - same sampler, same scheduler, same code path, just borrowed. Your euler / simple / CFG 5 workflow behaves exactly as it would with the stock node.
If it finds a distilled checkpoint, it ignores those selectors and runs the DX PiFlow policy instead: a fixed schedule driven by the checkpoint's released parameters - 10 steps, shift 5.0, 128 policy substeps, a final step-size scale of 0.5. You don't tune it. You can't tune it, really, which is the point.
And it enforces the two rules that PiFlow lives by. CFG must be 1.0 and denoise must be 1.0, or it raises: "Distilled K6 PiFlow requires CFG=1 and denoise=1." You could argue the node should just force those values silently. It doesn't, and honestly the loud error is better than getting a silently degraded clip because you left CFG at 5 out of habit.
This is the single most common way people break 2026-model workflows: CFG 7 habits from the SDXL era, applied to a guidance-distilled checkpoint. On a distilled Kandinsky, CFG 5 isn't "more prompt adherence," it's a fried video.
Inputs and output
The input list is KSampler's, unchanged: model, seed, steps (default 10), cfg (default 1.0), sampler_name, scheduler, positive, negative, latent_image, denoise.
Which means two of those widgets are lies on a distilled model. sampler_name and scheduler are only consulted on the base path - pick whatever, or leave them on euler / simple as the shipped workflows do. negative is similarly inert at CFG 1: classifier-free guidance at CFG 1 computes one branch, so there's no second pass for the negative to influence. Wiring in a "worst quality, deformed" negative is a harmless habit here, not a fix. (The pack's example workflows do include one. It costs nothing but it also does nothing.)
One output: LATENT, the sampled joint latent, into either decoder path.
The steps default of 10 is right for the distill models and wrong for base Lite, which wants 50 steps at CFG 5 with the scheduler picked for you. Read the model table: Lite → 50/CFG 5, Lite distill and Pro distill → 10/CFG 1.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-Kandinsky-T8.git
cd Comfyui-Kandinsky-T8
python -m pip install -r requirements.txt
Restart afterwards, using ComfyUI's Python environment. Floors are ComfyUI 0.39.0+, comfy-kitchen 0.2.37+, and an NVIDIA GPU with INT8 tensor cores - the DiTs are single-file INT8 ConvRot, loaded through the stock UNETLoader with weight_dtype=default. Keep that dtype on default; the quantised weights carry their own metadata and overriding the dtype is how you get a validation error about comfy_quant markers instead of a video.
If ComfyUI Manager is your thing, search Kandinsky T8 and skip the shell entirely. And disable the official Kandinsky 6 extension if it's installed - duplicate node names, unpredictable graphs.
Where it goes wrong
"Distilled K6 PiFlow requires CFG=1 and denoise=1." Set both. If you genuinely want to img2img a distilled checkpoint at denoise 0.6, this sampler won't do it; the I2VA path exists precisely because partial denoise isn't how you inject a reference frame here.
You used plain KSampler on a distill model. It runs. It also samples a 10-step distill checkpoint with an ordinary Euler schedule, which produces something that looks like a bad 3-step render. If the output is mushy and you're on a distill file, check which sampler node is in the graph.
Silent quality differences between your run and someone else's. Same seed, same prompt, different pack version or a different DiT file - Lite, Lite distill and Pro distill are three different models, and their configs share everything except dimensions, so it's easy to swap one in and not notice.
The plain-Lite wait. 50 steps at CFG 5 is genuinely slow - the pack's own validation measured roughly 17 minutes for a five-second 864×480 clip on a 24 GB laptop 5090, against ~2.5 minutes for Lite distill's 10 steps. If you're iterating on a prompt, distill is the one you want; keep the base model for the final take.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The model used for denoising the input latent. | |
| seed | INT | 00–18446744073709550000 | The random seed used for creating the noise. |
| steps | INT | 101–10000 | The number of steps used in the denoising process. |
| cfg | FLOAT | 1.00–100 | The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality. |
| sampler_name | COMBO | The algorithm used when sampling, this can affect the quality, speed, and style of the generated output. | |
| scheduler | COMBO | The scheduler controls how noise is gradually removed to form the image. | |
| positive | CONDITIONING | The conditioning describing the attributes you want to include in the image. | |
| negative | CONDITIONING | The conditioning describing the attributes you want to exclude from the image. | |
| latent_image | LATENT | The latent image to denoise. | |
| denoise | FLOAT | 1.000–1 | The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | The denoised latent. |