로컬 AI 음성 읽기 가이드

로컬 AI 음성으로 라이브 채팅을 읽어 보세요. 설치가 필요 없는 옵션부터 시작한 다음 필요할 때만 로컬 서버를 사용하세요.

한국어

개요

플랫폼에 관계없이 캡처된 채팅 텍스트에 사용할 수 있습니다. 음성 제공업체는 YouTube, Twitch, TikTok 또는 다른 채팅 사이트가 아닌 SSN 플레이어에 속합니다. 이러한 로컬 AI 제공업체는 다음과 다릅니다: 시스템 음성 읽기와 다릅니다. OBS에서 운영체제 음성을 제공하는지에 의존하지 않고 페이지 오디오를 생성합니다. 참고: 간단한 OBS 설정 가이드 에서 음성 제공 여부와 오디오 캡처의 차이를 확인하세요. 제공업체를 비교하고 샘플을 듣고 설정을 확인하세요.

Social Stream Ninja는 로컬 AI 음성 합성을 사용해 채팅 메시지를 소리 내어 읽을 수 있습니다. '로컬'은 두 가지 의미가 있습니다. 브라우저 안에서 음성이 실행되거나, 자신의 컴퓨터에서 작은 음성 읽기 서버를 실행하는 것입니다.

두 가지 방식이 있습니다:

방식 2 — 자체 호스팅 서버 Docker 필요

컴퓨터에서 로컬 음성 읽기 서버를 실행하고 Social Stream Ninja가 여기에 연결하도록 설정하세요. 더 많은 음성, 음성 복제, 서버 측 제어를 사용할 수 있습니다.

  • Kokoro-FastAPI
  • openedai-speech (Piper)
  • kokoro-web

Social Stream의 내장 OpenAI 호환 엔드포인트 기능을 사용합니다.

방식 1부터 시작하세요. OBS에서 음성 읽기를 사용하려는 목적이라면 내장 Kokoro나 Kitten을 먼저 시험하세요. Docker, 서버, API 키가 필요하지 않습니다. 특정 서버 음성, 음성 복제 또는 다른 모델이 필요할 때만 자체 호스팅 서버를 사용하세요.

빠른 설정

대부분의 방송자에게 가장 간단한 방법입니다:

1
내장 제공업체부터 사용하세요. 추가: &speech=en-US&ttsprovider=kokoro 또는 &speech=en-US&ttsprovider=kitten — 추가할 위치: dock.html URL입니다.
2
해당 URL을 OBS의 브라우저 소스로 넣으세요. 소리를 내는 페이지는 OBS 브라우저 소스입니다.
3
OBS 오디오 캡처를 켜세요. 브라우저 소스 속성에서 다음을 활성화하세요: OBS를 통해 오디오 제어.
4
짧은 테스트 채팅 메시지를 하나 보내세요. 다음과 같이 간단한 문장을 사용하세요: Testing local TTS입니다. Kokoro나 Piper를 사용한다면 최초 모델 다운로드가 끝날 때까지 기다리세요.
5
그다음에 자체 호스팅 서버를 시험하세요. Kokoro-FastAPI, openedai-speech 또는 다른 Docker 서버를 사용한다면 URL을 OBS에 복사하기 전에 아래 localhost 규칙을 읽으세요.

localhost / 127.0.0.1 규칙

가장 흔한 로컬 음성 읽기 설정 실수입니다.

localhost 그리고 127.0.0.1 은 항상 '바로 이 컴퓨터'를 뜻합니다. OBS와 Kokoro가 서로 다른 컴퓨터에서 실행된다면, 127.0.0.1 은 OBS URL 안에서 Kokoro 컴퓨터가 아닌 OBS 컴퓨터를 가리킵니다.
localhost는 같은 컴퓨터를 뜻하고 다른 컴퓨터에는 LAN IP 주소가 필요함을 보여 주는 그림
사용: 127.0.0.1 는 음성 읽기 서버와 오디오를 재생하는 페이지가 같은 컴퓨터에 있을 때만 사용하세요. 서버가 다른 컴퓨터에 있다면 해당 컴퓨터의 LAN IP 주소를 사용하세요.
사용 환경사용할 엔드포인트
OBS와 Kokoro가 같은 컴퓨터에서 실행되는 경우http://127.0.0.1:8880/v1/audio/speech
Kokoro가 홈 네트워크의 다른 컴퓨터에서 실행되는 경우http://192.168.x.x:8880/v1/audio/speech를 사용하고 Kokoro 컴퓨터의 LAN IP를 입력하세요.
SSN 데스크톱 앱의 테스트 버튼은 작동하지만 OBS에서 소리가 나지 않음OBS 자체에서 접근 가능한 엔드포인트가 필요합니다. 앱 테스트가 성공했다고 OBS에서 서버에 접근할 수 있다는 뜻은 아닙니다.

Linux, macOS, Windows에서는 방화벽이 포트를 허용하고 Docker가 다음 옵션으로 포트를 공개했는지도 확인하세요: -p 8880:8880.

SSN에서 클릭할 위치

확장 프로그램 팝업에서 음성 읽기 제공업체 선택기를 열고 다음을 선택하세요: 사용자 지정 / 로컬 음성 읽기 엔드포인트 (Custom / Local TTS Endpoint)을 선택하세요. OpenAI 호환 로컬 엔드포인트 입력란과 이 가이드로 돌아오는 링크가 표시됩니다.

Social Stream Ninja의 로컬 음성 읽기 입력란을 보여 주는 스크린샷 형태의 안내도
중요한 것은 엔드포인트 입력란입니다. 로컬 서버에서는 보통 API 키를 비워 두어도 됩니다. 서버가 실제로 지원하는 음성 이름을 선택하세요.
스크린샷 참고: 위의 SSN 입력란 안내도는 로컬 엔드포인트 입력란을 보여 줍니다. 타사 서버 UI는 프로젝트 버전에 따라 달라지므로 최신 스크린샷과 UI 세부 사항은 관련 설정 단계 근처의 각 프로젝트 저장소 링크에서 확인하세요.

