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

# Пресеты

> Управляйте переиспользуемыми конфигурациями рендера из SDK

Пресет — это переиспользуемая конфигурация рендера (фон, стиль субтитров, раскладка), которую можно применить к любому проекту или экспорту. Используйте пресеты, когда вам нужен единый визуальный стиль для множества треков.

См. [Render settings reference](/en/render-settings-reference), чтобы узнать полную
форму `preset` и все варианты, основанные на enum.

## `client.presets.list(options?)`

Выведите список всех пресетов, принадлежащих аутентифицированному аккаунту.

```ts theme={null}
const presets = await client.presets.list();
presets.forEach((p) => console.log(p.id, p.name, p.isDefault));
```

## `client.presets.get(presetId, options?)`

Получите один пресет.

```ts theme={null}
const preset = await client.presets.get("preset_abc123");
```

## `client.presets.create(body, options?)`

Создайте новый пресет.

```ts theme={null}
const preset = await client.presets.create({
  name: "Neon Night",
  preset: {
    background: {
      type: "gradient",
      colors: ["#12001f", "#2f0a57"],
      angle: 90,
    },
    singerTextStyles: {
      0: {
        fontFamily: "Inter",
        textColor: "#00f5ff",
        effectColor: "#ff4fd8",
      },
    },
  },
  isDefault: false,
});
```

<ParamField path="name" type="string" required>
  Отображаемое имя, которое показывается в UI Youka.
</ParamField>

<ParamField path="preset" type="KaraokePreset" required>
  Полное тело пресета. Используйте [`Render settings
      reference`](/en/render-settings-reference) для человекочитаемой карты полей
  или `KaraokePresetSchema.toJSONSchema()` для машиночитаемой схемы.
</ParamField>

<ParamField path="isDefault" type="boolean">
  Сделать новый пресет пресетом по умолчанию для аккаунта. Одновременно пресетом
  по умолчанию может быть только один.
</ParamField>

Для безопасных повторных попыток используйте вместе с ключом идемпотентности:

```ts theme={null}
const preset = await client.presets.create(body, {
  idempotencyKey: "create-neon-night-v1",
});
```

## `client.presets.update(presetId, body, options?)`

Внесите частичные изменения (patch) в существующий пресет. Передайте любой поднабор из `name`, `preset` и `isDefault`.

```ts theme={null}
const updated = await client.presets.update("preset_abc123", {
  name: "Neon Night v2",
  preset: {
    singerTextStyles: {
      0: { textColor: "#ff2a2a" },
    },
  },
});
```

## `client.presets.delete(presetId, options?)`

Удалите пресет.

```ts theme={null}
await client.presets.delete("preset_abc123", {
  idempotencyKey: "delete-preset_abc123",
});
```

<Warning>
  Удаление пресета не удаляет проекты или экспорты, которые ранее были
  отрендерены с его использованием. Будущие экспорты, которые ссылаются на
  удалённый пресет, завершатся с ошибкой.
</Warning>

## `client.presets.setDefault(presetId, options?)`

Сделайте пресет пресетом по умолчанию для новых проектов. Это удобная обёртка над `client.presets.update(presetId, { isDefault: true })`.

```ts theme={null}
await client.presets.setDefault("preset_abc123");
```

При установке нового пресета по умолчанию предыдущий автоматически снимается.

## Поиск допустимых полей

SDK экспортирует схему Zod, которая валидирует тела пресетов. Преобразуйте её в JSON Schema во время выполнения для агентов и конструкторов форм:

```ts theme={null}
import { KaraokePresetSchema } from "@youka/sdk";

const jsonSchema = KaraokePresetSchema.toJSONSchema();
console.log(jsonSchema);
```

<Tip>
  Авторы агентов: вызывайте эту схему перед изменением пресетов, чтобы модель
  знала точные имена полей и типы значений.
</Tip>

Человекочитаемый справочник:

* [Render settings reference](/en/render-settings-reference)
* [CLI presets](/ru/cli/presets)
* [API presets](/ru/api/presets)

## Применение пресета

Пресеты можно применять в трёх местах:

<Tabs>
  <Tab title="При создании проекта">
    ```ts theme={null}
    await client.projects.create({
      source: { type: "path", path: "./song.mp3" },
      presetId: "preset_abc123",
    });
    ```
  </Tab>

  <Tab title="В настройках проекта">
    ```ts theme={null}
    await client.projects.updateSettings("prj_abc123", {
      presetId: "preset_abc123",
    });
    ```
  </Tab>

  <Tab title="При экспорте">
    ```ts theme={null}
    await client.exports.create("prj_abc123", {
      presetId: "preset_abc123",
      resolution: "1080p",
    });
    ```
  </Tab>
</Tabs>

## Что дальше

* [Render settings reference](/en/render-settings-reference) — все общие пути полей и значения enum
* [Media](/ru/sdk/media) — используется в телах пресетов
* [Project settings](/ru/sdk/project-settings) — применяйте пресеты к проекту
* [API presets](/ru/api/presets) — тот же сценарий через raw HTTP
* [CLI presets](/ru/cli/presets) — тот же сценарий из терминала
* [Exports](/ru/sdk/exports) — рендер с пресетом
