API-Endpunkte

Abschnitt ersetzen

Replace Section API

POST
https://udioapi.pro/api/v2/replace-section

Erzeugen Sie einen Teil eines bereits erstellten Songs neu, etwa ein paar Sekunden mit einem Fehler oder eine Zeile, die anders gesungen werden soll, und erhalten Sie den kompletten Song mit dem neu gerenderten Abschnitt zurück.

So funktioniert es

  • Wählen Sie ein Zeitfenster in einem fertigen Song. Der Song wird um dieses Fenster herum neu gerendert und als Tracks in voller Länge zurückgegeben, meist in zwei Varianten, über denselben Aufgabenablauf wie die Musikgenerierung.
  • Etwa 10 Sekunden auf jeder Seite des Fensters werden ebenfalls neu gerendert, damit der neue Teil nahtlos übergeht. Alles außerhalb dieses Bereichs bleibt erhalten, abgesehen von einer neuen Audiokodierung.
  • Fensterregeln, geprüft bevor Credits abgebucht werden: mindestens 10 Sekunden lang, höchstens 50% des Songs und höchstens 480 Sekunden, und infill_end_s darf die Songlänge nicht überschreiten.
  • Wenn Sie lyrics nicht senden, wird der im Fenster gesungene Text automatisch anhand der Wort-Zeitstempel des Songs eingesetzt. Senden Sie ihn selbst, wenn Sie andere Wörter möchten.
  • Ein Ergebnis, dessen Länge um mehr als 15 Sekunden vom Original abweicht, wird verworfen. Bleibt kein Ergebnis übrig, endet die Aufgabe mit FAILED und Ihre Credits werden erstattet; meist hilft es, Anfang oder Ende des Fensters um einige Sekunden zu verschieben.
  • 5 Credits pro Anfrage, abgebucht wenn die Anfrage angenommen wird. Bei der Prüfung abgelehnte Anfragen und fehlgeschlagene Aufgaben werden automatisch erstattet.
  • Bearbeitet werden können nur Songs, die mit /v2/generate oder /v2/extend unter demselben API-Schlüssel erstellt wurden. Hochgeladenes Audio und frühere Replace-Ergebnisse werden als Quelle nicht unterstützt.

Schnellstart

{
  "origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
  "audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
  "infill_start_s": 70,
  "infill_end_s": 85,
  "prompt": "Same melody and arrangement, cleaner vocal in this part"
}

style, title und full_lyrics sind optional. Wenn sie fehlen, werden die Werte des Originalsongs verwendet.

Antwort

{
  "code": 200,
  "message": "success",
  "workId": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv",
  "data": {
    "task_id": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv"
  }
}

Fragen Sie die zurückgegebene workId alle 5–10 Sekunden ab, bis der Status SUCCESS oder FAILED ist, mit der Aufgabenstatus-API

Parameter

Erforderliche Parameter

origin_task_iderforderlichstring

task_id des fertigen Songs, den Sie bearbeiten möchten, wie von /v2/generate oder /v2/extend zurückgegeben.

audio_iderforderlichstring

id des Songs innerhalb dieser Aufgabe (response_data[].id). Eine Aufgabe liefert meist zwei Songs; wählen Sie den zu bearbeitenden aus.

infill_start_serforderlichnumber

Beginn des Abschnitts in Sekunden: 0 oder größer, bis zu zwei Dezimalstellen.

infill_end_serforderlichnumber

Ende des Abschnitts in Sekunden. Muss mindestens 10 Sekunden nach infill_start_s liegen und darf nicht hinter dem Songende liegen.

prompterforderlichstring

Wie sich der Abschnitt ändern soll, bis zu 1000 Zeichen, zum Beispiel "Same melody and arrangement, cleaner vocal in this part".

Optionale Parameter

lyricsoptionalstring

Text, der im Abschnitt gesungen werden soll, bis zu 5000 Zeichen. Standard ist der derzeit im Fenster gesungene Text.

styleoptionalstring

Musikstil des Ergebnisses, bis zu 1000 Zeichen. Standard ist der Stil des Originalsongs.

titleoptionalstring

Titel des Ergebnisses, bis zu 80 Zeichen. Standard ist der Originaltitel.

full_lyricsoptionalstring

Vollständiger Text des bearbeiteten Songs, bis zu 5000 Zeichen. Standard ist der Originaltext.

callback_urloptionalstring

Öffentliche URL, die das Endergebnis erhält, mit denselben Einträgen wie response_data im Aufgabenstatus. Abfragen funktioniert mit oder ohne sie.

