Ace Step Audio Inpaint

Ace Step Audio Inpaint

Playground

Try it on WaveSpeedAI!

ACE-Step Audio Inpaint edits a specific audio segment to change lyrics or style while preserving the surrounding audio. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

ACE-Step Audio Inpaint is a powerful music and audio editing model developed by WaveSpeedAI. It enables precise, intelligent modification of selected time ranges within an existing audio clip — perfect for fixing, remixing, or creatively reimagining tracks without re-generating the whole piece.


Key Features

  • Precise Segment Editing: Modify only the section you want — define start and end times to edit exactly the range you need.
  • Seamless Audio Blending: New content merges naturally with surrounding audio for smooth, undetectable transitions.
  • Flexible Timing Control: Choose whether your start or end times are relative to the beginning or end of the track.
  • Style & Lyric Adaptability: Add new instrumentation, effects, or lyrics while preserving the overall flow and tone.
  • Controlled Variation: Adjust how much the regenerated section diverges from the original using seed and creative parameters.

Parameters

ParameterDescription
audio*Upload or link to an existing audio file (MP3 / WAV).
tags*Define the target style or mood (e.g., lofi, hiphop, trap, chill).
start_time / end_timeSelect the time range (in seconds) to edit.
start_time_relative_to / end_time_relative_toChoose whether the range is relative to the start or end of the audio.
lyrics(Optional) Add or replace lyrics for the edited section.
seedFix for reproducible results; -1 for randomized variation.

Use Cases

  • Repair or refine — Fix errors or off-beat moments in specific sections.
  • Rewrite lyrics — Try new vocal phrasing or emotional tone.
  • Remix segments — Replace or restyle a part of a song without altering the rest.
  • Audio storytelling — Modify voiceovers or sound effects within a fixed-length clip.

Pricing

MetricPrice
Per second of source audio$0.0002 / s

Total cost = duration of uploaded audio (in seconds) × $0.0002

Examples

  • 30s audio → 30 × $0.0002 = $0.006
  • 60s audio → 60 × $0.0002 = $0.012
  • 3 min (180s) audio → 180 × $0.0002 = $0.036

Notes

  • Pricing is based on the total duration of the source audio file, not the edited segment length.
  • Ensure uploaded audio URLs are publicly accessible.
  • Please ensure your content complies with usage guidelines.

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'
{
  "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
  "tags": "example",
  "start_time_relative_to": "start",
  "start_time": 0,
  "end_time_relative_to": "start",
  "end_time": 30,
  "seed": -1
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/ace-step/audio-inpaint" \
  -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
audiostringYes--Audio file to transcribe. Provide an HTTPS URL or upload a file (MP3, WAV, FLAC up to 60 minutes).
tagsstringYes--Comma-separated list of genre tags to control the style.
start_time_relative_tostringNostartstart, endReference point for start time.
start_timenumberNo00 ~ 240Start time in seconds.
end_time_relative_tostringNostartstart, endReference point for end time.
end_timenumberNo300 ~ 240End time in seconds.
lyricsstringNo--Lyrics to be sung in the audio. Use [inst] or [instrumental] for no vocals.
seedintegerNo-1-The random seed for reproducibility.

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.