Mirelo SFX1.6 Extend Audio is a fast AI audio extension model that extends an audio prefix with seamless natural tails and optional ambience looping. Ready-to-use REST inference API for sound effects, ambient audio, game audio, video production, cinematic sound design, loopable audio assets, and professional audio generation workflows with simple integration, no coldstarts, and affordable pricing.
Idle

$0.01per run·~100 / $1
Mirelo AI SFX 1.6 Extend Audio extends an existing audio clip by generating new continuation audio after the uploaded prefix. It supports optional prompt guidance, loop-friendly ambience mode, multiple variations, and flexible extension length, making it useful for sound design, music continuation, ambient loops, and creative audio workflows.
Audio continuation Extend an existing audio clip with newly generated sound that follows the uploaded prefix.
Prompt-guided extension Add an optional text prompt to steer the mood, texture, or direction of the continuation.
Loop-friendly ambience mode
Enable ambience to generate audio designed for seamless looping.
Multiple variations
Generate up to 4 variations in one request with num_samples.
Flexible extension length
Choose how many seconds to append after the prefix with append_duration.
Production-ready API Suitable for sound design, ambient loop creation, music continuation, and background audio workflows.
| Parameter | Required | Description |
|---|---|---|
| audio | Yes | Audio prefix to extend. Prefix duration must be 3–59 seconds, and total output is capped at 60 seconds. |
| prompt | No | Optional text prompt guiding the extension. |
| append_duration | No | Number of seconds to add after the prefix. Range: 1–57. Default: 10. |
| ambience | No | When true, extend and stitch the result so the tile loops seamlessly. Default: false. |
| double_output | No | Only used when ambience is true: concatenate the loop with itself for a 2x-length output. Default: false. |
| num_samples | No | Number of variations to generate. Range: 1–4. Default: 1. |
1 to 4.Dark cinematic ambience with distant thunder, soft low-frequency rumble, evolving tension, seamless continuation
Pricing is based on generated extension length and number of samples.
| Append Duration | 1 Sample | 2 Samples | 3 Samples | 4 Samples |
|---|---|---|---|---|
| 1s | $0.01 | $0.02 | $0.03 | $0.04 |
| 5s | $0.05 | $0.10 | $0.15 | $0.20 |
| 10s | $0.10 | $0.20 | $0.30 | $0.40 |
| 20s | $0.20 | $0.40 | $0.60 | $0.80 |
| 30s | $0.30 | $0.60 | $0.90 | $1.20 |
| 57s | $0.57 | $1.14 | $1.71 | $2.28 |
prompt, ambience, and double_output do not affect pricingambience when the result needs to loop smoothly.double_output only when you want a longer looped deliverable.num_samples when you want multiple variations from the same prefix.audio is required.3 and 59 seconds.60 seconds.append_duration controls how many new seconds are generated after the prefix.double_output only applies when ambience is enabled.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/mirelo-ai/sfx-1.6/extend-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 1.6 Extend Audio below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
"append_duration": 10,
"ambience": false,
"double_output": false,
"num_samples": 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-1.6/extend-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
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/mirelo-ai/sfx-1.6/extend-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({
"audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
"append_duration": 10,
"ambience": false,
"double_output": false,
"num_samples": 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));
}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 = {
"audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
"append_duration": 10,
"ambience": False,
"double_output": False,
"num_samples": 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-1.6/extend-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 1.6 Extend Audio is a Mirelo Ai model for AI inference, exposed as a REST API on WaveSpeedAI. Mirelo SFX1.6 Extend Audio is a fast AI audio extension model that extends an audio prefix with seamless natural tails and optional ambience looping. Ready-to-use REST inference API for sound effects, ambient audio, game audio, video production, cinematic sound design, loopable audio assets, and professional audio generation workflows with simple integration, no coldstarts, and affordable pricing. You can call it programmatically or try it from the playground above.
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-1.6-extend-audio.
Sfx 1.6 Extend Audio starts at $0.010 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.
Key inputs: `prompt`, `audio`, `ambience`, `append_duration`, `double_output`, `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-1.6-extend-audio.
Median end-to-end generation time on WaveSpeedAI is around 15 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.
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.