Ergebnisse

Bei Erfolg enthält response_data die neuen Songs in voller Länge. Jeder Eintrag hat eine eigene id, audio_url und duration. Hat nur eine Variante die Originallänge behalten, wird nur diese zurückgegeben.

{
  "code": 200,
  "message": "success",
  "data": {
    "type": "SUCCESS",
    "request_body": {
      "origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
      "audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
      "infill_start_s": 70,
      "infill_end_s": 85,
      "prompt": "Same melody and arrangement, cleaner vocal in this part"
    },
    "response_data": [
      {
        "id": "3a8248e4-07b0-4ceb-92b7-34b7615d2552",
        "audio_url": "https://…/3a8248e4-07b0-4ceb-92b7-34b7615d2552.mp3",
        "image_url": "https://…/3a8248e4-07b0-4ceb-92b7-34b7615d2552.jpeg",
        "status": "complete",
        "title": "Harbor Lights",
        "duration": 119.6,
        "model_name": "chirp-v6-mini"
      },
      {
        "id": "eac654a1-5c07-4b6c-896a-59061d323e11",
        "audio_url": "https://…/eac654a1-5c07-4b6c-896a-59061d323e11.mp3",
        "image_url": "https://…/eac654a1-5c07-4b6c-896a-59061d323e11.jpeg",
        "status": "complete",
        "title": "Harbor Lights",
        "duration": 120.84,
        "model_name": "chirp-v6-mini"
      }
    ]
  }
}

Wenn alle Ergebnisse die Songlänge verändert haben oder der Abschnitt nicht gerendert werden konnte, ist die Aufgabe FAILED und die Credits werden erstattet:

{
  "code": 200,
  "message": "success",
  "data": {
    "type": "FAILED",
    "response_data": [
      {
        "status": "FAILED",
        "fail_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds.",
        "error_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds."
      },
      {
        "status": "FAILED",
        "fail_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds.",
        "error_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds."
      }
    ]
  }
}

Codebeispiele

cURL

curl -X POST "https://udioapi.pro/api/v2/replace-section" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
    "audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
    "infill_start_s": 70,
    "infill_end_s": 85,
    "prompt": "Same melody and arrangement, cleaner vocal in this part"
  }'

JavaScript

const response = await fetch('https://udioapi.pro/api/v2/replace-section', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
    "audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
    "infill_start_s": 70,
    "infill_end_s": 85,
    "prompt": "Same melody and arrangement, cleaner vocal in this part"
  })
});

const { workId } = await response.json();
// Poll https://udioapi.pro/api/v2/feed?workId=... every 5-10 seconds until SUCCESS or FAILED.

Python

import requests

response = requests.post(
    "https://udioapi.pro/api/v2/replace-section",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
      "origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
      "audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
      "infill_start_s": 70,
      "infill_end_s": 85,
      "prompt": "Same melody and arrangement, cleaner vocal in this part"
    },
)
work_id = response.json()["workId"]
# Poll https://udioapi.pro/api/v2/feed?workId=... every 5-10 seconds until SUCCESS or FAILED.

Fehlerantworten

400 · Abschnitt kürzer als 10 Sekunden
{
  "code": 400,
  "message": "The section must be at least 10 seconds long (requested 9.99s)."
}
400 · Abschnitt länger als 50% des Songs
{
  "code": 400,
  "message": "The section can cover at most 50% of the song and 480s (max 59.8s for this song, requested 65s)."
}
400 · Abschnitt endet nach dem Song
{
  "code": 400,
  "message": "\"infill_end_s\" must not exceed the song length (119.6s)."
}
400 · Unbekannte oder unfertige Ursprungsaufgabe
{
  "code": 400,
  "message": "The provided \"origin_task_id\" is invalid or could not be found. Use the task_id of a completed song generated with your API key."
}
400 · audio_id gehört nicht zur Aufgabe
{
  "code": 400,
  "message": "\"audio_id\" 1234 does not belong to this task. Use one of the song ids returned for \"origin_task_id\"."
}
400 · Hochgeladenes Audio wird nicht unterstützt
{
  "code": 400,
  "message": "Only songs generated with this API can be edited: send \"origin_task_id\" and \"audio_id\", without \"upload_url\" or \"model\"."
}
402 · Nicht genügend Credits
{
  "code": 402,
  "message": "No available credits"
}
401 · Ungültiger API-Schlüssel
{
  "code": 401,
  "message": "Invalid API key"
}