자체 호스팅 흐름

SSN은 로컬/자체 호스팅 음성 읽기 서버를 OpenAI 호환 음성 엔드포인트처럼 취급합니다. 기본 흐름은 다음과 같습니다:

chat text -> SSN TTS request -> local endpoint or SSN bridge -> TTS server -> audio response -> SSN playback

요청 형식

예를 들어 ttsprovider=customtts, localtts, 또는 openai인 경우 SSN이 설정된 엔드포인트에 JSON POST를 보냅니다:

POST /v1/audio/speech { "model": "tts-1", "input": "Chat message text", "voice": "af_bella", "response_format": "mp3", "speed": 1.0 }

CORS, 호스팅 페이지, 브리지

CORS는 브라우저의 권한 확인입니다. 쉽게 말해 음성 읽기 서버가 브라우저에 '이 페이지는 내게 오디오를 요청해도 된다'고 알려야 합니다. 이 허용이 없으면 Kokoro나 다른 음성 읽기 서버에 요청이 도착하기도 전에 차단될 수 있습니다.

서버가 브라우저 요청을 허용하지 않으면 다음을 실행하세요: SSN 로컬 음성 읽기 브리지 을 실행하고 SSN이 다음을 가리키도록 하세요: http://127.0.0.1:8124/v1/audio/speech입니다. OBS에서는 OBS와 같은 컴퓨터에서 브리지를 실행하는 구성이 가장 쉽습니다.

지원되는 오디오 응답

응답 SSN 지원 참고
바이너리 오디오 예 가장 좋은 방식입니다. 반환할 유형: audio/mpeg, audio/wav, audio/ogg, audio/aac또는 브라우저에서 재생 가능한 다른 오디오 유형을 반환하세요.
오디오 URL이 포함된 JSON 예 SSN이 확인하는 필드: url, audio_url, output_url, 중첩된 data.url, 그리고 첫 번째 data[] 항목입니다.
base64 오디오가 포함된 JSON 예 SSN이 확인하는 필드: audio, audio_data, audioContent, b64_json, 중첩된 data 필드와 데이터 URL입니다.
원시 PCM 래퍼를 사용하는 경우에만 PCM을 WAV 파일이나 base64 WAV로 반환하세요. 브라우저 오디오 요소는 원시 PCM 바이트를 직접 안정적으로 재생할 수 없습니다.
권장 형식: 사용할 값: mp3 는 작은 파일 크기와 폭넓은 브라우저 지원에 적합하며, wav 를 로컬 음성 복제 서버 및 브리지 테스트에 사용하고, opus 는 서버와 브라우저가 모두 지원할 때만 사용하세요.

스트리밍 오디오

SSN은 현재 사용자 지정/로컬 음성 읽기 엔드포인트의 점진적 재생을 지원하지 않습니다. 응답 blob 또는 JSON 오디오 페이로드를 기다린 뒤 재생합니다. 일부 상위 서버는 스트리밍 엔드포인트를 제공하지만 SSN의 현재 OpenAI 호환 경로는 재생 전에 버퍼링합니다.

실용적인 결론은 채팅 음성 읽기를 짧게 유지하는 것입니다. 스트리밍을 지원하려면 스트리밍 WAV/MP3 청크, MediaSource, WebCodecs 또는 서버 측 믹서를 이용하는 별도의 재생 경로가 필요합니다.

방식 1 — 내장 음성 읽기 (별도 설정 불필요)

이 엔진들은 Social Stream Ninja에 포함되어 있어 설치가 필요하지 않습니다. WebAssembly(WASM) 또는 ONNX Runtime을 사용해 브라우저에서 실행됩니다.

제공업체 품질 CPU 사용 GPU/WebGPU URL 매개변수
Kokoro TTS ⭐⭐⭐⭐⭐ 뛰어남 보통 GPU에서 더 빠름 ?ttsprovider=kokoro
Piper TTS ⭐⭐⭐⭐ 매우 좋음 낮음 CPU 전용 ?ttsprovider=piper
Kitten TTS ⭐⭐⭐ 좋음 매우 낮음 CPU 전용 ?ttsprovider=kitten
eSpeak-NG ⭐⭐ 기계적인 음성 최소 CPU 전용 ?ttsprovider=espeak

활성화 방법

추가: &ttsprovider= 그리고 &speech= 를 Social Stream에 추가하세요: dock.html URL:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro

Kokoro TTS 옵션

현재 SSN에는 영어 28개, 스페인어 3개, 브라질 포르투갈어 3개의 Kokoro 음성이 있습니다. 다음 매개변수로 음성을 지정하세요: &voicekokoro=:

English female: af_bella, af_sarah, af_nicole, af_sky English male: am_adam, am_michael British female: bf_emma, bf_isabella British male: bm_george, bm_lewis
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro&voicekokoro=af_bella&kokorospeed=1.1
언어 참고: 원하는 언어에 맞는 Kokoro 음성을 선택하세요. 언어 매개변수만 변경해도 선택한 음성은 바뀌지 않습니다.

스페인어 예시:

dock.html?session=YOUR_SESSION&speech=es-ES&ttsprovider=kokoro&voicekokoro=ef_dora

포르투갈어 예시:

dock.html?session=YOUR_SESSION&speech=pt-BR&ttsprovider=kokoro&voicekokoro=pf_dora

Piper TTS 옵션

다음으로 음성 모델을 지정하세요: &pipervoice=:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=piper&pipervoice=en_US-hfc_female-medium

포르투갈어 및 스페인어 Piper 음성을 사용할 수 있습니다:

Brazilian Portuguese: pt_BR-faber-medium, pt_BR-edresson-low
Spanish: es_ES-davefx-medium, es_MX-ald-medium
dock.html?session=YOUR_SESSION&speech=pt-BR&ttsprovider=piper&pipervoice=pt_BR-faber-medium
dock.html?session=YOUR_SESSION&speech=es-ES&ttsprovider=piper&pipervoice=es_ES-davefx-medium

