Skip to main content
Les projets sont la ressource de plus haut niveau dans Youka. Chaque projet possède son fichier source, des stems séparés, des paroles synchronisées, des exports et les paramètres du projet.

Créer un projet

Dans la plupart des cas, utilisez client.projects.create() — il gère les téléversements pour vous.
const operation = await client.projects.create({
  source: { type: "path", path: "./song.mp3" },
  lyricsSource: { type: "transcribe" },
});
// => ProjectOperation

Types de sources

Lit un fichier depuis le disque.
source: {
  type: "path",
  path: "./song.mp3",
  contentType: "audio/mpeg", // optional, inferred if omitted
}

Autres champs

title
string
Titre du projet. Par défaut, le nom de fichier de la source.
splitModel
SplitModel
Modèle de séparation des stems. Par défaut mdx23c. Voir la référence des modèles Split.
presetId
string
Appliquer un preset réutilisable au moment de la création.
lyricsSource
LyricsSource
Configurer la synchronisation des paroles. Voir ci-dessous.

Sources de paroles

// Transcribe lyrics from the audio
lyricsSource: {
  type: "transcribe",
  syncModel: "audioshake-transcription", // optional
  language: "en",                        // optional
}

// Align exact lyrics to the audio
lyricsSource: {
  type: "align",
  lyrics: "First line\nSecond line\n...",
  syncModel: "audioshake-alignment",
}

client.projects.create(input, options?)

client.projects.create() accepte aussi une source inputFile de bas niveau lorsque vous disposez déjà d’un inputFileId téléversé.
const upload = await client.uploads.create({
  filename: "song.mp3",
  contentType: "audio/mpeg",
  contentLength: buffer.byteLength,
});

await client.uploads.upload(upload.uploadUrl, buffer, {
  contentType: "audio/mpeg",
});

const operation = await client.projects.create({
  source: {
    type: "inputFile",
    inputFileId: upload.inputFileId,
    filename: "song.mp3",
  },
  title: "My Song",
});

client.projects.quote(input, options?)

Estimer les crédits requis pour créer un projet sans le créer.
const quote = await client.projects.quote({
  source: { type: "path", path: "./song.mp3" },
  lyricsSource: { type: "transcribe", language: "en" },
  splitModel: "mdx23c",
});

console.log(quote.creditsRequired, quote.sufficientBalance);
client.projects.quote(...) accepte les mêmes formes de source que client.projects.create(...), y compris maxVideoQuality pour les URL. Si vous connaissez déjà la durée du média et ne voulez pas téléverser le fichier uniquement pour obtenir un devis, passez la forme REST de bas niveau :
const quote = await client.projects.quote({
  durationSeconds: 210,
  lyricsSource: null,
  splitModel: "mdx23c",
});

client.uploads.create(body, options?)

Allouer un emplacement de téléversement et obtenir une URL signée.
const upload = await client.uploads.create({
  filename: "song.mp3",
  contentType: "audio/mpeg",
  contentLength: 4_521_344,
});
// => { inputFileId, uploadUrl }

client.uploads.upload(uploadUrl, body, options?)

Effectuer un PUT des octets du fichier vers l’URL signée.
await client.uploads.upload(upload.uploadUrl, fileBuffer, {
  contentType: "audio/mpeg",
  signal: abortController.signal,
});
body
FetchBody
required
Tout corps compatible fetch : Blob, File, ArrayBuffer, Uint8Array, ReadableStream ou string.
Lève YoukaRequestError avec le code UPLOAD_FAILED si le téléversement renvoie un statut non-2xx.

client.projects.get(projectId, options?)

Récupérer l’état complet du projet, y compris les stems, les paroles et les exports.
const project = await client.projects.get("prj_abc123");
console.log(project.title, project.stems, project.lyrics);

client.projects.update(projectId, body, options?)

Mettre à jour les métadonnées du projet (patch).
const project = await client.projects.update("prj_abc123", {
  title: "Updated title",
  artists: ["Artist name"],
});
Passez au moins l’un de title ou artists.

client.projects.list(options?)

Lister tous les projets appartenant au compte authentifié.
const projects = await client.projects.list();
projects.forEach((p) => console.log(p.id, p.title));
Renvoie un tableau d’éléments de liste de projets (une forme plus légère que getProject).

client.projects.delete(projectId, options?)

Supprimer un projet et tous ses stems, paroles et exports associés.
await client.projects.delete("prj_abc123", {
  idempotencyKey: "delete-prj_abc123",
});
La suppression est définitive. Associez-la à une clé d’idempotence afin que les nouvelles tentatives soient sûres.

Et ensuite

  • Stems — relancer la séparation des stems
  • Lyrics sync — re-synchroniser les paroles
  • Exports — rendre les vidéos finalisées
  • Tasks — attendre les opérations de projet avec client.projects.wait