로컬 AI 음성 읽기 가이드

컴퓨터에서 채팅 음성을 실행하세요. 대부분의 스트리머는 내장 음성만으로 충분합니다.

이 기능이 필요한가요?

'로컬'은 브라우저에서 실행되는 SSN 내장 음성 또는 직접 운영하는 음성 서버를 뜻합니다.

원하는 것…할 작업
설치 없는 무료 음성사용: 내장 음성. 대부분은 여기까지만 하면 됩니다.
이미 실행 중인 음성 서버 사용서버 연결.
복제한 음성참고: 음성 복제.
OBS의 Fish Audio다음을 참조하세요: Fish Audio 설정.
유료 클라우드 음성다음을 참조하세요: TTS 참조.
SSN이 캡처하는 모든 채팅에서 작동합니다. 음성은 YouTube나 Twitch가 아닌 SSN 플레이어의 기능입니다. 다음과 달리: 시스템 음성 읽기와 달리 로컬 AI 음성은 자체 오디오를 만들어 OBS가 캡처할 수 있습니다. 제공자 비교 및 샘플 듣기.

내장 음성(설치 불필요)

브라우저의 SSN 안에서 실행됩니다. 서버, Docker, API 키가 필요 없습니다.

음성음질컴퓨터 부하링크 값
Kokoro매우 뛰어남중간. GPU로 더 빠름.ttsprovider=kokoro
Piper아주 좋음낮음. CPU만 사용.ttsprovider=piper
Kitten좋음매우 낮음. CPU만 사용.ttsprovider=kitten
eSpeak-NG기계음최소. CPU만 사용.ttsprovider=espeak

4단계 설정

  1. 추가: &speech=en-US&ttsprovider=kokoro — 추가할 위치: dock.html 링크(또는 piper, kitten, espeak.)
  2. 링크를 OBS의 다음 소스로 추가하세요: 브라우저 소스. 소리를 만드는 페이지입니다.
  3. 속성에서 다음을 켜세요: OBS를 통해 오디오 제어(Control audio via OBS).
  4. 짧은 테스트 채팅을 보내세요. 예: Testing local TTS.
dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=kokoro
처음 사용은 느립니다. Kokoro와 Piper는 먼저 모델을 내려받습니다(약 50~200MB). 이후에는 재사용하지만 시작에 약간 시간이 걸립니다. OBS는 Chrome과 별도로 보관합니다.

음성, 속도, 다른 언어: 제공자 설정. 클릭 방식이 좋다면 다음을 쓰세요: 설정 가이드.

자체 TTS 서버 연결

서버를 쓰면 더 많은 음성, 음성 복제, 여러 도구에서 재사용하는 음성을 얻습니다. SSN은 다음처럼 통신합니다: OpenAI 호환 음성 서버. API 키가 필요 없습니다.

  1. 서버를 시작하세요. Kokoro-FastAPI 이 가장 쉽습니다.
  2. SSN에서 TTS 제공자 목록을 열고 다음을 고르세요: 사용자 지정 / 로컬 음성 읽기 엔드포인트 (Custom / Local TTS Endpoint).
  3. 다음 위치에서: 사용자 지정 / 로컬 API 엔드포인트에 서버 주소를 입력하세요. 예: http://127.0.0.1:8880/v1/audio/speech.
  4. API 키는 비워 두세요.
  5. 서버가 아는 음성을 선택하세요: af_bella 은 Kokoro용, nova 은 openedai-speech용입니다.
  6. 링크를 OBS에 복사하고 테스트 채팅을 보내세요.
Social Stream Ninja의 로컬 음성 읽기 입력란을 보여 주는 스크린샷 형태의 안내도
중요한 필드는 엔드포인트입니다.
OBS가 다른 컴퓨터에 있나요? 다음을 읽으세요: localhost 규칙 를 먼저 완료하세요. 브라우저에 차단되나요? 사용: 브리지.
서버모델GPU디스크포트
Kokoro-FastAPI (권장)Kokoro 82M선택 사항약 2 GB8880
openedai-speech (Piper)PiperCPU 전용1 GB 미만8000
kokoro-webKokoro 82M선택 사항약 2 GB3000

다음이 필요합니다: Docker Desktop 을 설치하고 실행해야 합니다. 개인용으로 무료입니다.

localhost 규칙

가장 흔한 실수입니다.

