ElevenLabs를 내 GPU로: VoiceStudio(debpalash/VoiceStudio)의 사이드카 엔진 격리·더빙 파이프라인·MCP 음성 API 심층 해부

한 줄 요약: debpalash/VoiceStudio는 “ElevenLabs를 내 컴퓨터로 옮기겠다”는 목표의 로컬 우선 음성 스튜디오입니다. 보이스 클론·보이스 디자인·영상 더빙·받아쓰기·오디오북을 하나의 Electron 앱과 FastAPI 백엔드로 묶고, TTS 17종·ASR 10여 종 엔진을 고르게 하며, OpenAI 호환 /v1·WebSocket·MCP로 다른 도구와 에이전트에 음성을 열어 줍니다. 오늘은 GitHub Trending Python 일간 3위(오늘 +1,691 스타)에 오른 이 저장소를 소스 트리와 문서 기준으로 해부하고, 박스에서 직접 돌려 본 범위와 도입 전에 반드시 걸러야 할 라이선스 층위를 정리합니다.

VoiceStudio는 마이크 입력부터 보이스 클론·보이스 디자인·영상 더빙·받아쓰기·오디오북까지 내 컴퓨터(CUDA·MPS·CPU)에서 처리하는 로컬 우선 음성 스튜디오입니다. 필수 클라우드 호출이나 계정이 없습니다
VoiceStudio는 마이크 입력부터 보이스 클론·보이스 디자인·영상 더빙·받아쓰기·오디오북까지 내 컴퓨터(CUDA·MPS·CPU)에서 처리하는 로컬 우선 음성 스튜디오입니다. 필수 클라우드 호출이나 계정이 없습니다

왜 지금 이 저장소인가

음성 생성은 텍스트 LLM보다 “로컬로 옮기기” 어려운 영역이었습니다. 모델마다 의존성 핀이 충돌하고, GPU 메모리 요구가 제각각이며, 더빙처럼 ASR·번역·TTS·믹싱을 엮는 순간 파이프라인 운영 문제가 됩니다. VoiceStudio가 흥미로운 지점은 새 모델을 내놓는 것이 아니라 여러 오픈 음성 모델을 하나의 운영 가능한 제품으로 묶는 통합 계층을 만들었다는 데 있습니다. 아래 수치는 모두 2026-10-13 16:57 KST 기준 GitHub API·저장소에서 확인한 값입니다.

항목 확인한 값 해석
저장소 debpalash/VoiceStudio (주 언어 Python, 홈페이지 voicestudio.sh) 설명문: “open-source, fully-local ElevenLabs alternative — voice cloning, voice design, video dubbing, dictation, transcription & audiobook creation in 646 languages”
스타 / 포크 60,996 / 6,841 2026-04-10 06:40 KST 생성 → 약 6개월 만의 수치. 열린 이슈+PR 120건
Trending Python 일간 3위, 오늘 +1,691 스타 전체 일간 목록에는 없었고, 언어별(Python) 목록에서 상위
최신 GitHub 릴리스 v0.5.6 (2026-09-23 17:53 KST) Windows x64·macOS arm64/x64·Linux AppImage/deb 설치 파일 제공
main 브랜치 버전 package.json 0.5.7, CHANGELOG에 [0.5.7] — 2026-10-13 섹션 확인 시점에는 v0.5.7 태그·릴리스가 아직 없었습니다. ‘곧 나올 버전’으로 보는 게 정확합니다
라이선스 앱: AGPL-3.0-only / 번들 omnivoice/: Apache-2.0 기본 모델 가중치는 별개(CC-BY-NC). 아래 라이선스 장에서 상세히 다룹니다
최근 푸시 2026-10-13 16:20 KST 릴리스 직전 활발히 커밋 중인 저장소

기능 지도: 무엇을 하는 앱인가

README는 기능을 Create / Produce / Connect 세 축으로 정리합니다. 실무자 관점에서 다시 묶으면 아래와 같습니다. 핵심은 “음성 생성기”가 아니라 음성 작업용 워크스테이션 + 로컬 음성 API 서버라는 점입니다.

