Video Colorizer API Documentation
Playground
Try it on WaveSpeedAI!Video Colorizer restores natural color to black-and-white, monochrome or faded footage while keeping every subject, the framing and the motion exactly as they are. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Video Colorizer restores natural, believable color to grayscale, monochrome, or heavily faded video while preserving the original subjects, framing, and motion. Colors are inferred from the footage automatically, and you can optionally use a prompt to guide specific color choices.
Why Choose This?
-
Video colorization workflow
Add natural color to black-and-white, monochrome, or desaturated footage. -
Content-preserving enhancement
Preserve the original subject identity, framing, background geometry, and motion while adding color. -
Automatic color inference
Let the model infer realistic colors for skin tones, clothing, foliage, sky, water, buildings, and lighting. -
Prompt-guided color control
Usepromptto specify colors for important objects, clothing, environments, or lighting. -
Multiple output resolutions
Choose480p,720p, or1080pwhile preserving the original aspect ratio. -
Seed support
Set a seed when reproducible colorization results are needed.
Parameters
| Parameter | Required | Description |
|---|---|---|
| video | Yes | Grayscale, monochrome, faded, or desaturated input video URL or uploaded video. Up to 120 seconds is processed. |
| prompt | No | Optional color guidance. Name objects and their desired colors, such as green grass, blue sky, or red jacket. Leave empty to infer colors automatically. |
| target_resolution | No | Output resolution: 480p, 720p, or 1080p. Default: 720p. Aspect ratio is preserved. |
| seed | No | Random seed for reproducible results. |
How to Use
- Upload a video — Provide the grayscale, monochrome, faded, or desaturated footage you want to colorize.
- Add a prompt optional — Describe specific colors when you want to guide the result.
- Choose target resolution — Select
480p,720p, or1080p. - Set seed optional — Use a fixed seed when reproducibility is needed.
- Submit — Generate the colorized video output.
Pricing
Pricing is based on input video duration and selected target_resolution.
Billed duration is rounded up to the next whole second, with a minimum billed duration of 3 seconds and a maximum billed duration of 120 seconds.
| Output Resolution | Per 5s | Per second |
|---|---|---|
| 480p | $0.10 | $0.02 |
| 720p | $0.20 | $0.04 |
| 1080p | $0.50 | $0.10 |
Example Costs
| Input Duration | Billed Duration | 480p | 720p | 1080p |
|---|---|---|---|---|
| 1s | 3s | $0.06 | $0.12 | $0.30 |
| 3s | 3s | $0.06 | $0.12 | $0.30 |
| 5s | 5s | $0.10 | $0.20 | $0.50 |
| 10s | 10s | $0.20 | $0.40 | $1.00 |
| 60s | 60s | $1.20 | $2.40 | $6.00 |
| 120s | 120s | $2.40 | $4.80 | $12.00 |
prompt and seed do not add separate charges.
Best Use Cases
- Black-and-white video colorization — Add color to monochrome footage while preserving the original video structure.
- Old footage restoration — Restore believable colors to faded or archival-looking clips.
- Creative enhancement — Apply guided color direction to stylized or desaturated videos.
- Social media assets — Prepare colorized clips for posts, reels, ads, and short-form content.
- Historical and documentary workflows — Colorize older footage for presentation and storytelling.
- Restoration preprocessing — Use colorization after basic cleanup or restoration when the source is heavily degraded.
Pro Tips
- Use
promptwhen specific colors matter, such asred jacket,blue sky, orwarm golden street lights. - Leave
promptempty when you want the model to infer natural colors automatically. - Name both the object and the color for stronger control.
- Use clean source footage when possible; this endpoint colorizes video and is not primarily a denoiser.
- Keep the same
seedwhen you want to reproduce a colorization result. - Use
480pfor quick tests and1080pwhen higher-resolution output is needed. - For heavily damaged sources, restore or clean the video before colorization.
Limits and Performance
- Maximum processed video length per job:
120seconds. - Input beyond
120seconds is not processed or billed. - Processing time can vary by resolution and video content.
- Higher output resolutions generally take longer to process.
Notes
videois required.target_resolutiondefaults to720p.- Aspect ratio is preserved.
- Billed duration is rounded up and clamped to
3–120seconds. - Very short videos are billed as
3seconds. - This endpoint adds or restores color; it does not intentionally change subject identity, framing, or motion.
Related Models
- Video Restorer — Restore damaged footage by reducing compression artifacts or improving soft-focus video.
- Video Colorizer — Add or restore color in video footage for restoration and creative enhancement workflows.
- Video Cleaner — Clean up video noise, artifacts, and visual imperfections for clearer output.
- Video Relighter — Adjust or improve video lighting while preserving the original scene and motion.
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'
{
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"target_resolution": "720p"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/video-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="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 |
|---|---|---|---|---|---|
| video | string | Yes | - | The grayscale or desaturated video to colorize; up to 2 minutes is processed (longer input is truncated). | |
| prompt | string | No | - | Optional. Describe the colors you want, naming each thing and its color (for example "green grass, blue sky, a red jacket"). If omitted, the colors are inferred from the footage automatically. | |
| target_resolution | string | No | 720p | 480p, 720p, 1080p | Output resolution. The input aspect ratio is preserved; output is never larger than the input. |
| seed | integer | No | - | - | The seed for random number generation. Omit for a random seed. |
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 |