Skip to main content
stability-ai avatar

Stable Audio 2.5 Audio-to-Audio API

stability-ai/stable-audio-2.5/audio-to-audio

Transform an existing audio clip into new music or sound effects guided by a text prompt — restyle, re-instrument, or reimagine a source track, returned as a WAV.

0.2

Model Input

Input

The text prompt guiding the transformation. Describe the genre, instrumentation, mood, and tempo you want the source audio reshaped into.

The source audio clip to transform (accepted formats: mp3, ogg, wav, m4a, aac).

Additional Settings

Customize your input with more control.

Min: 0.01 - Max: 1

How much the source audio is transformed: near 0 keeps it almost identical to the input, near 1 ignores the input and follows only the prompt.

Min: 4 - Max: 8

Number of denoising steps. More steps can improve quality at the cost of speed.

Min: 1 - Max: 190

Duration of the generated audio in seconds (1-190). Defaults to the source clip's length if unset. Billing is a flat rate per generation regardless of length.

Min: 1 - Max: 25

Classifier-free guidance scale; higher values follow the prompt more strictly.

Random seed for reproducible generation. Leave empty for a random result.

You need to be logged in to run this model and view results.
Log in

Model Output

Output

Loading
Generated in 6.675 seconds
Logs (1 lines)

Model Example Requests

Examples

Stable Audio 2.5 Audio-to-Audio API

Stable Audio 2.5 Audio-to-Audio is a audio-to-audio AI model by stability-ai. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at $0.2 per audio clip.

POST https://queue.modelrunner.run/stability-ai/stable-audio-2.5/audio-to-audio

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/stability-ai/stable-audio-2.5/audio-to-audio \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "reimagine as an upbeat, groovy funk arrangement with slap bass, wah guitar, and crisp syncopated drums",
    "strength": 0.8,
    "audio_url": "https://media.modelrunner.ai/cRfZ5GPVg3bolYrTetWj3.wav",
    "total_seconds": 24,
    "guidance_scale": 1,
    "num_inference_steps": 8,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/stability-ai/stable-audio-2.5/audio-to-audio/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/stability-ai/stable-audio-2.5/audio-to-audio/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("stability-ai/stable-audio-2.5/audio-to-audio", {
  input: {
    "prompt": "reimagine as an upbeat, groovy funk arrangement with slap bass, wah guitar, and crisp syncopated drums",
    "strength": 0.8,
    "audio_url": "https://media.modelrunner.ai/cRfZ5GPVg3bolYrTetWj3.wav",
    "total_seconds": 24,
    "guidance_scale": 1,
    "num_inference_steps": 8
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/stability-ai/stable-audio-2.5/audio-to-audio",
    headers=headers,
    json={
      "prompt": "reimagine as an upbeat, groovy funk arrangement with slap bass, wah guitar, and crisp syncopated drums",
      "strength": 0.8,
      "audio_url": "https://media.modelrunner.ai/cRfZ5GPVg3bolYrTetWj3.wav",
      "total_seconds": 24,
      "guidance_scale": 1,
      "num_inference_steps": 8
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

NameTypeRequiredDescription
promptstringyesThe text prompt guiding the transformation. Describe the genre, instrumentation, mood, and tempo you want the source audio reshaped into.
audio_urlstring (uri)yesThe source audio clip to transform (accepted formats: mp3, ogg, wav, m4a, aac).
strengthnumbernoHow much the source audio is transformed: near 0 keeps it almost identical to the input, near 1 ignores the input and follows only the prompt. Default: 0.8.
num_inference_stepsintegernoNumber of denoising steps. More steps can improve quality at the cost of speed. Default: 8.
total_secondsintegernoDuration of the generated audio in seconds (1-190). Defaults to the source clip's length if unset. Billing is a flat rate per generation regardless of length.
guidance_scalenumbernoClassifier-free guidance scale; higher values follow the prompt more strictly. Default: 1.
seedintegernoRandom seed for reproducible generation. Leave empty for a random result.

Machine-readable: OpenAPI schema · llms.txt

Use Stable Audio 2.5 Audio-to-Audio from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Stable Audio 2.5 Audio-to-Audio becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint stability-ai/stable-audio-2.5/audio-to-audio.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run stability-ai/stable-audio-2.5/audio-to-audio on ModelRunner to generate audio”. MCP setup guide.

Model Details

Model Details

Stable Audio 2.5 Audio-to-Audio reshapes a source audio clip you provide into a new one guided by a text description. Upload a track via `audio_url`, describe the sound you want in the `prompt` ("turn this into a lush cinematic orchestral arrangement", "remix into an upbeat electronic dance track", "reimagine as a lofi hip-hop beat with vinyl crackle"), and it returns a fresh WAV clip. Use `strength` to control how far it moves from the original — low values stay close to the source, high values follow the prompt more freely. Built on the same commercially-safe, licensed-data Stable Audio 2.5 model as the text-to-audio generator, it handles both music and sound effects and can output clips up to about 190 seconds.

## Best for - Restyling or re-instrumenting an existing track (folk guitar → orchestral, acoustic → electronic) - Turning a rough musical idea or hummed melody into a fuller arrangement - Reimagining ambience or sound effects in a new style while keeping the source structure - Generating prompt-guided variations of a reference clip for A/B options - Commercial-safe audio work where a licensed-data model matters

## Choose another model when - You want to generate audio from text with no source clip — use the Stable Audio 2.5 text-to-audio model - You want to change a speaker's voice while keeping the words — use a speech-to-speech / voice-conversion model - You need clean narration in a specific voice — use a text-to-speech model - You only need to denoise or isolate an existing recording — use an audio-cleanup / isolation model

## Tips - `strength` (0.01–1, default 0.8) is the key dial: ~0.3–0.5 keeps the source recognizable, ~0.8–1.0 leans into the prompt - `total_seconds` (1–190) sets the output length; leave it unset to match the source clip's duration - Describe genre, instrumentation, mood, and tempo in the prompt for musical transforms - Raise `num_inference_steps` (up to 8) for a quality bump; raise `guidance_scale` for stricter prompt adherence - Accepted source formats: mp3, ogg, wav, m4a, aac

## Limitations - Output is a single WAV clip per call; there is no multi-track or stem separation - Very high `strength` effectively ignores the source and behaves like text-to-audio generation

To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("stability-ai/stable-audio-2.5/audio-to-audio", { input: { prompt: "transform into a lush cinematic orchestral arrangement with sweeping strings", audio_url: "https://example.com/source-guitar.wav", strength: 0.7, }, }); ```