webcam dither, in real time
kott dithers a live camera in the browser, on the GPU, while you change the algorithm and the threshold. Read the limit first: there is no virtual camera output. kott cannot appear as a webcam in Zoom, Meet, Teams or OBS, and there is no NDI and no Syphon. If you want a dithered face in a meeting, you need a virtual-camera app or OBS’s own virtual camera — not this. That is a real answer, and it is better than finding out after you pay.
What kott is, if you are still here: a studio you look at and record from. The camera goes into a WebGL2 texture and the dither runs in a shader on your own machine. Camera and microphone are processed entirely on device. Nothing uploads and no frame leaves the machine, which matters more here than anywhere else on this site, because the input is your face in your own room.
Nothing to install, and no account needed to look. Error diffusion — Floyd–Steinberg, Atkinson, Jarvis, Stucki, Sierra, Burkes — or ordered/Bayer, with the scan order and the tone curve under your hands. $39 until 13 September, once, for the web studio and the macOS app together, with no subscription.
01/ ON DEVICE
the camera never leaves your machine
Most tools that dither an image ask you to upload one. A live camera makes that unacceptable, so kott does not do it. The path, in order:
- The browser asks for the camera. You grant it, or the page shows nothing — there is no fallback that sends a frame somewhere else.
- The frame goes from the camera into a WebGL2 texture on your own GPU. The dither runs there, in a shader, on your machine.
- Nothing uploads. No frame, no still, no recording, and no audio leaves the device.
- Recording writes the file locally. REC produces an MP4 on your disk; PNG stills and vector paths are written the same way.
- No account is needed to look. Every effect previews free, so you can open the camera, see the dither, and close the tab without signing up.
02/ TEMPORAL
why dithering a moving image is harder
Dithering a still photograph is a solved problem. Dithering a camera is not, and the reason is in the algorithm rather than the hardware.
Error diffusion is serial and order-dependent. Every pixel is forced to black or white, and the error that forcing produces is handed forward to neighbours that have not been decided yet. So each decision depends on all the decisions before it. Change the input slightly — camera sensor noise, a lamp flickering, a head moving three pixels — and the chain of decisions reorders across a whole region. The dots do not shift a little; they redraw. Across frames that reads as crawling, boiling or shimmer, and it is strongest exactly where a webcam image is weakest: flat midtone areas like a cheek or a plain wall.
Ordered/Bayer dithering does not have this problem. Its threshold comes from a fixed matrix tied to pixel position, so the same input value at the same place always resolves the same way and the pattern stays put while the subject moves. The cost is that the matrix is visible: you get the cross-hatch grid, and it sits on top of the image as its own texture.
That is a real trade-off and kott has not eliminated it. Nothing on this page claims temporally stable error diffusion. What kott does is put both families under the same controls, so you can switch between them while looking at your own camera and decide which artefact you would rather have. A gamma-correct tone pipeline helps — stable, well-placed midtones give error diffusion less to thrash about — but it reduces the crawl, it does not remove it.
03/ ALGORITHMS
what you can switch between
- error diffusion
- Floyd–Steinberg, Atkinson, Jarvis, Stucki, Sierra, Sierra-2, Sierra-Lite and Burkes. Each one takes the error left over when a pixel is forced to black or white and pushes it into neighbours that have not been decided yet. They differ in how far the error travels and how much of it survives, which is why Atkinson blows out into clean high-contrast whites and Jarvis holds midtones a camera image is full of.
- ordered / Bayer
- A fixed threshold matrix compared against the pixel, with no error carried anywhere. It produces the visible cross-hatch grid people recognise from early games and dot-matrix print, and it is the temporally stable option — the same input pixel always lands on the same threshold, so the pattern does not move when the subject does.
- scan order
- Error diffusion has to walk the image in some order, and the order shows. Horizontal serpentine is the default, alternating direction each row so error does not smear consistently to one side. Vertical, diagonal and spiral are also available, and on a face they read as three genuinely different textures rather than three settings.
- the tone pipeline before the threshold
- The dither decision is only as good as the luminance it is handed. kott computes luminance in linear light, maps it to a perceptual curve, then applies an S-curve for contrast — so the midtones a webcam produces under a room lamp land where you expect instead of collapsing to one dot density.
04/ PLAYED
the dither as an instrument
A dither filter has a threshold you set once. kott treats it as something you play, which is the reason the camera path exists at all.
- the dither can move with the music in the room
- kott listens on the same machine's microphone and derives spectral-flux onset, a phase-locked beat pulse, a downbeat on the first beat of every four-beat bar, build and drop detection, a tempo tracked between 60 and 180 BPM, bass/mid/treble, and up to eight EQ bands you define yourself with their own window, gain and gate.
- any of those signals lands on any parameter
- There is no fixed list of audio-reactive effects. A modulation node with its own gain and smoothing patches a signal onto a parameter, and the dither's threshold, contrast and palette are parameters like any other. Wire onset to the threshold and the image breaks up on the hit. Wire a bass band to contrast and the face dissolves when the kick lands.
- or put it under a physical fader
- WebMIDI, so a controller works in the browser with nothing installed. A nanoKONTROL2 map ships, and any control MIDI-learns onto any parameter — including the dither threshold, which is the one you want under a finger rather than a mouse.
- getting it out
- REC writes the canvas to an MP4 with audio in sync. Stills come out as PNG, or as vector paths for print and plotters. Projector mode mirrors the output to a second window and fullscreen, which is what you use when the camera is pointed at a room and the room is watching itself.
05/ LIMITS
what it will not do
- There is no virtual camera output. kott cannot appear in Zoom, Meet, Teams, OBS or any other application's camera list, and there is no NDI and no Syphon either. If you want a dithered face in a meeting, you need a virtual-camera app, or OBS with its virtual camera — kott is not that, and no setting turns it into that.
- It is a studio you look at and record from, not a driver you route through. That distinction is the whole shape of the tool: the output is a window, a recording, a still or a vector file.
- It is not a video editor. There is no timeline, no clips and no cuts.
- The offline native build is macOS only. On Windows and Linux, kott means a browser tab with WebGL2 — which is enough for the camera and the dither, but there is no app to install.
three dither pages, three different jobs
- a live camera, dithered as it moves
- This page. The input is your webcam, the output is a window you watch, a recording or a still.
- footage you already have on disk
- dither video — same algorithms, a file as the source instead of a camera, and the temporal problem above applies there for the same reason.
- a single image, and the algorithm itself
- diffusion / 1-bit — the effect page: every control with its real range, a parameter sweep you can look at, and where the technique came from.
06/ FAQ
questions
- can I dither my webcam in real time?
- Yes, in a browser tab, with nothing installed and no account. kott takes the live camera as its input and runs the dither on the GPU through WebGL2, so the image is dithered as it moves rather than frame by frame after the fact. You can choose the algorithm, the scan order and the threshold while the camera is running.
- does it upload my camera feed?
- No. The camera and the microphone are processed entirely on your device. The frame goes from the camera into a WebGL2 texture on your own GPU and the shader runs there; nothing uploads, and no frame or audio leaves the machine. Recordings and stills are written to your own disk.
- can I use it as a webcam in Zoom?
- No. kott has no virtual camera output, no NDI and no Syphon, so it cannot present itself to Zoom, Meet, Teams, OBS or anything else as a camera device. For that you need a virtual-camera application, or OBS with its own virtual camera, feeding whatever source you like. kott is a studio you watch and record from, not a driver other applications can read.
- why does the dither pattern shimmer?
- Because error diffusion is serial and order-dependent. Each pixel's decision changes the error passed to its neighbours, so a small change in the input — camera noise, a light flicker, a head moving a few pixels — reorders decisions across a whole region and the pattern redraws itself. On a still image you never see it; on a moving camera it reads as crawling or boiling. Ordered/Bayer dithering does not do this, because its threshold is fixed per pixel position, but it pays for that stability with a visible grid structure. This is a genuine trade-off between the two families and kott has not solved it: pick error diffusion for the texture and accept the crawl, or pick ordered for a stable image and accept the pattern.
- which dither algorithm looks best on a face?
- Atkinson if you want the high-contrast graphic look, because it discards some of the error and lets whites blow out cleanly. Jarvis or Stucki if you want the face to stay readable, because they spread error further and hold the midtones a webcam produces indoors. Ordered/Bayer if the footage is moving a lot and the crawling of error diffusion is distracting.
- what does it cost?
- One payment, no subscription, covering the web studio and the macOS app together. Every effect previews free with no account, and a free set exports without paying; the rest need the one-time licence.
07/ OUT
point it at yourself
The studio opens on the diffusion effect with the camera as its source. No account, no install, and the preview is free — the fastest way to find out whether the crawl bothers you is to watch your own face do it.