Skip to main content
Los proyectos son el recurso de nivel superior en Youka. Cada proyecto contiene su archivo de origen, stems separados, letras sincronizadas, exportaciones y la configuración del proyecto.

Crear un proyecto

En la mayoría de los casos, usa client.projects.create() — se encarga de las subidas por ti.
const operation = await client.projects.create({
  source: { type: "path", path: "./song.mp3" },
  lyricsSource: { type: "transcribe" },
});
// => ProjectOperation

Tipos de source

Lee un archivo desde el disco.
source: {
  type: "path",
  path: "./song.mp3",
  contentType: "audio/mpeg", // optional, inferred if omitted
}

Otros campos

title
string
Título del proyecto. De forma predeterminada, usa el nombre de archivo del origen.
splitModel
SplitModel
Modelo de separación de stems. El valor predeterminado es mdx23c. Consulta la referencia de modelos de split.
presetId
string
Aplica un preset reutilizable en el momento de la creación.
lyricsSource
LyricsSource
Configura la sincronización de letras. Ver abajo.

Fuentes de letras

// 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() también acepta un source inputFile de bajo nivel cuando ya tienes un inputFileId subido.
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?)

Cotiza los créditos necesarios para crear un proyecto sin crearlo.
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(...) acepta los mismos formatos de source que client.projects.create(...), incluido maxVideoQuality para URL. Si ya conoces la duración del archivo multimedia y no quieres subir el archivo solo para cotizar, pasa la forma REST de bajo nivel:
const quote = await client.projects.quote({
  durationSeconds: 210,
  lyricsSource: null,
  splitModel: "mdx23c",
});

client.uploads.create(body, options?)

Reserva un slot de subida y obtén una URL firmada.
const upload = await client.uploads.create({
  filename: "song.mp3",
  contentType: "audio/mpeg",
  contentLength: 4_521_344,
});
// => { inputFileId, uploadUrl }

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

Haz PUT de los bytes del archivo a la URL firmada.
await client.uploads.upload(upload.uploadUrl, fileBuffer, {
  contentType: "audio/mpeg",
  signal: abortController.signal,
});
body
FetchBody
required
Cualquier body compatible con fetch: Blob, File, ArrayBuffer, Uint8Array, ReadableStream o string.
Lanza YoukaRequestError con el código UPLOAD_FAILED si la subida devuelve un estado no 2xx.

client.projects.get(projectId, options?)

Obtén el estado completo del proyecto, incluidos stems, letras y exportaciones.
const project = await client.projects.get("prj_abc123");
console.log(project.title, project.stems, project.lyrics);

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

Aplica un patch a los metadatos del proyecto.
const project = await client.projects.update("prj_abc123", {
  title: "Updated title",
  artists: ["Artist name"],
});
Pasa al menos uno de title o artists.

client.projects.list(options?)

Lista todos los proyectos propiedad de la cuenta autenticada.
const projects = await client.projects.list();
projects.forEach((p) => console.log(p.id, p.title));
Devuelve un array de elementos de lista de proyectos (una forma más ligera que getProject).

client.projects.delete(projectId, options?)

Elimina un proyecto y todos sus stems, letras y exportaciones asociadas.
await client.projects.delete("prj_abc123", {
  idempotencyKey: "delete-prj_abc123",
});
La eliminación es permanente. Úsalo junto con una clave de idempotencia para que los reintentos sean seguros.

Qué sigue

  • Stems — volver a ejecutar la separación de stems
  • Lyrics sync — volver a sincronizar las letras
  • Exports — renderizar videos terminados
  • Tasks — esperar operaciones del proyecto con client.projects.wait