TrendShift · 2026.05.22 · 1위

abogen 딥다이브
— EPUB·PDF를 1분 만에 자막 동기화 오디오북으로

Kokoro-82M TTS를 입어 EPUB·PDF·텍스트·마크다운·자막 파일을 자연스러운 음성 + 정확한 SRT/ASS 자막으로 변환하는 데스크탑/웹 앱. 4.2k 별, MIT 라이선스, Windows·macOS·Linux 모두 지원하며 CPU·NVIDIA·AMD GPU에서 돈다.
목차
  1. 한줄 요약
  2. 왜 지금 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어/시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1한줄 요약

무엇을 하는 프로젝트인가
ONE LINER

"내 책장에 꽂힌 EPUB·PDF를 드래그앤드롭 한 번으로, 5초 안에 자막 동기화된 자연스러운 오디오북으로 변환하는 데스크탑/웹 도구."

abogen은 "audiobook generator"의 줄임말이다. ePub·PDF·TXT·Markdown·SRT/ASS/VTT 자막 파일을 드래그하면, Kokoro-82M이라는 초경량 오픈소스 TTS 모델로 자연스러운 음성을 만들고, 발화 타이밍에 정확히 맞춘 자막까지 함께 뽑아낸다.

오디오북, YouTube 내레이션, TikTok·Instagram 보이스오버, 자기계발용 "들으면서 공부하기" — 텍스트가 있는 모든 작업에 쓸 수 있다. 그리고 전부 로컬에서 돈다. 클라우드 결제도, API 키도, 인터넷도 필요 없다.

TERM
TTS (Text-to-Speech, 음성합성)
텍스트를 자연스러운 사람 목소리로 바꾸는 AI 기술. 예전엔 "안녕하세요... 반갑습니다"처럼 끊긴 소리였지만, 요즘은 진짜 사람 같다. Kokoro-82M은 82M 파라미터(=뇌세포 8200만 개)로 충분히 자연스러운 영어 발화를 만들어내는 초경량 오픈 TTS 모델.
비유

오디오북 한 권을 사람이 녹음하면 어떻게 될까? 전문 성우가 6~10시간 동안 스튜디오에서 한 자 한 자 읽는다. 한 권에 수십만 원, 출판사가 결정해야 만들어진다.

abogen은 그 일을 당신 노트북에서 11초 만에 해낸다. ~3,000자 텍스트를 RTX 2060 모바일 GPU로 11초에 처리해서 3분 28초짜리 오디오를 만든다. 사람 성우가 28초 동안 읽는 분량을 11초에 만드는 셈 — 실시간보다 ~19배 빠르다.

2왜 지금 주목받는가

트렌딩 이유와 경쟁 제품 대비 강점

① 진입 장벽이 거의 없다

Windows 사용자라면 WINDOWS_INSTALL.bat 더블클릭이 전부다. Python을 따로 깔 필요도 없고, CUDA 드라이버를 손볼 필요도 없다. 스크립트가 임베디드 파이썬 + 모든 의존성 + CUDA 호환 PyTorch를 자동으로 받아 설치한다. 비개발자도 5분이면 GUI를 띄울 수 있다.

② Kokoro-82M — 작지만 자연스러운 TTS

이 프로젝트의 심장. 82M 파라미터(허깅페이스 hexgrad/Kokoro-82M)는 ChatGPT-4o 음성 모델 대비 0.x% 크기인데도, 영어 기준으로 유튜브에 그대로 올려도 어색하지 않은 수준의 발화 품질을 낸다. Apache-2.0 라이선스라 상업 이용도 자유롭다.

모델파라미터특징
ChatGPT-4o Voice비공개(추정 수억)OpenAI 클라우드 전용, API 과금
ElevenLabs비공개최고 품질, 분당 과금
Kokoro-82M82M오픈, 로컬, Apache-2.0
Coqui XTTS-v2~870M다국어 좋지만 무겁다

③ 자막 동기화가 진짜 정확하다

경쟁 도구(audiblez, autiobooks 등)들은 대부분 시간 기반 분배 — 즉 "이 문장은 3초니까 3초로 잘라"식. abogen은 Kokoro의 timestamp token을 직접 받아서 단어 단위까지 정확히 정렬한다. 1단어 자막, 2단어 자막, 문장 + 강조(highlighting) 같은 카라오케 스타일까지 지원.