Kitten TTS 옵션

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kitten&kittenvoice=expr-voice-4-f

eSpeak-NG 옵션

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=espeak&espeakvoice=en&espeakspeed=175
dock.html?session=YOUR_SESSION&speech=pt-BR&ttsprovider=espeak&espeakvoice=pt-br&espeakspeed=145
dock.html?session=YOUR_SESSION&speech=es-ES&ttsprovider=espeak&espeakvoice=es&espeakspeed=145
최초 로드: Kokoro와 Piper는 처음 사용할 때 모델 파일(약 50~200 MB)을 다운로드해야 합니다. 백그라운드에서 자동으로 진행됩니다. 이후에는 캐시된 모델을 재사용할 수 있지만 초기화에는 여전히 시간이 걸립니다. OBS의 캐시는 Chrome/Edge와 별개입니다.
OBS 캡처: 모든 내장 음성 읽기 제공업체는 브라우저에서 직접 오디오를 재생합니다. OBS에서 dock.html을 브라우저 소스로 추가하고 다음을 활성화하세요: 'OBS를 통해 오디오 제어'— 가상 케이블이 필요하지 않습니다. 참고: OBS 섹션 아래.

브라우저 및 데스크톱 앱 참고 사항

Chrome 확장 프로그램, OBS 브라우저 소스, 독립 실행형 Social Stream Ninja 데스크톱 앱은 모두 동일한 dock.html 음성 읽기 URL 매개변수를 사용합니다. 중요한 차이는 소리가 생성되는 위치입니다.

사용 환경 로컬 음성 읽기 동작 오디오 캡처
Chrome 확장 프로그램 / OBS 브라우저 소스 SSN 브리지를 사용하지 않는 한 브라우저 fetch 요청에는 로컬 서버의 CORS 허용이 필요합니다. OBS 브라우저 소스에서 'OBS를 통해 오디오 제어'를 사용하세요.
독립 실행형 데스크톱 앱 같은 제공업체 설정을 사용합니다. 앱의 로컬 파일 창은 CORS 제약이 더 적지만 브라우저 형태의 요청을 거부하는 서버에는 여전히 브리지가 가장 안전한 방법입니다. 데스크톱/앱 오디오를 캡처하거나 앱 출력을 가상 오디오 케이블로 보내세요.
데스크톱 앱의 내장 Kokoro 앱은 로컬 ninjafy.tts 방식으로 Kokoro를 사용하면 브라우저 모델 로드에만 의존하지 않아도 됩니다. 앱에서 오디오를 재생하므로 데스크톱/앱 오디오 캡처를 사용하세요.
앱 테스트와 OBS를 혼동하지 마세요. SSN 앱 안에서 Test를 누르면 앱에서 테스트합니다. 다음 링크를 복사해 dock.html URL을 OBS에 넣으면 음성 읽기 서버에 접근하고 오디오를 재생해야 하는 주체는 OBS입니다.

방식 2 — 자체 호스팅 음성 읽기 서버

더 많은 음성, 음성 복제, 여러 도구에서 재사용할 전용 서버가 필요하다면 로컬 음성 읽기 서버를 실행할 수 있습니다. Social Stream Ninja는 내장된 다음 기능으로 연결합니다: OpenAI 호환 음성 읽기 엔드포인트 기능을 사용합니다. 로컬 서버에는 API 키가 필요하지 않습니다.

요구 사항: Docker Desktop 을 설치하고 실행해야 합니다. Docker는 개인 용도로 무료입니다.

권장 옵션 세 가지:

서버 모델 GPU 디스크 기본 포트
Kokoro-FastAPI 추천 Kokoro 82M 선택 사항 약 2 GB 8880
openedai-speech (Piper) 경량 Piper TTS CPU 전용 1 GB 미만 8000
kokoro-web Kokoro 82M 선택 사항 약 2 GB 3000

어떤 패키지가 적합할까요?

패키지 주요 장점 고려할 점
내장 Kokoro 가장 먼저 권장하는 선택: 서버 불필요, 높은 품질, 비공개 처리, 브라우저와 데스크톱 앱에서 작동. 음성 복제를 지원하지 않습니다.
Kokoro-FastAPI OpenAI 호환 서버, 간단한 Docker 설정, CPU 또는 GPU 지원, 다양한 Kokoro 음성. 실제 음성 복제는 지원하지 않습니다. 음성 혼합 및 사용자 지정 음성 기능은 서버 빌드에 따라 다릅니다.
openedai-speech 경량 OpenAI 호환 엔드포인트입니다. Piper는 CPU에 적합하고 XTTS는 VRAM 약 4 GB 환경에서 음성 복제를 추가합니다. 저장소에 대부분 구식이 되었다고 명시되어 있으므로 유용할 수는 있지만 장기적인 호환성이 보장된다고 생각하지 마세요.
Chatterbox 서버 음성 복제, 웹 UI 옵션, OpenAI 호환 API, 긴 텍스트 처리 도구. 일부 빌드는 CPU보다 CUDA/GPU 지원이 더 원활합니다. 설정은 서버 포크마다 다릅니다.
GPT-SoVITS 짧은 참조 및 대본 지원을 통한 강력한 음성 복제/제어. 기본적으로 OpenAI 호환이 아닙니다. SSN 브리지 모드를 사용하세요.
F5-TTS 프롬프트 WAV + 대본을 이용한 자연스러운 제로샷 음성 복제. 공식 프로젝트는 단순한 OpenAI 엔드포인트가 아닙니다. 래퍼 또는 브리지 모드를 사용하세요.
Qwen3-TTS 더 작은 0.6B/1.7B 모델을 포함한 최신 음성 복제 및 음성 설계 기능. 라이브러리/데모가 우선이며 SSN에서 사용하려면 래퍼가 필요합니다.
MisoTTS 고성능 프롬프트 기반 음성 생성. VRAM 6 GB 로컬 환경에 적합하지 않습니다. 필요하면 원격/사용자 지정 호스팅을 사용하세요.

음성 복제의 작동 방식

