Filter a picture

Filter picture online

Rendered on your computer, not on a server.

Every look and every effect drawn from your own photo — 41 colour looks, fourteen rebuilds and five colour finishes on one strip. Drag across the photo for strength, hold it to see the original, and save the frame you approved.

No photo openDrop, paste or choose one

Drag photographs in, or click to find them

JPG, PNG, WebP, AVIF and GIF open in every browser; BMP, TIFF and ICO open where yours knows them. HEIC pulls in its own decoder the first time one turns up.

Drop several at once for the folder surface, which rules the marks against each file's own size.

Then pick a look · set the strength · download

Nothing to hand?

Rendered on your computer, not on a server.

One picture, four ways, before you choose

Step 02 · pick

HalftoneFour plates, four angles, dot area carrying ink.
DitherTwo levels and an ordered threshold, no grey anywhere.
ASCIITen characters standing in for two hundred and fifty-six.
GlitchScan lines displaced, the channels by different amounts.

The same scene, sampled by four renderers rather than photographed four times. Open a picture of your own and the lab does exactly this to it — every tile live, all at once, before you commit to one.

Two kinds of filter live here, on one strip, and they are labelled on purpose: looks that change what colour a photograph is, and rebuilds that change what it is made of.

The test is one question, and it settles every case. After the change, is each pixel still showing the thing that was there, in a different colour? Then it is a look, and it sits in the strip’s look families (or under Finishes) with a strength you can pull back. Has the picture been taken apart and reassembled out of lines, dots, blocks, levels or letters? Then it is a rebuild, and it sits under Rebuild.


And the halftone is a real one

Almost every halftone button on the web draws one grid of dots at one angle and varies their darkness. This one screens four plates at the four angles a press uses, and the area of each dot is proportional to the ink that cell needs — which is what makes a rosette instead of a moiré, and what makes the result something a printer can use rather than a picture of something a printer could use.

  • Cyan 15°
  • Magenta 75°
  • Yellow 0°
  • Black 45°

Two kinds of filter live on this page: looks keep your photograph and change its colour and mood; rebuilds remake it out of lines, dots, pixels or characters. The strip labels which is which, and nothing is uploaded.

What this lab is for

There is a line running through the middle of the word filter, and almost nobody draws it out loud. On one side sit the adjustments that leave a photograph exactly where it is and change what colour it is — warmer, cooler, flatter, moodier. On the other sit the operations that take the photograph apart and rebuild it out of a different material altogether. Printer’s dots. Two inks. Sixteen flat levels. A grid of typed characters. This lab does both, and keeps them on different tabs of the same strip: the colour looks come first, because that is what most people mean by a filter, and the rebuilds sit under Rebuild, because they are a different kind of decision.

The practical difference is what you can undo. A tonal change is reversible in principle: the information is still there, pushed around — which is why every look here has a strength you can drag back toward the photograph, and why strength 0 is the photograph exactly. A rebuild is not. Once a cell of your photograph has become one dot whose area stands for its average brightness, everything else that cell contained is gone, and no amount of care gets it back. That sounds like a warning and it is really a description of the appeal — these effects are strong because they throw things away, and the parameters below the canvas are almost all about deciding what to throw away and how.

Six of the rebuilds, and what each one remakes the picture out of
EffectThe unit it builds fromWhat decides that unit
HalftoneOne mark per cell of a rotated gridCell size, dot shape, screen angle
DuotoneA position on a two-colour rampTwo inks and where the midpoint falls
DitherOne palette colour plus a patternPalette size, method, pattern scale
PixelateA flat block of the mean colourBlock size and shape
PosteriseA step on a short per-channel scaleHow many steps each channel gets
ASCIIA character standing for a patchColumn count and the character ramp

Working through it

Open a picture and the lab lays it out the way a darkroom would: the photograph large in the middle, a contact strip of it underneath, and a panel on the right for everything that is a number. Nothing is behind a second click, and the save button is on screen from the first moment.

The strip
Every frame is your own photograph under a different look — 41 colour looks across Clean, Warm, Cool, Film, B&W, Fade, Vivid, Vintage, Moody, then the rebuilds and the colour finishes. The arrow keys move along it and the big picture follows. Star the ones you come back to and they wait under Favourites next time, on this device.
Strength
How much of the look you take, from 0 (the photograph, exactly) to 100 (the look as authored). Drag sideways anywhere on the picture to set it, type a number, or press 1 to 9 for 10% steps and 0 for full.
Tone after the filter
Exposure, contrast, highlights, shadows, saturation and warmth act on the filtered picture, so a look that is right except a little dark does not have to be abandoned. Reset filter takes the look away and leaves this tone alone; Reset tone does the opposite.
Export
PNG, JPG or WebP at the photograph's full size, with the exact output dimensions shown before you press the button. The rebuilds also offer a render scale for anyone who needs the dots to survive a printer. The file is rendered fresh from the original rather than enlarged from what is on screen.

Dragging a slider redraws a small draft so the picture keeps up with your hand; letting go recomputes the whole preview and lands one step on the undo stack. Hold the picture, the Hold button, the space bar or the \ key and the untouched photograph shows for as long as you hold it; Split lays it over half the frame instead. R shuffles to another look in the same family, the square brackets step a rebuild’s main parameter, and settings are kept per effect, so comparing a halftone against a dither and coming back costs you nothing.

Where would you like to start?