DIFFERENTIATOR
spaCy 문장 분할로 "Mr." 같은 함정 회피

단순히 마침표로 자르면 "Mr. Smith said..."가 "Mr."에서 끊긴다. abogen은 옵션으로 spaCy NLP 라이브러리를 켜서 진짜 문장 경계를 잡는다. 비영어 텍스트는 오디오 생성 에, 영어는 자막 생성 에 spaCy를 돌려서 자연스러운 호흡을 만든다.

④ 다중 인터페이스 — GUI · Web · CLI

같은 코어 위에 3가지 사용 방식이 있다:

Web UI는 한 발 앞선 기능을 먼저 받는다 — Supertonic TTS, LLM 텍스트 정규화, Audiobookshelf 통합 같은 신기능이 거기서 먼저 안정화되고 데스크탑으로 백포팅된다.

⑤ Audiobookshelf 자동 푸시

변환 끝난 M4B 파일을 셀프호스팅 오디오북 서버(Audiobookshelf)에 한 번에 업로드한다. 폴더 자동 매핑, API 토큰 인증, Nginx Proxy Manager용 리버스 프록시 가이드까지 README에 들어 있다 — 진짜 셀프호스터에 친화적이다.

⑥ 4.2k 별, 24 릴리스, 14명 컨트리뷰터

v1.3.1 기준 GitHub 별 4.2k, 256 fork, 24개 릴리스. 한 명이 시작한 프로젝트인데 @jeremiahsb의 PR 한 방(+55,000줄)으로 Web UI가 통째로 추가됐다. 메인테이너 Deniz Şafak는 PR에 친화적이고, jborza·robmckinnon·brianxiadong 등 외부 기여자가 챕터 지원, 단어별 자막, 마크다운 지원을 각각 가져왔다.

3기술 스택 전체 지도

백엔드 · 프론트엔드 · 인프라 한 눈에

코어 (음성·문서 처리)

라이브러리버전역할
kokoro≥0.9.4TTS 엔진의 본체. hexgrad/Kokoro-82M 모델 추론
misaki[zh]≥0.9.4중국어 G2P(자소→음소) 변환기. 일본어용 misaki[ja]도 옵션
supertonic≥0.1.0차세대 TTS 엔진 (현재 Web UI에서 주로 활성화, PyQt에는 미연동)
spacy≥3.8.7문장 경계 탐지. "Mr." "Dr." 함정 회피
torch버전 미고정
(CUDA 인덱스에서 자동 결정)
딥러닝 백본. CUDA 12.6/12.8/13.0, ROCm 6.4 분기

문서 입력 처리

라이브러리역할
ebooklibEPUB 파일 파싱. 챕터·메타데이터·표지 이미지 추출
PyMuPDFPDF 텍스트·페이지 추출 (속도가 빠른 fitz)
beautifulsoup4EPUB 내 HTML/XHTML 정제
MarkdownMarkdown 파싱 + 챕터 추출
charset_normalizer + chardet인코딩 자동 감지 (한글 EUC-KR도 OK)
num2words"123" → "one hundred twenty three" 같은 정규화

오디오·자막 출력

라이브러리역할
soundfileWAV/FLAC 파일 입출력
mutagenMP3/M4B 메타데이터·챕터 마커 삽입
static_ffmpegFFmpeg을 패키지로 번들 — 사용자가 설치 안 해도 됨. MP3/OPUS/M4B 인코딩 + time-stretch에 사용
pygame음성 프리뷰 재생용 가벼운 오디오 백엔드

인터페이스

인터페이스스택특징
데스크탑 GUIPyQt6 ≥ 6.5크로스 플랫폼 네이티브 위젯, 드래그앤드롭
Web UIFlask ≥ 3.0.3 + htmx (추정)실시간 진행률, 작업 큐, JSON API 노출
CLIabogen-cli디버깅·자동화·스크립트 통합용

인프라 (Docker / 자동화)

