# ACE-Step Gradio 데모 사용자 가이드

**언어 / Language / 语言 / 言語:** [English](../en/GRADIO_GUIDE.md) | [한국어](GRADIO_GUIDE.md) | [中文](../zh/GRADIO_GUIDE.md) | [日本語](../ja/GRADIO_GUIDE.md)

---

이 가이드는 ACE-Step Gradio 웹 인터페이스를 사용한 음악 생성에 대한 포괄적인 문서를 제공하며, 모든 기능과 설정을 포함합니다.

## 목차

- [시작하기](#시작하기)
- [서비스 설정](#서비스-설정)
- [생성 모드](#생성-모드)
- [입력 파라미터](#입력-파라미터)
- [고급 설정](#고급-설정)
- [결과 섹션](#결과-섹션)
- [LoRA 학습](#lora-학습)
- [팁과 모범 사례](#팁과-모범-사례)

---

## 시작하기

### 데모 실행

```bash
# 기본 실행
python app.py

# 사전 초기화 포함
python app.py --config acestep-v15-turbo --init-llm

# 특정 포트 지정
python app.py --port 7860
```

### 인터페이스 개요

Gradio 인터페이스의 레이아웃:

1. **설정** (접이식 아코디언) - 서비스 설정, DiT/LM 파라미터, 출력 옵션
2. **생성 탭** - 메인 작업 공간. 상단에 **생성 모드** 라디오 선택기:
   - Turbo/SFT 모델: Simple, Custom, Remix, Repaint
   - Base 모델: Simple, Custom, Remix, Repaint, Extract, Lego, Complete
3. **결과 섹션** - 생성된 오디오 재생, 스코어링, 배치 내비게이션
4. **학습 탭** - 데이터셋 빌더 및 LoRA 학습

---

## 서비스 설정

### 모델 선택

| 설정 | 설명 |
|------|------|
| **체크포인트 파일** | 학습된 모델 체크포인트 선택 (사용 가능한 경우) |
| **메인 모델 경로** | DiT 모델 설정 선택 (예: `acestep-v15-turbo`, `acestep-v15-turbo-shift3`) |
| **디바이스** | 처리 디바이스: `auto` (권장), `cuda`, 또는 `cpu` |

### 5Hz LM 설정

| 설정 | 설명 |
|------|------|
| **5Hz LM 모델 경로** | 언어 모델 선택. **사용 가능한 모델은 GPU 티어에 따라 자동 필터링** — 예: 6-8GB GPU는 0.6B만, 24GB+ GPU는 모든 크기(0.6B, 1.7B, 4B) 표시. |
| **5Hz LM 백엔드** | `vllm` (더 빠름, VRAM ≥8GB NVIDIA GPU 권장), `pt` (PyTorch, 범용 폴백), 또는 `mlx` (Apple Silicon). **VRAM <8GB GPU에서는 `pt`/`mlx`로 제한** (vllm의 KV 캐시가 메모리를 과도하게 사용하므로). |
| **5Hz LM 초기화** | 초기화 시 LM을 로드하려면 체크 (thinking 모드에 필요). **VRAM ≤6GB GPU(Tier 1-2)에서 기본적으로 체크 해제 및 비활성화.** |

> **적응형 기본값**: 모든 LM 설정은 GPU의 VRAM 티어에 따라 자동 구성됩니다. 권장 LM 모델, 백엔드, 초기화 상태가 최적 성능을 위해 사전 설정됩니다. 수동으로 변경할 수 있지만, GPU와 호환되지 않는 선택 시 시스템이 경고를 표시합니다.

### 성능 옵션

| 설정 | 설명 |
|------|------|
| **Flash Attention 사용** | 더 빠른 추론을 위해 활성화 (flash_attn 패키지 필요) |
| **CPU로 오프로드** | 유휴 시 모델을 CPU로 오프로드하여 GPU 메모리 절약. **VRAM <20GB GPU에서 자동 활성화.** |
| **DiT를 CPU로 오프로드** | DiT 모델을 특별히 CPU로 오프로드. **VRAM <12GB GPU에서 자동 활성화.** |
| **INT8 양자화** | INT8 가중치 양자화로 모델 VRAM 사용량 감소. **VRAM <20GB GPU에서 자동 활성화.** |
| **모델 컴파일** | 최적화된 추론을 위해 `torch.compile` 활성화. **모든 티어에서 기본 활성화** (양자화 활성 시 필요). |

> **티어 인식 설정**: 오프로드, 양자화, 컴파일 옵션은 GPU 티어에 따라 자동 설정됩니다. 전체 티어 테이블은 [GPU_COMPATIBILITY.md](../ko/GPU_COMPATIBILITY.md)를 참조하세요.

### LoRA 어댑터

| 설정 | 설명 |
|------|------|
| **LoRA 경로** | 학습된 LoRA 어댑터 디렉토리 경로 |
| **LoRA 로드** | 지정된 LoRA 어댑터 로드 |
| **언로드** | 현재 로드된 LoRA 제거 |
| **LoRA 사용** | 추론용 로드된 LoRA 활성화/비활성화 |

> **⚠️ 참고:** PEFT와 TorchAO 간 호환성 문제로 양자화된 모델에 LoRA 어댑터를 로드할 수 없습니다. LoRA를 사용해야 하는 경우 어댑터를 로드하기 전에 **INT8 양자화**를 **None**으로 설정하세요.

### 초기화

**서비스 초기화**를 클릭하여 모델을 로드합니다. 상태 박스에 다음을 포함한 진행 상황과 확인이 표시됩니다:
- 감지된 GPU 티어 및 VRAM
- 최대 허용 시간 및 배치 크기 (LM 초기화 여부에 따라 동적 조정)
- 자동 수정된 호환되지 않는 설정에 대한 경고

초기화 후 **오디오 시간** 및 **배치 크기** 슬라이더가 티어 제한을 반영하도록 자동 업데이트됩니다.

---

## 생성 모드

생성 탭 상단의 **생성 모드** 라디오 선택기가 워크플로를 결정합니다. Turbo 및 SFT 모델은 4가지 모드를 제공하고, Base 모델은 3가지를 추가로 제공합니다.

### Simple 모드

빠른 자연어 기반 음악 생성을 위해 설계되었습니다.

**사용 방법:**
1. 생성 모드에서 **Simple** 선택
2. "곡 설명" 필드에 자연어 설명 입력
3. 보컬이 필요 없으면 "인스트루멘탈" 옵션 체크
4. 선호하는 보컬 언어 옵션 선택
5. **샘플 생성** 클릭하여 caption, 가사, 메타데이터 생성
6. 확장된 섹션에서 생성된 콘텐츠 확인
7. **음악 생성** 클릭하여 오디오 생성

**설명 예시:**
- "조용한 저녁을 위한 부드러운 벵골 러브송"
- "강렬한 베이스 드롭이 있는 업비트 일렉트로닉 댄스 뮤직"
- "어쿠스틱 기타의 멜랑콜리한 인디 포크"
- "연기 자욱한 바에서 연주하는 재즈 트리오"

**랜덤 샘플:** 🎲 버튼을 클릭하여 랜덤 예시 설명을 로드합니다.

### Custom 모드

모든 생성 파라미터를 완전히 제어합니다 (text2music).

**사용 방법:**
1. 생성 모드에서 **Custom** 선택
2. Caption과 가사 필드를 수동으로 입력
3. 옵션으로 참조 오디오를 업로드하여 스타일 가이던스
4. 옵션 메타데이터 설정 (BPM, 키, 시간 등)
5. 옵션으로 **포맷** 클릭하여 LM으로 입력 향상
6. 필요에 따라 고급 설정 구성
7. **음악 생성** 클릭하여 오디오 생성

### Remix 모드

기존 오디오의 멜로디 구조를 유지하면서 스타일을 변경합니다.

**사용 방법:**
1. 생성 모드에서 **Remix** 선택
2. 소스 오디오 업로드 (리믹스할 곡)
3. 타겟 스타일을 설명하는 Caption 작성
4. 옵션으로 가사 수정
5. **Remix 강도** (0.0-1.0) 조정: 높을수록 = 원본 구조에 가까움
6. **음악 생성** 클릭

**용도:** 커버 버전 생성, 스타일 전이, 곡 변형 생성.

### Repaint 모드

오디오의 특정 시간 구간을 재생성하고 나머지는 유지합니다.

**사용 방법:**
1. 생성 모드에서 **Repaint** 선택
2. 소스 오디오 업로드
3. **리페인트 시작**과 **리페인트 끝** 설정 (초; -1은 파일 끝)
4. 리페인트 섹션의 원하는 콘텐츠를 설명하는 Caption 작성
5. **음악 생성** 클릭

**용도:** 문제 있는 섹션 수정, 구간 내 가사 변경, 곡 연장.

### Extract 모드 (Base 모델 전용)

믹스된 오디오에서 특정 악기 트랙을 추출/분리합니다.

**사용 방법:**
1. 생성 모드에서 **Extract** 선택
2. 소스 오디오 업로드
3. 드롭다운에서 추출할 **트랙 이름** 선택
4. **음악 생성** 클릭

**사용 가능한 트랙:** vocals, backing_vocals, drums, bass, guitar, keyboard, percussion, strings, synth, fx, brass, woodwinds

### Lego 모드 (Base 모델 전용)

기존 오디오에 새로운 악기 트랙을 추가합니다.

**사용 방법:**
1. 생성 모드에서 **Lego** 선택
2. 소스 오디오 업로드
3. 드롭다운에서 추가할 **트랙 이름** 선택
4. 트랙 특성을 설명하는 Caption 작성
5. **음악 생성** 클릭

### Complete 모드 (Base 모델 전용)

지정된 악기로 부분적인 트랙을 완성합니다 (자동 편곡).

**사용 방법:**
1. 생성 모드에서 **Complete** 선택
2. 소스 오디오 업로드
3. 추가할 여러 **트랙 이름** 선택
4. 원하는 스타일을 설명하는 Caption 작성
5. **음악 생성** 클릭

---

## 입력 파라미터

### 오디오 입력

| 필드 | 설명 |
|------|------|
| **참조 오디오** | 스타일/음색 가이던스를 위한 옵션 오디오 (Custom 모드에서 표시) |
| **소스 오디오** | Remix, Repaint, Extract, Lego, Complete 모드에 필수 |
| **코드로 변환** | 소스 오디오에서 5Hz 시맨틱 코드 추출 |

#### LM 코드 힌트 (Custom 모드)

사전 계산된 오디오 시맨틱 코드를 여기에 붙여넣어 생성을 가이드할 수 있습니다. **트랜스크라이브** 버튼을 사용하여 코드를 분석하고 메타데이터를 추출합니다. 소스 오디오 업로드 없이 멜로디 구조를 제어하기 위한 고급 기능입니다.

### 음악 Caption

원하는 음악의 텍스트 설명. 다음에 대해 구체적으로 작성:
- 장르와 스타일
- 악기
- 분위기와 느낌
- 템포 느낌 (BPM을 지정하지 않는 경우)

**예시:** "일렉 기타, 강렬한 드럼, 캐치한 신스 훅이 있는 업비트 팝 록"

🎲를 클릭하여 랜덤 예시 caption을 로드합니다.

### 가사

구조 태그가 포함된 가사를 입력:

```
[Verse 1]
오늘 거리를 걸으며
네가 했던 말들을 떠올렸어

[Chorus]
나는 앞으로 나아가, 강하게 서서
여기가 내 자리야

[Verse 2]
...
```

**인스트루멘탈 체크박스:** 가사 내용에 관계없이 인스트루멘탈 음악을 생성하려면 체크합니다.

**보컬 언어:** 보컬 언어를 선택합니다. 자동 감지 또는 인스트루멘탈 트랙에는 "unknown"을 사용합니다.

**포맷 버튼:** 5Hz LM을 사용하여 caption과 가사를 향상시키려면 클릭합니다.

### 옵션 파라미터

| 파라미터 | 기본값 | 설명 |
|----------|--------|------|
| **BPM** | 자동 | 분당 비트 수 (30-300) |
| **키 스케일** | 자동 | 음악 키 (예: "C Major", "Am", "F# minor") |
| **박자 기호** | 자동 | 박자 기호: 2 (2/4), 3 (3/4), 4 (4/4), 6 (6/8) |
| **오디오 시간** | 자동/-1 | 목표 길이(초) (10-600). -1은 자동 |
| **배치 크기** | 2 | 생성할 오디오 변형 수 (1-8) |

---

## 고급 설정

### DiT 파라미터

| 파라미터 | 기본값 | 설명 |
|----------|--------|------|
| **추론 스텝** | 8 | 디노이징 스텝. Turbo: 1-20, Base: 1-200 |
| **가이던스 스케일** | 7.0 | CFG 강도 (base 모델만). 높을수록 = 프롬프트를 더 따름 |
| **시드** | -1 | 랜덤 시드. 배치에는 쉼표로 구분된 값 사용 |
| **랜덤 시드** | ✓ | 체크 시 랜덤 시드 생성 |
| **오디오 형식** | mp3 | 출력 형식: mp3, flac |
| **시프트** | 3.0 | 타임스텝 시프트 계수 (1.0-5.0). turbo에 3.0 권장 |
| **추론 방법** | ode | ode (Euler, 더 빠름) 또는 sde (확률적) |
| **커스텀 타임스텝** | - | 타임스텝 오버라이드 (예: "0.97,0.76,0.615,0.5,0.395,0.28,0.18,0.085,0") |

### Base 모델 전용 파라미터

| 파라미터 | 기본값 | 설명 |
|----------|--------|------|
| **ADG 사용** | ✗ | 더 나은 품질을 위해 적응형 듀얼 가이던스 활성화 |
| **CFG 구간 시작** | 0.0 | CFG 적용 시작 시점 (0.0-1.0) |
| **CFG 구간 끝** | 1.0 | CFG 적용 종료 시점 (0.0-1.0) |

### LM 파라미터

| 파라미터 | 기본값 | 설명 |
|----------|--------|------|
| **LM 온도** | 0.85 | 샘플링 온도 (0.0-2.0). 높을수록 = 더 창의적 |
| **LM CFG 스케일** | 2.0 | LM 가이던스 강도 (1.0-3.0) |
| **LM Top-K** | 0 | Top-K 샘플링. 0이면 비활성화 |
| **LM Top-P** | 0.9 | 핵 샘플링 (0.0-1.0) |
| **LM 네거티브 프롬프트** | "NO USER INPUT" | CFG용 네거티브 프롬프트 |

### CoT (사고의 연쇄) 옵션

| 옵션 | 기본값 | 설명 |
|------|--------|------|
| **CoT Metas** | ✓ | LM 추론을 통해 메타데이터 생성 |
| **CoT Language** | ✓ | LM으로 보컬 언어 감지 |
| **제약 디코딩 디버그** | ✗ | 디버그 로깅 활성화 |

### 생성 옵션

| 옵션 | 기본값 | 설명 |
|------|--------|------|
| **LM 코드 강도** | 1.0 | LM 코드가 생성에 미치는 영향의 강도 (0.0-1.0) |
| **자동 스코어** | ✗ | 품질 스코어 자동 계산 |
| **자동 LRC** | ✗ | 가사 타임스탬프 자동 생성 |
| **LM 배치 청크 크기** | 8 | LM 배치당 최대 항목 수 (GPU 메모리) |

### 메인 생성 컨트롤

| 컨트롤 | 설명 |
|--------|------|
| **Think** | 코드 생성 및 메타데이터를 위한 5Hz LM 활성화 |
| **ParallelThinking** | 병렬 LM 배치 처리 활성화 |
| **CaptionRewrite** | LM이 입력 caption을 향상시키도록 함 |
| **AutoGen** | 완료 후 다음 배치 자동 시작 |

---

## 결과 섹션

### 생성된 오디오

배치 크기에 따라 최대 8개의 오디오 샘플이 표시됩니다. 각 샘플에는 다음이 포함됩니다:

- **오디오 플레이어** - 생성된 오디오 재생, 일시 정지, 다운로드
- **소스로 전송** - 이 오디오를 소스 오디오 입력으로 전송하여 추가 처리
- **저장** - 오디오와 메타데이터를 JSON 파일로 저장
- **스코어** - 퍼플렉시티 기반 품질 스코어 계산
- **LRC** - 가사 타임스탬프 생성 (LRC 형식)

### 상세 아코디언

"Score & LRC & LM Codes"를 클릭하여 확장하고 다음을 확인:
- **LM 코드** - 이 샘플의 5Hz 시맨틱 코드
- **품질 스코어** - 퍼플렉시티 기반 품질 메트릭
- **가사 타임스탬프** - LRC 형식 타이밍 데이터

### 배치 내비게이션

| 컨트롤 | 설명 |
|--------|------|
| **◀ 이전** | 이전 배치 보기 |
| **배치 인디케이터** | 현재 배치 위치 표시 (예: "배치 1 / 3") |
| **다음 배치 상태** | 백그라운드 생성 진행 상황 표시 |
| **다음 ▶** | 다음 배치 보기 (AutoGen이 켜져 있으면 생성 트리거) |

### 파라미터 복원

**이 설정을 UI에 적용**을 클릭하여 현재 배치의 모든 생성 파라미터를 입력 필드로 복원합니다. 좋은 결과를 반복하는 데 유용합니다.

### 배치 결과

"배치 결과 및 생성 상세" 아코디언에는 다음이 포함됩니다:
- **모든 생성 파일** - 모든 배치의 모든 파일 다운로드
- **생성 상세** - 생성 과정에 대한 상세 정보

---

## LoRA 학습

LoRA 학습 탭은 커스텀 LoRA 어댑터를 만들기 위한 도구를 제공합니다.

> 📖 **전체 단계별 안내** (데이터 준비, 주석, 전처리, 학습, 내보내기)는 [LoRA 학습 튜토리얼](./LoRA_Training_Tutorial.md)을 참조하세요.

### 데이터셋 빌더 탭

#### 1단계: 로드 또는 스캔

**옵션 A: 기존 데이터셋 로드**
1. 이전에 저장한 데이터셋 JSON 경로 입력
2. **로드** 클릭

**옵션 B: 새 디렉토리 스캔**
1. 오디오 폴더 경로 입력
2. **스캔** 클릭하여 오디오 파일 검색 (wav, mp3, flac, ogg, opus)

#### 2단계: 데이터셋 설정

| 설정 | 설명 |
|------|------|
| **데이터셋 이름** | 데이터셋 이름 |
| **모두 인스트루멘탈** | 모든 트랙에 보컬이 없는 경우 체크 |
| **커스텀 활성화 태그** | 이 LoRA의 스타일을 활성화하는 고유 태그 |
| **태그 위치** | 태그를 배치할 위치: 앞에 추가, 뒤에 추가, 또는 caption 대체 |

#### 3단계: 자동 라벨링

**모두 자동 라벨링**을 클릭하여 모든 오디오 파일의 메타데이터를 생성:
- Caption (음악 설명)
- BPM
- 키
- 박자 기호

**메타 건너뛰기** 옵션은 LLM 라벨링을 건너뛰고 N/A 값을 사용합니다.

#### 4단계: 미리보기 및 편집

슬라이더를 사용하여 샘플을 선택하고 수동 편집:
- Caption
- 가사
- BPM, 키, 박자 기호
- 언어
- 인스트루멘탈 플래그

**변경 저장**을 클릭하여 샘플을 업데이트합니다.

#### 5단계: 데이터셋 저장

저장 경로를 입력하고 **데이터셋 저장**을 클릭하여 JSON으로 내보냅니다.

#### 6단계: 전처리

빠른 학습을 위해 데이터셋을 사전 계산 텐서로 변환:
1. 옵션으로 기존 데이터셋 JSON 로드
2. 텐서 출력 디렉토리 설정
3. **전처리** 클릭

이것은 오디오를 VAE 잠재 변수로 인코딩하고, 텍스트를 임베딩으로 인코딩하며, 조건 인코더를 실행합니다.

### LoRA 학습 탭

#### 데이터셋 선택

전처리된 텐서 디렉토리 경로를 입력하고 **데이터셋 로드**를 클릭합니다.

#### LoRA 설정

| 설정 | 기본값 | 설명 |
|------|--------|------|
| **LoRA 랭크 (r)** | 64 | LoRA의 용량. 높을수록 = 더 많은 용량, 더 많은 메모리 |
| **LoRA 알파** | 128 | 스케일링 계수 (일반적으로 랭크의 2배) |
| **LoRA 드롭아웃** | 0.1 | 정규화를 위한 드롭아웃 비율 |

#### 학습 파라미터

| 설정 | 기본값 | 설명 |
|------|--------|------|
| **학습률** | 1e-4 | 최적화 학습률 |
| **최대 에폭** | 500 | 최대 학습 에폭 |
| **배치 크기** | 1 | 학습 배치 크기 |
| **그래디언트 누적** | 1 | 유효 배치 = batch_size × accumulation |
| **N 에폭마다 저장** | 200 | 체크포인트 저장 빈도 |
| **시프트** | 3.0 | turbo 모델의 타임스텝 시프트 |
| **시드** | 42 | 재현성을 위한 랜덤 시드 |

#### 학습 컨트롤

- **학습 시작** - 학습 프로세스 시작
- **학습 중지** - 학습 중단
- **학습 진행** - 현재 에폭과 손실 표시
- **학습 로그** - 상세 학습 출력
- **학습 손실 플롯** - 시각적 손실 곡선

#### LoRA 내보내기

학습 후 최종 어댑터를 내보냅니다:
1. 내보내기 경로 입력
2. **LoRA 내보내기** 클릭

---

## 팁과 모범 사례

### 최고 품질을 위해

1. **thinking 모드 사용** - LM 향상 생성을 위해 "Think" 체크박스를 활성화 유지
2. **caption을 구체적으로** - 장르, 악기, 분위기, 스타일 세부 사항 포함
3. **LM이 메타데이터를 감지하도록** - 자동 감지를 위해 BPM/키/시간을 비워 둠
4. **배치 생성 사용** - 2-4개 변형을 생성하고 최적의 것을 선택

### 더 빠른 생성을 위해

1. **turbo 모델 사용** - `acestep-v15-turbo` 또는 `acestep-v15-turbo-shift3` 선택
2. **추론 스텝을 8로 유지** - turbo에 최적인 기본값
3. **배치 크기 줄이기** - 빠른 결과가 필요하면 배치 크기 낮추기
4. **AutoGen 비활성화** - 배치 생성의 수동 제어

### 일관된 결과를 위해

1. **특정 시드 설정** - "랜덤 시드" 체크 해제 후 시드 값 입력
2. **좋은 결과 저장** - 재현을 위해 파라미터를 내보내려면 "저장" 사용
3. **"이 설정 적용" 사용** - 좋은 배치에서 파라미터 복원

### 장시간 음악을 위해

1. **명시적 시간 설정** - 초 단위로 시간 지정
2. **Repaint 모드 사용** - 초기 생성 후 문제 있는 섹션 수정
3. **생성 체인** - "소스로 전송"을 사용하여 이전 결과를 기반으로 구축

### 스타일 일관성을 위해

1. **LoRA 학습** - 스타일에 맞는 커스텀 어댑터 생성
2. **참조 오디오 사용** - 오디오 업로드에서 스타일 참조 업로드
3. **일관된 caption 사용** - 유사한 설명적 언어 유지

### 문제 해결

**오디오가 생성되지 않음:**
- 모델이 초기화되었는지 확인 (녹색 상태 메시지)
- thinking 모드 사용 시 5Hz LM이 초기화되었는지 확인
- 오류 메시지에 대한 상태 출력 확인

**결과 품질이 낮음:**
- 추론 스텝 증가 (base 모델의 경우)
- 가이던스 스케일 조정
- 다른 시드 시도
- caption을 더 구체적으로 작성

**메모리 부족 (OOM):**
- 시스템에 자동 VRAM 관리 (VRAM 가드, 적응형 VAE 디코드, 자동 배치 축소) 포함. 그래도 OOM 발생 시:
- 수동으로 배치 크기 줄이기
- CPU 오프로드 활성화 (VRAM <20GB에서 자동 활성화되어야 함)
- INT8 양자화 활성화 (VRAM <20GB에서 자동 활성화되어야 함)
- LM 배치 청크 크기 줄이기

**LM이 작동하지 않음:**
- 초기화 시 "5Hz LM 초기화"가 체크되었는지 확인 (VRAM ≤6GB GPU에서 기본 비활성화)
- 유효한 LM 모델 경로가 선택되었는지 확인 (티어 호환 모델만 표시)
- vllm 또는 PyTorch 백엔드가 사용 가능한지 확인 (VRAM <8GB에서 vllm 제한)
- LM 체크박스가 회색이면 GPU 티어가 LM을 지원하지 않음 — DiT 전용 모드 사용

---

## 키보드 단축키

Gradio 인터페이스는 표준 웹 단축키를 지원합니다:
- **Tab** - 입력 필드 간 이동
- **Enter** - 텍스트 입력 제출
- **Space** - 체크박스 토글

---

## 언어 지원

인터페이스는 여러 UI 언어를 지원합니다:
- **영어** (en)
- **중국어** (zh)
- **일본어** (ja)
- **한국어** (ko)

서비스 설정 섹션에서 선호하는 언어를 선택하세요.

---

자세한 내용은 다음을 참조하세요:
- 메인 README: [`../../README.md`](../../README.md)
- REST API 문서: [`../en/API.md`](../en/API.md)
- Python 추론 API: [`../en/INFERENCE.md`](../en/INFERENCE.md)
