Nodes/MKRShift_Nodes/Video Posterize
ComfyUI Node

Video Posterize

Flatten the gradients, rescue the banding with dither

By criskb·Created 7 months ago·Updated 5 months ago· 0
Video Posterize
  • video
  • video
  • output_path
  • summary
levels8
ditherfalse
fallback_fps24.0
output_formatauto
filename_prefixMKR_posterize_video
subfolder
overwritefalse
filename_label

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.

CategoryMKRShift Nodes/Media/Video/FX

Inputs (9)

NameTypeDefaultDescription
video*
levelsINT82–64
ditherBOOLEANfalse
fallback_fpsFLOAT24.01–240
output_formatCOMBOauto6 options: auto, gif, webp, mp4, mov, webm
filename_prefixSTRINGMKR_posterize_video
subfolderSTRING
overwriteBOOLEANfalse
filename_labeloptSTRING

Outputs (3)

NameTypeDescription
videoMKR_VIDEO
output_pathSTRING
summarySTRING