도구역할
docker-compose.yamlGPU 컨테이너 기본값. NVIDIA Container Toolkit 통합
abogen/webui/DockerfileWeb UI 전용 슬림 이미지. TORCH_INDEX_URL 빌드 인자로 CUDA 버전 가변
uv (Astral)Python 패키지 매니저. CUDA 12.6/12.8/13.0/ROCm용 분기 인덱스 자동 라우팅
hatchling빌드 백엔드. pyproject.toml 기반 wheel/sdist 빌드
GitHub Actions.github/workflows/test_pip.yml — pip 설치 회귀 테스트 CI
임베디드 Python (Windows)독립 실행형. Python·pip 사전 설치본을 다운로드해서 sandbox 생성

외부 통합

대상통합 방식
AudiobookshelfHTTP API + 폴더 자동 매핑. M4B 자동 푸시
OpenAI-호환 LLM (Ollama, OpenAI, Mistral …)LLM 텍스트 정규화 — "don't" 같은 contraction을 자연스럽게 풀어줌
espeak-ngKokoro의 G2P 백엔드. 영어 외 언어의 음소화 담당
Hugging Face Hub모델·음성 가중치 자동 다운로드. HF_HOME로 캐시 경로 제어
TERM
G2P (Grapheme-to-Phoneme)
글자(grapheme)를 발음 단위(phoneme)로 바꾸는 변환. 영어 "knight"는 글자로는 k-n-i-g-h-t지만 음소로는 /naɪt/. TTS 모델은 보통 음소를 입력으로 받기 때문에, 그 앞에 G2P 단계가 꼭 들어간다. espeak-ng가 abogen의 G2P 엔진.

4아키텍처 심화 분석

데이터가 어떻게 흐르는가 — 파일에서 오디오까지

전체 데이터 파이프라인

┌──────────────────────────────────────────────────────────────┐ │ INPUT LAYER │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌────────┐ │ │ │ EPUB │ │ PDF │ │ TXT │ │ Markdown │ │ SRT/ │ │ │ │ebooklib │ │ PyMuPDF │ │ chardet │ │ markdown │ │ ASS │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬─────┘ └───┬────┘ │ │ └───────────┴───────────┴───────────┴───────────┘ │ │ │ │ │ ┌─────────────┴────────────┐ │ │ │ 캐시된 .txt + 챕터 마커 │ │ │ │ <> │ │ │ └─────────────┬────────────┘ │ └──────────────────────────┼───────────────────────────────────┘ │ ┌──────────────────────────┼───────────────────────────────────┐ │ NORMALIZE & SEGMENT │ │ │ ┌────────────────┴─────────┐ │ │ │ spaCy 문장 분할 │ │ │ │ num2words 숫자 풀이 │ │ │ │ (옵션) LLM 정규화 │ │ │ └────────────────┬─────────┘ │ └──────────────────────────┼───────────────────────────────────┘ │ ┌──────────────────────────┼───────────────────────────────────┐ │ TTS GENERATION ▼ │ │ ┌──────────────────────────┐ │ │ │ espeak-ng (G2P) │ 글자 → 음소 │ │ └────────────────┬─────────┘ │ │ ▼ │ │ ┌──────────────────────────┐ │ │ │ Kokoro-82M (PyTorch) │ 음소 → 오디오 + 타임 │ │ │ CUDA / ROCm / MPS / CPU │ 스탬프 토큰 │ │ └────────────────┬─────────┘ │ └──────────────────────────┼───────────────────────────────────┘ │ ┌──────────────────────────┼───────────────────────────────────┐ │ OUTPUT MULTIPLEX ▼ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ 오디오 │ │ 자막 │ │ 메타데이터 │ │ │ │ soundfile │ │ SRT/ASS 생성 │ │ mutagen M4B 챕터 │ │ │ │ static_ffmpeg│ │ 단어/문장/Line│ │ EPUB 표지 embed │ │ │ └──────┬──────┘ └──────┬───────┘ └─────────┬────────┘ │ │ └───────────────┴───────────────────┘ │ │ │ │ │ ▼ │ │ WAV / FLAC / MP3 / OPUS / M4B + .SRT/.ASS │ └──────────────────────────────────────────────────────────────┘ │ ▼ (옵션) ┌──────────────────────┐ │ Audiobookshelf │ │ HTTP API 푸시 │ └──────────────────────┘

핵심 설계 패턴 ① — 캐시된 중간 텍스트

