Sonilo V1 Video To Video Sfx

Sonilo V1 Video To Video Sfx

Playground

Try it on WaveSpeedAI!

Sonilo Video to Video SFX adds AI-generated sound effects to input videos, creating a new video with a synchronized audio track for video sound design, ads, social content, games, and creative production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Sonilo Video-to-Video SFX adds generated sound effects to an input video and returns an MP4 video with the new audio track. Upload a video, optionally describe the overall sound design, and generate a video output with synchronized sound effects.


Why Choose This?

  • Video-to-video sound effect generation
    Add generated sound effects directly to an input video.

  • Prompt-guided sound design
    Use an optional prompt to describe the overall sound style, ambience, intensity, or realism.

  • MP4 video output
    Return a finished MP4 video with the generated audio track included.

  • Video-aware timing
    Generated sound effects are aligned with the source video’s timing and visual content.

  • Standard video output
    The final MP4 is returned as a URL in the standard WaveSpeed prediction response.


Parameters

ParameterRequiredDescription
videoYesInput video. Maximum duration: 180 seconds. Maximum file size: 300 MB.
promptNoOptional overall prompt describing the sound effects. Maximum length: 2,000 characters.

How to Use

  1. Upload your video — Provide the input video that needs generated sound effects.
  2. Add prompt guidance optional — Describe the desired sound design, ambience, mood, intensity, or realism.
  3. Submit — Generate the MP4 video with the new audio track.
  4. Use the result — Retrieve the output video URL from the standard WaveSpeed prediction response.

Pricing

Pricing is $0.009 per second of input video duration.

Video DurationPrice
1s$0.009
10s$0.09
60s$0.54
180s$1.62

Best Use Cases

  • Video sound design — Add generated sound effects to videos based on visual content.
  • Social video production — Create videos with sound effects for ads, reels, shorts, and campaign content.
  • Animation and game previews — Add sound effects to animated clips, concept videos, and gameplay-style previews.
  • Ambient scene enhancement — Generate environmental sounds such as rain, traffic, crowds, machinery, wind, or room tone.
  • Creative prototyping — Quickly test sound directions before final audio production.

Pro Tips

  • Use a clear video with visible action for better sound timing.
  • Add a prompt when you want a specific sound style, environment, or intensity.
  • Mention the overall mood, such as realistic, cinematic, playful, tense, soft, or dramatic.
  • Keep the prompt focused on sound design rather than visual changes.
  • Keep the input video within 180 seconds and 300 MB.

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-images/painted-hand-298-332.jpg"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/sonilo/v1/video-to-video-sfx" \
  -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=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 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) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
videostringYes-Input video. Supports MP4, MOV, WEBM, M4V, and GIF. Maximum duration is 180 seconds and maximum file size is 300 MB.
promptstringNo-Optional overall prompt describing the sound effects for the 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.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
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.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
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.