축 기능 실무 포인트
Create 보이스 클론, 보이스 디자인(텍스트 설명→목소리), 받아쓰기 위젯 클론 참조 음성은 최대 75초까지 받고 5–15초의 깨끗한 음성을 권장. 엔진마다 실제로 쓰는 길이가 다릅니다
Produce 영상 더빙, 스토리/오디오북, 배치 큐, 보컬 분리, 화자 분리 오디오북은 챕터 큐시트·M4B 챕터, 더빙은 SRT/VTT 붙여넣기 번역 지원
Connect 로컬 HTTP·WebSocket API, MCP 서버, 레시피·감시 폴더 포트 3900 하나에 OpenAI 호환 전사, 스트리밍 전사, MCP가 함께 올라옵니다
안전장치 AI 워터마크(AudioSeal), 동의 기반 분석, 모델 라이선스 안내 코드상 비가청 워터마크 기본 ON, 영상 로고 오버레이 기본 ON, 가청 시그니처 톤 기본 OFF
하드웨어 CUDA, Apple Silicon(MPS), AMD ROCm(Linux), CPU 자동 감지 Windows의 PyTorch GPU 가속은 NVIDIA/CUDA 전용이라고 문서가 명시합니다

아키텍처: Electron 셸, FastAPI 백엔드, 엔진 어댑터

저장소 루트는 Bun 워크스페이스 + Turborepo 모노레포이고, package.json이 앱 버전의 단일 원천입니다(pyproject.toml과 backend/core/version.py가 미러로 따라가며 테스트로 강제). 데스크톱 UI는 0.5.3을 끝으로 Tauri에서 Electron(React 19)으로 완전히 옮겨졌고, Docker 배포에서는 같은 렌더러를 웹 UI로 빌드해 백엔드가 서빙합니다.

Electron 앱·Docker 웹 UI·MCP 에이전트·OpenAI 호환 /v1 클라이언트가 포트 3900의 FastAPI 백엔드로 모이고, GPU 게이트웨이를 거쳐 프로세스 내 엔진(OmniVoice 등) 또는 별도 venv 사이드카(IndexTTS·CosyVoice·VoxCPM2·dots.tts)로 갑니다
Electron 앱·Docker 웹 UI·MCP 에이전트·OpenAI 호환 /v1 클라이언트가 포트 3900의 FastAPI 백엔드로 모이고, GPU 게이트웨이를 거쳐 프로세스 내 엔진(OmniVoice 등) 또는 별도 venv 사이드카(IndexTTS·CosyVoice·VoxCPM2·dots.tts)로 갑니다
디렉터리 역할 눈여겨볼 점
electron/ 유일한 데스크톱·웹 UI. main(수명주기·백엔드 감독·업데이터), preload(window.voicestudio), renderer UI 문자열은 전부 i18n 키. 하드코딩 CJK를 CI 테스트로 막습니다
native/desktop-bridge/ Electron이 쓰는 Rust 네이티브 헬퍼 변경 시 CI가 별도로 검증(CLAUDE.md)
backend/main.py FastAPI 단일 진입점 문서가 “부팅 순서가 하중을 받는다(load-bearing)”고 경고합니다
backend/api/routers/ HTTP/WS 라우터(문서 기준 42개, 자동 포함) 얇은 HTTP 표면만 두고 로직은 services로
backend/services/ 약 100개 모듈: TTS, 더빙 파이프라인, DSP, GPU 게이트웨이, 엔진 라우팅, 모델 수명주기 dub_pipeline.py, gpu_gateway.py, subprocess_backend.py, engine_routing.py, watermark.py가 핵심
backend/engines/ 엔진별 어댑터: indextts, cosyvoice, voxcpm2, dots_tts, moss_tts_v15, supertonic3, audiocpp, omnivoice_gguf 등 대부분 사이드카 프로세스 방식
omnivoice/ 기본 TTS 모델 패키지(k2-fsa OmniVoice 계열, Apache-2.0) models·training·eval·cli까지 포함
tests/ 메인 pytest 세션 + smoke·evals·frontend conftest.py가 데이터 디렉터리를 격리해 실제 앱 상태를 건드리지 않음
deploy/ CUDA 기본 Dockerfile(같은 파일로 ROCm 변형), compose, 설치 워커 이미지는 linux/amd64 전용

엔진 격리의 핵심: SubprocessBackend

여러 음성 모델을 한 앱에 넣을 때 가장 먼저 터지는 문제는 의존성 충돌입니다. 소스 주석은 구체적인 예를 듭니다. IndexTTS는 transformers<5를 요구하고 VoiceStudio 본체는 transformers>=5.3을 요구합니다. 그래서 backend/services/subprocess_backend.py의 SubprocessBackend는 엔진마다 별도 venv의 다른 파이썬 인터프리터를 subprocess.Popen으로 띄우고, stdin/stdout 위에서 길이 접두(length-prefixed) JSON 프레임으로 대화합니다. multiprocessing은 현재 인터프리터만 복제하므로 일부러 배제했다고 명시합니다.