EPUB·PDF·MD를 입력받으면 abogen은 곧장 음성을 만들지 않는다. 먼저 캐시 디렉토리에 .txt 파일을 만들고 거기에 <<CHAPTER_MARKER:Chapter 1>> 같은 챕터 마커를 끼워넣는다. 사용자는 이 텍스트를 편집할 수 있고, 음성 생성에서 오류가 나면 특정 챕터만 재생성할 수 있다.

설계 의도
"비용이 큰 단계는 한 번만, 캐시 가능하게"

TTS 생성은 GPU에서도 10~30분 걸리는 일이다. 만약 16번째 챕터에서 오타 발견 → 다 다시 만든다? 사용자 입장에선 재앙. abogen은 "파싱은 캐시 가능한 텍스트로, TTS는 챕터 단위로 격리"라는 두 레이어 분리로 이 문제를 해결한다.

핵심 설계 패턴 ② — 변동 가능한 자막 모드

Kokoro가 영어 텍스트에서 timestamp token(각 단어가 언제 시작하는지)을 직접 출력한다. abogen은 이 토큰을 받아서 자막 모드별로 재구성한다:

비영어 텍스트는 timestamp token이 없으니 duration-based fallback을 쓴다 — 즉 spaCy로 잘라낸 문장의 길이로 시간을 분배. 한국어 등 비영어는 단어 단위 자막이 안 되는 이유가 여기 있다.

핵심 설계 패턴 ③ — 큐 모드와 설정 격리

여러 파일을 한 번에 처리할 때 골치 아픈 게 "파일마다 다른 음성/속도/포맷"을 쓰고 싶을 때다. abogen의 큐 매니저는 각 파일이 추가될 시점의 설정을 스냅샷한다. 메인 UI를 바꿔도 큐 안 항목엔 영향 없음. 필요하면 "Override item settings" 옵션으로 일괄 적용도 가능.

핵심 설계 패턴 ④ — 두 가지 자막 시간 보정 전략

입력이 SRT/ASS 자막 파일일 때(자막→오디오), 자막 시간과 실제 발화 시간이 안 맞을 수 있다. abogen은 두 가지 전략을 제공한다:

웹 UI 작업 흐름 — Flask + Background Worker

Browser ──upload──▶ Flask ──enqueue──▶ Background Worker ▲ │ │ │ htmx polling │ ▼ │ /partials/jobs │ Kokoro + ffmpeg └──────────────────┴────────────── 결과 파일을 /data/outputs로 JSON 상태는 /api/jobs/<id>

웹 UI는 별도 워커 프로세스가 큐를 소비하고, 브라우저는 GET /partials/jobs를 폴링해서 진행률을 그린다. GET /api/jobs/<id>는 JSON으로 같은 정보를 반환 — 외부 자동화에 그대로 쓸 수 있다.

5디렉토리 구조 해부

주요 폴더·파일의 역할
denizsafak/abogen/ ├── abogen/ ← 패키지 본체 │ ├── pyqt/ ← 데스크탑 GUI (PyQt6) │ │ └── main.py ← `abogen` 명령의 진입점 │ ├── webui/ ← Flask Web UI │ │ ├── app.py ← `abogen-web` / `abogen-cli` 진입점 │ │ ├── Dockerfile ← Web UI 전용 슬림 이미지 │ │ └── templates/, static/ ← htmx 기반 UI 리소스 │ ├── resources/ ← 아이콘·번들 자원 (sdist에서는 제외) │ ├── assets/ ← Windows 바로가기 생성 스크립트 등 │ └── VERSION ← `pyproject.toml` dynamic version ├── tests/ ← pytest 회귀 테스트 ├── docs/ ← 보조 문서 ├── demo/ ← README용 GIF·이미지·데모 가이드 ├── docker-compose.yaml ← GPU 컨테이너 + Audiobookshelf 통합용 .env ├── docker-compose.webui.yml ← 경량 webui-only 변형 ├── pyproject.toml ← 의존성·CUDA 분기 인덱스 정의 (hatchling) ├── .env.example ← ABOGEN_LLM_* / ABOGEN_DATA / GPU UID/GID 등 ├── WINDOWS_INSTALL.bat ← Python embed + 의존성 자동 설치 스크립트 ├── build_pypi.py ← PyPI 릴리스 빌드 헬퍼 ├── CHANGELOG.md ← 24개 릴리스 변경 이력 └── README.md ← 메가 문서 (설치/사용/트러블슈팅)

