> ## 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.

# Экспорт

> Рендерите караоке-видео в облаке или локально

Экспорт рендерит готовое караоке в видеофайл. Используйте `client.exports.create(...)` как основную точку входа. Выбирайте `target: "local"`, когда хотите, чтобы SDK рендерил прямо на текущей машине; иначе по умолчанию используется облачный экспорт.

## `client.exports.create(projectId, input, options?)`

Выберите цель экспорта с `target: "cloud" | "local"`.

```ts theme={null}
const cloud = await client.exports.create("prj_abc123", {
  resolution: "1080p",
  quality: "high",
});
// => ExportOperation

const local = await client.exports.create("prj_abc123", {
  target: "local",
  resolution: "1080p",
  quality: "high",
  outputPath: "./karaoke.mp4",
});
// => { outputPath, fileSize, duration, ... }
```

Используйте облако, когда вам нужен управляемый асинхронный экспорт. Используйте локальный режим, когда хотите рендерить напрямую на машине вызывающего.

### Общие поля

| Поле               | Тип                                   | Описание                                                                                      |
| ------------------ | ------------------------------------- | --------------------------------------------------------------------------------------------- |
| `resolution`       | `"540p" \| "720p" \| "1080p" \| "4k"` | Выходное разрешение.                                                                          |
| `quality`          | `"low" \| "average" \| "high"`        | Качество кодирования.                                                                         |
| `fps`              | `30 \| 60`                            | Количество кадров в секунду. По умолчанию `30`. Используйте `60` для более плавного движения. |
| `playbackRate`     | `number`                              | Множитель скорости (например, `0.9`).                                                         |
| `toneFrequency`    | `number`                              | Сдвиг высоты тона в полутонах.                                                                |
| `transparent`      | `boolean`                             | Рендер с прозрачным фоном.                                                                    |
| `presetId`         | `string`                              | Применить пресет перед рендером.                                                              |
| `stemVolumes`      | `Record<string, number>`              | Переопределения громкости по стемам по id стема.                                              |
| `settingsOverride` | `object`                              | Патч настроек проекта только для этого экспорта.                                              |

Используйте `fps: 60` для более плавного движения. В облачных расчётах при `60 fps` применяется множитель кредитов `1.5x`. Прозрачный облачный экспорт в 60 fps доступен, когда выбранные длительность и разрешение укладываются в облачные ограничения.

### Пример с громкостью стемов

```ts theme={null}
const result = await client.exports.create("prj_abc123", {
  resolution: "1080p",
  quality: "high",
  stemVolumes: {
    vocals: 0,
    instrumental: 1,
    backing: 0.5,
  },
});
```

### Пример с переопределением настроек

```ts theme={null}
const result = await client.exports.create("prj_abc123", {
  resolution: "1080p",
  settingsOverride: {
    trim: { startSeconds: 5, endSeconds: 180 },
    style: {
      background: { type: "color", color: "#101010" },
    },
  },
});
```

См. [Справочник настроек рендера](/en/render-settings-reference) для полной формы
`settingsOverride`.

## `client.exports.quote(projectId, input, options?)`

Оцените количество кредитов, требуемых для облачного экспорта, не запуская экспорт.

```ts theme={null}
const quote = await client.exports.quote("prj_abc123", {
  resolution: "1080p",
  quality: "high",
  transparent: false,
});

console.log(quote.creditsRequired, quote.sufficientBalance);
```

Локальные экспорты выполняются на машине вызывающего и не используют кредиты облачного экспорта,
поэтому `quote(...)` предназначен только для облачных экспортов.

## `client.exports.list(projectId, input?, options?)`

Список экспортов проекта с пагинацией.

```ts theme={null}
const exports = await client.exports.list("prj_abc123", {
  page: 1,
  pageSize: 50,
});
```

<ParamField path="page" type="number">
  Номер страницы. По умолчанию на сервере `1`.
</ParamField>

<ParamField path="pageSize" type="number">
  Размер страницы. По умолчанию `100`. Максимум `100`.
</ParamField>

## `client.exports.get(exportId, options?)`

Получить экспорт только по ID, не зная родительский проект.

```ts theme={null}
const exported = await client.exports.get("exp_xyz");
```

## Локальный экспорт

```ts theme={null}
const result = await client.exports.create("prj_abc123", {
  target: "local",
  resolution: "1080p",
  quality: "high",
  outputPath: "./karaoke.mp4",
  onProgress(progress) {
    console.log(progress.stage, progress.percent);
  },
});

console.log(result.outputPath);
```

Используйте `onDependencyProgress`, если хотите получать обновления во время установки или проверки локального инструментария рендера.

## `client.exports.prepareLocal(projectId, body, options?)`

Вернуть подготовленный payload, необходимый для локального рендера экспорта. Используйте это при интеграции с `@youka/remotion` или другим локальным рендерером. Сервер возвращает входные данные композиции, URL ассетов и параметры рендера без постановки облачного рендера в очередь.

```ts theme={null}
const payload = await client.exports.prepareLocal("prj_abc123", {
  resolution: "1080p",
  quality: "high",
});

// Hand payload off to your local renderer
await renderLocally(payload);
```

<Note>
  `client.exports.prepareLocal(...)` не запускает облачный рендер. Никакие платные
  вычисления на стороне Youka не потребляются.
</Note>

## Ожидание экспорта

Облачные экспорты выполняются асинхронно. Используйте `client.exports.wait(...)`:

```ts theme={null}
const operation = await client.exports.create("prj_abc123", {
  resolution: "1080p",
});

const finalized = await client.exports.wait(operation, {
  pollIntervalMs: 3_000,
});
console.log("Download from", finalized.url);
```

## Скачивание результата

Облачные экспорты завершаются подписанным `url`. Используйте встроенный хелпер, чтобы стримить файл на диск. `output` может быть как директорией, так и полным путём к файлу, а `filename` — опционален:

```ts theme={null}
await client.exports.download(finalized, {
  output: "./exports",
});
```

## Что дальше

* [Tasks](/ru/sdk/tasks) — дескрипторы операций и расширенный polling задач
* [Presets](/ru/sdk/presets) — переиспользуемые конфигурации рендера
* [Project settings](/ru/sdk/project-settings) — патчить активные настройки проекта