설계 요소 구현(소스 기준) 왜 중요한가
프로세스 경계 엔진별 venv_python() + sidecar_script()만 오버라이드 새 엔진 추가 비용이 어댑터 두 메서드 수준으로 줄어듭니다
프레임 크기 제한 MAX_FRAME_BYTES = 64 MB 길이 접두를 악용한 메모리 DoS 차단
역방향 메시지 허용 목록 PARENT_INBOUND_OPS: ready, pong, audio, segments, progress, error, gpu_acquire, gpu_release 사이드카가 오염돼도 부모가 받는 명령을 제한
GPU 슬롯 회계 generate의 try/finally로 슬롯 반환 사이드카가 죽어도 GPU 슬롯 누수 방지
정리(teardown) POSIX 프로세스 그룹 / Windows Job 객체, atexit, stderr 배출 시 HF 토큰 마스킹 백엔드가 죽어도 고아 프로세스·토큰 노출을 줄임

같은 원리가 기본 엔진에도 적용됩니다. omnivoice-subprocess 엔진은 기본 OmniVoice 모델을 크래시 격리된 자식 프로세스에서 돌립니다. 문서 설명에 따르면 파이썬은 네이티브 torch 호출을 중단시킬 수 없어서, 프로세스 내 엔진이 예산을 넘기면 GPU를 붙든 채 “버려진 워커”가 되고 뒤 요청이 줄줄이 멈췄습니다(#730, #1190). 자식 프로세스는 proc.kill()로 확실히 회수할 수 있고, 다음 요청 때 새 사이드카가 뜹니다. Apple Silicon에서는 기본 omnivoice ID가 자동으로 이 격리 구현을 쓰고, CUDA·ROCm·CPU는 호출 오버헤드가 낮은 프로세스 내 구현을 유지합니다.

engine_routing.py는 엔진이 선언한 gpu_compat과 캐시된 호스트 능력을 대조해 accelerated / cpu_fallback / cpu_only / unavailable 중 하나를 결정하는 순수 함수입니다. 모델을 로드하거나 I/O를 하지 않고 OS 간 결과가 동일하도록 설계했다는 점, 그리고 “조용한 CPU 폴백 금지(no-silent-fallback)”를 계약으로 둔 점이 운영 친화적입니다. 실제로 성능 문서가 꼽는 느려짐의 대표 원인이 “GPU인 줄 알았는데 CPU에서 돌고 있었다”입니다.

엔진 카탈로그: TTS와 ASR 선택지

엔진은 Model Catalogue에서 고르거나 OMNIVOICE_TTS_BACKEND / OMNIVOICE_ASR_BACKEND 환경 변수로 고정합니다. 다음 표는 docs/engines/README.md를 요약한 것입니다.

TTS 엔진 실행 환경 클론 활성화 방법
VoiceStudio(OmniVoice) — 기본 CUDA · MPS · CPU ✅ 기본 설치. 첫 사용 시 가중치 다운로드(MCP 문서 기준 약 2.3GB)
OmniVoice GGUF CUDA · MPS · CPU ✅ 양자화 네이티브 바이너리, 저VRAM·CPU용
VoxCPM2 CUDA · MPS · CPU ✅ + 보이스 디자인 pip install "voxcpm>=2.0.3"
IndexTTS 2.5 CUDA · CPU ✅ + 감정 원클릭 사이드카 설치
CosyVoice 3 CUDA · CPU ✅ clone + requirements
MOSS-TTS-v1.5 (8B) / dots.tts (2B) / Confucius4-TTS CUDA · CPU ✅ clone + 환경 변수 (dots.tts는 Windows 미지원)
KittenTTS / Supertonic-3 / PocketTTS CPU 중심 프리셋 음성 위주(PocketTTS는 클론 가능) pip 또는 uv sync --extra … + 라이선스 동의
MLX-Audio (Kokoro, CSM, Dia 등) Apple Silicon 모델별 상이 pip install mlx-audio
audio.cpp (Breeze-TTS-2) CPU + Vulkan/Metal/CUDA/HIP ✅ + 보이스 디자인 프리빌트 바이너리. 가중치는 연구·비상업용
GPT-SoVITS / Sherpa-ONNX 외부 서버 / CUDA · CPU GPT-SoVITS만 ✅ 자체 API 서버 / 모델 디렉터리 지정
ASR 엔진 강점(문서 표현) 비고
WhisperX — 기본 더빙(단어 단위 타임스탬프 + 화자 분리) CUDA · CPU
Faster-Whisper / 격리판 일반 전사 / 무인 배치 격리판은 옵트인
MLX Whisper / Parakeet TDT(MLX) Mac 기본 / 받아쓰기 Apple Silicon
Parakeet TDT (NeMo) 25개 언어, 빠른 CPU 앱과 분리된 별도 venv
FunASR (SenseVoice) 50+ 언어, 인라인 화자 분리 pip install funasr
Sherpa-ONNX 받아쓰기 / Moonshine 실시간 스트리밍 / 저전력 엣지 Moonshine은 타임스탬프 없음
OpenAI 호환(로컬·원격) 설정한 엔드포인트 사용 루프백 주소면 로컬로 유지

클론 참조 음성 처리도 엔진마다 다릅니다. OmniVoice는 최대 20초를 쓰며 긴 클립에서는 음성이 가장 많은 15초 구간을 골라 전사하고(best_window), VoxCPM2는 앞뒤 무음을 자른 뒤 처음 30초를 씁니다(head). 그 외 엔진은 “검증되지 않음”으로 클립을 그대로 넘깁니다. GET /engines가 엔진별 max_ref_seconds와 ref_strategy를 보고하므로, 자동화 파이프라인이라면 이 값을 먼저 읽고 참조 클립을 잘라 보내는 편이 안전합니다.

더빙 파이프라인의 데이터 흐름

더빙은 오디오 추출·보컬 분리 → ASR(WhisperX 기본) → 번역(Argos·NLLB·LLM 등) → 세그먼트별 TTS 합성 → 배경음을 살린 믹싱 순서로 진행되며, 순차 세그먼트 합성이 시간의 대부분을 차지합니다
더빙은 오디오 추출·보컬 분리 → ASR(WhisperX 기본) → 번역(Argos·NLLB·LLM 등) → 세그먼트별 TTS 합성 → 배경음을 살린 믹싱 순서로 진행되며, 순차 세그먼트 합성이 시간의 대부분을 차지합니다

성능 문서는 더빙을 다섯 단계로 설명합니다. 오디오 추출 + 보컬 분리(긴 영상은 수 분, 1회성) → 전사(가용한 최상의 가속기, Apple Silicon은 v0.3.21부터 MLX) → 번역(LLM 제공자는 동시 6요청 병렬) → 세그먼트별 합성(순차, 전체 시간의 대부분) → 믹싱과 내보내기(대부분 스트림 복사라 빠름). services/dub_pipeline.py는 잡 상태(메모리 dict + dub_history 복원), 콘텐츠 해시 캐시(같은 파일 재처리 방지), 안전한 잡 경로, ffmpeg/demucs 하위 프로세스 추적과 POST /dub/abort/{id} 중단, SSE 진행 이벤트를 맡습니다.

번역 엔진 분류 패키지 / 키
Argos (Local, Fast) 오프라인 argostranslate 번들 / 키 불필요
NLLB-200 (Local, Heavy) 오프라인 핵심 transformers 사용 / 키 불필요
Google Translate(Free), MyMemory 온라인 deep_translator / 키 불필요
DeepL, Microsoft Translator 온라인 deep_translator / DEEPL_API_KEY, MICROSOFT_API_KEY
LLM (OpenAI 호환) LLM openai / 대개 키 필요
Paste Translation 직접 입력 SRT/VTT, 번호 매긴 줄, 일반 줄을 자동 인식해 세그먼트에 매핑. 원문 보존, 단일 실행 취소

여기서 실무적으로 중요한 함정이 하나 있습니다. 문서가 직접 밝힌 과거 버그로, 더빙은 ASR 모델에 VRAM을 내주려고 TTS 모델을 CPU로 옮겼다가 전사가 끝나면 되돌리는데, v0.3.23 이전에는 취소·오류 경로에서 되돌리지 않아 이후 모든 생성이 CPU에서 10–50배 느리게 돌았습니다(#1191). 현재는 모든 종료 경로에서 복귀하고, 생성마다 디바이스를 검증합니다. 단일 GPU에서 ASR과 TTS를 번갈아 쓰는 구조라는 점은 여전하므로, 대량 더빙이라면 VRAM 여유와 배치 순서를 미리 설계하는 편이 좋습니다.

연결 계층: OpenAI 호환 API, WebSocket, MCP

VoiceStudio를 단순 데스크톱 앱 이상으로 만드는 부분입니다. 백엔드가 ASR 모델을 따뜻하게 유지한 채 포트 3900에서 여러 프로토콜을 동시에 제공합니다. 모든 인터페이스가 각자 모델 로딩을 다시 구현하지 않게 하는 것이 설계 목표라고 문서는 설명합니다.

전송 방식 엔드포인트 용도
능력 탐색 GET :3900/.well-known/voicestudio-speech voicestudio.speech.v1 문서를 상대 URL로 반환(리버스 프록시 뒤에서도 동작)
OpenAI 호환 HTTP POST :3900/v1/audio/transcriptions 기존 SDK·스크립트로 파일 전사
WebSocket 스트리밍 ws://…:3900/v1/audio/transcriptions/stream WebM/Opus 기본, ?pcm=1&sr=16000로 PCM. partial/final 이벤트
MCP Streamable HTTP POST :3900/mcp/ (끝 슬래시 권장) Claude Code, Cursor, Codex CLI, Hermes 등
MCP stdio python -m backend.mcp_shim stdio만 지원하는 클라이언트
파이썬 브리지 python -m backend.speech_client 의존성 없는 CLI. 훅·TUI용
MCP 도구 / 변수 동작
generate_speech 텍스트→WAV(기본). 에이전트별로 묶인 목소리 사용, files/both 모드에서 ogg/opus 가능(ffmpeg 필요)
clone_voice / design_voice / describe_voice 참조 음성→프로필 / 설명→고정 시드 디자인 프로필 / 설명→속성 매핑만(저장 안 함)
transcribe, list_voices, check_health 등 전사, 목록 조회, 백엔드 상태·GPU 디바이스 확인
OMNIVOICE_MCP_OUTPUT_MODE resources(기본, base64 인라인) / files / both. 에이전트 컨텍스트 비용을 줄이려면 files
OMNIVOICE_MCP_BASE_PATH 파일 입출력의 보안 경계. 심볼릭 링크 해석 후 검사, no-follow 디스크립터로 열기
X-OmniVoice-Client-Id 헤더 에이전트별 목소리 바인딩(예: claude-code)

에이전트 연동 관점에서 좋은 결정은 오디오를 컨텍스트 밖으로 빼는 모드입니다. 문서가 직접 “LLM 에이전트는 컨텍스트에 받는 모든 바이트에 비용을 낸다”고 쓰며, files 모드면 경로만 돌려줍니다. 다만 LAN 공유 시 PIN은 평문 HTTP로 오가므로 신뢰할 수 있는 LAN에서만 쓰고, 그 밖에서는 Tailscale Serve나 TLS 리버스 프록시를 쓰라고 경고합니다. 또 로컬 프록시를 거친 루프백 요청은 PIN 게이트를 우회하므로 프록시 쪽에 별도 인증이 필요합니다.

설치와 실행: 데스크톱, 소스, Docker

세 경로가 있습니다. 일반 사용자는 설치 스크립트나 릴리스 설치 파일, 개발자는 소스 실행, 서버 운영은 Docker입니다.

# 1) 데스크톱(macOS/Linux) — 최신 Electron 릴리스
curl -fsSL https://voicestudio.sh/install | sh
# 특정 버전 / main 빌드 / 데이터 유지한 채 제거
curl -fsSL https://voicestudio.sh/install | sh -s -- --version X.Y.Z
curl -fsSL https://voicestudio.sh/install | sh -s -- --main
curl -fsSL https://voicestudio.sh/install | sh -s -- --uninstall
# Windows PowerShell
irm https://voicestudio.sh/install | iex
# 2) 소스에서 Electron 미리보기 실행
git clone https://github.com/debpalash/VoiceStudio.git
cd VoiceStudio
bun install
bun run setup:api   # Python 의존성 준비(uv)
bun run dev
bun run smoke-test  # 격리된 패키지 앱 빌드·실행 점검
# 3) Docker (CPU 예시, linux/amd64 전용 이미지)
export OMNIVOICE_API_KEY="$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))')"
docker pull ghcr.io/debpalash/voicestudio:stable
docker run -d --name omnivoice \
  -p 127.0.0.1:3900:3900 \
  -e OMNIVOICE_API_KEY="$OMNIVOICE_API_KEY" \
  ghcr.io/debpalash/voicestudio:stable
# 분석을 완전히 끄려면 -e OMNIVOICE_ANALYTICS_DISABLED=1
Docker 태그 의미 운영 권장
:latest / :main main 최신 커밋의 롤링 프리뷰 운영 서버에는 쓰지 않기
:stable 가장 최근 정식 릴리스 운영 기본값
:0.5.6 / :0.5 정확한 버전 / 0.5 최신 패치 재현성이 필요하면 정확한 버전 고정
:sha-xxxxxxx 특정 커밋 장애 분석·롤백용
:rocm, :stable-rocm 등 AMD GPU(ROCm) 변형 Linux + AMD GPU 서버
하드웨어 지원 수준(README) 현실적 기대치
NVIDIA GPU (Windows / Linux) CUDA 가속 OmniVoice 권장 VRAM 하한 6GB. 4GB 카드는 RAM으로 페이징돼 수 분씩 걸린 사례(#1226, #1222)
Apple Silicon Metal(MPS) 가속 통합 메모리 16GB에서는 브라우저 탭 등 메모리 압박에 주의
전용 GPU 없음 CPU에서 완전 사용 가능, 느림. 소형 CPU PyTorch 빌드(약 5GB 여유 공간) CPU 생성 예산은 600초로 더 깁니다(가속 시 300초)
Windows on ARM 실험적: 네이티브 ARM64 앱 + x64 파이썬 에뮬레이션, CPU 전용 검증 대기 중
Intel Mac 앱 UI만, 원격 백엔드 연결 로컬 추론 대상 아님

성능을 어떻게 평가할 것인가

솔직하게 짚어야 할 대목이 있습니다. docs/benchmarks.md의 결과 표는 확인 시점에 “No verified rows yet”, 즉 검증된 측정값이 한 줄도 없습니다. 프로젝트는 숫자를 추정하지 않고, 저장소 내 하네스로 측정한 값만 PR로 받겠다는 원칙을 세워 두었습니다. 따라서 “ElevenLabs급 품질”이나 속도 비교를 이 글에서 단정할 근거는 없고, 도입 팀이 직접 재야 합니다. 도구는 이미 준비돼 있습니다.

# 앱을 끈 상태에서 실행(실행 중인 백엔드가 모델을 잡고 있으면 수치가 왜곡됨)
uv run python scripts/bench_pipeline.py        # 전체 단계
uv run python scripts/bench_pipeline.py tts    # TTS 단계만
# 출력: warm 짧은 문장 RTF(초당 생성 오디오 대비 계산 시간), CUDA에서는 Peak VRAM
평가 항목 측정 방법 판단 기준 예시
속도 bench_pipeline.py tts의 warm RTF RTF < 1이면 실시간보다 빠름. 첫 생성은 지연 로드(~8초)·커널 컴파일로 항상 느리니 두 번째부터 판단
메모리 Peak VRAM(CUDA), Settings → Performance 사이드카 엔진은 하네스 밖에서 할당돼 n/a로 표시
클론 품질 내부 화자 동의를 받은 5–15초 참조 + 고정 스크립트 블라인드 청취 참조 클립 전사(Transcript) 필드가 비어 있으면 매 생성마다 ASR이 돌아 느려짐
더빙 품질 타이밍(세그먼트 길이 적합), 번역 정확도, 배경음 보존 LLM 번역 vs Argos/NLLB 오프라인 번역을 같은 영상으로 비교
안정성 장시간 배치·취소·오류 경로 반복 무인 작업이면 omnivoice-subprocess 같은 격리 엔진 사용 검토
가속 여부 Settings → Performance → GPU acceleration, /system/diagnose 엔진별 GPU/CPU 라우팅 사유 확인(조용한 CPU 폴백 확인)

라이선스: 앱, 패키지, 가중치는 서로 다른 층입니다

앱 코드는 AGPL-3.0-only, 번들 omnivoice 패키지는 Apache-2.0, 기본 OmniVoice 가중치는 CC-BY-NC, 기타 가중치는 모델별 조건입니다. 유료 상용 라이선스는 폐쇄형 임베딩용이며 모델 권리를 포함하지 않습니다
앱 코드는 AGPL-3.0-only, 번들 omnivoice 패키지는 Apache-2.0, 기본 OmniVoice 가중치는 CC-BY-NC, 기타 가중치는 모델별 조건입니다. 유료 상용 라이선스는 폐쇄형 임베딩용이며 모델 권리를 포함하지 않습니다

도입 검토에서 가장 오해하기 쉬운 부분입니다. LICENSE-NOTICE.md를 기준으로 정리하면, 앱 코드(electron, native, backend, scripts, deploy)는 AGPL-3.0-only이고 상업적·사내 사용도 AGPL 조건 아래 무료입니다. 단, 수정한 버전을 네트워크로 다른 사람에게 제공하면 그 사용자에게 전체 소스를 제공해야 합니다. 폐쇄형 제품·서비스에 넣고 싶은 조직을 위한 유료 상용 라이선스가 별도로 있고, 기여자는 CLA로 관리 회사(Yupcha Softwares Private Limited)에 권리를 부여합니다.

층위 조건 실무 해석
앱 코드 AGPL-3.0-only (+ 유료 상용 라이선스 옵션) 내부망에서 수정본을 웹 서비스로 제공해도 AGPL 네트워크 조항 적용 대상이 될 수 있음
omnivoice/ 패키지 Apache-2.0 (업스트림 저작자) AGPL과 결합 가능
기본 OmniVoice 가중치 모델 카드 기준 CC-BY-NC(비상업) 앱의 상용 라이선스로도 해소되지 않음. 상업 용도 생성물이면 다른 엔진·가중치 검토 필요
오디오 토크나이저 Boson Higgs Audio 2, Meta Llama 커뮤니티 조건이 별도 포함 About 패널 표기만으로 고지 의무 충족을 보장하지 않는다고 문서가 명시
기타 엔진 가중치 모델별 개별 조건(예: audio.cpp 가중치는 연구·비상업) Model Manager의 버전별 고지 확인. ‘알 수 없음’은 허가가 아님
번들 바이너리 PyAV 15.1.0 휠의 FFmpeg/x264/x265 재배포 요건이 미해결로 기록돼 있음(wheel audit 문서)

main의 0.5.7 CHANGELOG에는 이 방향을 강화하는 변경이 이미 적혀 있습니다. 기본 OmniVoice를 포함해 상업 라이선스가 명확하지 않은 모델은 Model Catalogue에서 라이선스를 한 번 수락해야 하고, 그 전에는 API·MCP 요청이 라이선스 오류를 반환합니다(#2689). 또 원격 컴퓨트 디바이스·원격 워커·GPU 공유는 VoiceStudio Pro로 이동해 오픈소스 앱에서 빠졌다고 적혀 있습니다(#2748). 오픈코어 경계가 움직이고 있다는 신호이므로, 원격 GPU 구성을 전제로 도입하려던 팀은 특히 확인이 필요합니다.

대안과 비교

프로젝트 자체 문서(docs/competitive-analysis.md, 2026-06-11 작성, 수치는 당시 스냅샷)가 가장 직접적인 경쟁자로 꼽는 것은 voicebox이고, 더빙 사용자 기준으로는 pyvideotrans와 KrillinAI/KlicStudio를 함께 봅니다. 아래 비교는 그 문서와 각 저장소의 공개 라이선스를 바탕으로 한 정성적 비교이며, 품질·속도 우열 판단은 포함하지 않았습니다.

선택지 형태 라이선스 이럴 때 적합
VoiceStudio Electron + FastAPI, 다중 엔진, MCP·OpenAI 호환 API AGPL-3.0 (+상용), 가중치 별도 클론·더빙·받아쓰기·오디오북을 한 도구로, 에이전트 연동까지
voicebox (jamiepine) 로컬 우선 보이스 스튜디오(Tauri + React + FastAPI) MIT 허용적 라이선스로 코드를 가져다 쓰고 싶을 때
pyvideotrans PySide6 데스크톱 영상 번역·더빙 파이프라인(GUI+CLI) GPL-3.0 성숙한 영상 번역 파이프라인 위주
KrillinAI / KlicStudio Go, 데스크톱+웹+CLI, 에이전트 지향 GPL-3.0 더빙 중심 + CLI 자동화
ElevenLabs 등 클라우드 API SaaS 상용 약관 운영 부담 없이 품질·SLA가 필요할 때. 데이터가 외부로 나가는 것이 허용될 때
개별 모델 직접 운영(OmniVoice, CosyVoice 등) 라이브러리/스크립트 모델별 단일 엔진만 서빙하면 되고 UI·파이프라인이 필요 없을 때

박스에서 직접 확인한 범위

과장을 피하려고, 이번 글을 쓰며 실제로 실행한 것과 하지 않은 것을 구분해 둡니다. Linux x86_64 박스(Python 3.13, uv, Bun 설치)에서 main 브랜치(커밋 36862c1, 2026-10-13 04:59 KST)를 얕은 클론했습니다.

점검 결과 해석
얕은 클론 성공, 작업 트리 약 121MB uv.lock 1.8MB, CHANGELOG 369KB 등 문서·잠금 파일이 큼
python3 -m backend.speech_client --help 정상 출력(capabilities, transcribe 하위 명령) 표준 라이브러리만으로 동작하는 브리지라는 문서 설명과 일치
경량 pytest 일부 (test_app_version, test_no_hardcoded_cjk, test_locale_parity) 576 통과, 1 실패 (약 3.8초) 실패 1건은 omnivoice 패키지를 설치하지 않아 메타데이터가 없어서 생긴 예상된 실패
bin/omnivoice-tts-* 저장소 안 파일은 0바이트 자리표시자 GGUF 사이드카는 빌드 스크립트·릴리스 산출물로 공급되는 구조
실제 음성 합성·클론·더빙 실행하지 않음 PyTorch·모델 가중치(수 GB) 설치와 GPU가 필요해 이번 점검 범위에서 제외

도입 전 체크리스트와 한계

주의점 내용 대응
가중치 라이선스 기본 모델 가중치가 CC-BY-NC 상업 생성물이면 엔진 교체 또는 권리 확인을 먼저
음성 동의 README: “Clone voices only with permission.” 앱이 동의를 검증하지는 않음 사내 동의서·보관 정책 마련, 워터마크 유지
설치 파일 신뢰 Electron 설치 파일은 미서명 또는 ad-hoc 서명, Apple 공증 없음. macOS 자동 업데이트 미검증 사내 배포 시 해시(SHA256SUMS.txt) 검증, 수동 업데이트
원격 접근 LAN 공유 PIN은 HTTP 평문, 로컬 프록시 경유 시 PIN 우회 Tailscale/TLS + 프록시 인증, 0.5.7부터 호스트 이름은 OMNIVOICE_ALLOWED_HOSTS 필요
오픈코어 경계 0.5.7에서 원격 컴퓨트·GPU 공유가 Pro로 이동 필요 기능이 오픈소스 앱에 남아 있는지 버전별 확인
분석 데이터 PostHog US 옵트인(첫 실행 동의, 기본 OFF), 저장소에 쓰기 전용 토큰 포함 정책상 불가하면 OMNIVOICE_ANALYTICS_DISABLED=1
Docker 아키텍처 linux/amd64 전용, ARM64 네이티브 이미지 없음 Apple Silicon은 네이티브 앱 사용
벤치마크 부재 공식 결과 표가 비어 있음 bench_pipeline.py로 자체 측정 후 결정
변경 속도 릴리스 후보 없이 main에서 바로 패치 태그(CLAUDE.md의 베타 정책) 운영은 :stable/정확한 버전 고정, main은 검증용

누가 도입하면 좋을까

적합한 팀: 녹음·영상 원본을 외부 클라우드로 보낼 수 없는 미디어·교육·사내 콘텐츠 팀, 받아쓰기와 TTS를 에이전트(Claude Code, Codex 등)에 붙이고 싶은 개발 팀, 여러 오픈 음성 모델을 같은 UI·API로 비교 평가하려는 연구·PoC 팀입니다. 특히 MCP files 모드와 OpenAI 호환 전사 엔드포인트는 기존 자동화에 끼워 넣기 쉬운 형태입니다.

신중해야 할 팀: 생성 음성을 상업 콘텐츠로 내보내야 하는데 가중치 권리를 따로 확보하지 못한 경우, 수정본을 외부 고객용 웹 서비스로 제공하면서 AGPL 소스 공개를 원치 않는 경우(상용 라이선스 검토 필요), 서명·공증된 설치 파일과 SLA가 필수인 엔터프라이즈 데스크톱 환경입니다.

정리하면 VoiceStudio의 진짜 가치는 단일 모델의 품질보다 엔진 격리(사이드카 venv), 조용한 폴백을 금지하는 라우팅, 단일 포트의 음성 API·MCP라는 통합 설계에 있습니다. 반대로 가장 큰 리스크는 코드가 아니라 가중치 라이선스와 빠르게 움직이는 오픈코어 경계입니다. PoC는 :stable Docker나 데스크톱 앱으로 시작하고, 사내 동의를 받은 음성으로 bench_pipeline.py 수치와 블라인드 청취를 함께 기록한 뒤 결정하시길 권합니다.