음성 복제는 별도의 SSN 모드가 아닙니다. 일부 로컬 음성 읽기 서버 내부의 기능입니다. SSN은 채팅 텍스트를 로컬 엔드포인트로 보내고, 서버는 저장된 참조 오디오 파일, 음성 프로필 또는 브리지 설정에서 복제 음성을 선택합니다.

일반적인 흐름

  1. 일반적으로 배경 소음이 적은 한 사람의 목소리를 3~30초 길이로 녹음하여 깨끗한 참조 클립을 준비하세요.
  2. 일부 엔진에는 참조 클립의 정확한 대본도 필요합니다.
  3. 로컬 서버가 참조 오디오를 화자 프롬프트, 임베딩 또는 음성 프로필로 변환합니다.
  4. SSN은 다음을 사용해 라이브 채팅 텍스트를 엔드포인트로 보냅니다: ttsprovider=customtts.
  5. 서버는 보통 WAV 또는 MP3 형식의 재생 가능한 오디오 파일을 반환하고, SSN은 이를 도크/브라우저 소스에서 재생합니다.
동의를 받은 음성만 사용하세요. 음성 복제는 실제 사람처럼 들릴 수 있으므로 본인 소유이거나 사용 허가를 받았거나 이 용도로 명확하게 라이선스를 받은 음성만 사용하세요.
XTTS-v2는 기본적으로 비상업용입니다. Coqui Public Model License 는 모델과 출력물의 비상업적 사용만 허용합니다. 수익을 창출하는 방송은 이에 해당하지 않을 수 있으므로 XTTS-v2를 상업적으로 사용하기 전에 라이선스를 확인하거나 별도 허가를 받으세요.

VRAM이 6 GB 이하라면 소형 제로샷 음성 복제 모델과 OpenAI 호환 서버를 먼저 고려하세요. 더 큰 모델도 다른 곳에 호스팅하면 같은 SSN 엔드포인트를 통해 사용할 수 있습니다.

옵션 음성 복제 VRAM 6 GB에 적합 SSN용 API 경로
Qwen3-TTS 0.6B Base 3초 참조 오디오 가능성 높음 OpenAI 호환 래퍼를 사용한 뒤 다음을 사용하세요: ttsprovider=customtts
XTTS-v2 / openedai-speech 짧은 WAV 참조 음성 예, openedai-speech 안내 기준 약 4 GB /v1/audio/speech
Chatterbox Turbo / Server 참조 오디오 기반 음성 복제 Turbo / 작은 청크 사용 시 가능성 높음 OpenAI 호환 서버 빌드 또는 다음 브리지 모드:
GPT-SoVITS 5초 제로샷, 1분 퓨샷 fp16 / 경량 설치 시 가능성 높음 사용: scripts/local-tts-bridge.cjs --mode gptsovits
F5-TTS 프롬프트 WAV + 대본 가능할 수 있음. 빌드와 보코더에 따라 다름 OpenAI 호환 래퍼를 사용하거나 다음을 사용하세요: --mode f5 를 F5-TTS 서버 래퍼에 사용하세요.
MisoTTS 8B 프롬프트 오디오 컨텍스트 아니요. 프로젝트 권장 VRAM은 24 GB 원격/사용자 지정 엔드포인트만
SSN에 가장 적합한 대상 형식: 다음을 받습니다: POST /v1/audio/speech 포함: { model, input, voice, response_format, speed } 을 받고 재생 가능한 오디오 파일을 반환합니다. OpenAI, Coqui/XTTS, Kokoro 래퍼, Qwen 래퍼 및 대부분의 프록시 서비스가 이에 해당합니다.

컴퓨터 요구 사항

이는 실용적인 시작 기준이며 확정적인 보장은 아닙니다. 모델 버전, 양자화, 텍스트 길이, Docker 이미지, 백그라운드 앱에 따라 메모리 사용량이 달라질 수 있습니다.

옵션 실용적인 최소 컴퓨터 사양 좋은 선택 참고
시스템 음성 읽기 / eSpeak 최신 PC 모두 모든 PC 빠르지만 품질이 낮고 음성 복제는 지원하지 않습니다.
내장 Kitten 저사양 CPU, RAM 4 GB 최신 노트북 CPU, RAM 8 GB 작은 ONNX 모델, 빠른 시작.
내장 Piper 최신 CPU, RAM 4~8 GB 최신 CPU, RAM 8 GB 적은 리소스로 사용하는 신경망 음성의 좋은 선택입니다.
내장 Kokoro 최신 CPU, RAM 8 GB WebGPU 지원 GPU 또는 빠른 CPU, RAM 8~16 GB 별도 설정 없이 가장 좋은 품질. 처음 로드할 때 모델 리소스를 다운로드합니다.
Kokoro-FastAPI CPU Docker 호스트, RAM 8 GB NVIDIA GPU 선택 사항, RAM 8~16 GB 브라우저에서 모델을 로드하기 적합하지 않을 때 좋은 로컬 서버입니다.
openedai-speech Piper CPU, RAM 4~8 GB CPU, RAM 8 GB 경량 OpenAI 호환 서버.
openedai-speech XTTS VRAM 약 4 GB NVIDIA GPU, RAM 8~16 GB VRAM 6 GB 이상 NVIDIA GPU, RAM 16 GB 음성 복제 방식. CPU도 가능하지만 느립니다.
Chatterbox 서버 일부 빌드는 CPU로 작동하지만 느림 VRAM 6 GB 이상 NVIDIA GPU, RAM 16 GB 음성 복제나 긴 텍스트 처리에는 GPU를 사용하세요.
GPT-SoVITS / F5-TTS / Qwen3-TTS CPU는 시험용으로만 사용, 느림 소형/최적화 모델에 VRAM 6 GB 이상 NVIDIA GPU, RAM 16 GB 래퍼 선택과 모델 크기가 중요합니다. 추가 설정이 필요할 수 있습니다.
MisoTTS 8B VRAM 6 GB의 로컬 환경에서는 권장하지 않음 VRAM 24 GB 또는 원격 호스트 저장소에서는 대화형 사용에 VRAM이 많은 GPU를 권장합니다.

시험한 서버 참고 사항

SSN 호환성을 확인한 자체 호스팅 음성 복제 대상입니다. 로컬 엔드포인트 경로는 다음 두 환경에서 시험했습니다: dock.html 그리고 featured.html.

SSN은 직접 바이너리 오디오 응답, base64 오디오가 포함된 JSON 응답, 오디오 URL이 포함된 JSON 응답을 받습니다. 현재 사용자 지정/로컬 재생은 반환된 오디오를 버퍼링한 뒤 재생하며 점진적 스트리밍 재생은 아직 지원하지 않습니다.

서버 SSN 사용 방식 참고
openedai-speech 직접 연결 또는 브리지 OpenAI 호환 /v1/audio/speech입니다. Piper 모드는 다음 환경에서 실제 CPU 합성으로 시험했습니다: dock.html 그리고 featured.html를 직접 연결과 브리지 연결로 시험했습니다. Windows에서 소스로 실행한다면 가상 환경의 Scripts 폴더가 다음에 있는지 확인하세요: PATH 에 추가하여 piper.exe 그리고 ffmpeg.exe 을 찾을 수 있도록 하세요.
chatterbox-tts-api 직접 연결 또는 브리지 OpenAI 호환 /v1/audio/speech입니다. 설정한 참조 오디오를 음성 복제에 사용합니다. API 형식을 직접 연결과 브리지 연결로 시험했습니다.
Chatterbox-TTS-Server 직접 연결 또는 브리지 OpenAI 호환 엔드포인트와 웹 UI입니다. 다음을 사용해 실제 CPU 합성으로 시험했습니다: Emily.wav 출처: dock.html 그리고 featured.html를 직접 연결과 브리지 연결로 시험했습니다.
GPT-SoVITS 브리지 모드 SSN 브리지를 다음 옵션으로 실행하세요: --mode gptsovits로 실행하세요. 대상 서버는 /tts이며 OpenAI 호환 형식이 아닙니다.
F5-TTS_server 브리지 모드 SSN 브리지를 다음 옵션으로 실행하세요: --mode f5로 실행하세요. 대상 서버는 다음을 사용합니다: GET /synthesize_speech/.
F5-TTS 공식 래퍼 필요 CLI, Gradio, 소켓 서버가 우선입니다. OpenAI 호환 래퍼 또는 래퍼를 대상으로 하는 F5 브리지 모드를 사용하세요.
Qwen3-TTS 래퍼 필요 라이브러리와 Gradio 데모가 우선입니다. 다음을 감싸는 소형 OpenAI 호환 래퍼의 좋은 후보입니다: generate_voice_clone.
MisoTTS 원격/사용자 지정만 음성 복제를 지원하지만 8B 모델은 VRAM 6 GB 환경에 적합하지 않으며 저장소에 로컬 REST 엔드포인트가 없습니다.

Kokoro-FastAPI 설정

Kokoro-FastAPI 는 OpenAI 호환 API를 제공하는 로컬 서버로 Kokoro 82M 모델을 실행합니다. CPU에서 작동하며 GPU가 필요하지 않고 음성 품질이 뛰어납니다.

Docker로 설치

터미널(명령 프롬프트, PowerShell 또는 Terminal)을 열고 다음 중 하나를 실행하세요:

CPU (모든 컴퓨터에서 작동):

docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2

GPU (NVIDIA 전용 — 더 빠른 합성):

docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:v0.2.0post4
첫 실행: Docker가 이미지(약 1.5~2 GB)를 다운로드합니다. 이 작업은 한 번만 진행됩니다. 이후 서버는 몇 초 만에 시작됩니다.

실행 확인

브라우저를 열고 다음 주소로 이동하세요: http://localhost:8880/web/— 음성을 시험할 수 있는 웹 UI가 표시되어야 합니다.

사용 가능한 음성

67개 이상의 음성을 사용할 수 있습니다. 주요 예:

af_bella, af_sarah, af_nicole, af_sky, af_heart (American female) am_adam, am_michael (American male) bf_emma, bf_isabella (British female) bm_george, bm_lewis (British male)

다음에서 모든 음성을 살펴보고 시험하세요: http://localhost:8880/web/ 를 서버 실행 후 여세요.

SSN URL

Kokoro-FastAPI가 OBS와 같은 컴퓨터에 있다면:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8880/v1/audio/speech&voiceopenai=af_bella

Kokoro-FastAPI가 다른 컴퓨터에 있으면 다음 값을 바꾸세요: 192.168.x.x 을 해당 컴퓨터의 LAN IP 주소로 바꾸세요:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://192.168.x.x:8880/v1/audio/speech&voiceopenai=af_bella
Kokoro 음성 이름은 OpenAI 음성 이름과 다릅니다. Kokoro-FastAPI에는 다음과 같은 음성을 사용하세요: af_bella, af_sarah, am_adam, 또는 bf_emma등을 사용하세요. 다음과 같은 이름은 echo, nova, 그리고 alloy OpenAI/openedai-speech 방식의 이름이며 Kokoro에서 작동하지 않을 수 있습니다.

서버 실행 유지

Kokoro-FastAPI가 백그라운드에서 자동으로 계속 실행되도록 하려면 Docker의 다시 시작 플래그를 사용하세요:

docker run -d --restart unless-stopped -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2

이제 재부팅할 때마다 Docker Desktop과 함께 자동으로 시작됩니다.

openedai-speech 설정 (Piper 및 XTTS-v2)

openedai-speech 는 OpenAI 호환 /v1/audio/speech 엔드포인트를 제공합니다. 소형 이미지는 CPU에서 Piper를 실행하며 전체 이미지는 지원 GPU에서 XTTS-v2 음성 복제를 실행할 수 있습니다.

보관된 프로젝트: openedai-speech는 2026년 1월에 보관 처리되었으며 스스로 대부분 구식이 되었다고 설명합니다. 유용한 호환성 예제로 남아 있지만 더 이상 유지 관리되지 않습니다. 로컬에서만 사용하고 인증되지 않은 포트를 공개 인터넷에 노출하지 마세요.

