Video Restorer API Documentation

Video Restorer API Documentation

Playground

Try it on WaveSpeedAI!

Video Restorer cleans up damaged footage: strip compression artifacts from low-bitrate video or bring out-of-focus footage back into sharp focus, keeping the subject, framing and motion exactly as they are. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Video Restorer improves damaged footage while preserving the original content, framing, and motion. It supports two restoration modes: decompress for low-bitrate compression artifacts and deblur for soft or out-of-focus footage.

Use it to clean up blocky, smeared, or blurry videos without changing the scene itself.


Why Choose This?

  • Video restoration workflow
    Restore damaged footage while keeping the original subject, timing, framing, and motion.

  • Compression artifact removal
    Use decompress to reduce macroblocking, ringing, banding, chroma bleed, and other low-bitrate artifacts.

  • Focus recovery
    Use deblur to sharpen soft or out-of-focus footage.

  • Prompt-guided restoration
    Optionally describe the scene to help guide the restoration process.

  • Multiple output resolutions
    Choose 480p, 720p, or 1080p while preserving the original aspect ratio.

  • Seed support
    Set a seed when reproducible restoration results are needed.


Parameters

ParameterRequiredDescription
videoYesInput video URL or uploaded video. Up to 120 seconds is processed.
modeNoRestoration mode: decompress or deblur. Default: decompress.
promptNoShort description of the scene. Leave empty for generic restoration.
target_resolutionNoOutput resolution: 480p, 720p, or 1080p. Default: 720p. Aspect ratio is preserved.
seedNoRandom seed for reproducible results.

How to Use

  1. Upload a video — Provide the footage you want to restore.
  2. Choose restoration mode — Use decompress for compression artifacts or deblur for soft-focus footage.
  3. Add a prompt optional — Describe the scene when extra context may help restoration.
  4. Choose target resolution — Select 480p, 720p, or 1080p.
  5. Set seed optional — Use a fixed seed when reproducibility is needed.
  6. Submit — Generate the restored 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 ResolutionPer 5sPer second
480p$0.10$0.02
720p$0.20$0.04
1080p$0.50$0.10

Example Costs

Input DurationBilled Duration480p720p1080p
1s3s$0.06$0.12$0.30
3s3s$0.06$0.12$0.30
5s5s$0.10$0.20$0.50
10s10s$0.20$0.40$1.00
60s60s$1.20$2.40$6.00
120s120s$2.40$4.80$12.00

mode, prompt, and seed do not add separate charges.


Best Use Cases

  • Compression cleanup — Restore footage damaged by low-bitrate encoding, social media downloads, or repeated compression.
  • Soft-focus restoration — Improve videos that look blurry or out of focus.
  • Old phone footage — Clean up older or degraded mobile recordings.
  • Screen recordings — Reduce block artifacts and compression damage from captured video.
  • Social media assets — Improve clips before publishing, editing, or repurposing.
  • Restoration preprocessing — Prepare cleaner footage before additional video enhancement or editing.

Pro Tips

  • Use decompress for blocky footage, smeared colors, banding, ringing, or compression artifacts.
  • Use deblur for footage that is generally soft or out of focus.
  • deblur targets defocus blur, not motion blur.
  • Keep the same seed when you want to reproduce a restoration result.
  • Use a short prompt only when the scene context is useful.
  • This endpoint is designed for restoration, not scene editing or content replacement.
  • For resolution-focused enhancement, run a video upscaler after restoration.

Limits and Performance

  • Maximum processed video length per job: 120 seconds.
  • Input beyond 120 seconds is not processed or billed.
  • Processing time can vary by resolution and video content.
  • Higher output resolutions generally take longer to process.

Notes

  • video is required.
  • mode defaults to decompress.
  • target_resolution defaults to 720p.
  • Aspect ratio is preserved.
  • Billed duration is rounded up and clamped to 3–120 seconds.
  • Very short videos are billed as 3 seconds.
  • This endpoint improves image quality but does not guarantee recovery of details that are fully destroyed.

  • 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",
  "mode": "decompress",
  "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-restorer" \
  -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
videostringYes-The video to restore; up to 2 minutes is processed (longer input is truncated).
modestringNodecompressdecompress, deblurdecompress: remove compression artifacts (macroblocking, ringing, banding, chroma bleed) from low-bitrate footage. deblur: bring soft, out-of-focus footage back into sharp focus (defocus blur only, not motion blur).
promptstringNo-Optional. A short description of what the video shows (for example "a woman walking a dog in a park at sunset"). Helps the model keep the right details; leave empty for a generic restore.
target_resolutionstringNo720p480p, 720p, 1080pOutput resolution. The input aspect ratio is preserved; output is never larger than the input.
seedintegerNo--The seed for random number generation. Omit for a random seed.

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.