Face Enhancer Image API Documentation

Face Enhancer Image API Documentation

Playground

Try it on WaveSpeedAI!

Restore and sharpen faces in any photo — recover natural detail in blurry, compressed or low-quality portraits in seconds. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Face Enhancer restores and sharpens faces in photos. It finds the faces in your image, recovers natural detail in eyes, skin, hair and teeth, and blends each restored face back seamlessly — the rest of the image stays exactly as it was.


Why Choose This?

  • Automatic face detection Up to three of the largest faces in the image are enhanced; no masks or manual selection needed.

  • Natural restoration Recovers detail lost to blur, compression and low resolution while keeping the person’s identity and expression.

  • Occlusion aware Hands, hair strands and glasses in front of a face are preserved instead of being painted over.

  • Everything else untouched Only the faces change; background, clothing and composition keep the original pixels and resolution.


Parameters

ParameterRequiredDescription
imageYesThe image containing the faces to enhance (upload or public URL).
output_formatNojpeg (default), png or webp.

How to Use

  1. Upload your image — a portrait, group photo or any picture with faces.
  2. Choose the output format (optional).
  3. Run — the enhanced image keeps the original resolution.
  4. Download the result.

Pricing

OperationPrice (USD)
Face enhancement (per image)$0.01

Best Use Cases

  • Old and low-quality photos — Bring back facial detail in scanned, compressed or blurry portraits.
  • AI-generated images — Clean up soft or distorted faces in generated pictures.
  • Social media & profiles — Sharper, clearer faces for avatars and posts.
  • Group photos — Enhance the main faces in one pass.

Notes

  • Up to 3 faces are enhanced per image — the largest ones.
  • Output resolution equals input resolution; very small faces gain less detail than large ones.
  • Works best on real human faces; illustrated or anime faces may not improve.
  • Ensure you have permission to use all 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
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-The image containing the faces to enhance.
output_formatstringNojpegjpeg, png, webpThe format of the output image.
enable_base64_outputbooleanNofalse-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_modebooleanNofalse-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

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<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.urlsobjectObject containing related API endpoints
data.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.