AI Photo Colorizer

AI Photo Colorizer

Playground

Try it on WaveSpeedAI!

AI Photo Colorizer automatically adds color to black-and-white photos. Upload a grayscale image and get a colorized result. Ready-to-use REST inference API, no coldstarts, affordable pricing.

Features

Bring old black-and-white photos back to life. AI Photo Colorizer analyzes the content of your image and applies realistic, natural-looking color — breathing new life into vintage portraits, historical photographs, and classic film stills.

Upload a black-and-white photo and watch history come alive in full color.


Why You’ll Love It

  • Realistic, natural colorization AI intelligently infers colors based on scene content — skin tones, foliage, skies, and fabrics all come out looking believably true to life.

  • Works on any black-and-white image Portraits, landscapes, street scenes, archival photos — the model handles a wide range of subjects with impressive accuracy.

  • One-click simplicity Upload a photo, hit Run, done. No manual selections, no color picking, no editing skills required.

  • Instantly shareable results Download your colorized photo and share it straight away.


How to Use

  1. Upload your black-and-white image — a clear, well-preserved photo gives the best results.
  2. Hit Run — AI colorizes the image in seconds.
  3. Download and share your newly colorized photo.

Pricing

Just $0.05 per image.


Best Use Cases

  • Family history — Colorize old portraits of grandparents and ancestors for a deeply personal and emotional result.
  • Historical photography — Give archival and documentary images a vivid new perspective.
  • Creative projects — Add color to vintage-style art, film stills, or classic editorial photography.
  • Restoration work — Complement photo restoration workflows with automatic colorization.

Pro Tips

  • High-resolution scans of original photos produce the most detailed and accurate colorization.
  • Photos with clear subjects and good contrast colorize better than faded or heavily damaged images.
  • For best skin tone results, use portraits with visible facial detail and even lighting.
  • Try colorizing the same photo multiple times — subtle variations can appear across runs.

Notes

  • Image is the only required field.
  • Ensure image URLs are publicly accessible if using a link rather than a direct upload.
  • Please ensure your content complies with WaveSpeed AI’s usage policies.

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"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/ai-photo-colorizer" \
  -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=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 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) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-The URL of the input image.

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.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
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.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
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.