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
}
Blob, File, ArrayBuffer ou Uint8Array en mémoire.source: {
type: "bytes",
data: fileBuffer,
filename: "song.mp3",
contentType: "audio/mpeg", // optional
}
URL HTTP ou HTTPS distante.Les pages hébergées prises en charge dépendent de yt-dlp. Voir la liste des URL prises en charge.source: {
type: "url",
url: "https://example.com/song.mp4",
maxVideoQuality: "1080p", // optional: "720p", "1080p", "4k", or "best"
}
maxVideoQuality contrôle la qualité vidéo maximale téléchargée pour les
sources URL. Elle est par défaut à 1080p. Le SDK utilise la meilleure
qualité disponible jusqu’à cette limite, et se rabat sur le meilleur format
disponible si la plateforme n’expose pas de flux plafonné. Utilisez best
pour ne pas plafonner.Sur Node.js et Bun, le SDK s’assure automatiquement de la présence des
binaires de dépendances URL requis (ffmpeg, ffprobe, yt-dlp) lors de
la première utilisation. L’équivalent CLI est youka deps ensure --for url.
Autres champs
Titre du projet. Par défaut, le nom de fichier de la source.
Appliquer un preset réutilisable au moment de la création.
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() 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",
});
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,
});
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