localhost 그리고 127.0.0.1 은 항상 '이 컴퓨터 자체'를 뜻합니다. OBS와 음성 서버가 서로 다른 PC에 있다면, 127.0.0.1 은 OBS PC를 가리킵니다.
localhost는 같은 컴퓨터를 뜻하고 다른 컴퓨터에는 LAN IP 주소가 필요함을 보여 주는 그림
사용 환경사용할 주소
OBS와 서버가 같은 PChttp://127.0.0.1:8880/v1/audio/speech
집 안의 다른 PC에 있는 서버http://192.168.x.x:8880/v1/audio/speech을 해당 PC의 로컬 IP로 바꾸세요:
SSN 앱 테스트는 되지만 OBS는 무음OBS에서 작동하는 주소가 필요합니다. 앱 테스트가 OBS의 서버 접근을 증명하지는 않습니다.

방화벽이 포트를 허용하고 Docker가 공개했는지도 확인하세요(-p 8880:8880).

Kokoro-FastAPI

Kokoro-FastAPI 은 Kokoro를 로컬 서버로 실행합니다. CPU에서 작동하며 GPU는 필요 없습니다.

  1. 터미널(명령 프롬프트, PowerShell 또는 Terminal)을 열고 다음 중 하나를 실행하세요:
    docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.2

    NVIDIA GPU(더 빠름):

    docker run --gpus all -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu:v0.2.0post4
    첫 실행에 한 번만 약 1.5~2GB를 내려받습니다.
  2. 열기 http://localhost:8880/web/. 음성 67개 이상을 시험하는 페이지가 보여야 합니다.
  3. 이 링크를 쓰세요(서버가 다른 PC면 주소 변경):
    dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8880/v1/audio/speech&voiceopenai=af_bella
Kokoro 음성 이름 사용, 예를 들어 af_bella, af_sarah, am_adam 또는 bf_emma. 다음과 같은 OpenAI 이름은: nova 또는 alloy 은 작동하지 않을 수 있습니다.

Docker와 함께 자동 시작:

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

openedai-speech(Piper 및 XTTS-v2)

보관 처리된 프로젝트. openedai-speech는 2026년 1월 보관 처리되었으며 스스로 대부분 구식이라고 설명합니다. 예제로는 작동하지만 업데이트는 없습니다. 로컬에서만 쓰고 로그인 기능이 없으므로 포트를 인터넷에 공개하지 마세요.

방법 A: 가벼운 Piper 서버(CPU)

1GB 미만. 음성 복제 없음.

docker run -d --restart unless-stopped -p 8000:8000 ghcr.io/matatonic/openedai-speech-min

음성: alloy, echo, fable, onyx, nova, shimmer.

dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=openai&openaiendpoint=http://localhost:8000/v1/audio/speech&voiceopenai=nova
Windows에서 소스로 실행(HTTP 500 오류)

가상 환경의 다음을 추가하세요: Scripts 폴더를 다음에 추가: PATH 을 먼저 추가하세요. 없으면 다음을 찾지 못합니다: 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

방법 B: XTTS-v2 음성 복제(GPU)

다음이 아닌 전체 서버가 필요합니다: openedai-speech-min. GPU 메모리 약 4GB를 예상하세요. CPU도 되지만 느립니다.

4단계로 XTTS-v2 설정
  1. 서버를 받아 시작하세요:
    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. Docker가 GPU에 접근할 수 있어야 합니다. 모델은 처음 사용할 때 내려받습니다.
  2. 사용 허가를 받은 음성으로 깨끗한 참조 클립을 만드세요. 모노, 22050Hz, 6~30초:
    ffmpeg -i input.mp3 -ac 1 -ar 22050 -t 6 -y voices/me.wav
  3. 다음 위치에서: config/voice_to_speaker.yaml에서는 기존 다음 항목 아래에 추가하세요: tts-1-hd 섹션에 추가하세요(기존 음성 유지):
    tts-1-hd:
      me:
        model: xtts
        speaker: voices/me.wav
        language: en
    변경할 항목: me 을 SSN이 보낼 이름으로 바꾸세요.
  4. 실행: 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 이 필요합니다. 없으면 SSN은 다음을 보냅니다: tts-1이면 서버가 Piper를 대신 사용합니다. voiceopenai 은 YAML 파일의 음성 이름과 일치해야 합니다.

브라우저에 차단되면 다음을 실행하세요: 브리지 을 쓰고 다음만 바꾸세요: openaiendpoint 대상: http://127.0.0.1:8124/v1/audio/speech.

로컬 TTS 브리지

SSN의 작은 도우미입니다. SSN 요청을 음성 서버로 전달하고 브라우저가 받아들이는 형식으로 오디오를 돌려줍니다. Node.js가 필요합니다.

