Skip to content
Filter a picture

About the lab

41 colour looks and 20 effects, each one a real piece of arithmetic with the parameters it actually has, run on the machine in front of you.

Two meanings of filter

People say “filter” for two different jobs. One keeps the photograph and changes its colour and mood — warmer, faded, black and white, like film. The other remakes the picture out of something else — pencil lines, flat cartoon colour, printer’s dots, big square pixels, typed characters. This lab does both, calls the first a look and the second a rebuild, and says which one you are applying.

Both are drawn from your own photograph. The strip under the picture renders every look and every effect from the file you opened, so you choose from results rather than from names.

Why each effect is written from its definition

The halftone measures cells and draws marks of the right area, and its round dots invert past halfway the way a real screen does, because otherwise the shadows never close. The dither scans in a serpentine, because otherwise skies worm. The pencil sketch is a colour dodge of a blurred negative, with every radius a fraction of the picture rather than a pixel count. The ASCII grid is built once and rendered twice, so the text file and the picture cannot disagree. None of that is difficult; all of it takes a decision.

What this site will not do

It will not retouch faces, cut out a subject, replace a background or put words over a picture. Each of those is a genuinely different piece of software. Tone controls are here because a look often needs a nudge afterwards; they run after the filter, never before it.

It will not call a classical construction “AI”. The sketch, cartoon and every look are plain arithmetic over your pixels, and the pages say so.

And it will not upload anything. There's no upload step on this page — your picture is decoded in the tab, drawn to a canvas, and gone the moment you close it.

How it is built

Every kernel is plain arithmetic over typed arrays — no shader language, no image library, nothing that behaves differently on one machine from another. The heavy ones run in a Worker so the page stays responsive; when a browser cannot give us a Worker, the identical functions run on the main thread instead, slower and with the same output.

The preview runs on a copy no more than 1600 pixels on its long edge and the export runs on the original. That is one code path with a different raster in it, and every length you set is converted between the two — which is why the file you save looks like the picture you approved.

The site is a set of static files. There is no account, no database and no server-side processing of any kind.

Telling us something is wrong

If an effect here is producing something you can demonstrate is wrong — not unattractive, wrong — that is worth hearing about through the contact page, because every one of these algorithms has a definition it either meets or does not.

Third-party code

HEIC photos are decoded by libheif-js (LGPL-3.0), loaded as a separate WebAssembly file only when a HEIC file is opened. The typefaces are Bodoni Moda and Karla (SIL Open Font Licence), served from this site.