Video Cleaner API Documentation

Video Cleaner API Documentation

Playground

Try it on WaveSpeedAI!

Video Cleaner removes people, vehicles and other moving subjects from a video and rebuilds the background behind them, producing a clean plate of the same shot with the camera motion intact. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Video Cleaner removes people, pedestrians, vehicles, and other moving subjects from a video, then rebuilds the background behind them. It preserves the source video’s camera movement, static scene structure, lighting, framing, and duration while creating a cleaner plate for editing, compositing, or restoration workflows.


Why Choose This?

  • Moving-subject removal
    Remove people, crowds, cars, bikes, and other dynamic elements from video footage.

  • Background reconstruction
    Rebuild the background where moving subjects were removed, including architecture, ground details, foliage, and static scene elements.

  • Clean plate generation
    Create cleaner footage for compositing, advertising, restoration, or post-production workflows.

  • Prompt-guided cleanup
    Use prompt to name extra objects that should also be removed.

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

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


Parameters

ParameterRequiredDescription
videoYesInput video URL or uploaded video. Up to 120 seconds is processed.
promptNoOptional comma-separated list of extra objects to remove, such as bicycle, dog, handlebars.
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 clean.
  2. Add a prompt optional — Name extra objects that should also disappear.
  3. Choose target resolution — Select 480p, 720p, or 1080p.
  4. Set seed optional — Use a fixed seed when reproducibility is needed.
  5. Submit — Generate the cleaned 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

prompt and seed do not add separate charges.


Best Use Cases

  • Clean plate creation — Remove moving subjects and generate a cleaner background plate.
  • People and crowd removal — Remove pedestrians, crowds, or foreground people from footage.
  • Vehicle removal — Remove cars, bikes, scooters, or other moving vehicles.
  • Advertising workflows — Create clean plates for product compositing or campaign production.
  • Post-production cleanup — Remove unwanted moving elements from short clips.
  • Scene preparation — Prepare cleaner footage before relighting, colorization, restoration, or compositing.

Pro Tips

  • Use footage where the background is visible around the moving subject.
  • Large foreground subjects that cover most of the frame may leave too little background to reconstruct.
  • Use prompt when a specific object remains after the first cleanup pass.
  • Name objects clearly, such as bicycle, dog, car, or person in the background.
  • Use clean source footage with stable motion when possible.
  • Keep the same seed when you want to reproduce a result.
  • For advertising plates, clean the clip first, then composite the product onto the result.

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.
  • 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 is designed to remove moving subjects and rebuild visible background regions. It is not intended for changing the scene content or extending the video.

  • 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-cleaner" \
  -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 clean. Works best when the subjects to remove leave enough background visible around them; up to 2 minutes is processed (longer input is truncated).
promptstringNo-Optional. Extra objects that must also disappear, comma-separated (for example "bicycle, dog"). People and vehicles are removed by default.
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.