주목할 만한 디자인 결정

6학습 포인트 (기술별)

이 레포에서 무엇을 배울 수 있는가

① Python TTS 파이프라인 — Kokoro 모델 호출 패턴

Kokoro 같은 외부 모델을 자신의 앱에 통합할 때 abogen이 보여주는 패턴은 그대로 응용 가능하다:

② PyQt6 — 크로스 플랫폼 데스크탑 GUI

Electron 대안으로 PyQt6는 메모리도 적게 먹고 네이티브 모양에 가깝다. abogen이 보여주는 PyQt6 활용 포인트:

③ Flask + htmx — 무거운 SPA 없이 실시간 UI

React/Vue 대신 Flask 서버사이드 렌더링 + htmx 폴링으로 같은 UX를 만든다. 이 조합의 장점:

④ Docker + uv 멀티 CUDA 빌드

PyTorch는 CUDA 버전마다 다른 wheel을 쓴다. abogen의 pyproject.tomlextras로 분기를 명시한다:

# [project.optional-dependencies]
cuda126 = ["torch"]    # CUDA 12.6
cuda    = ["torch"]    # CUDA 12.8 (기본)
cuda130 = ["torch"]    # CUDA 13.0
rocm    = ["torch", "pytorch-triton-rocm"]   # AMD ROCm 6.4

# [tool.uv.sources]
torch = [
  { index = "pytorch-rocm-64-nightly", marker = "extra == 'rocm'" },
  { index = "pytorch-cuda-130", marker = "extra == 'cuda130'" },
  { index = "pytorch-cuda-126", marker = "extra == 'cuda126'" },
  { index = "pytorch-cuda-128", marker = "extra == 'cuda'" },
]

이 패턴 하나를 알아두면 "GPU 의존성을 가진 모든 Python 패키지"의 배포 골치가 사라진다. CUDA 환경마다 별도 빌드를 만들 필요 없이 uv tool install abogen[cuda130] 한 줄로 끝.

⑤ FFmpeg을 패키지에 묶기 — static_ffmpeg

오디오 도구들이 늘 부딪히는 벽: "사용자에게 FFmpeg을 설치하라고 시킬 거냐?". abogen은 static_ffmpeg 패키지로 정적 컴파일된 ffmpeg 바이너리를 번들로 가져온다. 의존성 0개로 MP3/OPUS/M4B 인코딩, time-stretch까지 다 처리 — 데스크탑 앱을 만드는 사람에게 매우 실용적인 트릭이다.

⑥ EPUB·PDF 파싱 노하우 — 챕터 마커 패턴

EPUB은 ZIP 안에 XHTML 여럿이 든 구조다. PDF는 페이지 단위. 둘을 "챕터를 인식한 평문 + 마커"로 통일하는 abogen의 접근은 다른 문서 처리 앱에도 그대로 쓸 수 있다:

<<METADATA_TITLE:해리포터와 마법사의 돌>>
<<METADATA_ARTIST:J.K. Rowling>>
<<METADATA_COVER_PATH:/cache/cover.jpg>>

<<CHAPTER_MARKER:1장 살아남은 아이>>
프리벳가 4번지에 사는 더즐리 부부는...

<<CHAPTER_MARKER:2장 사라진 유리>>
거의 10년이 지났다...

7하드웨어/시스템 요구사항

노트북·Mac·NAS·서버 어디서 돌릴지
환경속도(체감)비고
CPU 전용 (어떤 PC든)실시간의 0.3~1x긴 책엔 부담. 짧은 텍스트 OK
RTX 2060 Mobile (저가 노트북 GPU)실시간 19x (3,000자 → 11초)README의 데모 환경
RTX 4070/4080 (CUDA 12.8)실시간 30~50x 추정가장 추천. CUDA 12.8 wheel 사용
Apple Silicon (M1/M2/M3)실시간 5~15xKokoro의 MPS 지원. git+https://github.com/hexgrad/kokoro.git 개발판 필요
AMD GPU (Linux ROCm 6.4)실시간 10~30x 추정Windows는 ROCm 미지원 — 리눅스 필수
NAS / 라즈베리파이 4CPU 모드 한정. 매우 느림"잘 때 큐에 던지고 아침에 받기"용

