Points d'accès API
Remplacer une section
API de remplacement de section
https://udioapi.pro/api/v2/replace-sectionRégénérez une partie d'une chanson déjà créée, par exemple quelques secondes avec un défaut ou une ligne à chanter autrement, et récupérez la chanson complète avec cette partie refaite.
Fonctionnement
- Choisissez une fenêtre temporelle dans une chanson terminée. La chanson est recalculée autour de cette fenêtre et renvoyée sous forme de morceaux complets, généralement deux variantes, via le même flux de tâches que la génération musicale.
- Environ 10 secondes de chaque côté de la fenêtre sont aussi recalculées pour que la nouvelle partie s'enchaîne naturellement. Tout le reste est conservé, à part un nouvel encodage audio.
- Règles de fenêtre, vérifiées avant tout débit de crédits : au moins 10 secondes, au plus 50 % de la chanson et au plus 480 secondes, et infill_end_s ne doit pas dépasser la durée de la chanson.
- Si vous n'envoyez pas lyrics, les paroles chantées dans la fenêtre sont renseignées automatiquement à partir des horodatages des mots de la chanson. Envoyez-les vous-même si vous voulez d'autres mots.
- Un résultat dont la durée diffère de l'original de plus de 15 secondes est écarté. S'il ne reste aucun résultat, la tâche se termine en FAILED et vos crédits sont remboursés ; décaler le début ou la fin de la fenêtre de quelques secondes suffit généralement.
- 5 crédits par requête, débités lorsque la requête est acceptée. Les requêtes rejetées lors de la validation et les tâches échouées sont remboursées automatiquement.
- Seules les chansons créées avec /v2/generate ou /v2/extend sous la même clé API peuvent être modifiées. L'audio importé et les résultats de remplacements précédents ne sont pas acceptés comme source.
Démarrage rapide
{
"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 et full_lyrics sont facultatifs. S'ils sont omis, les valeurs de la chanson d'origine sont utilisées.
Réponse
{
"code": 200,
"message": "success",
"workId": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv",
"data": {
"task_id": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv"
}
}Interrogez le workId renvoyé toutes les 5 à 10 secondes jusqu'à ce que le statut soit SUCCESS ou FAILED, via cette API : API de statut de tâche
Paramètres
Paramètres obligatoires
origin_task_idobligatoirestringtask_id de la chanson terminée à modifier, tel que renvoyé par /v2/generate ou /v2/extend.
audio_idobligatoirestringid de la chanson dans cette tâche (response_data[].id). Une tâche renvoie généralement deux chansons ; choisissez celle à modifier.
infill_start_sobligatoirenumberDébut de la section en secondes : 0 ou plus, jusqu'à deux décimales.
infill_end_sobligatoirenumberFin de la section en secondes. Doit se situer au moins 10 secondes après infill_start_s et ne pas dépasser la fin de la chanson.
promptobligatoirestringComment la section doit changer, jusqu'à 1000 caractères, par exemple "Same melody and arrangement, cleaner vocal in this part".
Paramètres facultatifs
lyricsfacultatifstringParoles à chanter dans la section, jusqu'à 5000 caractères. Par défaut, les paroles actuellement chantées dans la fenêtre.
stylefacultatifstringStyle musical du résultat, jusqu'à 1000 caractères. Par défaut, le style de la chanson d'origine.
titlefacultatifstringTitre du résultat, jusqu'à 80 caractères. Par défaut, le titre d'origine.
full_lyricsfacultatifstringParoles complètes de la chanson modifiée, jusqu'à 5000 caractères. Par défaut, les paroles d'origine.
callback_urlfacultatifstringURL publique qui reçoit le résultat final, avec les mêmes éléments que response_data dans le statut de la tâche. L'interrogation fonctionne avec ou sans elle.
Résultats
En cas de succès, response_data contient les nouvelles chansons complètes. Chaque élément a ses propres id, audio_url et duration. Si une seule variante a conservé la durée d'origine, seule celle-ci est renvoyée.
{
"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"
}
]
}
}Si tous les résultats ont modifié la durée de la chanson ou si la section n'a pas pu être rendue, la tâche est FAILED et les crédits sont remboursés :
{
"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."
}
]
}
}Exemples de code
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.Réponses d'erreur
{
"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"
}