GITHUB 레포 딥다이브 · 2026-08-03 · ABUS-AIKOREA/VOICE-PRO · 유튜브 영상을 통째로 다국어 더빙하는 오픈소스 스튜디오

voice-pro 딥다이브
— 영상 한 편을 내 PC에서 100개 언어로 더빙하는 올인원 스튜디오

abus-aikorea/voice-pro는 유튜브 영상이나 오디오 파일 한 개를 받아 → 배경음악과 목소리를 분리하고 → 말을 받아쓰고(STT) → 100여 개 언어로 번역하고 → 원래 화자의 목소리를 복제해 다시 말하게(TTS·보이스 클로닝) 만드는 전 과정을 하나의 Gradio 웹앱에 담은 AI 더빙 스튜디오다. 슬로건은 "최고의 음성인식·번역·다국어 더빙 솔루션". 상용 ElevenLabs를 통째로 대체하겠다는 목표를 내걸었다.

핵심은 여러 최신 오픈소스 음성 모델(Whisper·F5-TTS·CosyVoice·kokoro·Demucs·yt-dlp)을 한 파이프라인으로 묶어, 비개발자도 start.bat 더블클릭만으로 쓸 수 있게 포장했다는 점이다. v4.0에서 설치기를 uv로 갈아엎어 관리자 권한 없이도 돌아가고, CUDA Toolkit·Visual Studio 빌드 도구도 더 이상 필요 없다. 처리·저장은 전부 내 컴퓨터 안에서 일어나고, 클라우드(Azure)는 내 키를 넣었을 때만 선택적으로 쓴다.