OS별 필수 의존성

OS꼭 깔아야 할 것
Windowsespeak-ng MSI + (선택) NVIDIA 드라이버
macOSbrew install espeak-ng + uv
Linuxapt install espeak-ng / pacman -S espeak-ng / dnf install espeak-ng
DockerNVIDIA Container Toolkit (GPU 사용 시) + 8GB 메모리 권장
CAUTION
Python 버전은 3.10 ≤ x < 3.13

3.13에서는 일부 의존성(spaCy 3.8.x, PyMuPDF)이 아직 안정화 안 됐다. uv로 설치할 때 --python 3.12 명시를 권장. 일본어 지원은 추가로 pip install misaki[ja] 필요.

8직접 해볼 수 있는 실습 과제

난이도별 5개
난이도 ★☆☆☆☆ — 30분

1. 내 PDF 한 권을 오디오북으로

좋아하는 영어 책 PDF 하나를 잡고 abogen GUI를 띄워 드래그앤드롭. Female 미국 영어 음성으로 챕터별 분리 + M4B 출력. 핸드폰에 옮겨서 출퇴근길에 들어보기.

배움 포인트: Kokoro 영어 음성 비교(am/af 등), 챕터 분리의 실용성, M4B 메타데이터.

난이도 ★★☆☆☆ — 2~3시간

2. 보이스 믹서로 "내 책 전용 성우" 만들기

Voice Mixer에서 영국 남성(bm) 70% + 미국 여성(af) 30% 같은 식으로 가중치 조합. Save profile로 저장해놓고 다음에도 같은 톤으로 책을 만든다.

배움 포인트: latent voice blending, weight tuning, profile 저장 구조.

난이도 ★★★☆☆ — 반나절

3. Audiobookshelf 셀프호스팅 + abogen 자동 푸시

NAS나 미니 PC에 Audiobookshelf 컨테이너를 띄우고, abogen 설정의 Integrations에 연결. 이후 GUI에서 "Send to Audiobookshelf" 한 방으로 라이브러리 갱신. 진짜 "내 오디오북 스트리밍 서비스"를 만든다.

배움 포인트: 리버스 프록시 + Bearer 토큰 인증, 라이브러리 ID 개념, 셀프호스팅 워크플로.

난이도 ★★★★☆ — 1~2일

4. LLM 정규화로 한국어 책 발음 다듬기

로컬에 Ollama로 Llama 3.2를 띄우고, ABOGEN_LLM_BASE_URL=http://localhost:11434 설정. 한국어 책의 "8.5%", "Mr. 홍" 같은 까다로운 부분을 LLM이 미리 "팔점오 퍼센트", "미스터 홍"으로 정규화하게 만든다.

배움 포인트: OpenAI 호환 API 라우팅, 프롬프트 템플릿 설계, context window 모드(sentence/paragraph/document).

난이도 ★★★★★ — 1주

5. Docker + GitHub Actions로 매일 새 책을 오디오북으로

특정 폴더에 새 EPUB이 들어오면 cron이 abogen-web의 JSON API를 호출해 큐에 추가, 완료되면 webhook으로 Telegram에 알림 + Audiobookshelf 자동 등록. NAS 24/7 자동 파이프라인.

배움 포인트: 워크플로 자동화, JSON 엔드포인트 활용, 파일 시스템 watch, 컨테이너 헬스체크.

9관련 기술 심화 학습 로드맵

