> ## Documentation Index
> Fetch the complete documentation index at: https://docs.youka.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Stems

> Acione tarefas de separação de stems em um projeto existente

Stems são as faixas vocais e instrumentais extraídas do áudio de origem. O Youka separa stems automaticamente quando você cria um projeto, mas você pode executar a separação novamente com um modelo diferente sempre que precisar.

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

Inicie uma nova operação de separação de stems para um projeto.

```ts theme={null}
const operation = await client.projects.separateStems("prj_abc123", {
  splitModel: "audioshakeai",
});

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

### Parameters

<ParamField path="projectId" type="string" required>
  O projeto a ser reprocessado.
</ParamField>

<ParamField path="splitModel" type="SplitModel">
  Modelo de separação de stems. Veja [Referência de modelo de separação](/pt/desktop/split-model)
  para orientação.
</ParamField>

### Modelos disponíveis

| Value                                         | Description                                  |
| --------------------------------------------- | -------------------------------------------- |
| `mdx23c`                                      | Padrão. Qualidade e velocidade equilibradas. |
| `audioshakeai`                                | Separação AudioShake de alta qualidade.      |
| `audioshake_vocals_lead`                      | Apenas vocais e vocais principais.           |
| `musicai_instrumental_only`                   | Saída apenas instrumental.                   |
| `musicai_lead_backing_other`                  | Principal, backing vocals e outros stems.    |
| `musicai_with_backing_vocals`                 | Vocais incluindo faixas de apoio.            |
| `musicai_without_backing_vocals`              | Apenas vocais principais.                    |
| `uvr_mdxnet_kara_2`                           | Modelo UVR ajustado para karaokê.            |
| `bs_roformer`                                 | Modelo BS-Roformer.                          |
| `mel_band_roformer_instrumental_becruily`     | Roformer mel-band instrumental.              |
| `mel_band_roformer_instrumental_instv7_gabox` | Instrumental mel-band alternativo.           |
| `demucs`                                      | Facebook Demucs.                             |

## Exemplo de ponta a ponta

```ts theme={null}
import { YoukaClient, YoukaTaskError } from "@youka/pt/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;
  }
}
```

<Tip>
  Use `client.tasks.get(taskId)` ou `client.tasks.wait(taskId)` apenas quando você
  precisar explicitamente de acesso de baixo nível a tarefas. A maioria dos usuários deve ficar em
  `client.projects.wait(operation)`.
</Tip>

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

Baixe um stem sem convertê-lo para outro formato. Selecione exatamente um
stem por ID ou tipo:

```ts theme={null}
await client.projects.downloadStem(
  "prj_abc123",
  { type: "instrumental" },
  { output: "./stems" },
);

await client.projects.downloadStem(
  "prj_abc123",
  { stemId: "stm_abc123" },
  { output: "./stems/original.wav" },
);
```

Os tipos compatíveis são `original`, `instrumental`, `vocals` e
`backing_vocals`.

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

Baixe vários stems. Passe `types`, passe `stemIds` ou omita o seletor para
baixar todos os stems disponíveis:

```ts theme={null}
await client.projects.downloadStems(
  "prj_abc123",
  { types: ["original", "instrumental", "vocals"] },
  { output: "./stems" },
);

await client.projects.downloadStems("prj_abc123", undefined, {
  output: "./stems",
});
```

Para downloads com múltiplos stems, use um diretório de saída. O SDK grava os
arquivos de stems originais armazenados e não os transcodifica.

## Próximos passos

* [Sincronização de letras](/pt/sdk/lyrics-sync) — ressincronize letras após trocar stems
* [Tarefas](/pt/sdk/tasks) — handles de operação e polling avançado de tarefas
* [Referência de modelo de separação](/pt/desktop/split-model) — escolha o modelo certo