(저장소 abus-aikorea/voice-pro · 라이선스 LGPL · 버전 4.0.0(2026-07-13) · 형식 Gradio 6 웹앱 · 언어 Python 3.12 · 런타임 Torch 2.8.0+cu128 · 파일 약 507개(파이썬 232개) · 코드 규모 app/ 약 12,600줄 + src/ 약 13,700줄 + 벤더링된 cosyvoice/ 약 11,700줄 · 대상 Windows + NVIDIA GPU(검증) · TrendShift Daily #14)
목차
  1. 한 줄 정체
  2. 왜 주목받는가 — "더빙 파이프라인 통째 패키징"이라는 각도
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 — 3계층 설계와 "탭 = 파이프라인"
  5. 디렉토리 구조 해부
  6. 학습 포인트 — 기술별 배울 것
  7. 시스템 / 실행 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 로드맵 (주차별)
  10. 핵심 키워드 사전
  11. 참고 링크

1한 줄 정체

이 프로젝트가 정확히 무엇인지 한 문장으로

voice-pro는 "유튜브 링크나 미디어 파일을 하나 넣으면, 배경음 분리 → 음성인식(자막) → 번역 → 목소리 복제 더빙까지 이어지는 다국어 더빙 파이프라인을, 최신 오픈소스 음성 모델들을 엮어 하나의 Gradio 웹 화면에서 돌려 주는 데스크탑 웹앱"이다. 한마디로 "영상 한 편을 내 PC 안에서 다른 언어로 다시 말하게 만드는 올인원 스튜디오"다. 성우를 부르거나 상용 API에 돈을 쓰는 대신, 내 그래픽카드로 돌린다.

한 장의 비유

"방송국 더빙실 전체를 노트북 한 대에 욱여넣은 것"

외화 한 편을 더빙하려면 원래 여러 전문가가 릴레이로 붙는다. 먼저 음향 엔지니어가 배경음악과 대사를 분리하고, 속기사가 대사를 받아 적고, 번역가가 자막을 옮기고, 성우가 그 언어로 다시 연기하고, 마지막에 믹싱으로 합친다. 각 단계마다 사람·장비·비용이 든다.

voice-pro는 이 릴레이를 전부 소프트웨어 모듈로 바꿔 노트북 한 대에 넣었다. 음향 엔지니어 자리엔 Demucs(음원 분리), 속기사 자리엔 Whisper(음성인식), 번역가 자리엔 번역 엔진, 성우 자리엔 F5-TTS·CosyVoice(목소리 복제) 같은 오픈소스 모델이 앉는다. 그리고 이 모든 자리를 웹 화면의 탭 몇 개로 이어 붙여, 오퍼레이터 한 명이 버튼만 눌러도 "원본 영상 → 한국어 더빙 영상"이 나오게 했다. 이 레포의 진짜 가치는 새 AI 모델을 발명한 게 아니라, 흩어져 있던 최고의 모델들을 '한 번에 돌아가게' 포장한 통합·설치 엔지니어링에 있다.

용어
더빙 파이프라인 (Dubbing Pipeline)
"입력 미디어 → 음원 분리 → STT(받아쓰기) → 번역 → TTS(다시 말하기) → 합치기"로 이어지는 단계들의 사슬. voice-pro의 메인 탭 이름이 Dubbing Studio이고, 내부 컨트롤러 이름이 GradioGulliver다. 각 단계는 독립 모듈이라 "받아쓰기만" 혹은 "번역만" 따로 쓸 수도 있다.
용어
STT / TTS / 보이스 클로닝
STT(Speech-to-Text)는 음성 → 글자(받아쓰기, 자막 만들기). TTS(Text-to-Speech)는 글자 → 음성(읽어 주기). 보이스 클로닝은 몇 초짜리 샘플 목소리를 듣고 그 사람 목소리로 아무 문장이나 말하게 하는 제로샷 TTS(F5-TTS·CosyVoice가 담당). 더빙에서 "원래 화자 목소리 그대로 다른 언어로"가 가능해지는 이유다.
용어
Gradio
파이썬 함수 몇 개에 웹 UI(버튼·슬라이더·파일 업로드)를 자동으로 붙여 주는 라이브러리. ML 데모의 사실상 표준이다. voice-pro는 무거운 음성 모델들을 Gradio 6 화면 뒤에 숨겨, 사용자는 파이썬을 몰라도 브라우저(127.0.0.1:7870)에서 클릭만 하면 된다.

사용자가 Dubbing Studio 탭에서 유튜브 URL을 넣고 "다운로드 → 자막 → 번역 → 더빙"을 순서대로 누를 때, 내부에서 벌어지는 일을 압축하면 이렇다:

유튜브 URL / 미디어 파일 ─┐ ▼ ① 다운로드(yt-dlp) 원본 영상·오디오를 workspace/ 로 받아옴 │ ▼ ② 음원 분리(Demucs) "목소리 트랙"과 "배경음(BGM/효과음) 트랙"을 나눔 │ ※ 배경음은 그대로 두고 목소리만 갈아끼우기 위해 ▼ ③ 받아쓰기(Whisper) 목소리 트랙 → 타임코드가 붙은 자막(SRT/ASS) │ 엔진 3종(faster-whisper·whisper·whisper-timestamped) 교체 가능 ▼ ④ 번역(Translator) 자막을 목표 언어로 (무료 Google 또는 내 Azure 키) │ spaCy로 문장 단위 정돈 → 자연스러운 줄 나눔 ▼ ⑤ 더빙(TTS) 번역 자막 + (선택)원본 목소리 샘플 → 새 음성 트랙 │ F5-TTS·CosyVoice면 원래 목소리로 클로닝 ▼ ⑥ 합치기(ffmpeg) 새 목소리 + ②의 배경음 + 영상 = 최종 더빙본

이 사슬 전체가 한 화면(Dubbing Studio)에 들어 있고, 중간 단계만 떼어 쓰는 전용 탭(Whisper 자막·Translation·Speech Generation)도 따로 있다. 다음 장에서 "왜 이게 지금 뜨는가"를 본다.

2왜 주목받는가

"더빙 파이프라인 통째 패키징"이라는 각도 · 경쟁 제품 대비 강점

2026년 현재 음성 AI 모델은 넘쳐난다. Whisper, F5-TTS, CosyVoice, kokoro… 다 오픈소스로 공짜다. 그런데 보통 사람이 이걸 조립해 쓰는 건 지옥이다. CUDA 버전 맞추고, PyTorch 깔고, 모델 가중치 받고, 각 모델 API를 코드로 엮어야 한다. voice-pro가 트렌딩에 오른 이유는 새 모델이 아니라, 바로 이 "조립·설치 지옥을 없앤 통합 패키징" 때문이다.

① 트렌딩 이유 1 — v4.0의 "관리자 권한 없는" 원클릭 설치

이번에 순위가 뛴 결정적 계기는 v4.0(2026-07) 리라이트다. 설치기를 Miniconda/pip에서 uv(Rust로 짠 초고속 파이썬 패키지 매니저)로 갈아엎으면서 다음이 가능해졌다.

비유

다른 오픈소스 음성 도구가 "가구를 부품으로 보내 주고 직접 조립하라(설명서 100쪽)"라면, voice-pro v4.0은 "완제품 가구를 문 앞까지 배송, 나사 하나 안 돌려도 됨"이다. 심지어 배송 트럭(uv)이 예전보다 훨씬 빠르다.

② 트렌딩 이유 2 — 완전 오픈소스·무료 선언

과거 voice-pro는 60초 길이 제한이 있는 무료판 + Azure를 얹은 구독판이라는 상용 모델이었다. 그런데 개발사가 WeConnect라는 다른 제품에 집중하게 되면서 "전 코드를 오픈소스로 풀고 완전 무료로, 누구나 자유롭게 배포·수정 가능"하다고 선언했다. 상용 제품 수준으로 다듬어진 도구가 통째로 공개된 셈이라, 별점과 관심이 몰렸다.

③ ElevenLabs 등 상용 서비스 대비 강점

관점voice-pro (로컬 오픈소스)ElevenLabs 등 클라우드 상용
비용무료 (내 전기·GPU만)분량당 과금·월 구독
프라이버시처리·저장이 전부 내 PC 안. 원본 음성이 밖으로 안 나감음성을 업체 서버로 전송
범위다운로드·분리·STT·번역·TTS 전 단계 올인원주로 TTS/더빙 일부에 특화
모델 선택ASR 3종·TTS 4종 등 엔진 교체 가능업체가 정한 모델 고정
진입장벽NVIDIA GPU 필요·초기 모델 다운(수 GB)회원가입 즉시 사용
한국어Fun-CosyVoice3로 한국어 클로닝 지원지원하나 유료

정리하면 voice-pro의 매력은 "클라우드에 돈·데이터를 내주지 않고, 상용 수준 더빙을 내 손안에서"다. 대신 그 대가로 NVIDIA GPU와 초기 대용량 다운로드를 감수해야 한다.

냉정하게
"트렌딩 = 완벽"은 아니다 — 개발 중단 상태

README가 명시하듯, 개발사는 WeConnect 작업으로 voice-pro 업데이트를 당분간 못 한다. 즉 활발히 유지보수되는 프로젝트가 아니라 "잘 만들어 놓고 동결된" 상태에 가깝다. Mac·Linux는 동작 미검증이고 코드가 platform.system()으로 Windows에 크게 분기한다. 테스트 스위트도 없다. "지금 완성도가 높다"와 "앞으로 계속 좋아진다"는 다른 얘기이니, 학습·활용 대상으로 보되 프로덕션 의존은 신중히.

3기술 스택 전체 지도

어떤 부품으로 이 스튜디오가 만들어졌나 — 영역별 상세

voice-pro는 "자체 개발 코드는 얇고, 검증된 오픈소스 모델을 두껍게 조립"한 구조다. 영역별로 어떤 부품을 썼는지 지도를 그리면 이렇다.

음성인식(ASR/STT) — Whisper 3형제

엔진버전성격
faster-whisper1.2.1기본값. CTranslate2 기반으로 빠르고 가벼움. large-v3-turbo·distil-large-v3.5 지원
openai-whisper20250625원조 구현. 정확하지만 무거움
whisper-timestamped1.15.9단어 단위 타임스탬프(자막 하이라이트용)

v4.0에서 whisperX가 제거됐다 — 그 의존성(huggingface-hub<1.0 고정)이 Gradio 6 업그레이드를 막았기 때문. 옛 설정에 whisperX가 남아 있으면 자동으로 faster-whisper로 폴백한다.

음성합성(TTS) — 4종 엔진

엔진강점클로닝
Edge-TTS100+ 언어·400+ 목소리, 초경량(MS 엔진 호출)
kokoro (0.9.4)HuggingFace TTS Arena 2위급 품질, 작고 빠름
F5-TTS (1.1.21)제로샷 보이스 클로닝, 파인튜닝 모델 다수(핀·불·힌디·일·러·스페인어 등)
CosyVoice (E2-TTS 포함)다국어 제로샷 클로닝. Fun-CosyVoice3-0.5B는 한국어 포함 9개 언어

번역·자막·미디어·기타

영역부품역할
번역deep-translator / Azure Translator100+ 언어. 무료 Google 경로 또는 내 Azure 키
문장 정돈spaCy (3.8) · stanza자연스러운 문장 단위 분절 → 번역·TTS 품질 ↑
음원 분리Demucs 4.0.1 · MDX-Net목소리/배경음 분리(htdemucs·htdemucs_ft 모델)
다운로드yt-dlp (2025.9.26+)유튜브 등에서 영상·오디오 추출
오디오 처리ffmpeg-python · pydub · librosa · soundfile · pyworld포맷 변환·자르기·믹싱
보이스 변환RVC (rvc/)Retrieval-based Voice Conversion(추가 변환기)
자막pysubs2 · python-iso639 · linguaSRT/ASS/SSA 파싱·언어 감지
UIGradio 6.20.0웹 화면 전체

런타임·인프라

기반
Python 3.12 · Torch 2.8.0+cu128 · Gradio 6.20 · uv
Torch 2.8.0+cu128은 CUDA 12.8 빌드로 RTX 50 시리즈까지 지원. GPU/CPU 설치는 gpu/cpu extra로 나뉘고 상호 배타적([tool.uv] conflicts). 파이썬 상한이 <3.13인 이유는 kokoro가 아직 3.13을 지원하지 않아서다. 전부 installer_files/ 안의 uv 관리 격리 환경에서 돈다 — 시스템 파이썬을 건드리지 않는다.
까다로운 핀(pin)들 — 통합의 실체
버전 지옥을 손으로 푼 흔적
numbanumpy<2.5로 상한을 걸고, transformers5.13.0에 고정돼 벤더링된 cosyvoice/llm/llm.py에 두 가지 패치(Qwen 인코더 dtype=float32 + 전체 길이 디코드 어텐션 마스크)를 요구한다 — 안 하면 CosyVoice2/3가 조용히 엉뚱한 내용을 합성한다. pyopenjtalk은 Windows wheel이 없어 pyopenjtalk-plus로 대체, pynini/WeTextProcessing도 같은 이유로 wetext(순수 파이썬)로 교체. 이 핀 목록 자체가 "여러 모델을 한 환경에 공존시키는" 통합 노동의 증거다.

4아키텍처 심화 분석

3계층 설계 · "탭 = 파이프라인" · 교체 가능한 엔진

voice-pro의 코드는 무섭게 많아 보이지만(파이썬 232개 파일), 실제 골격은 아주 단순한 3계층 규칙과 몇 가지 설계 패턴으로 설명된다. 이걸 알면 남의 대형 파이썬 앱을 읽는 눈이 생긴다.

핵심 패턴 ① — app/의 3계층 (UI / 컨트롤러 / 코어)

모든 애플리케이션 코드는 app/ 안에 있고, 파일 이름의 접두사가 곧 계층이다. 기능 하나를 추가하면 보통 세 계층을 다 건드린다.

┌─────────────────────────────────────────────────────────────┐ │ tab_*.py (UI 계층) │ │ · Gradio 위젯·레이아웃·이벤트 연결(.click / .change) │ │ · 예: tab_gulliver.py, tab_subtitle.py, tab_tts_f5_multi.py │ │ │ 아래 컨트롤러를 생성해 이벤트에 연결 │ │ ▼ │ │ gradio_*.py (컨트롤러 계층) │ │ · GradioXxx 클래스 — UI 상태 + 핸들러 로직 │ │ · 코어 모듈들을 "지휘"한다 │ │ · 예: GradioGulliver = 다운로드→ASR→번역→TTS 총괄 지휘자 │ │ │ 아래 코어 모듈을 호출 │ │ ▼ │ │ abus_*.py (코어 계층, Gradio 의존성 0) │ │ · 순수 처리 모듈 — 어디서든 재사용 가능 │ │ · abus_asr_*(받아쓰기) abus_tts_*(합성) abus_translate_*(번역)│ │ abus_downloader(yt-dlp) abus_demucs/abus_mdx(분리) │ │ abus_subtitle(자막) abus_path(모든 경로 계산) │ └─────────────────────────────────────────────────────────────┘ abus_app_*.py = 최상위 조립기(제품 변종별 1개). abus_app_voice.py 가 "현재 살아 있는" 진입점.
비유

식당으로 치면 tab_*는 손님이 보는 메뉴판·주문 버튼, gradio_*는 주문을 받아 주방에 지시하는 홀 매니저, abus_*는 실제 요리하는 주방 각 파트(불·칼·오븐)다. 주방 파트(코어)는 손님(UI)을 전혀 모르기 때문에, 배달앱이 새로 생겨도(다른 UI) 그대로 재사용된다. 이 "UI를 모르는 코어"가 좋은 설계의 핵심이다.

핵심 패턴 ② — "탭이 곧 파이프라인이다"

abus_app_voice.create_ui()가 화면을 조립하는데, 각 탭이 파이프라인의 한 구간에 대응한다.

GradioGulliver(gradio_gulliver.py)가 Dubbing Studio의 중앙 지휘자로, 생성자에서 다운로더·Demucs·번역기·5종 TTS를 전부 손에 쥔다. 그리고 gradio_whisper()gradio_translate() → TTS 순으로 파이프라인을 흘린다.

핵심 패턴 ③ — 교체 가능한 엔진(전략 패턴)

ASR 엔진 선택이 교과서적인 전략 패턴이다. 문자열 이름 하나로 구현 클래스를 바꿔 끼운다.

# app/gradio_gulliver.py — 이름 → 구현 클래스 딕셔너리 매핑
def switch_case(self, case):
    switch_dict = {
        'faster-whisper':      lambda: FasterWhisperInference(),
        'whisper':             lambda: WhisperInference(),
        'whisper-timestamped': lambda: WhisperTimestampedInference(),
    }
    # 모르는 이름(옛 'whisperX' 등)은 조용히 faster-whisper로 폴백
    return switch_dict.get(case, lambda: FasterWhisperInference())()

같은 방식으로 Azure냐 무료냐도 런타임에 갈린다. abus_genuine.azure_text_api_working().env의 Azure 키가 실제로 동작하는지 확인해, 되면 AzureTranslator/AzureTTS, 안 되면 DeepTranslator/EdgeTTS(무료)를 쓴다. 사용자는 키를 넣기만 하면 코드 수정 없이 경로가 바뀐다.

핵심 패턴 ④ — 설정·다국어·모델의 외부화

설정
UserConfig + config-user.json5
src/config.pyUserConfigapp/config-user.json5(JSON5)를 읽어 큰 기본값 딕셔너리 위에 덮어쓴다. 위젯은 user_config.get(key, default)로 초기값을 읽고, 바뀌면 set(key, value)가 즉시 파일에 저장. 새 설정은 JSON5 파일과 기본값 딕셔너리 양쪽에 추가해야 한다.
다국어(i18n)
i18n("...") 래핑 + locale/*.json (8개 언어)
모든 사용자 노출 문자열은 i18n("English string")으로 감싼다. 영어 원문이 곧 조회 키이고, 번역은 src/i18n/locale/의 8개 JSON(de·en·es·ja·ko·pt·zh_CN·zh_TW)에 들어간다. 번역이 없으면 키(영어)로 폴백. scan_i18n.py가 소스에서 키를 뽑아낸다.
모델 가중치
레포에 없음 — 첫 실행 시 HuggingFace에서 당겨옴
가중치는 저장소에 포함되지 않는다. 실행 시 start-voice.pyAbusHuggingFace.hf_download_models()를 불러, app/abus_hf_files-*.json 매니페스트를 읽고 HF ABUS-AI/*에서 model/로 내려받는다. CosyVoice2-0.5B가 약 9GB라 첫 실행이 길다. Fun-CosyVoice3-0.5B(한국어)는 첫 사용 시 공식 HF 레포에서 받는다.

실행 체인(launch chain) 한눈에

start.bat / start.sh │ ① uv 바이너리를 installer_files/uv/ 로 다운로드 ▼ uv sync --frozen --extra gpu|cpu ② Python 3.12 + 모든 의존성 설치(uv.lock 기준) │ GPU_CHOICE(G/C) > gpu_choice.txt > NVIDIA 자동감지 로 gpu/cpu 결정 ▼ python start-abus.py voice ③ one_click.py OneClick — 환경 검증/복구 ▼ python start-voice.py ④ HF에서 모델 가중치 다운로드 ▼ abus_app_voice.create_ui() ⑤ Gradio 서버 기동 ▼ http://127.0.0.1:7870 ⑥ 브라우저에서 사용

망가지면? README의 정답은 언제나 같다 — installer_files/ 폴더를 지우고 다시 start. 모델(model/)은 남으니 재다운로드는 없다. 이 "격리 폴더 하나만 날리면 초기화"가 v4.0 설계의 핵심 안전장치다.

5디렉토리 구조 해부

어느 폴더에 무엇이 있는지 — 읽는 순서 포함
voice-pro/ ├─ start.bat / start.sh ← 진입점(더블클릭). uv 부트스트랩 + 실행 ├─ configure.bat / .sh ← 1회 선택 설치(git·ffmpeg via choco) ├─ update.bat / uninstall.bat ← 의존성 재동기화 / 제거 ├─ start-abus.py / start-voice.py← 실제 파이썬 진입(검증→모델다운→UI) ├─ one_click.py ← OneClick: 환경 자가 검증·복구 ├─ pyproject.toml + uv.lock ← 의존성 정의 + 전 플랫폼 잠금(약 53만 줄) ├─ .env.example ← Azure 키 템플릿(.env로 복사 시 활성) ├─ CLAUDE.md ← ★개발자용 아키텍처 안내(정독 추천) │ ├─ app/ ← ★애플리케이션 본체 (약 12,600줄) │ ├─ abus_app_voice.py ← 살아있는 최상위 UI 조립기(탭 구성) │ ├─ tab_*.py (16개) ← UI 계층: 각 탭 위젯·이벤트 │ ├─ gradio_*.py (18개) ← 컨트롤러 계층: GradioXxx 핸들러 │ │ └─ gradio_gulliver.py ← ★Dubbing Studio 중앙 지휘자 │ ├─ abus_asr_*.py ← 코어: Whisper 3종 래퍼 │ ├─ abus_tts_*.py ← 코어: Edge·F5·CosyVoice·kokoro·RVC │ ├─ abus_translate_*.py ← 코어: deep-translator / Azure │ ├─ abus_demucs.py / abus_mdx.py ← 코어: 음원 분리 │ ├─ abus_downloader.py ← 코어: yt-dlp │ ├─ abus_path.py ← ★모든 경로 계산(workspace/ model/ 등) │ └─ abus_hf_files-*.json ← 모델 다운로드 매니페스트 │ ├─ src/ ← 프레임워크·자원 (약 13,700줄) │ ├─ config.py ← UserConfig(설정 로드/저장) │ ├─ i18n/locale/*.json ← 8개 언어 번역 │ ├─ ui.py, css/, js/ ← Gradio용 CSS/JS·폰트(NotoSans) │ └─ aicover/, ... ← 부가 기능 자원 │ ├─ cosyvoice/ ← ★벤더링된 CosyVoice (약 11,700줄, 업스트림 그대로) ├─ third_party/Matcha-TTS ← CosyVoice가 요구(sys.path에 수동 추가) ├─ rvc/ ← 보이스 변환(RVC) ├─ model/ ← (실행 시 생성) 다운로드된 가중치 ├─ workspace/ ← (실행 시 생성) 작업 결과(작업별 타임스탬프 폴더) └─ docs/ ← 8개 언어 README·이미지·블로그
읽는 순서(권장)
이 레포를 처음 열었다면

CLAUDE.md(아키텍처 지도) → app/abus_app_voice.py(탭 = 파이프라인 구성) → app/gradio_gulliver.py(중앙 지휘자, switch_case·파이프라인 메서드) → 코어 하나 골라 정독: abus_asr_faster_whisper.py(받아쓰기) 또는 abus_tts_f5.py(클로닝) → app/abus_path.py(경로 규칙) → src/config.py(설정) → pyproject.toml(의존성·핀의 이유는 주석에)

알아둘 함정
변종 파일 · from x import * · 한국어 주석
abus_app_*.py·tab_*.py 중 aicover·kara·gulliver·upscaler·vsr·rvc·demixing 등은 과거·대체 변종이고 여러 개가 abus_app_voice.py에서 주석 처리돼 있다 — 실제 임포트되는지 먼저 확인할 것. 또 컨트롤러들이 from abus_x import *로 코어 네임스페이스를 평탄화해 쓰므로 함수명이 앱 전역에 노출된다. 인라인 주석·일부 로그는 한국어(개발사가 한국 팀)라 오히려 읽기 편하다.

6학습 포인트

이 레포에서 실제로 배울 수 있는 것 — 기술별

voice-pro는 "AI 음성"만 배우는 곳이 아니다. 오히려 "여러 무거운 ML 라이브러리를 한 앱에 공존시키는 실전 통합 기술"의 교보재로 더 값지다.

① 음성 AI 파이프라인 설계

② 큰 파이썬 앱을 읽고 짜는 법(설계 패턴)

③ ML 배포·패키징 엔지니어링 (진짜 알짜)

이 레포의 숨은 주제

pyproject.toml 주석은 그 자체로 "의존성 지옥 탈출기"다. numba가 numpy를 막고, transformers 버전이 벤더 코드 패치를 요구하고, Windows에 wheel 없는 패키지를 순수 파이썬 대체로 바꾸고… 이런 결정 하나하나가 현업 ML 엔지니어가 매일 부딪히는 문제다.

uv.lock 기반의 재현 가능·격리 설치, 관리자 권한 없는 부트스트랩, 휴대용 ffmpeg 자동 배치 — "모델을 만드는 것"과 "그 모델을 남이 쓰게 배포하는 것"이 완전히 다른 난이도의 문제임을 체감할 수 있다.

④ Gradio로 ML 데모를 제품처럼 만들기

실습 아이디어(가벼운 것부터)
코드를 안 돌려도 배우는 법

GPU가 없어도 된다. gradio_gulliver.pyswitch_case와 파이프라인 메서드(gradio_whispergradio_translate) 흐름만 종이에 손으로 따라 그려 봐도 "탭=파이프라인" 설계가 손에 잡힌다. pyproject.toml의 주석을 한 줄씩 읽으며 "왜 이 버전에 고정했나"를 검색해 보는 것도 훌륭한 ML 배포 공부다.

7시스템 / 실행 요구사항

내 PC에서 돌릴 수 있나 — 현실적인 체크
항목요구/권장비고
OSWindows (검증됨)Mac/Linux는 스크립트는 있으나 미검증. 코드가 platform.system()으로 크게 분기, Live 번역은 Windows 전용
GPUNVIDIA GPU 강력 권장Torch cu128 → RTX 50 시리즈까지. CPU 설치(cpu extra)도 되지만 매우 느림
관리자 권한불필요v4.0의 핵심 개선. ffmpeg도 자동 다운로드
디스크수~수십 GBCosyVoice2-0.5B만 약 9GB. 모델 여러 개 받으면 늘어남
초기 실행 시간수십 분~1시간+대용량 모델 다운로드 때문. 이후엔 빠름
사전 설치CUDA Toolkit·VS 빌드도구 불필요모든 의존성이 prebuilt wheel
네트워크초기 다운로드에 필요이후 로컬 처리(무료 번역만 Google 엔드포인트 사용)
Azure(선택)본인 키.env.example.env 복사 후 키 입력 시 활성
# 가장 간단한 시작(Windows) — 관리자 권한 없이
git clone https://github.com/abus-aikorea/voice-pro.git
cd voice-pro
start.bat            # uv 다운로드→환경 구축→모델 받기→브라우저 자동 오픈
# 브라우저에서 http://127.0.0.1:7870 접속

# GPU/CPU 강제 지정이 필요하면
set GPU_CHOICE=G     # G=GPU(NVIDIA), C=CPU
start.bat

# 문제가 생기면 — 격리 폴더만 지우고 재시작(모델은 보존)
# installer_files\ 삭제 후 start.bat 다시 실행
주의
보이스 클로닝의 윤리·법

F5-TTS·CosyVoice로 타인의 목소리를 복제하는 것은 강력한 기능인 만큼 위험도 크다. 동의 없는 목소리 도용, 사칭·딥페이크·허위 콘텐츠 제작은 초상·음성권 침해와 사기가 될 수 있다. 저작권 있는 영상의 무단 다운로드·재배포도 마찬가지. 반드시 본인 목소리·허락받은 자료·합법적 용도로만 쓸 것.

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

난이도별 — 코드를 안 돌려도 되는 것부터
LEVEL 1 · 코드 리딩GPU 불필요

"탭 = 파이프라인" 지도 그리기

app/abus_app_voice.pycreate_ui()를 읽고, 어떤 탭이 어떤 컨트롤러(*_tabGradio*)를 부르는지 화살표로 정리하라. Windows에서만 열리는 탭이 무엇인지도 찾아보라. (힌트: if system == "Windows")

LEVEL 2 · 개념 추적GPU 불필요

ASR 엔진 3종의 차이 조사

switch_case가 매핑하는 FasterWhisperInference·WhisperInference·WhisperTimestampedInference 세 코어 파일을 열어, 각 transcribe의 입출력 형태를 비교하라. 왜 기본값이 faster-whisper인지, 왜 timestamped가 자막 하이라이트에 쓰이는지 근거를 코드에서 찾아라.

LEVEL 3 · 첫 실행NVIDIA GPU 필요

내 목소리로 자막 읽히기(TTS만)

Speech Generation 탭에서 kokoro 또는 Edge-TTS로 한 문단을 합성해 보고, 이어서 F5-TTS에 내 목소리 10초를 참조로 넣어 같은 문단을 내 목소리로 클로닝해 비교하라. 두 방식의 품질·속도 차이를 표로 남겨라.

LEVEL 4 · 풀 파이프라인NVIDIA GPU 필요

짧은 영상 한 편 다국어 더빙

저작권 문제 없는 내 영상(또는 CC0)을 Dubbing Studio에 넣어 영어→한국어 더빙본을 뽑아라. 중간 산출물(workspace/의 분리 음원·자막·번역 자막)을 각각 열어 파이프라인이 실제로 남긴 흔적을 확인하라.

LEVEL 5 · 개조중급+

새 UI 문자열 추가 + 한국어 번역 연결

탭 하나에 라벨을 하나 추가하되 i18n("New Label")로 감싸고, src/i18n/locale/ko_KR.json에 대응 번역을 넣어라. 번역을 일부러 빼면 어떻게 폴백하는지(키=영어 그대로 노출) 확인하라. 나아가 새 설정값을 config-user.json5 + 기본값 딕셔너리 양쪽에 추가해 get/set으로 저장되게 만들어라.

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

이 레포를 발판으로 어디까지 갈 수 있나 — 주차별
주차주제할 일 / 목표
1주차음성 AI 기초STT/TTS/보이스클로닝 개념 정리. Whisper 논문 개요, 제로샷 TTS(F5-TTS·CosyVoice) 데모 체험
2주차voice-pro 구조 독해CLAUDE.md+abus_app_voice.py+gradio_gulliver.py 정독. 3계층·전략 패턴 손그림
3주차파이프라인 실습Demucs 음원 분리·Whisper 자막·번역·TTS를 각각 따로 돌려 보고 중간 산출물 관찰
4주차ML 패키징uv 학습(pyproject.toml+lock). 의존성 핀 주석을 하나씩 검증하며 "왜 고정?"에 답하기
5주차Gradio 심화Gradio 6로 나만의 미니 STT/TTS 데모 앱 제작. 진행률·에러 토스트·상태 관리
6주차모델 서빙·최적화faster-whisper(CTranslate2) 원리, ONNX Runtime, GPU/CPU 분기·양자화 개념
7주차i18n·설정 외부화다국어 앱 설계: 키 추출·폴백·locale 관리. JSON5 설정 패턴 응용
8주차확장 프로젝트voice-pro에 새 TTS 엔진 어댑터를 abus_tts_* 규약대로 추가(전략 패턴 실전)

10핵심 키워드 사전

이 문서에 나온 용어 빠른 복습
용어
더빙 파이프라인 / Dubbing Studio
다운로드→음원분리→STT→번역→TTS→합치기로 이어지는 단계 사슬. voice-pro의 메인 탭이자 중앙 컨트롤러 GradioGulliver가 총괄.
용어
STT / TTS / 보이스 클로닝
음성→글자 / 글자→음성 / 참조 음성 몇 초로 그 목소리를 재현하는 제로샷 TTS. 더빙에서 "원 화자 목소리로 타 언어" 재현의 핵심.
용어
3계층(tab_/gradio_/abus_)
UI(위젯·이벤트) / 컨트롤러(GradioXxx 핸들러) / 코어(Gradio 의존 0인 순수 처리) 를 파일명 접두사로 강제한 설계. 코어는 UI를 모른다.
용어
전략 패턴 + 폴백(switch_case)
문자열 이름 → 구현 클래스 딕셔너리 매핑으로 엔진 교체. 모르는 이름은 조용히 기본(faster-whisper)으로 폴백해 죽지 않게.
용어
uv / uv.lock
Rust로 짠 초고속 파이썬 패키지 매니저. 커밋된 lock으로 전 플랫폼 재현 설치. v4.0이 Miniconda/pip을 대체해 관리자 권한 없는 설치를 실현.
용어
installer_files/ 격리 폴더
uv·Python·venv·gradio temp가 전부 이 폴더 안. 시스템 파이썬을 안 건드림. 문제 시 이 폴더만 지우고 재시작하면 초기화(모델은 model/에 보존).
용어
Whisper / faster-whisper
OpenAI의 음성인식 모델. faster-whisper는 CTranslate2 기반 고속 구현이며 voice-pro의 기본 ASR. large-v3-turbo·distil 모델 지원.
용어
F5-TTS / CosyVoice / kokoro / Edge-TTS
TTS 4종. F5·CosyVoice는 제로샷 클로닝(원 목소리 재현), kokoro는 소형 고품질, Edge-TTS는 100+언어·400+음성의 초경량. CosyVoice3는 한국어 포함 9개 언어.
용어
Demucs / 음원 분리
한 오디오에서 "목소리"와 "배경음(BGM·효과음)"을 분리하는 모델(htdemucs·htdemucs_ft). 더빙에서 배경음은 살리고 목소리만 갈아끼우기 위한 필수 단계.
용어
벤더링(vendoring) / cosyvoice·Matcha-TTS
외부 코드를 저장소 안에 복사해 넣는 것. voice-pro는 CosyVoice(업스트림 그대로) + third_party/Matcha-TTS를 벤더링하고 후자는 sys.path에 수동 추가한다.
용어
i18n("...") 키=원문
모든 UI 문자열을 감싸는 다국어 함수. 영어 원문이 곧 키이며 locale/*.json(8개 언어)에서 번역을 찾고, 없으면 키(영어)로 폴백.
용어
abus_genuine / Azure 자동 분기
.env의 Azure 키가 실제 동작하는지 런타임에 확인해 번역·TTS를 Azure 경로 또는 무료 경로(DeepTranslator·EdgeTTS)로 자동 선택.
용어
RVC (Retrieval-based Voice Conversion)
이미 만들어진 음성을 다른 목소리로 "변환"하는 별도 기법(rvc/ 폴더). TTS로 만든 음성의 음색을 추가로 바꾸는 후처리에 쓸 수 있다.
용어
의존성 핀(pin) 지옥
여러 무거운 ML 라이브러리를 한 환경에 공존시키려 버전을 정밀 고정한 것(numba↔numpy, transformers 5.13.0+벤더 패치, Windows용 대체 패키지 등). 이 레포의 숨은 학습 주제.

11참고 링크

더 파고들 때