Face Enhancer Image API Documentation
Playground
Try it on WaveSpeedAI!WaveSpeedAI Image Face Enhancer restores and sharpens faces in photos, recovering natural facial detail from blurry, compressed, or low-quality portraits for photo restoration, portrait enhancement, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Image Face Enhancer restores and sharpens faces in photos while preserving the surrounding image. It automatically detects the most prominent faces, recovers details in areas such as eyes, skin, hair, and teeth, and blends the enhanced regions back into the original image.
The model is designed for portraits, group photos, compressed images, old photographs, and AI-generated images where facial detail needs improvement without applying a full-image restoration pass.
Why Choose This?
-
Automatic face detection
Detect and enhance up to3of the largest faces in the image without masks or manual face selection. -
Natural face restoration
Recover facial detail lost to blur, compression, or low resolution while preserving the person’s overall appearance and expression. -
Occlusion-aware enhancement
Preserve foreground elements such as hands, hair strands, and glasses when they overlap the face. -
Localized processing
Focus restoration on detected faces while keeping the surrounding background, clothing, and composition unchanged. -
Original-resolution output
Return the enhanced image at the same resolution as the source. -
Multiple output formats
Export the result asjpeg,png, orwebp.
Parameters
| Parameter | Required | Description |
|---|---|---|
| image | Yes | Input image containing the faces to enhance. Supports upload or public URL. |
| output_format | No | Output image format: jpeg, png, or webp. Default: jpeg. |
How to Use
- Upload an image — Provide a portrait, group photo, or other image containing visible faces.
- Choose output format optional — Select
jpeg,png, orwebp. - Submit — Run the face-enhancement process.
- Retrieve the result — Download the enhanced image at the original resolution.
Pricing
Pricing is fixed at $0.01 per image.
| Output | Cost |
|---|---|
| One enhanced image | $0.01 |
output_format does not add a separate charge.
Best Use Cases
- Old and low-quality photos — Restore facial detail in scanned, compressed, soft, or blurry portraits.
- AI-generated images — Improve soft or distorted faces in generated artwork and photography.
- Portrait enhancement — Sharpen facial details while preserving the surrounding image.
- Social media and profile images — Improve face clarity for avatars, posts, and promotional imagery.
- Group photos — Enhance up to three prominent faces in a single image.
- E-commerce and marketing images — Improve facial detail in people-focused campaign and product imagery.
Pro Tips
- Use images where the important faces are reasonably visible and large enough for restoration.
- The model prioritizes the largest detected faces when more than three faces are present.
- Very small, heavily blurred, or strongly occluded faces may show less improvement.
- Choose
pngwhen you want to avoid additional lossy compression. - For group photos, make sure the faces you care about are among the most prominent in the frame.
- Image Face Enhancer works best when facial structure is still recognizable in the source image.
Notes
imageis required.output_formatdefaults tojpeg.- Supported output formats are
jpeg,png, andwebp. - Up to
3faces are enhanced per image, prioritizing the largest detected faces. - Output resolution matches the input image resolution.
- The model primarily targets real human faces; illustrated or anime-style faces may show limited improvement.
- Make sure you have permission to use uploaded images and likenesses.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"output_format": "jpeg"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/face-enhancer/image" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| image | string | Yes | - | The image containing the faces to enhance. | |
| output_format | string | No | jpeg | jpeg, png, webp | The format of the output image. |
| enable_base64_output | boolean | No | false | - | If set to `true`, the prediction's `output` strings are returned as **naked base64** (no `data:<mime>;base64,` prefix). When `false` (default), outputs are returned as URLs pointing to our CDN. |
| enable_sync_mode | boolean | No | false | - | If set to `true`, the request attempts to wait for the generated result and return outputs in the same response. If the result is not ready within the sync wait window, the API can return a timeout body while the task continues processing. This option is only available via the API and is supported only by some models. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |