Model Details
GFPGAN restores faces in damaged photographs. Send one image and every detected face comes back reconstructed, the rest of the picture enhanced alongside it, at twice the input's width and height or more. It is a blind restoration model — no prompt, no description of what went wrong — so it handles the mixed blur, noise, compression and scanning damage of real photographs as well as the smeared faces image generators produce. Because the background is enhanced too, you get a better version of the whole photo, not a sharpened face crop pasted onto an untouched original.
## Best for - Rescuing old, faded or scratched family photos after scanning - Sharpening a blurry, small or heavily compressed portrait - Repairing distorted or smeared faces in AI-generated images - Cleaning up a whole scanned scene — face, clothing and background together - Enlarging a small portrait while its facial detail is rebuilt
## Choose another model when - You need per-request control over the restoration. The identity-versus-quality blend is fixed and every detected face is always restored — `sczhou/codeformer` exposes `fidelity` and `only_center_face` for those two jobs. - You want real added detail past 2x. This model adds none beyond 2x, and `scale` cannot lift that ceiling. Use a dedicated upscaler such as `nightmareai/real-esrgan-upscaler` instead. - The picture has no face in it. The run still succeeds and is still billed, returning a plain upscale — reach for an upscaler instead.
## Tips - Leave `version` at `v1.4` unless the result disappoints: it gives more detail and better identity than `v1.3`, which is gentler on very low-quality input; `v1.2` is sharper but can look unnatural. - Send the most degraded copy you have, not one you already sharpened — there is little to rebuild in an already-clean studio portrait. - Leave `scale` at `2`: it resizes off what went into restoration, not the result, so `1` returns a smaller image than the default and nothing returns more than the default.
## Limitations - Very large uploads can exhaust GPU memory, because the whole frame is enhanced untiled in one pass. - Every result is a PNG with no compression control, and file size grows with the square of the resulting dimensions: a 4 MP photo already returns roughly a 14 MB file at the default `scale`.
To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";
const result = await modelrunner.subscribe("tencentarc/gfpgan", { input: { image: "https://media.modelrunner.ai/rBY4CCSIeEMxJi5LFGxFn.jpeg", version: "v1.4", scale: 2, }, }); ```


