dither video
dither video
kott dithers video in real time in a browser. Load a file or turn on a camera, and the frame is reduced to black and white on the GPU through WebGL2 while it plays. There is nothing to install and no account is needed to look. Frames are processed on the device, so nothing uploads and a camera never leaves the machine.
Before anything else: there is no NDI, no Syphon and no virtual camera, so kott cannot act as a video source for another application. It is not a video editor and has no timeline. It dithers what you feed it live rather than batch-processing a folder, and the offline native app is macOS only. If any of that is disqualifying, stop here — it will not fit your rig at any price.
What it is instead: an instrument. Error-diffusion kernels and an ordered matrix, a live camera, MIDI on any parameter, and an audio bus you can wire onto the dither itself so the pattern moves with the music. $39 until 13 September, once, for the web studio and the macOS app together.
01/ LIMITS
what kott does not do
- There is no NDI, no Syphon and no virtual camera. kott cannot send its output into OBS, Resolume or a conferencing app as a video source.
- It is not a video editor. There is no timeline, no cuts and no clip grid, so it will not assemble a sequence for you.
- It dithers what you feed it live rather than batch-processing a folder. Point it at a file, a camera or your screen and it renders while you watch; it will not chew through a directory unattended.
- The offline native build is macOS only. On Windows and Linux kott means a browser tab, which needs only WebGL2 and works, but there is no app to install.
02/ DITHER
what dithering actually is
- the problem dithering solves
- A one-bit image has two values per channel and a photograph has hundreds. Rounding each pixel to the nearer of black and white throws the difference away, and a face becomes a shape. Dithering keeps the difference instead of discarding it, by arranging where the black and white pixels fall so that any small patch of the result averages out to the tone the original had there. The grey is gone from every individual pixel and still present in the neighbourhood.
- error diffusion
- Error diffusion rounds a pixel, measures how much tone that rounding owed, and hands the debt to neighbours it has not reached yet. The next pixel is judged on its own value plus what it inherited, so a run of pixels that were all slightly too dark to round up will eventually push one of them over. Which neighbours receive the error, and in what proportion, is the kernel: Floyd–Steinberg, Atkinson, Jarvis, Stucki, Sierra, Sierra-2, Sierra-Lite and Burkes are the ones kott implements. Atkinson passes on only part of the error, which is why it blows out highlights and looks like an early Macintosh. The result has fine, irregular grain and no visible repeating structure.
- ordered, or Bayer
- An ordered dither carries nothing forward. It tiles a fixed threshold matrix across the image and compares each pixel to the number underneath it, so the decision at one pixel is independent of every other pixel. That independence is the whole difference: it costs some tonal accuracy, it shows a regular cross-hatch if you look for it, and it is the reason ordered dithering behaves the way it does on moving footage.
- scan order
- Error diffusion has to walk the image in some order, and the walk is visible in the output. kott offers horizontal serpentine, which snakes left to right then right to left and is the default because alternating direction stops the error from pooling down one side; vertical; diagonal; and spiral. Change the order and the grain changes direction with it.
03/ MOTION
why dithering looks different on moving footage
- why a still tells you nothing about the clip
- Judge a dither on one frame and you are judging its spatial quality: how well the pattern stands in for tone, how the grain sits on skin, whether the highlights survive. A clip adds a second question the still cannot ask, which is what happens to that pattern between one frame and the next. A dither that is beautiful frozen can be unwatchable moving, and the reverse is also true.
- the crawl
- Error diffusion is chaotic in the precise sense: the decision at a pixel depends on the accumulated error arriving from everything upstream of it in the scan. Nudge one pixel's value by a single level — sensor noise is enough — and the error that reaches the pixels after it changes, which changes their decisions, which changes what they pass on. Two frames that look identical can therefore dither to completely different dot placements. Played back, that reads as the pattern boiling or crawling over surfaces that are not moving at all.
- why ordered dithering sits still
- The threshold matrix is fixed and anchored to the pixel grid, so a pixel whose value has not changed gets the same threshold and the same answer on every frame. Static areas stay static. The cost shows up where the image does move: the matrix belongs to the screen rather than to the subject, so texture slides across a moving face instead of travelling with it, and the pattern reads as a screen the picture is passing behind. Ordered dithering trades that detachment for temporal calm; error diffusion trades calm for a pattern that follows the picture.
- which pixels flicker, and what to do about it
- The unstable pixels are the ones sitting close to a decision boundary, where a tiny change in value flips the output. That gives three honest levers, none of which is a fix. Coarsen the dot: a larger dither pixel means fewer decisions per frame and a pattern that reads as deliberate texture rather than as noise. Push THRESHOLD and CONTRAST away from the middle, which moves fewer pixels into the band where they are undecided. Or choose an ordered matrix for shots where the camera moves and keep error diffusion for shots that hold. Temporal dither stability is an open problem, and kott gives you the controls that move it rather than a claim that it is settled.
04/ SPEC
how it runs
There are two dither paths and they are not the same code. The live path is a GPU shader: it is what dithers video and a camera in real time, what you tune while the footage plays, and what REC records when it writes the canvas to an MP4 with audio in sync. The error-diffusion kernels — Floyd–Steinberg, Atkinson, Jarvis, Stucki, Sierra, Sierra-2, Sierra-Lite, Burkes — run at full resolution on the CPU for a still export, where a serial dependency across every pixel is affordable and on a live frame it is not.
Both paths share the same tone mapping, and it is gamma-correct: linear luminance, then a perceptual transform, then an S-curve. That is what makes the still match the preview instead of coming back darker, and it is the reason midtones do not collapse the way they do when a dither is applied straight to sRGB values.
Ordered and Bayer dithering are there alongside the error-diffusion kernels, and the scan order for diffusion is selectable: horizontal serpentine by default, or vertical, diagonal or spiral.
Output is MP4 with audio for video, PNG for stills, and vector paths for print and plotters. WebMIDI means a controller works in the browser with nothing installed; a nanoKONTROL2 map ships, and any control MIDI-learns onto any parameter.
05/ AUDIO
a dither that moves with the music
kott does not have an audio-reactive dither preset. It has an audio bus you patch, and the dither is one of the things you can patch it to. The signals are spectral-flux onset, a phase-locked beat pulse, downbeat on the first beat of each four-beat bar, build and drop detection, a tempo tracker running from 60 to 180 BPM, bass, mid and treble, and up to eight EQ bands you define yourself with their own window, gain and gate. Any of those routes onto any effect parameter through a modulation node with its own gain and smoothing — including the dither's own threshold, contrast and palette. So the grain can open on the drop and the pattern can coarsen with the bass, because you wired the bass to the pattern. Audio comes from the microphone, from system audio or from a file, and it is processed on the device like everything else.
06/ STILLS
if you are dithering a photograph
Then this is the wrong page and the effect page is the right one. This page covers moving image: temporal stability, the crawl, and how the two families behave once the picture moves. The dithering effect page covers the still — the kernels as a data sheet, a parameter sweep from the finest tooth to countable blocks, where error diffusion came from, and PNG or vector output for print.
And if the moving image you mean is a live camera rather than a file, that is its own page: same GPU path, but the thing worth saying about it is that the frames never leave the machine.
07/ FAQ
questions
- How do I dither a video?
- Open the kott studio in a browser, load a video file or turn on a camera, and pick a dither effect. The live path runs as a WebGL2 shader on the GPU, so you set threshold, contrast, dot size and palette while the footage plays rather than waiting for a render. When it looks right, REC writes the canvas to an MP4 with the audio in sync. Nothing installs and no account is needed to look.
- Can you dither video online for free?
- Yes, up to a point, and the point is export rather than access. Every effect in kott previews free in the browser with no account, so you can dither a video, tune it and watch it run without paying. A free set of effects also exports. The rest need the one-time licence, which is $39 and covers the web studio and the macOS app together.
- What is a 1-bit video filter?
- A 1-bit filter reduces every frame to one bit per channel, which for a monochrome image means each pixel is either black or white with nothing between. Tone is reconstructed by dithering: the filter arranges which pixels go which way so that small patches average out to the brightness the original had. It is the same constraint early Macintosh screens and newspaper presses worked under, applied on purpose.
- Why does dithering flicker on video?
- Because error diffusion is sensitive to its own input. Each pixel's decision depends on rounding error inherited from everything before it in the scan, so a one-level change from sensor noise can cascade and produce a completely different dot pattern on a frame that looks identical to the last one. That reorganisation is the flicker, and it is often called crawl or boil. An ordered or Bayer matrix does not have it, because its thresholds are fixed to the pixel grid and carry nothing between pixels or between frames.
- Which dither kernel is best for moving footage?
- Ordered or Bayer for shots where the camera moves, because the pattern is stable frame to frame even though it slides across the subject. Floyd–Steinberg for shots that hold, where its finer grain has time to be seen and its instability has less to act on. Atkinson if you want the blown-out early-Macintosh look and can live with the crawl, since it is the one people recognise.
- Does dithering video upload my footage?
- No. Frames are processed on the device in your own browser, and nothing is uploaded. A camera and microphone never leave the machine. That is a consequence of doing the work on the GPU in front of you rather than on a server, and it is why a live camera is usable here at all.
- Can I dither a live camera feed?
- Yes. A camera is one of the sources, it runs through the same real-time GPU path as a file, and the picture is dithered as it arrives. The frames stay on the device.
- What is the difference between this and the dithering effect page?
- This page is about moving image and live video: temporal stability, the crawl, and how an ordered matrix behaves differently from error diffusion once the picture moves. The dithering effect page is about the still: the error-diffusion kernels, the parameter sweep, the history from Floyd and Steinberg's 1976 paper onward, and PNG or vector output for print. Use that one if you are dithering a photograph.
08/ OUT
dither something
The studio opens on the dither with a source already running. Preview is free and needs no account. Load a video, or turn the camera on and point it at whatever is in front of you.