feat: 존댓말/반말 모드, 포터블 exe 빌드, AI 로고/배너

말투 (존댓말 기본, 반말 선택)
- 원문이 실제로 존댓말이면 반말 모드여도 존댓말을 지킨다. 상대가 정중하게
  말했는데 자막이 반말이면 뉘앙스가 뒤집히기 때문.
- 영어·중국어는 문법적 높임이 없으므로 항상 고른 모드를 따른다.
  "please" 를 존댓말 근거로 삼으면 오탐이 많아 쓰지 않았다.
- 낮춤 변환은 한글 자모를 분해해 실제 활용 규칙(모음조화 + 축약)을 구현했다.
  오+아->와, 지+어->져, 하+어->해, 았/었 뒤는 항상 어, 치겠습니다->칠게.
  어미를 나열하는 방식보다 훨씬 넓게 맞는다.
- 변환 방향은 존댓말->반말 한쪽만 한다. 번역 모델의 한국어 출력이 이미
  격식체라 존댓말 모드는 손댈 필요가 없고, 반대 방향은 훨씬 자주 틀린다.
- 지시문을 이해하는 Qwen3 에는 프롬프트로도 전달한다. Seed-X 는 지시문을
  못 알아듣는 모델이라 후처리로만 맞춘다.

포터블 exe
- PyInstaller 명세 + 빌드 스크립트. torch 를 의도적으로 제외했다.
  torch+CUDA 만 2.5GB 라 onefile 로 묶으면 실행할 때마다 그걸 임시폴더에
  푸느라 1분 넘게 걸려 쓸 수 없다.
- 음성인식(faster-whisper)도 번역(NLLB)도 CTranslate2 위에서 돌아 torch 가
  필요 없다. 덕분에 1~3티어는 그대로 다 되고 exe 는 3GB -> 500MB 가 된다.
- 4~5티어는 못 쓰므로 tier_availability() 로 판정해 모델 화면에 '사용 불가'와
  이유를 표시한다. torch 없는 환경에서 앱 전체가 뜨는 것을 확인했다.

AI 이미지
- SDXL-turbo 로 아이콘/배경 생성 (로컬 GPU, 피크 VRAM 1.9GB).
- 글자는 AI 가 제대로 못 쓰므로 아트만 AI 로 만들고 타이포그래피는
  정확히 렌더링해 합성했다. icon.ico 는 16~256px 멀티해상도.

검증: pytest 163개 통과 (말투 53개 신규), ruff clean

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
EJClaw
2026-09-23 01:06:23 +09:00
parent e4a048c8d5
commit 71436843d8
18 changed files with 525 additions and 7 deletions

View File

@@ -1,13 +1,13 @@
# LiveSub — 게임 소리를 실시간 자막으로
![LiveSub](docs/images/banner.png)
게임이나 프로그램에서 나오는 소리를 실시간으로 받아 번역해, 화면 위에 자막으로 얹어줍니다.
디스코드 오버레이처럼 동작하고, 번역은 전부 **내 컴퓨터의 GPU에서** 돌아갑니다.
인터넷도, API 키도 필요 없습니다.
한국어 · English · 日本語 · 中文 사이를 번역합니다.
![자막 오버레이](docs/images/overlay.png)
---
## 무엇을 하는 프로그램인가
@@ -32,6 +32,8 @@
- **5단계 품질 선택** — 속도 우선(0.6초)부터 품질 우선까지
- **자막 자유 설정** — 글꼴·크기·색·외곽선·투명도·줄 수
- **추가학습** — 게임/방송 말투로 번역 모델을 LoRA 학습시킬 수 있습니다
- **존댓말 / 반말 선택** — 기본은 존댓말. 원문이 실제로 존댓말이면 반말 모드여도 존댓말을 지킵니다
- **포터블 exe** — 설치 없이 파일 하나로 실행 (아래 참고)
- **완전 로컬** — 음성이 외부로 나가지 않습니다
---
@@ -53,6 +55,27 @@
![설정 화면](docs/images/settings.png)
## 말투 — 존댓말 / 반말
홈 화면에서 고릅니다. **기본은 존댓말**입니다.
| 상황 | 존댓말 모드 | 반말 모드 |
|---|---|---|
| 영어·중국어 원문 (높임 없음) | 존댓말 | 반말 |
| 일본어 원문이 `です/ます` | 존댓말 | **존댓말** |
| 일본어 원문이 반말 | 존댓말 | 반말 |
**원문이 실제로 존댓말이면 반말 모드여도 존댓말로 나옵니다.** 상대가 정중하게
말했는데 자막이 반말이면 뉘앙스가 통째로 뒤집히기 때문입니다.
영어·중국어는 문법적 높임이 없어서 항상 고른 모드를 따릅니다.
```
Enemy coming from the left 존댓말 → 적이 왼쪽에서 옵니다
반말 → 적이 왼쪽에서 와
左から来ます (정중) 존댓말 → 적이 왼쪽에서 옵니다
반말 → 적이 왼쪽에서 옵니다 ← 원문이 존댓말
```
## 자막 위치 잡기
`자막` 화면에서 **모니터를 고르고 네모칸을 누르면** 그 자리에 붙습니다.
@@ -70,7 +93,32 @@
---
## 설치
## 설치 — 둘 중 하나
| | 포터블 (권장) | 일반 설치 |
|---|---|---|
| 준비물 | `LiveSub.exe` 하나 | Python + PyTorch |
| 크기 | 약 500MB | 약 3GB |
| 쓸 수 있는 티어 | 1~3 | 1~5 전부 |
| 번역 품질 | NLLB | NLLB + Seed-X / Qwen3 |
포터블은 PyTorch를 빼서 만듭니다. PyTorch+CUDA만 2.5GB라 한 파일로 묶으면
**실행할 때마다** 그걸 임시폴더에 푸느라 1분 넘게 걸리기 때문입니다.
음성인식도 번역도 CTranslate2 위에서 돌아가 PyTorch가 필요 없으므로,
1~3티어는 포터블에서 그대로 다 됩니다.
### 포터블 만들기
```powershell
powershell -ExecutionPolicy Bypass -File packaging\build-portable.ps1
```
`dist\LiveSub.exe` 하나만 복사하면 끝입니다. 모델은 exe에 없고 첫 실행 때
`%APPDATA%\LiveSub\models`로 내려받습니다.
---
## 일반 설치
### 1. 사전 준비