Points d'accès API

Remplacer une section

API de remplacement de section

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

Ré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_idobligatoirestring

task_id de la chanson terminée à modifier, tel que renvoyé par /v2/generate ou /v2/extend.

audio_idobligatoirestring

id de la chanson dans cette tâche (response_data[].id). Une tâche renvoie généralement deux chansons ; choisissez celle à modifier.

infill_start_sobligatoirenumber

Début de la section en secondes : 0 ou plus, jusqu'à deux décimales.

infill_end_sobligatoirenumber

Fin 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.

promptobligatoirestring

Comment la section doit changer, jusqu'à 1000 caractères, par exemple "Same melody and arrangement, cleaner vocal in this part".

Paramètres facultatifs

lyricsfacultatifstring

Paroles à chanter dans la section, jusqu'à 5000 caractères. Par défaut, les paroles actuellement chantées dans la fenêtre.

stylefacultatifstring

Style musical du résultat, jusqu'à 1000 caractères. Par défaut, le style de la chanson d'origine.

titlefacultatifstring

Titre du résultat, jusqu'à 80 caractères. Par défaut, le titre d'origine.

full_lyricsfacultatifstring

Paroles complètes de la chanson modifiée, jusqu'à 5000 caractères. Par défaut, les paroles d'origine.

callback_urlfacultatifstring

URL 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

400 · Section de moins de 10 secondes
{
  "code": 400,
  "message": "The section must be at least 10 seconds long (requested 9.99s)."
}
400 · Section de plus de 50 % de la chanson
{
  "code": 400,
  "message": "The section can cover at most 50% of the song and 480s (max 59.8s for this song, requested 65s)."
}
400 · Section qui se termine après la chanson
{
  "code": 400,
  "message": "\"infill_end_s\" must not exceed the song length (119.6s)."
}
400 · Tâche d'origine inconnue ou non terminée
{
  "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 n'appartient pas à la tâche
{
  "code": 400,
  "message": "\"audio_id\" 1234 does not belong to this task. Use one of the song ids returned for \"origin_task_id\"."
}
400 · Audio importé non pris en charge
{
  "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 · Crédits insuffisants
{
  "code": 402,
  "message": "No available credits"
}
401 · Clé API non valide
{
  "code": 401,
  "message": "Invalid API key"
}