옵션 A: 경량 Piper

1 GB 미만의 CPU 전용 음성 읽기 서버를 원한다면 이 옵션을 사용하세요. XTTS-v2나 음성 복제는 포함하지 않습니다.

Docker Compose로 설치

1
저장소를 복제하거나 다음 파일이 있는 폴더를 만드세요: docker-compose.min.yml입니다. 또는 아래 명령을 직접 실행하세요.
2
최소 Piper 전용 이미지를 실행하세요:
docker run -d --restart unless-stopped \ -p 8000:8000 \ ghcr.io/matatonic/openedai-speech-min

Windows 소스 설치 참고

Docker 대신 로컬 체크아웃에서 openedai-speech를 실행한다면 가상 환경의 스크립트 폴더를 다음에 추가하세요: PATH 에 추가한 뒤 서버를 시작하세요. 이를 하지 않으면 서버가 다음을 찾지 못해 요청에 HTTP 500이 반환될 수 있습니다: piper.exe 또는 ffmpeg.exe.

cd openedai-speech $env:Path = "$PWD\.venv\Scripts;$env:Path" .\.venv\Scripts\python.exe speech.py --xtts_device none -H 127.0.0.1 -P 8000

사용 가능한 음성

openedai-speech는 Piper 음성에 매핑된 OpenAI 방식 음성 이름을 사용합니다:

alloy, echo, fable, onyx, nova, shimmer

SSN URL

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=openai&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova

옵션 B: XTTS-v2 음성 복제

XTTS-v2 자체는 웹 API가 아닌 모델입니다. 전체 openedai-speech 서버로 모델을 로드하고 저장된 참조 음성을 선택하고 SSN의 채팅 텍스트를 받아 재생 가능한 오디오를 반환하세요. 서버 안내에 따르면 실용적인 GPU VRAM 기준은 약 4 GB이며, CPU 추론도 가능하지만 느립니다.

다음을 사용하지 마세요: openedai-speech-min 를 XTTS-v2에 사용하지 마세요. 최소 이미지는 Piper 전용입니다. XTTS-v2에는 전체 설치와 다음 값이 필요합니다: model=tts-1-hd 를 각 음성 요청에 포함해야 합니다.
1
보관된 서버를 복제하고 환경 파일을 만든 뒤 GPU가 활성화된 전체 Docker Compose 구성을 시작하세요:
git clone https://github.com/matatonic/openedai-speech.git cd openedai-speech Copy-Item sample.env speech.env docker compose up -d

macOS 또는 Linux에서는 다음을 사용하세요: cp sample.env speech.env 를 사용하세요. 대체할 값: Copy-Item입니다. Docker에서 지원되는 GPU에 접근할 수 있어야 합니다. 모델은 처음 사용할 때 다운로드됩니다.

2
동의를 받은 깨끗한 참조 클립을 준비하세요. 6~30초 길이의 모노 22050 Hz WAV로 시작하면 좋습니다:
ffmpeg -i input.mp3 -ac 1 -ar 22050 -t 6 -y voices/me.wav
3
복제한 음성을 기존 tts-1-hd 섹션 아래에 추가하세요. 파일: config/voice_to_speaker.yaml:
tts-1-hd: me: model: xtts speaker: voices/me.wav language: en

다음 항목에 이미 나열된 기존 음성을 유지하세요: tts-1-hd를 유지하세요. 변경할 값: me 을 SSN이 보낼 음성 이름으로 바꾸고 필요하면 올바른 XTTS 언어 코드를 사용하세요.

4
서버를 다시 시작한 뒤 SSN 도크 또는 강조 오버레이가 이 서버를 사용하도록 설정하세요:
docker compose restart
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8000/v1/audio/speech&openaimodel=tts-1-hd&voiceopenai=me&openaiformat=wav
openaimodel=tts-1-hd 는 XTTS-v2에 필수입니다. 생략하면 Social Stream이 기본값인 tts-1을 보내므로 openedai-speech가 Piper를 대신 선택합니다. 다음 설정의 voiceopenai 값은 다음 파일의 복제 음성 이름과 일치해야 합니다: voice_to_speaker.yaml.

브라우저나 OBS가 직접 요청을 차단하면 다음을 실행하세요: 로컬 음성 읽기 브리지 를 OBS 컴퓨터에서 실행하고 모델 및 음성 매개변수는 유지한 채 다음 값만 변경하세요: openaiendpoint 대상: http://127.0.0.1:8124/v1/audio/speech.

로컬 음성 읽기 브리지

브리지는 작은 로컬 보조 프로그램입니다. SSN의 브라우저 요청을 받아 음성 읽기 서버와 통신한 뒤 브라우저에 맞는 헤더와 함께 오디오를 SSN에 반환합니다.

가장 간단한 규칙: OBS와 같은 컴퓨터에서 브리지를 실행하세요. 그러면 OBS는 다음을 사용할 수 있습니다: http://127.0.0.1:8124/v1/audio/speech로 지정합니다. 실제 음성 읽기 서버가 다른 컴퓨터에 있어도 동일합니다.
OBS가 로컬 브리지를 호출하고 브리지가 음성 읽기 서버를 호출하는 구조도
OBS 브라우저 소스는 OBS 컴퓨터의 브리지와 통신합니다. 그러면 브리지가 Kokoro-FastAPI, openedai-speech 또는 다른 서버를 호출할 수 있습니다.

독립 실행형 시작 폴더는 local-tts-bridge/입니다. 참고: 브리지 README 에서 모든 시작 옵션을 확인하세요.

OpenAI 호환 프록시

음성 읽기 서버가 같은 컴퓨터에 있는 경우 Windows PowerShell:

$env:SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" npm run local-tts-bridge

음성 읽기 서버가 다른 컴퓨터에 있는 경우 Windows PowerShell:

$env:SSN_TTS_TARGET="http://192.168.x.x:8880/v1/audio/speech" npm run local-tts-bridge

macOS/Linux 터미널:

SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" npm run local-tts-bridge

그런 다음 OBS의 dock.html URL이 브리지를 가리키도록 설정하세요:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=af_bella

GPT-SoVITS 프록시 모드

GPT-SoVITS는 자체 /tts JSON 형식을 사용하므로 브리지가 SSN의 OpenAI 호환 요청을 GPT-SoVITS 요청 본문으로 변환할 수 있습니다.

$env:SSN_TTS_REF_AUDIO_PATH="C:\voices\speaker.wav" $env:SSN_TTS_REF_TEXT="Reference audio transcript here." $env:SSN_TTS_TARGET="http://127.0.0.1:9880/tts" npm run local-tts-bridge -- --mode gptsovits
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&openaiformat=wav

F5-TTS 서버 프록시 모드

일부 F5-TTS 서버 래퍼는 다음을 제공합니다: /synthesize_speech/?text=...&voice=... 를 OpenAI 호환 엔드포인트 대신 제공합니다. 브리지가 SSN 요청을 해당 쿼리 형식으로 변환할 수 있습니다.

$env:SSN_TTS_TARGET="http://127.0.0.1:7860/synthesize_speech/" npm run local-tts-bridge -- --mode f5
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=default_en&openaiformat=wav
브리지 엔드포인트: http://127.0.0.1:8124/v1/audio/speech입니다. 포트는 다음으로 변경하세요: SSN_TTS_BRIDGE_PORT=8125 (필요한 경우).

Social Stream Ninja에 연결

위의 모든 자체 호스팅 서버는 같은 연결 방식인 Social Stream의 내장 OpenAI 음성 읽기 엔드포인트 기능과 사용자 지정 로컬 URL을 사용합니다.

URL 매개변수

매개변수 값 설명
ttsprovider customtts 또는 openai OpenAI 호환 음성 읽기 방식을 사용하세요. 사용할 옵션: customtts 를 로컬/자체 호스팅 엔드포인트에 사용하세요.
openaiendpoint http://localhost:8880/v1/audio/speech 로컬 서버 URL (필요하면 포트 변경)
speech en-US 영어 음성 읽기 활성화
voiceopenai af_bella 음성 이름 (서버에 따라 다름)
openaiformat mp3 오디오 형식: mp3, wav, opus, flac
openaispeed 1.0 말하기 속도 (0.5~2.0)
엔드포인트 별칭: customttsendpoint 그리고 localttsendpoint 도 작동합니다. customttsvoice, localttsvoice, customttsmodel, localttsmodel, customttsformat, 그리고 localttsformat 은 OpenAI 방식 필드의 별칭으로 사용할 수 있습니다.
오디오 문제를 해결하기 전에 엔드포인트와 음성을 확인하세요. openaiendpoint 는 음성 읽기를 재생하는 페이지에서 접근할 수 있어야 하며, voiceopenai 는 서버가 지원하는 음성이어야 합니다. Kokoro-FastAPI에서는 다음과 같은 이름을 사용합니다: af_bella를 사용하세요. openedai-speech에서는 다음과 같은 이름을 자주 사용합니다: nova 또는 echo.

전체 예제 URL

Kokoro-FastAPI:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8880/v1/audio/speech&voiceopenai=af_bella&openaispeed=1.1

openedai-speech:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova

kokoro-web:

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://localhost:3000/api/v1/audio/speech&voiceopenai=af_bella

추가 음성 읽기 옵션

로컬 서버를 포함한 모든 음성 읽기 제공업체에서 사용할 수 있습니다:

매개변수 예시 설명
simpletts &simpletts 'says' 생략 — 메시지만 읽기
simpletts2 &simpletts2 사용자 이름 완전히 생략
volume &volume=0.8 볼륨 수준 (0.0~1.0)
skipmessages &skipmessages=3 메시지 3개당 1개만 읽기
ttscommand &ttscommand=!say !say로 시작하는 메시지만 읽기
readevents &readevents 구독, 후원 등도 읽기
ttsquick &ttsquick=100 이 문자 수 이후의 음성 내용을 의도적으로 자릅니다. 메시지가 잘린다면 제거하세요.
API 키가 필요하지 않습니다. 로컬 서버(openai.com이 아닌 URL)를 사용할 때 Social Stream Ninja는 Authorization 헤더 없이 요청을 보냅니다. 키를 설정할 필요가 없습니다.

지원할 만한 내장 브라우저 옵션

SSN은 이미 OS/브라우저의 speechSynthesis, 내장 Kokoro, Piper, Kitten, eSpeak를 이미 지원합니다. 향후 브라우저 기능으로 특히 유용한 것은 다음 기능을 사용할 수 있을 때의 오디오 출력 장치 선택기입니다: setSinkId 를 지원하는 환경, 더 다양한 Piper 음성, 오디오 청크를 스트리밍하는 서버용 전용 점진적 스트리밍 재생 경로입니다.

OBS로 오디오 가져오기

OBS에서 음성 읽기 오디오를 캡처하는 방법은 Social Stream Ninja의 실행 방식에 따라 다릅니다.

방법 1 — OBS 브라우저 소스 추천

가장 간단한 방법이며 다음에 사용할 수 있습니다: 모든 음성 읽기 제공업체 (내장 및 자체 호스팅 서버).

1
OBS에서 다음 새 소스를 추가하세요: 브라우저 소스
2
URL을 다음으로 설정하세요: dock.html 음성 읽기 매개변수가 있는 URL
3
확인: 'OBS를 통해 오디오 제어' 를 브라우저 소스 설정에서 활성화하세요.
4
클릭: 확인— 이제 음성 읽기 오디오가 조절하거나 라우팅할 수 있는 OBS 오디오 소스로 나타납니다.
5
브라우저 오디오 자동 재생을 허용하려면 미리 보기에서 브라우저 소스를 한 번 클릭하세요.
작동 원리: 내장 음성 읽기와 자체 호스팅 서버 음성 읽기는 모두 OS 음성 합성이 아닌 브라우저 오디오 컨텍스트를 통해 재생됩니다. 'OBS를 통해 오디오 제어'를 선택하면 OBS가 브라우저 오디오를 직접 캡처할 수 있습니다.

방법 2 — SSN 데스크톱 앱 + 데스크톱 오디오

OBS 브라우저 소스가 아닌 Social Stream Ninja 독립 실행형 데스크톱 앱을 사용한다면:

1
앱의 음성 읽기 오디오가 시스템 스피커/헤드폰으로 재생됩니다.
2
OBS에서 다음 소스를 추가하세요: 오디오 입력 캡처 또는 데스크톱 오디오 캡처 소스
3
음성 읽기를 다른 데스크톱 오디오와 분리하려면 가상 오디오 케이블을 사용하세요:
  • Windows: VB-Audio Virtual Cable (무료)
  • 설정: CABLE Input 을 Windows 소리 설정에서 SSN 앱의 출력으로 선택하세요.
  • 캡처 CABLE Output 을 OBS의 오디오 입력 캡처로 가져오세요.

Windows 오디오 라우팅 링크

Windows 10 앱별 라우팅

1
열기 소리 설정 > 앱 볼륨 및 장치 기본 설정.
2
앱 목록에서 브라우저 또는 SSN 앱을 찾으세요.
3
출력(Output)을 다음으로 설정하세요: CABLE Input (VB-Audio Virtual Cable).
4
OBS에서 다음을 추가하세요: 오디오 입력 캡처 을 열고 다음을 선택하세요: CABLE Output.

Windows 11 앱별 라우팅

1
열기 설정 > 시스템 > 소리 > 볼륨 믹서.
2
브라우저 또는 SSN 앱을 찾으세요.
3
출력 장치(Output device)를 다음으로 설정하세요: CABLE Input (VB-Audio Virtual Cable).
4
OBS에서 다음을 추가하세요: 오디오 입력 캡처 을 열고 다음을 선택하세요: CABLE Output.

Audio Router 소프트웨어

Audio Router 는 특정 앱을 가상 케이블로 라우팅할 수 있지만 오래된 소프트웨어입니다. 작동한다면 Windows 앱별 라우팅을 우선 사용하세요.

1
Audio Router를 설치하세요.
2
브라우저 또는 SSN 앱의 출력을 다음으로 보내세요: CABLE Input.
3
OBS에서 다음을 캡처하세요: CABLE Output.

Voicemeeter 고급 라우팅

Voicemeeter 는 음성 읽기를 로컬에서 듣고 OBS로 라우팅하면서 음악/게임 오디오와 분리해야 할 때 가장 적합합니다.

1
Voicemeeter를 설치하고 Windows 기본 출력으로 설정하세요.
2
Hardware Out을 스피커/헤드폰으로 설정하세요.
3
가상 출력을 OBS의 오디오 입력 캡처 소스로 연결하세요.
시스템 음성 읽기 (?speech=en-US 만 있고 제공업체가 없는 경우)는 브라우저가 제공하는 음성에 의존합니다. OBS에서 음성을 제공하지 않거나 음성 목록은 보여도 캡처 가능한 오디오가 나오지 않을 수 있습니다. 음성 재생과 OBS 녹음을 별도로 시험하세요. 위의 제공업체 중 하나를 사용하세요(kokoro, piper등)을 대신 사용하세요.

비교표

옵션 설정 품질 비공개 OBS (브라우저 소스) GPU 필요 비용
내장 Kokoro 없음 ⭐⭐⭐⭐⭐ 예 예 아니요 (사용하면 더 빠름) 무료
내장 Piper 없음 ⭐⭐⭐⭐ 예 예 아니요 무료
내장 Kitten 없음 ⭐⭐⭐ 예 예 아니요 무료
내장 eSpeak 없음 ⭐⭐ 예 예 아니요 무료
Kokoro-FastAPI Docker ⭐⭐⭐⭐⭐ 예 예 아니요 (선택 사항) 무료
openedai-speech Docker ⭐⭐⭐⭐ 예 예 아니요 무료
ElevenLabs API 키 ⭐⭐⭐⭐⭐ 아니요 예 아니요 유료 요금제
시스템 음성 읽기 없음 ⭐⭐ 예 아니요* 아니요 무료

* 시스템 음성 읽기를 OBS에서 캡처하려면 가상 오디오 케이블로 라우팅해야 합니다.

문제 해결

로컬 음성 읽기 문제 해결을 위한 스크린샷 형태의 체크리스트
음성 읽기가 한 곳에서는 작동하고 다른 곳에서는 작동하지 않으면 컴퓨터, 엔드포인트, 음성, 브라우저 권한, OBS 오디오 캡처 순서로 확인하세요.

SSN 앱 테스트는 작동하지만 OBS에서 소리가 나지 않음

앱 테스트는 앱에서 서버에 접근할 수 있다는 것만 확인합니다. OBS 브라우저 소스도 엔드포인트에 접근하고 오디오를 재생할 수 있어야 합니다.

첫 글자나 처음 몇 단어만 읽음

로컬 서버가 응답하지 않음

CORS 또는 로컬 네트워크 차단

브라우저에 CORS, 로컬 네트워크 접근, 사설 네트워크 접근 또는 fetch 실패로 요청이 차단되었다고 표시되면 음성 읽기 서버가 요청을 전혀 받지 못했을 수 있습니다.

잘못된 음성 또는 음성을 찾을 수 없음

소리는 나지만 OBS에서 캡처하지 못함

Docker 이미지를 찾을 수 없음

Docker 이미지 태그는 바뀔 수 있습니다. 이 가이드의 명령이 더 이상 작동하지 않으면 프로젝트 페이지에서 최신 태그를 확인하세요:

더 많은 음성 읽기 옵션: 클라우드 기반 프리미엄 음성 읽기(ElevenLabs, Google Cloud, Speechify) 및 전체 URL 매개변수 참고 문서는 다음을 확인하세요: 음성 읽기 음성 가이드.