Video Relighter API Documentation

Video Relighter API Documentation

Playground

Try it on WaveSpeedAI!

Video Relighter re-lights outdoor footage to a chosen lighting preset and sun direction, or re-renders the same shot at night, keeping composition, camera movement and subject motion intact. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Video Relighter changes the lighting of a video while preserving the original composition, camera movement, subject motion, and scene structure. Choose a daylight or night lighting preset, set the sun direction when applicable, and generate a relit version of the same shot without prompt writing.


Why Choose This?

  • Video relighting workflow
    Change the lighting of an existing video while keeping the original shot structure intact.

  • Daylight and night presets
    Choose from daylight looks such as hard_sunlight, golden_hour, or overcast, or night styles such as moonlight, street_lights, or city_glow.

  • Sun direction control
    Set where the sun comes from for daylight presets using sun_direction.

  • Outdoor scene enhancement
    Relight landscapes, streets, drone footage, outdoor people shots, and other exterior scenes.

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

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


Parameters

ParameterRequiredDescription
videoYesInput video URL or uploaded video. Up to 120 seconds is processed.
lightingNoLighting preset. Supports daylight and night presets. Default: hard_sunlight.
sun_directionNoSun direction for daylight presets. Options include front, front-right, right, back-right, behind, back-left, left, and front-left. Default: right. Ignored by night presets.
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 outdoor video you want to relight.
  2. Choose a lighting preset — Select a daylight look or night style.
  3. Set sun direction optional — Choose the sun direction for daylight presets.
  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 relit 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

lighting, sun_direction, and seed do not add separate charges.


Best Use Cases

  • Outdoor video relighting — Change the lighting direction, mood, or time-of-day feel of exterior footage.
  • Golden-hour looks — Rework daytime footage with warmer, lower-angle lighting.
  • Night-style conversion — Re-render the same shot with moonlight, city glow, street lights, or blue-hour lighting.
  • Drone and landscape footage — Adjust sky, clouds, shadows, and sunlight direction in outdoor scenes.
  • Creative enhancement — Test different lighting moods without reshooting.
  • Previsualization and post-production — Explore lighting directions before final editing or compositing.

Pro Tips

  • Use outdoor footage for best results.
  • Choose a lighting preset that clearly differs from the original footage for a stronger visible effect.
  • Use sun_direction only with daylight presets.
  • Night presets ignore sun_direction.
  • backlight and hazy_backlight work best when sun_direction is set to behind.
  • Keep the same seed when you want to reproduce a result.
  • This endpoint relights the scene; it is not intended for object removal, colorization, or video restoration.

Limits and Performance

  • Maximum processed video length per job: 120 seconds.
  • Input beyond 120 seconds is not processed or billed.
  • Best suited for outdoor scenes such as landscapes, streets, drone footage, and people outdoors.
  • Indoor footage is not supported for relight mode.
  • Processing time can vary by resolution and video content.
  • Higher output resolutions generally take longer to process.

Notes

  • video is required.
  • lighting defaults to hard_sunlight.
  • sun_direction defaults to right.
  • 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.
  • Night presets ignore sun_direction.

  • 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",
  "lighting": "hard_sunlight",
  "sun_direction": "right",
  "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-relighter" \
  -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 relight. Outdoor footage works best; up to 2 minutes is processed (longer input is truncated).
lightingstringNohard_sunlighthard_sunlight, noon_sun, low_sun, golden_hour, soft_daylight, warm_afternoon, cool_daylight, overcast, backlight, hazy_backlight, moonlight, starry, street_lights, city_glow, blue_hourLighting preset. Daylight presets (hard_sunlight, noon_sun, low_sun, golden_hour, soft_daylight, warm_afternoon, cool_daylight, overcast, backlight, hazy_backlight) re-light the scene to the chosen sun; night presets (moonlight, starry, street_lights, city_glow, blue_hour) re-render the same shot at night.
sun_directionstringNorightfront, front-right, right, back-right, behind, back-left, left, front-leftWhere the sun comes from, relative to the camera. Ignored by night presets.
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.