8주 트랙 — TTS·문서처리·셀프호스팅을 한 번에
주차주제실습 결과물
1주TTS 기초 — Kokoro·VITS·Coqui XTTS 비교같은 문장을 세 모델로 합성해서 품질·속도·라이선스 비교 표
2주음소화(G2P)와 espeak-ng 내부한국어 G2P 직접 구현 (음운 변동 규칙 1~2개)
3주PyTorch 추론 최적화 — half precision · torch.compileKokoro fp16 변환 → 속도 1.5x 향상 측정
4주오디오 파일 포맷 — WAV/FLAC/MP3/OPUS/M4B 깊이 이해FFmpeg 직접 옵션으로 같은 음원을 5가지 포맷 변환 + 크기·품질 비교
5주EPUB/PDF 구조와 ebooklib · PyMuPDFEPUB → JSON(챕터 트리) 변환기 직접 작성
6주PyQt6 — QThread, 신호/슬롯, 다크모드드래그앤드롭 + 진행률 + 시스템 트레이 갖춘 미니 데스크탑 앱
7주Flask + htmx — 백그라운드 워커, 작업 큐RQ·Celery 대신 in-process queue로 단순 잡 큐 직접 구현
8주셀프호스팅 — Audiobookshelf, Nginx Proxy Manager, Tailscale내 NAS에서 오디오북 스트리밍 + 외부 폰에서 재생까지 완성

10핵심 키워드 사전

자주 나오지만 헷갈리는 용어 정리
TERM
Kokoro-82M
@hexgrad가 공개한 오픈 TTS 모델. 파라미터 82M로 매우 작지만 자연스러운 영어 발화를 만든다. Apache-2.0 — 상업 이용 OK. abogen의 핵심 엔진.
TERM
M4B
MP4 컨테이너에 오디오 + 챕터 마커를 담은 오디오북 표준 포맷. Apple Books·Audiobookshelf·Plex 등이 챕터를 인식해 재생 위치를 관리해준다. MP3에는 챕터가 없어서 긴 책엔 부적합.
TERM
SRT / ASS / VTT
자막 파일 포맷 셋. SRT는 가장 단순(시간 + 텍스트). ASS는 스타일·위치·색상 등 풍부한 표현 가능. VTT는 웹 표준 자막 — <video> 태그가 직접 읽는다. abogen은 셋 다 입력·출력 모두 지원.
TERM
espeak-ng
오픈소스 다국어 G2P + 폴백 음성합성 엔진. 100+ 언어의 발음 규칙이 들어있어 Kokoro의 음소 입력을 만들어주는 역할. abogen 설치 전에 OS에 따로 깔아야 한다.
TERM
spaCy
파이썬 NLP 라이브러리. 단어·문장 경계 탐지, 품사 태깅, 개체 인식 등. abogen은 "Mr."·"Dr."처럼 마침표를 함정으로 두는 문장에서 잘못 끊지 않으려고 spaCy의 sentencizer를 쓴다.
TERM
Audiobookshelf
셀프호스팅 오디오북·팟캐스트 서버. Plex의 오디오북 버전이라 보면 된다. iOS/Android 앱이 있어서 NAS에 띄워두면 어디서나 들을 수 있다. abogen은 변환 결과를 여기에 자동 푸시한다.
TERM
uv (Astral)
Rust로 작성된 차세대 Python 패키지 매니저. pip보다 10~100배 빠르고, pyproject.toml의 [tool.uv.sources]로 의존성 인덱스를 분기시킬 수 있다. abogen이 CUDA 12.6/12.8/13.0/ROCm을 하나의 설정으로 다루는 비결.
TERM
htmx
"HTML 속성만으로 SPA 흉내내기"를 목표로 한 자바스크립트 라이브러리. hx-get, hx-trigger 같은 속성으로 부분 갱신을 선언. React 없이도 실시간 UI가 가능하게 해주는 abogen Web UI의 핵심.
TERM
LLM 정규화 (Normalization)
TTS 모델이 어색하게 읽는 부분("don't" → "donttt", "$3.50" → 어색한 발음)을 LLM이 미리 자연스러운 문장으로 풀어 쓰는 전처리. abogen은 OpenAI 호환 API 어디든(Ollama·OpenAI·Mistral·LM Studio…) 연결 가능.
TERM
platformdirs
파이썬 표준 라이브러리는 아니지만 사실상 표준인 패키지. OS별 사용자 설정/캐시/데이터 디렉토리를 올바르게 반환. Windows: %APPDATA%, macOS: ~/Library, Linux: ~/.config. abogen이 설정 파일 위치를 자동 결정하는 데 쓴다.

11참고 링크

더 깊이 파고들 때 가야 할 곳

공식 자료

코어 기술

비슷한 프로젝트 (비교용)

관련 셀프호스팅