Seedance 2.5 Now Live | Try in Video Generator →
Home/Explore/Mirelo Ai/Sfx V1/Video To Audio

mirelo-ai/

Mirelo SFX V1 Video-to-Audio generates synchronized sound effects from video input with text prompt guidance. Supports multiple sample generation and customizable duration. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

video-dubbing
Input

Idle

$0.007per run·~142 / $1

ExamplesView all

Related Models

README

Mirelo SFX V1 Video-to-Audio

Mirelo SFX V1 Video-to-Audio generates synchronized sound effects directly from video input, with optional text prompt guidance to steer the audio content. Upload a video, describe the sound you want, and get realistic, scene-matched audio output — multiple samples per run for easy A/B selection.

Why Choose This?

  • Video-synchronized sound effects Analyzes video content and generates audio that matches the on-screen action, environment, and pacing.

  • Text prompt guidance Optionally describe the desired sound to steer the output — useful for ambiguous scenes or specific audio requirements.

  • Multiple sample generation Generate several audio variations in one run and pick the best result without re-submitting.

  • Adjustable duration Control how many seconds of audio to generate, up to 10 seconds per run.

  • Reproducible results Use the seed parameter to lock in a specific output for exact reproduction.

Parameters

ParameterRequiredDescription
videoYesInput video to generate sound effects for (URL or file upload).
promptNoText description to guide the style or content of the generated audio.
num_samplesNoNumber of audio variations to generate per run. Default: 2.
durationNoLength of audio to generate in seconds. Range: 2–10. Default: 5.
seedNoRandom seed for reproducible results. Use -1 for a random seed.

How to Use

  1. Upload your video — provide the clip you want to generate sound for via URL or drag-and-drop.
  2. Write a prompt (optional) — describe the type of sound or atmosphere you want. Use the Prompt Enhancer for better results.
  3. Set num_samples — choose how many audio variations to generate in one run.
  4. Set duration — choose how many seconds of audio to generate (2–10 seconds).
  5. Set seed (optional) — fix the seed to reproduce a specific result, or leave at -1 for random.
  6. Submit — generate and download your synchronized audio.

Pricing

Billed at $0.007 per second per sample, with a minimum billable duration of 2 seconds and a maximum of 10 seconds.

Duration1 Sample2 Samples4 Samples
2s$0.014$0.028$0.056
5s$0.035$0.070$0.140
10s$0.070$0.140$0.280

Billing Rules

  • Rate: $0.007 per second per sample
  • Minimum billable duration: 2 seconds
  • Maximum billable duration: 10 seconds
  • Total cost = billed duration × num_samples × $0.007

Best Use Cases

  • Film & Video Post-Production — Add realistic ambient sound, foley, and environmental audio to silent or poorly recorded footage.
  • Social Media Content — Enhance short-form videos with matching sound effects for higher engagement.
  • Game & Interactive Media — Generate contextual sound effects from in-game or recorded footage.
  • Advertising — Quickly produce polished audio for product videos and promotional clips.
  • Content Automation — Batch-generate synchronized audio for high-volume video workflows via the REST API.

Pro Tips

  • Leave the prompt empty to let the model infer audio purely from the video content.
  • Use the prompt to override or refine the default interpretation — for example, specifying "rain on window glass" for an ambiguous indoor scene.
  • Generate 3–4 samples per run to maximize variation and increase the chance of a perfect match.
  • Fix the seed once you find a result you like to reproduce it exactly in future runs.
  • Match duration to the key action window in your video for the most focused and accurate audio.

Notes

  • video is the only required field; all other parameters are optional.
  • Billable duration is clamped between 2 and 10 seconds regardless of actual video length.
  • Ensure video URLs are publicly accessible if using a link rather than a direct upload.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Sfx v1 Video To Audio API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/mirelo-ai/sfx-v1/video-to-audio with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Sfx v1 Video To Audio below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
    "num_samples": 2,
    "duration": 5,
    "seed": -1
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/mirelo-ai/sfx-v1/video-to-audio" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; 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 has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  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
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/mirelo-ai/sfx-v1/video-to-audio";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
        "num_samples": 2,
        "duration": 5,
        "seed": -1
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
  `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
  if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
    "num_samples": 2,
    "duration": 5,
    "seed": -1
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/mirelo-ai/sfx-v1/video-to-audio", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout"}:
        raise RuntimeError(result)
    if status not in {"created", "processing"}:
        raise RuntimeError(f"Unexpected status: {status}")
    time.sleep(2)

Sfx v1 Video To Audio API — Frequently asked questions

What is the Sfx v1 Video To Audio API?

Sfx v1 Video To Audio is a Mirelo Ai model for AI inference, exposed as a REST API on WaveSpeedAI. Mirelo SFX V1 Video-to-Audio generates synchronized sound effects from video input with text prompt guidance. Supports multiple sample generation and customizable duration. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Sfx v1 Video To Audio API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/mirelo-ai/mirelo-ai-sfx-v1-video-to-audio.

How much does Sfx v1 Video To Audio cost per run?

Sfx v1 Video To Audio starts at $0.007 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does Sfx v1 Video To Audio accept?

Key inputs: `prompt`, `video`, `duration`, `seed`, `num_samples`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/mirelo-ai/mirelo-ai-sfx-v1-video-to-audio.

How long does Sfx v1 Video To Audio take to generate?

Median end-to-end generation time on WaveSpeedAI is around 13 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use Sfx v1 Video To Audio outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Mirelo Ai). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Sfx V1 Video to Audio | AI Video-to-Audio API on WaveSpeedAI