가장 간단한 규칙: OBS 컴퓨터에서 브리지를 실행하세요. 그러면 OBS는 항상 다음을 사용합니다: http://127.0.0.1:8124/v1/audio/speech을 사용합니다. 음성 서버가 다른 PC에 있어도 같습니다.
OBS가 로컬 브리지를 호출하고 브리지가 음성 읽기 서버를 호출하는 구조도
  1. 브리지에 서버 위치를 알려 주세요. PowerShell:
    $env:SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech"
    서버가 다른 PC면 로컬 IP를 쓰세요. 예: http://192.168.x.x:8880/v1/audio/speech.
  2. SSN 폴더에서 다음을 실행하세요: node scripts/local-tts-bridge.cjs. 계속 실행해 두세요.
  3. SSN이 브리지를 향하도록 설정하세요:
    dock.html?session=YOUR_SESSION&speech=en-US&ttsprovider=customtts&openaiendpoint=http://127.0.0.1:8124/v1/audio/speech&voiceopenai=af_bella

macOS/Linux에서는 한 줄로: SSN_TTS_TARGET="http://127.0.0.1:8880/v1/audio/speech" node scripts/local-tts-bridge.cjs. 다음 내부에서: local-tts-bridge 폴더에서, node server.cjs 도 같습니다. 포트는 다음으로 바꾸세요: SSN_TTS_BRIDGE_PORT=8125. 모든 옵션: 브리지 README.

GPT-SoVITS 모드

GPT-SoVITS는 자체 /tts 형식을 사용합니다. 브리지가 변환합니다.

$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"
node scripts/local-tts-bridge.cjs --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=.... 브리지가 형식을 변환합니다.

$env:SSN_TTS_TARGET="http://127.0.0.1:7860/synthesize_speech/"
node scripts/local-tts-bridge.cjs --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

음성 복제

음성 복제는 SSN 설정이 아니라 일부 음성 서버의 기능입니다. SSN은 채팅을 보내고 서버가 복제 음성을 고릅니다.

  1. 보통 3~30초 길이로, 배경 소음이 적은 한 사람의 깨끗한 음성을 녹음하세요.
  2. 일부 서버는 클립에서 말한 정확한 문장도 필요합니다.
  3. 서버가 클립을 음성 프로필로 만듭니다.
  4. SSN은 채팅을 다음으로 보냅니다: ttsprovider=customtts.
  5. 서버가 오디오(보통 WAV 또는 MP3)를 반환하고 SSN이 재생합니다.
본인 소유거나 사용 허가를 받은 음성만 복제하세요.
XTTS-v2는 기본적으로 비상업용입니다. 해당 Coqui Public Model License 은 비상업적 이용만 허용합니다. 수익화 방송은 해당되지 않을 수 있으므로 먼저 라이선스를 확인하거나 허가를 받으세요.

GPU 메모리가 6GB 이하라면 OpenAI 호환 서버의 작은 모델로 시작하세요. 큰 모델도 다른 곳에서 호스팅하면 작동합니다.

옵션복제 원본6GB GPU에 맞나요?연결 방법
XTTS-v2 / openedai-speech짧은 WAV 클립예, 약 4GB직접, /v1/audio/speech. 보관 처리된 프로젝트입니다.
chatterbox-tts-api / Chatterbox-TTS-Server참조 클립Turbo 또는 작은 분할이면 가능성 높음직접 또는 브리지 연결. GPU가 CPU보다 매끄럽습니다. 설정은 포크마다 다릅니다.
Qwen3-TTS (0.6B / 1.7B)3초 클립가능성 높음(0.6B Base)OpenAI 호환 래퍼가 필요합니다.
GPT-SoVITS5초, 1분이면 더 좋음fp16 / 가벼운 설치면 가능성 높음브리지 (Bridge) --mode gptsovits.
F5-TTS클립과 대본경우에 따라 가능래퍼 또는 브리지 --mode f5 포함: F5-TTS_server.
MisoTTS 8B프롬프트 오디오아니요, 24GB 권장원격 호스팅만 지원. 저장소에 로컬 REST 엔드포인트가 없습니다.

내장 Kokoro와 Kokoro-FastAPI는 음성을 복제하지 않습니다.

SSN으로 테스트한 내용

