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

# Медиа

> Загружайте и управляйте повторно используемыми фонами, логотипами и интро/аутро-видео

Медиа — это повторно используемые файлы (видеофоны, статические изображения, логотипы и интро/аутро-клипы), на которые можно ссылаться из пресетов или настроек проекта. Загрузите один раз и используйте повторно в разных проектах.

## Типы медиа

| Тип           | Описание                                 |
| ------------- | ---------------------------------------- |
| `video`       | Зацикленное фоновое видео.               |
| `image`       | Статическое фоновое изображение.         |
| `logo`        | Наложение логотипа.                      |
| `intro-video` | Воспроизводится перед началом караоке.   |
| `outro-video` | Воспроизводится после окончания караоке. |

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

Список всех повторно используемых медиа-элементов, принадлежащих аутентифицированному аккаунту.

```ts theme={null}
const media = await client.media.list();
```

## `client.media.get(mediaId, options?)`

Получить один медиа-элемент.

```ts theme={null}
const media = await client.media.get("bg_abc123");
```

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

Создать новый медиа-элемент из локального пути, байтов или уже загруженного `inputFileId`. Для локальных путей и байтов SDK подготавливает загрузку, отправляет байты файла на URL загрузки и регистрирует загруженный файл как повторно используемое медиа.

```ts theme={null}
const media = await client.media.create({
  type: "video",
  source: {
    type: "path",
    path: "./background.mp4",
    contentType: "video/mp4",
  },
});
```

<ParamField path="type" type="'video' | 'image' | 'logo' | 'intro-video' | 'outro-video'" required>
  Какую роль этот медиа-элемент выполняет при рендеринге.
</ParamField>

<ParamField path="source" type="object">
  Источник файла. Используйте `{ type: "path", path }` для локальных файлов, `{ type:
      "bytes", data, filename }` для данных `Blob`, `File`, `ArrayBuffer` или типизированного массива,
  либо `{ type: "inputFile", inputFileId }`, когда у вас уже есть ID загрузки.
</ParamField>

<ParamField path="inputFileId" type="string">
  Продвинутый низкоуровневый параметр: передайте ID, возвращаемый
  `client.uploads.create(...)`, вместо `source`.
</ParamField>

## `client.media.delete(mediaId, options?)`

Удалить медиа-элемент.

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

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

## Сквозной пример

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

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

async function uploadBackground(path: string, contentType: string) {
  return client.media.create({
    type: "video",
    source: {
      type: "path",
      path,
      contentType,
    },
  });
}

const media = await uploadBackground("./loop.mp4", "video/mp4");
console.log("Media ID:", media.id);
```

## Применение фона

Ссылайтесь на загруженные медиа из пресета или напрямую из настроек проекта:

```ts theme={null}
const media = await uploadBackground("./loop.mp4", "video/mp4");

await client.projects.updateSettings("prj_abc123", {
  settings: {
    style: {
      background: {
        type: "video",
        url: media.url,
        objectFit: "cover",
      },
    },
  },
});
```

Чтобы получить полный набор полей, принимаемых в `background`, преобразуйте схему настроек проекта в JSON:

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

const schema = RestUpdateProjectSettingsRequestSchema.toJSONSchema();
```

## Что дальше

* [Справочник настроек рендера](/en/render-settings-reference) — все общие пути полей и значения enum
* [Projects](/ru/sdk/projects) — создание проектов и загрузки
* [Presets](/ru/sdk/presets) — объединяйте медиа с другими настройками рендера
* [Project settings](/ru/sdk/project-settings) — применяйте фоны к проекту
