Video Posterize
Flatten the gradients, rescue the banding with dither
- video
- video
- output_path
- summary
MKRVideoPosterize applies the posterize effect to a whole clip: it flattens the smooth gradients of every frame into a smaller number of discrete levels, giving that flat, graphic, almost silk-screened look. On a still image it's a one-click graphic treatment; on video it does the same thing to every frame, which is exactly what you want for a consistent stylized pass - and exactly the kind of thing you'd normally only get by exporting frames and processing them elsewhere.
Mechanically each frame is quantized per channel: levels (2–64, default 8) is how many steps each color channel is flattened to. At 8 levels the effect is real but tasteful - colors snap to steps, skies and shadows band visibly. Crank it down to 3–4 and you're in full poster/graphic territory where faces and gradients collapse into flat fields. The dither toggle (default off) is the fix for the artifact this creates: low levels produce harsh banding on smooth areas, and dithering scatters a little noise across the steps so the bands read as texture instead of hard stripes. For a stylized look you usually want it on; for a clean graphic flatness, leave it off.
The inputs that matter
video- any resolvable video input.levels- the step count. 8 is a safe default; 3–6 is where it gets loud.dither- on/off. On smooth footage at low levels, turn it on or prepare for banding.fallback_fps,output_format,filename_prefix,subfolder,overwrite- the standard pack inputs.
Outputs: video (MKR_VIDEO payload), output_path, and summary (levels used, frame count, warnings).
Install
Ships in MKRShift Nodes - install the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
or ComfyUI Manager → search MKRShift_Nodes → restart. mp4/mov/webm output needs system ffmpeg on PATH; gif/webp work without it. No pip dependencies.
Where people get burned
The trap is levels being a per-channel count, not a "strength" - 64 levels looks nearly like the original, 8 is clearly posterized, and people who expected a subtle dial sometimes land on 8 and think it's broken. Start high and step down. Second, dither: the moment you're on low levels with smooth gradients (skies, skin, fog) and it looks like a banding festival, the dither toggle is the answer you're looking for. And the usual one: no audio carried through - frame-based processing, so mux sound back if the clip had any.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| video | * | — | |
| levels | INT | 82–64 | — |
| dither | BOOLEAN | false | — |
| fallback_fps | FLOAT | 24.01–240 | — |
| output_format | COMBO | auto | 6 options: auto, gif, webp, mp4, mov, webm |
| filename_prefix | STRING | MKR_posterize_video | — |
| subfolder | STRING | — | |
| overwrite | BOOLEAN | false | — |
| filename_labelopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | MKR_VIDEO | — |
| output_path | STRING | — |
| summary | STRING | — |