다음 둘 다 확인: dock.html 그리고 featured.html:

  • openedai-speech (Piper): 직접 연결과 브리지로 실제 CPU 음성 확인.
  • Chatterbox-TTS-Server: 다음으로 실제 CPU 음성 확인: Emily.wav를 직접 연결과 브리지 연결로 시험했습니다.
  • chatterbox-tts-api: 직접 연결과 브리지로 요청 형식 테스트.
  • GPT-SoVITS 그리고 F5-TTS_server: 브리지 모드로만 연결.
  • F5-TTS 공식 그리고 Qwen3-TTS: 먼저 래퍼 필요(CLI, Gradio 또는 라이브러리만 제공).

어떤 컴퓨터가 필요한가요?

대략적인 출발점이며 보장은 아닙니다. 모델 크기, 텍스트 길이, 다른 앱에 따라 메모리 사용량이 달라집니다.

옵션최소 사양여유 있는 사양
시스템 음성 읽기 / eSpeak모든 PC모든 PC
내장 Kitten저사양 CPU, RAM 4 GB노트북 CPU, RAM 8GB
내장 Piper최신 CPU, RAM 4~8GB최신 CPU, RAM 8 GB
내장 Kokoro최신 CPU, RAM 8 GBWebGPU GPU 또는 빠른 CPU, RAM 8~16GB
Kokoro-FastAPICPU, RAM 8 GBNVIDIA GPU 선택 사항, RAM 8~16GB
openedai-speech PiperCPU, RAM 4~8GBCPU, RAM 8 GB
openedai-speech XTTSNVIDIA GPU 약 4GB, RAM 8~16GBVRAM 6 GB 이상 NVIDIA GPU, RAM 16 GB
Chatterbox일부 빌드에서 CPU, 느림VRAM 6 GB 이상 NVIDIA GPU, RAM 16 GB
GPT-SoVITS / F5-TTS / Qwen3-TTS테스트용 CPU, 느림VRAM 6 GB 이상 NVIDIA GPU, RAM 16 GB
MisoTTS 8B6GB에서는 불가24GB GPU 또는 원격 호스트

오디오를 OBS로 보내기

OBS 브라우저 소스(권장)

내장 음성과 자체 서버에서 작동합니다.

  1. 추가: 브라우저 소스 에 본인의 dock.html TTS 링크.
  2. 켜기: OBS를 통해 오디오 제어(Control audio via OBS).
  3. 클릭: 확인. 이제 TTS가 OBS 믹서에 표시됩니다.

SSN 데스크톱 앱

데스크톱 앱도 같은 링크 설정을 쓰지만 소리는 OBS가 아닌 앱에서 나옵니다. 다음으로 캡처하세요: 데스크톱 오디오 또는 오디오 입력 캡처. TTS를 다른 소리와 분리하려면 앱을 가상 케이블로 보내세요: 라우팅 단계.

앱 테스트와 OBS를 혼동하지 마세요. 앱의 Test는 앱에서 테스트합니다. OBS에 링크를 넣으면 OBS가 서버에 접근하고 오디오를 재생해야 합니다.
데스크톱 앱 자세히

앱 창은 Chrome보다 브라우저 권한(CORS) 제약이 적습니다. 브라우저 요청을 거절하는 서버에는 브리지가 가장 안전한 선택입니다. 내장 Kokoro는 앱 자체의 다음 경로를 사용할 수 있습니다: ninjafy.tts 경로를 사용해 브라우저에서 모델을 로드하지 않아도 됩니다.

시스템 음성 읽기 (&speech=en-US 만 있고 제공자가 없는 경우)는 OBS의 음성에 의존합니다. 없거나 캡처 가능한 소리를 내지 않는 경우가 많습니다. 위의 제공자를 대신 쓰세요.

나란히 비교

옵션설정품질비공개OBS에서 작동비용
내장 Kokoro없음5/5예예무료
내장 Piper없음4/5예예무료
내장 Kitten없음3/5예예무료
내장 eSpeak없음2/5예예무료
Kokoro-FastAPIDocker5/5예예무료
openedai-speechDocker4/5예예무료
ElevenLabsAPI 키5/5아니요예유료 요금제
시스템 음성 읽기없음2/5예오디오 라우팅 필요무료

문제 해결

