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

Типы медиа

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

client.media.list(options?)

Список всех повторно используемых медиа-элементов, принадлежащих аутентифицированному аккаунту.
const media = await client.media.list();

client.media.get(mediaId, options?)

Получить один медиа-элемент.
const media = await client.media.get("bg_abc123");

client.media.create(body, options?)

Создать новый медиа-элемент из локального пути, байтов или уже загруженного inputFileId. Для локальных путей и байтов SDK подготавливает загрузку, отправляет байты файла на URL загрузки и регистрирует загруженный файл как повторно используемое медиа.
const media = await client.media.create({
  type: "video",
  source: {
    type: "path",
    path: "./background.mp4",
    contentType: "video/mp4",
  },
});
type
'video' | 'image' | 'logo' | 'intro-video' | 'outro-video'
required
Какую роль этот медиа-элемент выполняет при рендеринге.
source
object
Источник файла. Используйте { type: "path", path } для локальных файлов, { type: "bytes", data, filename } для данных Blob, File, ArrayBuffer или типизированного массива, либо { type: "inputFile", inputFileId }, когда у вас уже есть ID загрузки.
inputFileId
string
Продвинутый низкоуровневый параметр: передайте ID, возвращаемый client.uploads.create(...), вместо source.

client.media.delete(mediaId, options?)

Удалить медиа-элемент.
await client.media.delete("bg_abc123", {
  idempotencyKey: "delete-bg_abc123",
});
Удаление медиа не влияет на проекты или экспорты, которые ранее были отрендерены с ним. Будущие рендеры, которые ссылаются на удалённое медиа, будут использовать фон по умолчанию.

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

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);

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

Ссылайтесь на загруженные медиа из пресета или напрямую из настроек проекта:
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:
import { RestUpdateProjectSettingsRequestSchema } from "@youka/sdk";

const schema = RestUpdateProjectSettingsRequestSchema.toJSONSchema();

Что дальше