Retouch a portrait

You mark the area to work on yourself, and every edit happens in this tab; no frame is transmitted.

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

Drag a portrait onto this panel, or press to pick oneJPG, PNG, WebP, AVIF, TIFF, BMP and ICO decode here. A HEIC from a phone pulls a decoder the first time it meets one.

Nothing open to test it with?

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.

All three are confined to a working region — an ellipse you drag over the face — 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.

Every tonal operation 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.

The order to work in

Place the region first. Drag it over the face, set its width and height, and 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
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

JPG, PNG, WebP, AVIF, TIFF, BMP and ICO all go through the browser’s own decoder. 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.

  • There is no face detection in this release. The landmark path is built and the mask consumes its output, but the two model files it needs are not part of this build, so the region is placed by hand. On a group portrait that means one face at a time; 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.
There is no face detection. How does it know where the face is?
It does not. You tell it, by dragging the working region over the face and setting its width and height. Inside that region a chroma-and-luminance gate then 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.
Can it lighten skin by accident?
No, and that is enforced rather than intended. Every tonal operation 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