로컬 음성 읽기 문제 해결을 위한 스크린샷 형태의 체크리스트
한곳에서만 작동하나요? 컴퓨터, 주소, 음성, 브라우저 권한, OBS 오디오 순으로 확인하세요.
문제시도할 방법
앱 테스트는 되지만 OBS는 무음OBS가 직접 서버에 접근해야 합니다. 서버가 다른 PC라면 다음을 바꾸세요: 127.0.0.1 을 로컬 IP로 바꾸세요. 확인할 항목: OBS를 통해 오디오 제어(Control audio via OBS). 계속 막히면 OBS PC에서 브리지를 실행하세요.
첫 글자나 단어만 읽음제거 ttsquick 을 OBS 링크에서 제거하세요(예: &ttsquick=14)을 제거하고 새로 고침하세요. 테스트 중에는 다음도 제거하세요: typewriter= 으로 타이밍 문제를 배제하세요.
서버가 응답하지 않음Docker와 컨테이너가 실행 중인지 확인하세요. 서버 PC에서 다음을 여세요: http://127.0.0.1:8880/web/ (Kokoro-FastAPI 또는 서버의 포트). OBS PC에서 다음을 여세요: http://SERVER_LAN_IP:8880/web/. 실패하면 OBS도 연결하지 못합니다. 서버 방화벽을 확인하세요.
'Blocked by CORS', 'private network' 또는 'failed fetch'서버에 도착하기 전에 브라우저가 차단했습니다. 다음을 실행하세요: node scripts/local-tts-bridge.cjs 을 OBS PC에서 실행하고 다음을 쓰세요: http://127.0.0.1:8124/v1/audio/speech. 호스팅된 베타 Dock 페이지는 더 쉽게 차단되므로 브리지나 로컬 앱 창이 더 쉽습니다.
음성이 다르거나 찾을 수 없음Kokoro-FastAPI: af_bella, af_sarah, am_adam또는 웹페이지의 음성을 사용하세요. openedai-speech: nova, echo, alloy. 일부 서버는 대소문자를 구분합니다.
재생되지만 OBS가 캡처하지 못함켜기: OBS를 통해 오디오 제어(Control audio via OBS). 테스트 중 OBS 믹서 미터를 보세요. 다음을 설정해야 합니다: &ttsprovider=. System TTS는 데스크톱 오디오나 가상 케이블이 필요할 수 있습니다.
Docker 이미지를 찾을 수 없음이미지 태그는 바뀝니다. 최신 태그는 다음에서 확인하세요: Kokoro-FastAPI 또는 openedai-speech.

서버 개발자용

SSN이 맞춤 서버와 통신하는 방식입니다. 서버를 만들거나 디버깅할 때만 필요합니다.

chat text -> SSN -> your endpoint (or the bridge) -> TTS server -> audio -> SSN plays it
SSN이 보내는 것

다음을 사용하면: 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
}

API 키가 없으면 SSN은 Authorization 헤더를 보내지 않습니다.

SSN이 재생할 수 있는 것
응답작동 여부참고
오디오 파일예최상. audio/mpeg, audio/wav, audio/ogg, audio/aac또는 브라우저에서 재생 가능한 형식.
오디오 URL이 담긴 JSON예검사 url, audio_url, output_url, data.url, 그리고 첫 번째 data[] 항목입니다.
base64 오디오가 포함된 JSON예검사 audio, audio_data, audioContent, b64_json, 중첩된 data 필드와 데이터 URL입니다.
원시 PCM래퍼를 사용하는 경우에만WAV 파일 또는 base64 WAV로 보내세요.

형식: mp3 은 작고 널리 지원됩니다. wav 은 복제 서버와 브리지 테스트에 적합합니다. 다음을 사용하세요: opus 은 서버와 브라우저가 모두 지원할 때만 쓰세요.

아직 스트리밍은 없습니다. SSN은 전체 응답을 기다린 뒤 재생합니다. 채팅 메시지를 짧게 유지하세요.

자체 서버용 링크 설정
설정예시역할
ttsprovidercustomtts자체 서버를 사용합니다(openai 도 작동합니다.)
openaiendpointhttp://localhost:8880/v1/audio/speech서버 주소. 포트를 맞게 바꾸세요.
speechen-US영어로 TTS를 켭니다.
voiceopenaiaf_bella음성 이름. 서버에 따라 다름.
openaimodeltts-1-hd모델 이름. 기본값 tts-1.
openaiformatmp3mp3, wav, opus 또는 flac.
openaispeed1.0읽기 속도(0.5~2.0).

다음도 지원: customttsendpoint, localttsendpoint, customttsvoice, localttsvoice, customttsmodel, localttsmodel, customttsformat, localttsformat. 다음과 같은 읽기 옵션은: simpletts, skipmessages 그리고 ttsquick 은 모든 제공자에서 작동합니다: 모든 링크 설정.

예시 링크:

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