Skip to main content
Стемы — это вокальные и инструментальные дорожки, извлечённые из исходного аудио. Youka автоматически разделяет на стемы при создании проекта, но при необходимости вы можете повторно запустить разделение с другой моделью.

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

Запускает новую операцию разделения на стемы для проекта.
const operation = await client.projects.separateStems("prj_abc123", {
  splitModel: "audioshakeai",
});

const { project } = await client.projects.wait(operation);
console.log(project.stems);

Parameters

projectId
string
required
Проект для повторной обработки.
splitModel
SplitModel
Модель разделения на стемы. См. Справочник по моделям разделения для рекомендаций.

Available models

ValueDescription
mdx23cПо умолчанию. Баланс качества и скорости.
audioshakeaiВысококачественное разделение AudioShake.
audioshake_vocals_leadТолько вокал и лид-вокал.
musicai_instrumental_onlyВыход только инструментал.
musicai_lead_backing_otherЛид, бэк-вокал и другие стемы.
musicai_with_backing_vocalsВокал, включая бэк-дорожки.
musicai_without_backing_vocalsТолько лид-вокал.
uvr_mdxnet_kara_2UVR-модель, настроенная под караоке.
bs_roformerМодель BS-Roformer.
mel_band_roformer_instrumental_becruilyИнструментал Roformer (mel-band).
mel_band_roformer_instrumental_instv7_gaboxАльтернативный инструментал mel-band.
demucsFacebook Demucs.

End-to-end example

import { YoukaClient, YoukaTaskError } from "@youka/ru/sdk";

const client = new YoukaClient({ apiKey: process.env.YOUKA_API_KEY! });

async function reRunStems(projectId: string) {
  const operation = await client.projects.separateStems(projectId, {
    splitModel: "audioshakeai",
  });

  try {
    const { project } = await client.projects.wait(operation);
    console.log("New stems:", project.stems);
  } catch (error) {
    if (error instanceof YoukaTaskError) {
      console.error("Stem separation failed:", error.code, error.message);
      throw error;
    }
    throw error;
  }
}
Используйте client.tasks.get(taskId) или client.tasks.wait(taskId) только когда вам явно нужен низкоуровневый доступ к задачам. В большинстве случаев следует оставаться на client.projects.wait(operation).

client.projects.downloadStem(projectId, selector, options?)

Скачайте один стем без конвертации в другой формат. Выберите ровно один стем по ID или по типу:
await client.projects.downloadStem(
  "prj_abc123",
  { type: "instrumental" },
  { output: "./stems" },
);

await client.projects.downloadStem(
  "prj_abc123",
  { stemId: "stm_abc123" },
  { output: "./stems/original.wav" },
);
Поддерживаемые типы: original, instrumental, vocals и backing_vocals.

client.projects.downloadStems(projectId, selector?, options?)

Скачайте несколько стемов. Передайте types, передайте stemIds или не указывайте selector, чтобы скачать все доступные стемы:
await client.projects.downloadStems(
  "prj_abc123",
  { types: ["original", "instrumental", "vocals"] },
  { output: "./stems" },
);

await client.projects.downloadStems("prj_abc123", undefined, {
  output: "./stems",
});
Для скачивания нескольких стемов используйте выходную директорию. SDK записывает исходные сохранённые файлы стемов и не выполняет транскодирование.

What’s next