Choose the job you came for; everything is set before the page finishes loading.

  1. ASCIIDivide the picture into cells, measure each one, and print the character whose weight on the…
  2. DitherYou have a photograph with millions of colours and a palette with two
  3. GlitchHorizontal scan bands, repeatable displacement and a controlled RGB split—four numbers instead…
  4. MosaicOne measured mean colour per square, separated by grout whose width and colour belong to you
  5. DuotoneThrow the colour away, then spend what is left on two inks and the ramp between them
  6. Filters
  7. HalftoneA screen measures your picture cell by cell and draws one mark per cell whose area is the ink…
  8. PaintingSmooth regions, fewer colour steps and measured contour weight—a transparent construction…

Files it takes and files it gives back

JPG, PNG, WebP, AVIF and GIF go through the browser’s own image pipeline on everything this site supports. BMP, TIFF and ICO are handed to that same pipeline and open wherever it happens to know them — Safari reads TIFF, most others do not — and where it does not, you get a named refusal and a way back in rather than a blank canvas. HEIC, which is what a recent iPhone writes by default, has a WebAssembly decoder of its own: it is pulled in the first time one of those files is opened and is simply not on the page until then, so nobody who never opens a HEIC pays for it.

Four container details are worth knowing before you open something unusual. An orientation flag is read from the file’s own header and resolved before any measurement happens, because a screen angle on a sideways photograph is the wrong angle. An animated GIF or WebP comes in as its first frame and nothing else; the lab has no notion of a second one and does not say so on screen, which is a gap rather than a decision. Colour management is left entirely to your browser, so what a CMYK or wide-gamut file becomes before the kernels measure it is your decoder’s answer rather than this page’s. And a picture past roughly 32 megapixels (16 on iOS) is offered a lighter working copy as a choice; past 100 (40 on iOS) it is declined with its measured size named, because the tab will not survive it.

Out comes PNG, JPG or WebP, plus a plain text file when the effect is ASCII. PNG is the sensible default for the rebuilds; a colour look on a photograph is usually happiest as JPG. PNG and WebP keep transparency, JPG lays it on white, and none of the three carries the original’s EXIF or location data across. The render scale multiplies both the output dimensions and every length you set, so a halftone at 2× is the same halftone with four times the pixels per dot rather than a finer screen.

Two things this lab cannot do for you

Both are limits of the operations themselves, not of this implementation.

  • None of this puts back detail the file never had. A halftone, a mosaic of blocks and a grid of characters are all forms of measured throwing-away, and each of them needs pixels to throw away in the first place. Under roughly 800 pixels on the long edge there is not enough to measure: the dots land on top of each other, the character grid reads as static, and the result looks like a small picture that has been damaged rather than like a deliberate style. The lab says so in its panel the moment such a picture opens, rather than after you have committed.
  • Faces and small text come off worst, and nothing in the parameters will rescue them. Every effect here decides each cell from an average, and an eye is a handful of high-contrast pixels whose average is an unremarkable mid-grey — so it screens, dithers and blocks into nothing in particular, while the cheek beside it survives perfectly. If a portrait is the subject rather than the setting, expect to work at a much finer cell size than looks right elsewhere, and expect the eyes to go first.

Things people ask

Is my photo uploaded?
No. The photo is decoded in this tab, every filter runs on your device, and the file you download is written here too. There is no upload step and no server that could receive one.
Can I see the filter on my photo before choosing?
Yes — that is what the strip is. Every one of the 41 looks and 19 effects is drawn from the photo you opened, so you choose from results rather than from names or stock samples.
How do I make the filter weaker?
Drag sideways anywhere on the photo, use the Strength slider, or press 1 to 9 for 10% steps. Strength 0 is your photo exactly; 100 is the look as written. Tone controls then act after the filter.
Does the saved file look the same as the screen?
Yes. The strip, the preview and the export run the same code with the same settings; anything measured in pixels is converted to the export's size, and everything else is a fraction of the picture. A numerical check of that runs on every kernel.
Will it keep my photo's size?
Looks and colour finishes save at your photo's own size. Rebuilds like halftone can also render at 2× or 3× for print, and pixel art saves at true size or enlarged by whole numbers. No EXIF or location data is copied across.
What is the difference between a look and a rebuild?
A look keeps the photograph and changes its colour and mood — warmer, faded, black and white, like film. A rebuild remakes it out of something else — pencil lines, cartoon colour, printer's dots, pixels or characters. The strip labels which is which.

Picking a rebuild when there are too many

The strip shows you all 14 rebuilds on your own picture, which settles the question far better than a paragraph can. But people usually arrive with a destination rather than an effect in mind, so here is the mapping the other way round — what you are trying to end up with, and which rebuild is built for it.

Working backwards from what the render is for
What you want out of itStart withBecause
Something that will hold up as ink on paperHalftone at 2× or 3×It is the only one here invented for a press rather than a screen
A photograph that reads as a poster from across a roomDuotone, or posterise at four levelsBoth collapse tone into a few decisive areas that survive distance
The smallest file that still looks deliberateDither at two or four colours, saved as PNGFew colours and hard edges are exactly what lossless compression is good at
A subject reduced to flat blocks of its own colourPixelate, coarseEach block is the mean of what it covers, so the look is built from the picture
Something to paste where pictures are not allowedASCII, plain text exportThe text file and the picture are the same grid, written out two ways

One caution on the fourth row, because it matters more than the rest: a block average is a style and not a way of removing information. The mean of a region carries real information about what was in it, and published work has recovered readable detail from pixelated pictures. Anything that genuinely must not be readable wants a solid shape over it, not an average of itself.

Every filter on this site

Each of these routes opens the identical lab in one mode, with its controls already on screen, for when you know the name of the thing you want. The guides carry the reasoning a control surface has no room for.

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.