Skip to main content
Projekte sind die übergeordnete Ressource in Youka. Jedes Projekt besitzt seine Quelldatei, getrennte Stems, synchronisierte Lyrics, Exporte und Projekteinstellungen.

Ein Projekt erstellen

In den meisten Fällen verwendest du client.projects.create() — das übernimmt die Uploads für dich.
const operation = await client.projects.create({
  source: { type: "path", path: "./song.mp3" },
  lyricsSource: { type: "transcribe" },
});
// => ProjectOperation

Source-Typen

Liest eine Datei von der Festplatte.
source: {
  type: "path",
  path: "./song.mp3",
  contentType: "audio/mpeg", // optional, inferred if omitted
}

Weitere Felder

title
string
Projekttitel. Standardmäßig der Dateiname der Quelle.
splitModel
SplitModel
Modell zur Stem-Trennung. Standard ist mdx23c. Siehe Split-Model-Referenz.
presetId
string
Wende beim Erstellen ein wiederverwendbares Preset an.
lyricsSource
LyricsSource
Konfiguriere die Lyrics-Synchronisierung. Siehe unten.

Lyrics-Quellen

// 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() akzeptiert außerdem eine Low-Level-inputFile-Quelle, wenn du bereits eine hochgeladene inputFileId hast.
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?)

Gib ein Angebot (Quote) für die Credits aus, die zum Erstellen eines Projekts benötigt werden, ohne es tatsächlich zu erstellen.
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(...) akzeptiert dieselben source-Formen wie client.projects.create(...), einschließlich URL-maxVideoQuality. Wenn du die Mediendauer bereits kennst und die Datei nicht nur für ein Angebot hochladen willst, übergib die Low-Level-REST-Form:
const quote = await client.projects.quote({
  durationSeconds: 210,
  lyricsSource: null,
  splitModel: "mdx23c",
});

client.uploads.create(body, options?)

Reserviere einen Upload-Slot und erhalte eine signierte URL.
const upload = await client.uploads.create({
  filename: "song.mp3",
  contentType: "audio/mpeg",
  contentLength: 4_521_344,
});
// => { inputFileId, uploadUrl }

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

Übertrage die Dateibytes per PUT an die signierte URL.
await client.uploads.upload(upload.uploadUrl, fileBuffer, {
  contentType: "audio/mpeg",
  signal: abortController.signal,
});
body
FetchBody
required
Jeder fetch-kompatible Body: Blob, File, ArrayBuffer, Uint8Array, ReadableStream oder string.
Wirft YoukaRequestError mit dem Code UPLOAD_FAILED, wenn der Upload einen Nicht-2xx-Status zurückgibt.

client.projects.get(projectId, options?)

Rufe den vollständigen Projektstatus ab, einschließlich Stems, Lyrics und Exporten.
const project = await client.projects.get("prj_abc123");
console.log(project.title, project.stems, project.lyrics);

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

Patche Projekt-Metadaten.
const project = await client.projects.update("prj_abc123", {
  title: "Updated title",
  artists: ["Artist name"],
});
Übergebe mindestens eines von title oder artists.

client.projects.list(options?)

Liste jedes Projekt auf, das dem authentifizierten Konto gehört.
const projects = await client.projects.list();
projects.forEach((p) => console.log(p.id, p.title));
Gibt ein Array von Project-List-Items zurück (eine schlankere Form als getProject).

client.projects.delete(projectId, options?)

Lösche ein Projekt und alle zugehörigen Stems, Lyrics und Exporte.
await client.projects.delete("prj_abc123", {
  idempotencyKey: "delete-prj_abc123",
});
Das Löschen ist endgültig. Kombiniere es mit einem Idempotency-Key, damit Wiederholungen sicher sind.

Was als Nächstes

  • Stems — Stem-Trennung erneut ausführen
  • Lyrics sync — Lyrics erneut synchronisieren
  • Exports — fertige Videos rendern
  • Tasks — auf Projektoperationen warten mit client.projects.wait