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

# Cài đặt dự án

> Đọc và cập nhật các cài đặt đang hoạt động của một dự án

Mỗi dự án đều có các cài đặt đang hoạt động — trim, background, kiểu phụ đề, bố cục — quyết định cách các bản xuất được render.

Hãy dùng cài đặt dự án khi bạn muốn các ghi đè cục bộ theo dự án mà không đáng để đóng gói vào một preset dùng chung.

Xem [Render settings reference](/en/render-settings-reference) để biết bản đồ các trường dùng chung cho `preset`, `settings.style`, và `settingsOverride`.

## `client.projects.getSettings(projectId, options?)`

Lấy các cài đặt đang hoạt động của một dự án.

```ts theme={null}
const config = await client.projects.getSettings("prj_abc123");
console.log(
  config.settings.trim,
  config.settings.style?.background,
  config.settings.displayLanguages,
);
```

## `client.projects.updateSettings(projectId, body, options?)`

Patch các cài đặt dự án đang hoạt động. Bạn có thể áp dụng một preset, truyền các cài đặt thô, hoặc cả hai (preset được áp dụng trước, sau đó các ghi đè settings được merge chồng lên).

```ts theme={null}
const updated = await client.projects.updateSettings("prj_abc123", {
  presetId: "preset_abc123",
  settings: {
    trim: { startSeconds: 5, endSeconds: 180 },
  },
});
```

### Fields

<ParamField path="presetId" type="string">
  Áp dụng một preset có thể tái sử dụng. Bỏ qua để giữ nguyên preset hiện tại.
</ParamField>

<ParamField path="settings" type="object">
  Patch được áp dụng chồng lên preset. Dùng `style` cho các ghi đè theo cấu trúc của preset,
  cùng với các trường cục bộ theo dự án như `displayLanguages`, `chordSettings`, và
  `duetSingerFilter`.
</ParamField>

### Tìm các trường hợp lệ

Chuyển đổi schema cập nhật sang JSON Schema tại runtime để khám phá mọi trường hợp lệ:

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

const schema = RestUpdateProjectSettingsRequestSchema.toJSONSchema();
console.log(JSON.stringify(schema, null, 2));
```

<Tip>
  Agents nên gọi bước này trước khi thay đổi cài đặt dự án để luôn nắm được
  cấu trúc hiện tại.
</Tip>

## Các mẫu thường gặp

<Tabs>
  <Tab title="Trim">
    ```ts theme={null}
    await client.projects.updateSettings("prj_abc123", {
      settings: {
        trim: { startSeconds: 5.0, endSeconds: 180.0 },
      },
    });
    ```
  </Tab>

  <Tab title="Màu nền">
    ```ts theme={null}
    await client.projects.updateSettings("prj_abc123", {
      settings: {
        style: {
          background: { type: "color", color: "#101010" },
        },
      },
    });
    ```
  </Tab>

  <Tab title="Ngôn ngữ hiển thị">
    ```ts theme={null}
    await client.projects.updateSettings("prj_abc123", {
      settings: {
        displayLanguages: ["en", "es"],
      },
    });
    ```
  </Tab>

  <Tab title="Áp dụng preset">
    ```ts theme={null}
    await client.projects.updateSettings("prj_abc123", {
      presetId: "preset_abc123",
    });
    ```
  </Tab>
</Tabs>

## Cài đặt dự án so với presets

| Câu hỏi                                         | Dùng                   |
| ----------------------------------------------- | ---------------------- |
| Cùng một giao diện cho nhiều dự án?             | Presets                |
| Tinh chỉnh trim hoặc màu một lần cho một dự án? | Cài đặt dự án          |
| Giao diện nền + ghi đè nhỏ theo từng dự án?     | Preset + cài đặt dự án |

## Tiếp theo

* [Render settings reference](/en/render-settings-reference) — tất cả các đường dẫn trường dùng chung và các giá trị enum
* [Presets](/vi/sdk/presets) — cấu hình có thể tái sử dụng
* [Media](/vi/sdk/media) — tải lên background và logo
* [API project settings](/vi/api/project-settings) — cùng luồng thao tác qua HTTP thô
* [CLI projects](/vi/cli/projects) — cùng luồng thao tác từ terminal
* [Exports](/vi/sdk/exports) — dùng `settingsOverride` cho các tinh chỉnh chỉ áp dụng khi export
