Restoring an Old Family Photo, End to End: Face First, Then Colour
A complete in-browser workflow for a scanned family print — neutralise the paper, rebuild the face with GFPGAN (one per run), then colourise with DDColor. Including the part that decides whether you should use the result at all: what 'restore' does and does not recover.
By Novus Stream Solutions Editorial Team · Part of the Browser-local editing workflows topic cluster
You have a scan of a print. Someone's grandmother at about twenty, black and white, and her face is roughly sixty pixels across because the photographer stood too far back. The paper has gone warm and the whole thing is soft.
Two tools now exist that between them handle most of this, and the order they go in is not arbitrary. This is the whole workflow, including the part that decides whether you should use the output at all.
Everything below runs on your device. Nothing is uploaded, which for photographs of living relatives is not a small detail.
Before anything: keep the original scan
Restoration is not a substitute for the file it came from. Every step below produces a new image and none of them improve on the scan as a record — they produce something more pleasant to look at, which is a different thing. Keep the raw scan, name it clearly, and treat the restored version as a derivative.
If you have not scanned the prints yet, the capture is the biggest single lever on the result and no editing recovers a bad one. That is its own job, covered in bringing old, faded family photos back to life.
Step 1 — neutralise the paper
If the scan is sepia-toned or the paper has yellowed, deal with that before anything else touches it.
The reason is specific: a colouriser reads sepia toning as image content rather than as a property of the paper. It sees a warm cast and treats it as information about the scene, and the colours it then predicts are built on top of a mistake. Converting to neutral grayscale first removes the false signal.
The grayscale converter does a true luminance-based conversion, which is what you want here — not a desaturation that leaves tonal weirdness behind. If your scan is already neutral black and white, skip this.
Step 2 — restore the face
Open face restore and drop the image in.
What happens mechanically: the model is fixed at 512×512 and works on one aligned face, so the tool runs a landmark detector, takes the first face it returns, crops it with padding for hair and chin, restores that crop, and feather-pastes it back into the original image.
That is one face per run, and it is the thing to know before you point this at a family group. Everyone else in the frame comes back exactly as they went in, and the run costs the same whether the photo has one face in it or five — the face restore help page records about 6.7 seconds on the CPU path. To restore a whole group, crop each person out of the scan and run them one at a time. If no face is detected at all, the whole image is processed as a single crop instead; the result is still an improvement, just not a face-specific one.
The model is GFPGAN v1.4 and it is a 340 MB one-time download, cached afterwards, and only fetched if you allow it. The readiness panel tells you what your device will actually do with it before anything is fetched.
You can decline. If you do, a classical bilateral + CLAHE + unsharp pipeline runs instantly instead. It evens out and sharpens what is already there and it invents nothing — which, as the next section explains, is sometimes exactly what you want.
Step 3 — understand what "restore" just did
This is the part to read before you use the output anywhere that matters, and it is more important than any of the mechanics above.
GFPGAN does not recover the original pixels. They are gone. It generates a plausible face consistent with what remains, using a prior learned from a very large number of other faces. That is a fundamentally different operation from sharpening or denoising, which only rearrange information already present.
On a soft or small photo the result usually looks like the person, because enough structure survived to constrain what the model could produce. On a severely degraded photo it will still produce a crisp, confident face — and that face may differ from the real person in ways you cannot detect by looking at the output. There is nothing in a restored image that flags which parts were reconstructed.
So the honest boundary is:
- Right for a print you want to hang on a wall. The face reads as the person, the detail is plausible, and the purpose is to look at it.
- Wrong for identification. It is not evidence, and it should never be used to decide who someone is.
If the second case is anywhere near your purpose, decline the model download and use the classical pipeline. It will give you less, and everything it gives you was really in the photograph.
Step 4 — colour, after the restore and not before
Now open colorize.
The order matters, and there is a concrete reason for it. DDColor predicts only the colour channels and preserves the original luminance exactly. The luminance — the detail, the grain, the tonal range — passes through untouched. So whatever detail you recovered in step 2 is what the colour gets laid over. Colourise first and you would be predicting colour for a face you were about to replace, then throwing that work away.
That same property is why a colourised scan still prints like the black-and-white original: the grain and tonal range are the source's own, not the model's.
Realistic mode runs DDColor, a roughly 460 MB one-time download, gated behind the same consent prompt as face restore. If you would rather not, the instant palette styles — vintage, sepia, saturated and pastel — apply with no download at all. They are a look rather than a prediction, and for some photographs that is the more honest choice.
Use the built-in before/after slider on the result. Comparing against the original is how you catch the failures in the next section.
Step 5 — check the colours you can actually know
Colourisation produces confident, attractive output that can be simply wrong, and nothing in the image signals which parts to doubt. The photograph never recorded colour; the model predicts what is statistically likely.
What it is reliably good at: skin, hair, foliage and sky. These are consistent across the enormous number of photographs the model learned from, so an outdoor portrait usually comes back convincing.
What it cannot know: clothing, paint, vehicles, flags and signage could have been anything. Clothing in particular is a coin flip. If a specific colour matters — a uniform, a regiment, a livery — check a written source and correct it by hand rather than trusting the prediction.
And if the image is going anywhere public, memorial or archival, label it as a colourised interpretation. Whoever sees it next has no way to tell.
Step 6 — size it, only if you need to
If the print is destined for a frame and the scan is too small, upscale it — last, after the corrections, not before. If the photograph is soft overall rather than just in the face, deblur addresses that specifically.
Neither is a required step. A well-scanned print at a sensible resolution often needs neither.
The short version
- Keep the raw scan. Everything else is a derivative.
- Convert a sepia or yellowed scan to neutral grayscale first.
- Restore the face — one per run, so crop a group shot per person — and decide whether a generated face is appropriate for your purpose before you accept it.
- Colourise after restoring, never before; the luminance you recovered is what carries through.
- Correct the colours that are knowable, and label the result as an interpretation.
- Upscale last, and only if the print needs the size.
None of it touches the internet.
Applies to NSS Background Remover v2.4.0 — the release that was current when this article was published.
Was this article helpful?
Your answer is saved in this browser only. This control makes no network request and does not send the answer to an NSS feedback endpoint.