API-Endpunkte
Abschnitt ersetzen
Replace Section API
https://udioapi.pro/api/v2/replace-sectionErzeugen 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_iderforderlichstringtask_id des fertigen Songs, den Sie bearbeiten möchten, wie von /v2/generate oder /v2/extend zurückgegeben.
audio_iderforderlichstringid des Songs innerhalb dieser Aufgabe (response_data[].id). Eine Aufgabe liefert meist zwei Songs; wählen Sie den zu bearbeitenden aus.
infill_start_serforderlichnumberBeginn des Abschnitts in Sekunden: 0 oder größer, bis zu zwei Dezimalstellen.
infill_end_serforderlichnumberEnde des Abschnitts in Sekunden. Muss mindestens 10 Sekunden nach infill_start_s liegen und darf nicht hinter dem Songende liegen.
prompterforderlichstringWie sich der Abschnitt ändern soll, bis zu 1000 Zeichen, zum Beispiel "Same melody and arrangement, cleaner vocal in this part".
Optionale Parameter
lyricsoptionalstringText, der im Abschnitt gesungen werden soll, bis zu 5000 Zeichen. Standard ist der derzeit im Fenster gesungene Text.
styleoptionalstringMusikstil des Ergebnisses, bis zu 1000 Zeichen. Standard ist der Stil des Originalsongs.
titleoptionalstringTitel des Ergebnisses, bis zu 80 Zeichen. Standard ist der Originaltitel.
full_lyricsoptionalstringVollstä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
{
"code": 400,
"message": "The section must be at least 10 seconds long (requested 9.99s)."
}{
"code": 400,
"message": "The section can cover at most 50% of the song and 480s (max 59.8s for this song, requested 65s)."
}{
"code": 400,
"message": "\"infill_end_s\" must not exceed the song length (119.6s)."
}{
"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."
}{
"code": 400,
"message": "\"audio_id\" 1234 does not belong to this task. Use one of the song ids returned for \"origin_task_id\"."
}{
"code": 400,
"message": "Only songs generated with this API can be edited: send \"origin_task_id\" and \"audio_id\", without \"upload_url\" or \"model\"."
}{
"code": 402,
"message": "No available credits"
}{
"code": 401,
"message": "Invalid API key"
}