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

# Media

> Tải lên và quản lý các nền, logo, và video intro/outro có thể tái sử dụng

Media là các tệp có thể tái sử dụng — nền video, hình ảnh tĩnh, logo và các clip intro/outro — mà bạn có thể tham chiếu từ preset hoặc cài đặt dự án. Tải lên một lần và tái sử dụng trên nhiều dự án.

## Các loại media

| Loại          | Mô tả                           |
| ------------- | ------------------------------- |
| `video`       | Video nền lặp vòng.             |
| `image`       | Hình nền tĩnh.                  |
| `logo`        | Lớp phủ logo.                   |
| `intro-video` | Phát trước khi karaoke bắt đầu. |
| `outro-video` | Phát sau khi karaoke kết thúc.  |

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

Liệt kê tất cả media có thể tái sử dụng thuộc sở hữu của tài khoản đã xác thực.

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

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

Lấy một media item.

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

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

Tạo một media item mới từ đường dẫn cục bộ, bytes, hoặc `inputFileId` đã được tải lên sẵn. Với đường dẫn cục bộ và bytes, SDK sẽ chuẩn bị quá trình tải lên, gửi bytes của tệp đến upload URL, và đăng ký tệp đã tải lên như một media có thể tái sử dụng.

```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>
  Media item này đảm nhiệm vai trò nào trong một lần render.
</ParamField>

<ParamField path="source" type="object">
  Nguồn tệp. Dùng `{ type: "path", path }` cho tệp cục bộ, `{ type:
      "bytes", data, filename }` cho dữ liệu `Blob`, `File`, `ArrayBuffer`, hoặc typed array,
  hoặc `{ type: "inputFile", inputFileId }` khi bạn đã có sẵn upload
  ID.
</ParamField>

<ParamField path="inputFileId" type="string">
  Tuỳ chọn nâng cao cấp thấp: truyền ID được trả về bởi
  `client.uploads.create(...)` thay vì `source`.
</ParamField>

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

Xoá một media item.

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

<Warning>
  Việc xoá media không ảnh hưởng đến các dự án hoặc bản xuất đã được render trước đó
  với media này. Những lần render trong tương lai tham chiếu đến media đã bị xoá sẽ
  quay về nền mặc định.
</Warning>

## Ví dụ end-to-end

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

## Áp dụng một nền

Tham chiếu media đã tải lên từ một preset hoặc trực tiếp từ cài đặt dự án:

```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",
      },
    },
  },
});
```

Để xem đầy đủ các trường được chấp nhận dưới `background`, hãy chuyển schema cài đặt dự án sang JSON:

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

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

## Tiếp theo

* [Tài liệu tham chiếu cài đặt render](/en/render-settings-reference) — tất cả các đường dẫn trường dùng chung và các giá trị enum
* [Projects](/vi/sdk/projects) — tạo dự án và tải lên
* [Presets](/vi/sdk/presets) — đóng gói media cùng các cài đặt render khác
* [Project settings](/vi/sdk/project-settings) — áp dụng nền cho một dự án
