Sam3 Video Rle API Documentation

Sam3 Video Rle API Documentation

Playground

Try it on WaveSpeedAI!

SAM 3 Video RLE is a unified foundation model for prompt-based segmentation in video. Track and segment objects across frames using text, points, or boxes, returning RLE encoded masks for efficient processing. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

SAM3 Video Segmentation RLE segments and tracks target objects across video frames, then returns both a preview video URL and RLE mask data in JSON format. Use text prompts, point prompts, box prompts, or a combination of them to generate frame-level masks for programmatic video workflows.


Why Choose This?

  • Video object segmentation
    Segment people, objects, animals, clothing, vehicles, or other visible targets across video frames.

  • Frame-level object tracking
    Track selected subjects consistently through the video.

  • RLE mask output
    Receive compact Run-Length Encoded mask data for downstream processing.

  • Multiple prompt types
    Use text prompts, point prompts, box prompts, or combined prompt guidance for more accurate targeting.

  • Multi-object targeting
    Track multiple objects by listing them in the prompt, such as person, car, dog.

  • Optional mask visualization
    Use apply_mask to generate a visual preview of the segmentation result.


Parameters

ParameterRequiredDescription
videoYesSource video to segment. Upload a video or provide a public video URL.
promptYesText description of the object or objects to segment. Use short labels such as person, car, or person, cloth.
point_promptsNoPoint coordinates used to identify the target object or region.
box_promptsNoBounding box coordinates used to identify the target object or region.
apply_maskNoWhether to apply the mask visualization to the video output.

How to Use

  1. Upload a video — Provide the source video you want to segment.
  2. Write a target prompt — Describe the object or objects to track, such as the man, red car, or person, cloth.
  3. Add point or box prompts optional — Use coordinates or boxes when the target is ambiguous.
  4. Configure mask visualization optional — Enable apply_mask when you want a preview video with the segmentation mask applied.
  5. Submit — Generate the video preview and RLE mask JSON.

Output

The response returns both:

  • A video URL — A preview or mask-applied video output.
  • RLE JSON data — Frame-level segmentation masks encoded in RLE format.

RLE means Run-Length Encoding. Instead of storing every mask pixel one by one, it stores continuous runs of pixels, making mask data smaller and easier to pass into downstream computer-vision or editing pipelines.

The RLE JSON can be decoded with standard mask-processing tools when you need binary masks for each frame.


Pricing

Pricing is based on input video duration.

Billed duration is rounded up to the next whole second, with a minimum billed duration of 3 seconds and a maximum billed duration of 600 seconds. Pricing is charged at $0.05 per 5 seconds.

Billed DurationCost
3s$0.03
5s$0.05
10s$0.10
60s$0.60
300s$3.00
600s$6.00

prompt, point_prompts, box_prompts, and apply_mask do not add separate charges.


Best Use Cases

  • Video annotation — Generate frame-level segmentation masks for labeling and dataset workflows.
  • Object tracking pipelines — Track subjects or objects across frames for automated processing.
  • Video editing automation — Use RLE masks for programmatic object isolation, removal, or replacement.
  • Computer vision workflows — Feed compact mask data into downstream CV systems.
  • VFX and compositing — Generate rotoscoping-style masks for post-production pipelines.
  • Mask preview workflows — Use the returned video URL to quickly inspect segmentation quality.

Pro Tips

  • Use short, concrete prompts such as person, dog, car, or shirt.
  • Use comma-separated prompts for multiple targets, such as person, backpack, bicycle.
  • Use point prompts when text alone is ambiguous.
  • Use box prompts when you need to constrain segmentation to a specific region.
  • Enable apply_mask when you want a visual preview of the segmentation result.
  • Use the RLE JSON when you need programmatic access to frame-by-frame masks.
  • Use stable footage with clear subject separation for better tracking consistency.

Notes

  • video and prompt are required.
  • Output includes both a video URL and RLE mask JSON.
  • RLE output is structured mask data, not a standalone video file.
  • Use standard RLE-compatible tooling to decode masks for downstream processing.

  • SAM3 Video — Segment video targets and return direct video output.
  • SAM3 Image RLE — Segment image targets and return RLE mask data.
  • SAM3 Image — Segment image targets and return image output.

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'
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
  "apply_mask": true
}
JSON
)

# 1. Submit the prediction once. Never retry this request automatically:
# a retry after an unclear failure can create a second, billed task.
CHECK='The task may already exist. Check History or the predictions list before submitting again.'
if ! SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --connect-timeout 10 --max-time 60 \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/sam3-video-rle" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"); then
  printf 'Submit failed. %s\n' "${CHECK}" >&2
  exit 1
fi

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. %s\n' "${CHECK}" >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

# 2. Poll until the prediction reaches a final status.
BODY_FILE=$(mktemp)
trap 'rm -f "${BODY_FILE}"' EXIT
while true; do
  # Transient errors (429, 5xx) are retried, honoring Retry-After.
  HTTP_CODE=$(curl --silent --show-error --fail-with-body \
    --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 2 \
    --output "${BODY_FILE}" --write-out '%{http_code}' \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}" || true)
  case "${HTTP_CODE}" in
    2??) ;;
    000|429|5??)  # dropped connection or temporary error: keep polling
      printf 'Task %s: HTTP %s, polling again in 10s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      sleep 10; continue ;;
    *) printf 'Task %s: HTTP %s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      cat "${BODY_FILE}" >&2; exit 1 ;;
  esac
  RESULT=$(jq 'if type == "object" and has("data") then .data else . end' "${BODY_FILE}")
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted)
      printf 'Task %s ended with status %s\n' "${PREDICTION_ID}" "${STATUS}" >&2
      printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done

Retry temporary errors only while polling, never the submit request. Errors, retries and timeouts

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes-Text prompt for segmentation. Use commas to track multiple objects (e.g., 'person, cloth').
videostringYes-Video URL for segmented
point_promptsarray<object>No-0 ~ 1000 itemsList of point coordinates to mark specific locations for segmentation (foreground or background)
point_prompts[].frame_indexintegerNo--Frame index for the point prompt
point_prompts[].labelintegerNo--1 for foreground object, 0 for background
point_prompts[].object_idintegerNo--Object ID for tracking multiple objects
point_prompts[].xintegerNo--X coordinate of the point
point_prompts[].yintegerNo--Y coordinate of the point
box_promptsarray<object>No-0 ~ 1000 itemsList of bounding boxes to define rectangular regions for segmentation
box_prompts[].frame_indexintegerNo--Frame index for the box prompt
box_prompts[].object_idintegerNo--Object ID for tracking multiple objects
box_prompts[].x_maxintegerNo--Right edge X coordinate
box_prompts[].x_minintegerNo--Left edge X coordinate
box_prompts[].y_maxintegerNo--Bottom edge Y coordinate
box_prompts[].y_minintegerNo--Top edge Y coordinate
apply_maskbooleanNotrue-Whether to apply mask to video

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.