Retouch a portrait

The face finder travels to your device when you ask for it; the photograph never travels the other way, and every edit happens in this tab.

Skin, blemishes and flash red-eye, worked one layer at a time inside a region the face finder can place for you or you can drag yourself. Every control opens at zero and every one of them is capped.

Load a portrait. Landmarks are found locally. Nothing is written until you export.

JPG, PNG, WebP, AVIF, BMP and ICO decode here, and TIFF where your browser supports it. A HEIC from a phone pulls a decoder the first time it meets one.

Nothing open to test it with?

The gate, which is the whole argument

Every layer here is confined to a working region — an ellipse, put on the face by the detector or dragged there by you — and inside it a gate decides which pixels are skin. The gate samples the tones actually present rather than comparing against a fixed table, which matters more than it sounds: the published chrominance ranges for skin were derived from light skin, and a tool built on them simply declines to include most of a dark face in its own mask. Sampling the median asks what this face is, and behaves identically at every point on the range. You can see the result of that decision before you commit to it: Show what it calls skin draws the mask over the picture and prints the share of the region it covers as a figure beside the control.

The layers, at two hundred per cent

200%
A drawn stand-in, not a person. Turn a layer off, or hold the compare control, and the marks it removes come back — the same three edits the tool makes, on the same terms.

What the tool does to a face

Three layers ship, and each of them is a different kind of work. The skin layer splits the picture into a band that carries tone and a band that carries texture, evens the first and reduces the second by a percentage you set. The heal brush replaces a spot with skin sampled from the ring around it, matched to the tone of where it lands. The red-eye layer finds pupils that have gone red under a flash and takes the red out of them without touching the reflection of the flash itself.

Every layer is confined to that working region, and the gate described above the tool decides which pixels inside it are skin. Press Show what it calls skin and the mask is drawn over the picture with the share of the region it covers printed beside the control.

Every tonal operation on skin runs on luminance with the region’s colour held exactly as it was found. That is the one rule this build treats as non-negotiable, and there is a gate in the build that measures it rather than a comment that asserts it. Two layers sit outside that sentence on purpose and are named rather than hidden: red-eye replaces the colour of a pupil, which is the whole operation, and the teeth layer moves colour because taking a cast off a tooth is a colour operation by definition. Both say so where their controls are, and neither one touches skin.

The order to work in

Settle the region first. Press Find the face and it lands on the face by itself with the eyes and the mouth cut out of it, or drag it over the face and set its width and height by hand; either way press Show what it calls skin before anything else — if the mask is covering the hairline or leaving half a cheek out, no setting further down the rail will behave the way you expect. Widen the tone tolerance until the mask covers the face and stops at its edge.

Then the discrete marks, because a spot removed now leaves no low-frequency shadow for the smoothing pass to spread into a soft grey patch. Take the brush, size it so the ring is a little larger than the mark, and click once. Square brackets resize it; the last stroke is undoable; thirty of them are kept.

Red-eye next, since it is colour work and should be judged against luminance that has not yet moved. Then skin, last, so it settles over the healed areas rather than under them. Then hold the compare control and look at what you have done at 200 per cent before you export — the figure beside it says how far the result has moved from the source, measured where something actually changed.

The numbers this build runs on
Face finder
YuNet, 229,738 bytes, MIT
What it costs to run
≈16 ms, single-threaded WASM
What it returns
a box, a score and five points per face
Split scale
region width ÷ 220
Skin texture reduction
0 to 80%, default 25%
Texture surviving at the default
75%
Working copy for the screen
2560 px long edge
Copy a slider drag is judged on
820 px long edge
Heal strokes kept
30
Chroma drift allowed by the build gate
1.5° hue, 3% chroma
Export
full resolution, JPG at 95 or PNG

Files it opens

Two things are fetched on demand and nothing else is. The face finder is one: 229,738 bytes from cdn.pictureeditor.com, the first time you press the control that names that figure, cached afterwards so a second visit makes no request at all and can run offline. The WebAssembly runtime that executes it is 13.3 MB and comes from this domain; it is fetched at the same moment and cached the same way. Both travel to you. Nothing about the photograph travels the other way, and the rail carries a control that deletes the model from this browser again.

JPG, PNG, WebP, AVIF, BMP and ICO all go through the browser’s own decoder, and TIFF does where the browser has a decoder for it, which today means Safari. HEIC — what a recent iPhone writes unless it has been told otherwise, and therefore a large share of the portraits that arrive here — needs a WebAssembly decoder that is fetched the first time one appears and is absent from the page until then.

Orientation is settled before anything else happens. A two-pixel test image is decoded with the orientation hint switched off, and one pixel is read to find out whether this browser honoured it; the rotation is applied by hand only if the browser did not. A sideways portrait is not a cosmetic problem here — it is a face the gate has to find in the wrong place.

Past 32 megapixels, 16 on iOS, you are offered a lighter working copy and asked, because that is a choice rather than an error. Past 100 megapixels, 40 on iOS, or 120 MB, the file is declined with the figure that caused it. A JPEG carrying four colour components is CMYK and is converted to sRGB on the way in; the working space is sRGB at eight bits, so a Display P3 source is flattened into it and comes back flattened.

What comes back out

