UTAU-WebUI / README.md
crlotwhite's picture
Add UTAU WebUI project with LFS support for voice files
1056960
---
title: UTAU WebUI
emoji: πŸ“‰
colorFrom: indigo
colorTo: red
sdk: gradio
sdk_version: 5.33.1
app_file: app.py
pinned: false
license: mit
---
# 🎡 UTAU WebUI - ν•œκ΅­μ–΄ μŒμ„± ν•©μ„±κΈ°
ν”Όμ•„λ…Έλ‘€ 기반의 μ›Ή UTAU μŒμ„± ν•©μ„± μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. ν•œκ΅­μ–΄ CVC λ³΄μ΄μŠ€λ±…ν¬λ₯Ό μ‚¬μš©ν•˜μ—¬ μžμ—°μŠ€λŸ¬μš΄ ν•œκ΅­μ–΄ μŒμ„±μ„ ν•©μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
## ✨ νŠΉμ§•
- 🎹 **직관적인 ν”Όμ•„λ…Έλ‘€ μΈν„°νŽ˜μ΄μŠ€**: μ›Ή λΈŒλΌμš°μ €μ—μ„œ λ°”λ‘œ μ‚¬μš© κ°€λŠ₯ν•œ ν”Όμ•„λ…Έλ‘€ νŽΈμ§‘κΈ°
- πŸ‡°πŸ‡· **ν•œκ΅­μ–΄ μŒμ„± ν•©μ„±**: hanseol CVC λ³΄μ΄μŠ€λ±…ν¬λ₯Ό μ‚¬μš©ν•œ κ³ ν’ˆμ§ˆ ν•œκ΅­μ–΄ μŒμ„± ν•©μ„±
- πŸ—œοΈ **HDF5 μ••μΆ• μ‹œμŠ€ν…œ**: 47.7MB β†’ 33.9MB (29% μ••μΆ•), 46개 파일 β†’ 1개 파일둜 μ΅œμ ν™”
- πŸš€ **μžλ™ν™”λœ μ›Œν¬ν”Œλ‘œμš°**: Makefile을 ν†΅ν•œ 원클릭 μ„€μ •, μ••μΆ•, μ‹€ν–‰
- 🎡 **μ‹€μ‹œκ°„ νŽΈμ§‘**: λ…ΈνŠΈ μΆ”κ°€, μ‚­μ œ, 가사 μž…λ ₯이 μ‹€μ‹œκ°„μœΌλ‘œ κ°€λŠ₯
- πŸ”Š **μ›¨μ΄λΈŒνΌ μ‹œκ°ν™”**: ν•©μ„±λœ μŒμ„±μ˜ μ›¨μ΄λΈŒνΌμ„ ν”Όμ•„λ…Έλ‘€μ—μ„œ λ°”λ‘œ 확인
- 🎀 **CVC μŒμ†Œ μ‹œμŠ€ν…œ**: 585개의 ν•œκ΅­μ–΄ CVC μŒμ†Œλ‘œ μžμ—°μŠ€λŸ¬μš΄ 발음 κ΅¬ν˜„
- ☁️ **ν΄λΌμš°λ“œ μ΅œμ ν™”**: Gradio 및 Hugging Face Spaces ν™˜κ²½μ— μ΅œμ ν™”
## 🎀 λ³΄μ΄μŠ€λ±…ν¬ 정보
- **λ³΄μ΄μŠ€λ±…ν¬**: hanseol CVC (HDF5 μ••μΆ•)
- **CV (Character Voice)**: KUNGOM
- **UTAU**: KITANE λ°±ν•œμ„€
- **μŒμ†Œ 수**: 585개 CVC μŒμ†Œ
- **μ–Έμ–΄**: ν•œκ΅­μ–΄
- **μ••μΆ•μœ¨**: 29% (원본 47.7MB β†’ μ••μΆ• 33.9MB)
## πŸš€ λΉ λ₯Έ μ‹œμž‘
### ν•„μš” 쑰건
- Python 3.12+
- [uv](https://docs.astral.sh/uv/) (Python νŒ¨ν‚€μ§€ κ΄€λ¦¬μž)
- GNU Make (μžλ™ν™” 슀크립트용)
### uv μ„€μΉ˜
```bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
### 🎯 ν•œ λ²ˆμ— μ„€μ •ν•˜κ³  μ‹€ν–‰ν•˜κΈ°
```bash
# μ €μž₯μ†Œ 클둠
git clone <repository-url>
cd utau-webui
# λͺ¨λ“  μ„€μ •κ³Ό 싀행을 ν•œ λ²ˆμ—
make all
```
### πŸ“‹ 단계별 μ‹€ν–‰
```bash
# 1. 개발 ν™˜κ²½ μ„€μ •
make setup
# 2. λ³΄μ΄μŠ€λ±…ν¬ μ••μΆ• (졜초 1회만)
make compress
# 3. μ›ΉUI μ‹€ν–‰
make run
```
### πŸ” ν˜„μž¬ μƒνƒœ 확인
```bash
# ν”„λ‘œμ νŠΈ μƒνƒœ 확인
make status
# μ˜μ‘΄μ„± 및 ν™˜κ²½ 확인
make check-deps
```
## πŸ“‹ Makefile λͺ…λ Ήμ–΄
| λͺ…λ Ήμ–΄ | μ„€λͺ… |
|--------|------|
| `make help` | μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“  λͺ…λ Ήμ–΄ ν‘œμ‹œ |
| `make setup` | 개발 ν™˜κ²½ 초기 μ„€μ • (μ˜μ‘΄μ„± μ„€μΉ˜) |
| `make compress` | λ³΄μ΄μŠ€λ±…ν¬λ₯Ό HDF5 ν˜•νƒœλ‘œ μ••μΆ• |
| `make run` | μ›ΉUI μ‹€ν–‰ |
| `make dev` | 개발 λͺ¨λ“œλ‘œ μ‹€ν–‰ (auto-reload) |
| `make test` | μ••μΆ•λœ λ³΄μ΄μŠ€λ±…ν¬ ν…ŒμŠ€νŠΈ |
| `make status` | ν˜„μž¬ ν”„λ‘œμ νŠΈ μƒνƒœ 확인 |
| `make clean` | μž„μ‹œ 파일 및 μΊμ‹œ 정리 |
| `make all` | 전체 μ„€μ • 및 μ‹€ν–‰ (setup β†’ compress β†’ run) |
## 🎼 μ‚¬μš©λ²•
1. **λ…ΈνŠΈ μΆ”κ°€**: ν”Όμ•„λ…Έλ‘€μ—μ„œ μ›ν•˜λŠ” μœ„μΉ˜λ₯Ό ν΄λ¦­ν•˜μ—¬ λ…ΈνŠΈ μΆ”κ°€
2. **가사 μž…λ ₯**: λ…ΈνŠΈλ₯Ό λ”λΈ”ν΄λ¦­ν•˜μ—¬ ν•œκ΅­μ–΄ 가사 μž…λ ₯
3. **λ…ΈνŠΈ νŽΈμ§‘**: λ“œλž˜κ·Έν•˜μ—¬ λ…ΈνŠΈ 길이 μ‘°μ •, μœ„μ•„λž˜λ‘œ λ“œλž˜κ·Έν•˜μ—¬ μŒλ†’μ΄ μ‘°μ •
4. **μŒμ„± ν•©μ„±**: "🎡 μŒμ„± ν•©μ„±" λ²„νŠΌ ν΄λ¦­ν•˜μ—¬ μŒμ„± 생성
5. **μž¬μƒ**: μƒμ„±λœ μŒμ„±μ„ λ°”λ‘œ λ“€μ–΄λ³΄κ±°λ‚˜ λ‹€μš΄λ‘œλ“œ
### μ§€μ›ν•˜λŠ” ν•œκ΅­μ–΄ μŒμ†Œ
- **κΈ°λ³Έ λͺ¨μŒ**: μ•„, 이, 우, 에, 였, 으, μ–΄
- **자음+λͺ¨μŒ μ‘°ν•©**: λ°”, λ‹€, κ°€, ν•˜, 자, μΉ΄, 라, 마, λ‚˜, 파, 사, 타 λ“±
- **볡합 λͺ¨μŒ**: μ•Ό, 예, μ—¬, μš”, 유, 의, 와, 웨, μœ„, μ›Œ
- **λ„λ ˆλ―Έ μŒκ³„**: 도, 레, λ―Έ, 파, 솔, 라, μ‹œ
## πŸ—œοΈ HDF5 μ••μΆ• μ‹œμŠ€ν…œ
### μž₯점
- **파일 관리 μ΅œμ ν™”**: 46개 WAV 파일 β†’ 1개 HDF5 파일
- **μš©λŸ‰ μ΅œμ ν™”**: 29% μ••μΆ• 효율 (47.7MB β†’ 33.9MB)
- **μ„±λŠ₯ ν–₯상**: 더 λΉ λ₯Έ λ‘œλ”© 및 배포
- **ν΄λΌμš°λ“œ μΉœν™”μ **: Hugging Face Spaces λ“± ν΄λΌμš°λ“œ ν™˜κ²½μ— μ΅œμ ν™”
### μ••μΆ• κ³Όμ •
```bash
# μžλ™ μ••μΆ•
make compress
# μˆ˜λ™ μ••μΆ•
uv run python -c "from voice_data_converter import convert_voicebank_to_compressed_format; convert_voicebank_to_compressed_format('voice/hanseol CVC')"
```
## πŸ› οΈ 기술 μŠ€νƒ
- **Frontend**: Gradio + Custom PianoRoll Component
- **Backend**: Python
- **μŒμ„± ν•©μ„±**: UTAU Engine + Straycat Resampler
- **데이터 μ••μΆ•**: HDF5 (with gzip compression)
- **μ˜€λ””μ˜€ 처리**: SoundFile, NumPy
- **νŒ¨ν‚€μ§€ 관리**: uv
- **μžλ™ν™”**: GNU Make
## πŸ”§ κ°œλ°œν•˜κΈ°
### 개발 ν™˜κ²½ μ„€μ •
```bash
# 전체 개발 ν™˜κ²½ μ„€μ •
make setup
# 개발 λͺ¨λ“œλ‘œ μ‹€ν–‰ (파일 λ³€κ²½ μ‹œ μžλ™ μž¬μ‹œμž‘)
make dev
# μ‰˜ μ§„μž…
make shell
```
### μ˜μ‘΄μ„± 관리
```bash
# μ˜μ‘΄μ„± μΆ”κ°€
uv add <package-name>
# 개발 μ˜μ‘΄μ„± μΆ”κ°€
uv add --dev <package-name>
# μ˜μ‘΄μ„± μ—…λ°μ΄νŠΈ
make update
```
### ν”„λ‘œμ νŠΈ 정보
```bash
# ν”„λ‘œμ νŠΈ 정보 확인
make info
# μ˜μ‘΄μ„± 트리 확인
uv tree
```
## 🚨 문제 ν•΄κ²°
### μ••μΆ•λœ λ³΄μ΄μŠ€λ±…ν¬κ°€ μ—†λŠ” 경우
```bash
# μƒνƒœ 확인
make status
# λ³΄μ΄μŠ€λ±…ν¬ μ••μΆ•
make compress
```
### 원본 λ³΄μ΄μŠ€λ±…ν¬κ°€ μ—†λŠ” 경우
1. hanseol CVC λ³΄μ΄μŠ€λ±…ν¬λ₯Ό `voice/hanseol CVC` 디렉토리에 배치
2. `make compress` μ‹€ν–‰
### ν™˜κ²½ 문제
```bash
# ν™˜κ²½ 확인
make check-deps
# μ˜μ‘΄μ„± μž¬μ„€μΉ˜
make setup
```
## πŸ“ μ €μž‘κΆŒ 및 λΌμ΄μ„ μŠ€
### UTAU WebUI
λ³Έ ν”„λ‘œμ νŠΈλŠ” μ˜€ν”ˆμ†ŒμŠ€ μ†Œν”„νŠΈμ›¨μ–΄μž…λ‹ˆλ‹€.
### Straycat Resampler
λ³Έ ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” UTAU λ¦¬μƒ˜ν”ŒλŸ¬λŠ” [straycat](https://github.com/UtaUtaUtau/straycat)을 기반으둜 ν•©λ‹ˆλ‹€.
**원본 μ €μž₯μ†Œ**: https://github.com/UtaUtaUtau/straycat
**λΌμ΄μ„ μŠ€**: MIT License
**μ €μž‘κΆŒ**: Copyright (c) UtaUtaUtau
> Yet another WORLD-based UTAU resampler.
MIT λΌμ΄μ„ μŠ€μ— 따라 λ³Έ ν”„λ‘œμ νŠΈμ— ν¬ν•¨λ˜μ—ˆμœΌλ©°, 원본 μ €μž‘κΆŒ ν‘œμ‹œλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.
### hanseol CVC λ³΄μ΄μŠ€λ±…ν¬
- **CV**: KUNGOM
- **UTAU**: KITANE λ°±ν•œμ„€
ν•΄λ‹Ή λ³΄μ΄μŠ€λ±…ν¬μ˜ μ‚¬μš© κΆŒν•œμ— λŒ€ν•΄μ„œλŠ” 원 μ €μž‘κΆŒμžμ˜ 이용 약관을 λ”°λ¦…λ‹ˆλ‹€.