depixel/studio

Drop in a pixelated image or video. It finds the mosaic on its own — where it is, how big the cells are, and which filter made it — then runs every method the evidence supports and tells you plainly what each result is worth.

No file to hand? Files are deleted after three hours

What this can and cannot do

Video, with movement — real recovery

A mosaic cell is one number standing in for a few hundred pixels, so a single frame cannot be undone. A video is not one measurement though: if the content and the lattice move relative to each other at all, every frame averages a different set of hidden pixels. The hidden content is then the solution of a large overdetermined system, and the answer can be checked against every frame that produced it. This is the case where what comes out is genuinely what was there.

Pixelated text — search, then verify

When the hidden thing is text in a familiar font, the space of possible answers is small enough to walk through. Candidate strings are rendered, pixelated the same way, and compared against the measured cells. A match is not a guess: it is the one string that reproduces the evidence. It fails loudly rather than quietly when the font, size or colours are not close.

A single still of an unknown scene — no

Here the information is gone. A 16×16 cell replaced 256 numbers with one, and nothing brings the other 255 back. What the reconstruction below produces is the smoothest image whose cell averages are exactly the measured ones — a better picture, consistent with the evidence, and not evidence of anything. Anyone showing you a face or a licence plate recovered from one still is showing you their model's imagination.

Blurred, smeared or painted over — no

This looks for content that is constant inside a cell and steps at the cell border. A Gaussian blur leaves no lattice and no cells; a black box leaves nothing at all. If the detector says it found nothing, that is usually why, and no method here applies.

How it works

  1. Find the mosaic. Tiles of the frame are each asked what lattice they can see; the ones that agree on a cell size and a phase are the mosaic. Each surviving hypothesis is then carried through to a full read of the cells it implies, and the one whose cells really are flat inside, really do differ from their neighbours and really do sit on the lattice wins. Cell sizes stay fractional throughout — content pixelated at one resolution and scaled to another has cells like 12.58 px, and rounding that walks the lattice a whole cell out of step across a frame.
  2. Measure the motion. Two independent readings: the texture beside the mosaic, and the drift of the cell averages themselves. They cover opposite situations — a window dragged under a fixed filter, and content scrolling behind a fixed censor bar — so both are run and the one that explains the measurements better is kept.
  3. Work out which filter made it. A mosaic built by averaging and one built by point sampling look identical in a still and behave completely differently under a solve. Both are fitted, then judged on frames the fit was not allowed to see.
  4. Solve. Every frame's cells become constraints on one canvas in the content's own coordinates, solved together, with each frame re-registered against the running estimate as it converges — because an offset wrong by a third of a pixel smears a frame's evidence over its neighbours and turns a solve into a blur.

The multi-frame idea, and the proof that it works on real footage, is KoKuToru's de-pixelate — a window dragged around under a pixelation filter, and the text read back out of it. That was done with the cell size measured in GIMP and the window marked by hand in two hundred frames. Everything here is the same idea with nothing left for you to do by hand, plus a solve in place of sampling cell centres, so it also works on mosaics made by averaging.