Two formats leave here, and they are not interchangeable. JPG at quality 95 is the default because a retouched portrait is a photograph, and continuous tone with grain in it is exactly what that encoder was designed around. PNG is lossless, which sounds like the careful choice and is usually the wrong one: lossless compression has almost nothing to exploit in skin, so the same frame comes out several times heavier for a difference you will not find by looking. Take PNG when this file is an intermediate that will be re-encoded later, and JPG when it is the thing you are sending.

What a 24-megapixel portrait costs on the way out
JPG at 95
roughly 8 to 12 MB
PNG
roughly 40 to 70 MB
Pixel dimensions
identical to the source
Colour written
sRGB, 8 bits a channel
Camera metadata kept
none

That last row is a real loss and not a privacy feature dressed up as one. The export is drawn through a canvas, and a canvas has no metadata block at all, so the file that lands carries no camera, no lens, no exposure, no capture time — and no orientation tag, which is why the rotation is settled into the pixels on the way in rather than described in a header on the way out. For a photograph of a person there is a case that this is the better default, since the block that goes is also the block that would have held the location. It is still a loss, it is not currently optional, and you should know about it before you overwrite an original.

What it will not do

Two limits are worth knowing before you spend twenty minutes on a picture, and one decision is worth knowing before you go looking for a control that is not here.

  • The face finder finds faces; it does not trace features. What comes back is a box and five points — both eyes, the nose tip, the two mouth corners — so the region is an ellipse over the box and the eyes and mouth are excluded as circles rather than as outlines. A brow, an eyelid and a lip line would need a 468-point mesh, and that is not in this release. On a group portrait the region goes on the largest face; per-face layer stacks are not here yet.
  • Smoothing a photograph taken in low light removes grain along with pore texture. Sensor noise sits in the same band as skin detail and nothing at this scale distinguishes them. On a noisy source, work at a low setting and heal the marks individually, or accept that the two go together.
  • Nothing here reshapes anybody. No jaw slimming, no eye enlargement, no nose narrowing, no waist and no height. That is a decision rather than a gap in the roadmap, and it has a page of its own.

Every control on this page is capped, and the caps are not a limitation we intend to lift. A retouch that removes the lines, the pores and the shadow under an eye does not produce a better photograph of someone — it produces a photograph of someone else. This tool is built to be used at settings you would be willing to disclose.

What people ask

Why does the skin slider stop at 80 per cent?
Because past that there is nothing left to reduce that was worth keeping. The control removes a percentage of the high-frequency band, which is where pore structure, fine hair and the grain of the sensor all live. At 25 per cent three-quarters of it survives and the cheek still reads as skin at full zoom. At 80 per cent it reads as a surface. There is no setting that removes all of it, and the ceiling is not a licensing tier — it is the whole position this site takes.
How does it know where the face is?
Two ways, and you choose. Press Find the face and a 224 KB detector — 229,738 bytes exactly, MIT-licensed — is downloaded once from the network's own CDN and run here, on your processor, in about 16 milliseconds; it returns a box and five points per face, the region is placed on the box, and discs on the points keep the eyes and the mouth out of it. Decline the download and you drag the region over the face yourself, which is what this tool did for its whole first release and still does exactly as well. Either way a chroma-and-luminance gate inside the region decides which pixels are skin, sampled from the tones actually present rather than from a published table, so it behaves the same way on every skin tone. Press Show what it calls skin and the region is painted in indigo at 40 per cent, which is the only way to know whether the tool agrees with you before you trust it.
What does the face finder send, and what does it keep?
Nothing, and nothing. The traffic goes one way: the model file comes down from cdn.pictureeditor.com the first time you ask for it and is cached in this browser, so the second time there is no request at all. Your photograph is never uploaded, and what the detector produces — a rectangle and five coordinates — is held in this tab's memory and discarded with it. No embedding is computed, nothing is compared against anything, and there is a control in the rail that deletes the cached model from your device.
Can it lighten skin by accident?
No, and that is enforced rather than intended. Every tonal operation on skin converts to luminance and chrominance, moves luminance, and writes the original chrominance back unchanged; the new luminance is also clamped into the window where the inverse conversion cannot clip a channel, because clipping is the mechanism by which a brightening control quietly desaturates a deep skin tone. A build gate runs every layer at maximum over nine reference tones and fails if mean hue angle moves more than 1.5 degrees or mean chroma more than 3 per cent.
The preview looks right. Will the saved file look the same?
Yes, because the saved file is not the preview. Everything you set is stored as a list of typed edits in coordinates that are fractions of the frame rather than pixel counts — a heal stroke at 0.41 across and 0.40 down, a split scale expressed as a proportion of the region width. Export hands that identical list to the identical function against the full-size pixels. Nothing is upscaled and nothing is re-derived.
It smoothed the grain out of a photograph taken indoors. Is that a fault?
It is a limit, and a real one. Sensor noise at high ISO occupies the same frequency band as pore texture and has no property that separates it from skin at the scale this works on. Below roughly 1/60 at ISO 3200 the two are the same signal, so the smoothing layer takes both. Working at a lower setting and healing the individual marks is the way through it, which is slower and is what a retoucher does.
Is this suitable for a passport or visa photograph?
Almost certainly not. Identity documents are checked against a face, and most issuing authorities treat a materially altered photograph as grounds for rejection — removing a mole or evening a complexion can be exactly the alteration they mean. Background colour, pixel dimensions and file weight are the requirements those forms actually specify, and none of them is skin work.

Read next