HOME TIP & TECH

TIP & TECH

TIP & TECH 상세
openai api 에 맞는 melotts / proxy 세팅하기

onionmixer 2025-09-23 16:39:37 65

1. melotts docker 세팅하기

docker network create tts-net

docker run -d --network tts-net --name melotts-server -p 8888:8080 -e DEFAULT_SPEED=1 -e DEFAULT_LANGUAGE=KR -e DEFAULT_SPEAKER_ID=KR timhagel/melotts-api-server

컨테이너 내부에 python-mecab-ko를 설치
docker exec -it melotts-server pip install --upgrade pip
docker exec -it melotts-server pip install --no-cache-dir python-mecab-ko==1.3.7 g2pkk
docker exec -it melotts-server pip install --no-cache-dir --force-reinstall python-mecab-ko==1.3.7
docker exec -it melotts-server pip install --no-cache-dir mecab-python3 unidic-lite


docker logs --follow --timestamps melotts-server


2. melotts Docker 테스트하기

time curl -sS -X POST "http://localhost:8888/convert/tts" \
 -H "Content-Type: application/json" \
 -d '{
   "text": "안녕하세요, 멜로 티티에스 한국어 테스트입니다.",
   "language": "KR",
   "speaker_id": "KR",
   "speed": 1.0
 }' --output out.wav


3. melotts 의 openai api 용 proxy 세팅

3.1 filename :: openai_gateway.py

# app_openai_tts.py: OpenAI /v1/audio/speech -> MeloTTS /convert/tts
import os, io, requests
from fastapi import FastAPI, Header, HTTPException
from fastapi.responses import Response

MELOTTS_URL = os.getenv("MELOTTS_URL", "http://melotts-server:8080")
DEFAULT_LANG = os.getenv("DEFAULT_LANGUAGE", "KR")
DEFAULT_SPK = os.getenv("DEFAULT_SPEAKER_ID", "KR")

app = FastAPI()

@app.post("/v1/audio/speech")
def audio_speech(payload: dict, authorization: str = Header(None)):
   # OpenAI-style fields
   text = payload.get("input", "")
   voice = payload.get("voice", "kr")
   fmt = payload.get("response_format", "wav")
   speed = float(payload.get("speed", 1.0))

   if not text:
       raise HTTPException(400, "input is required")

   # Simple voice->language/speaker mapping (customize as needed)
   language = DEFAULT_LANG
   speaker_id = DEFAULT_SPK
   if voice.lower() in ["kr","korean","ko"]:
       language, speaker_id = "KR", "KR"
   # add more mappings if desired

   # Call MeloTTS REST API
   r = requests.post(f"{MELOTTS_URL}/convert/tts", json={
       "text": text,
       "language": language,
       "speaker_id": speaker_id,
       "speed": speed
   }, timeout=120)
   if r.status_code != 200:
       raise HTTPException(r.status_code, r.text)

   # Pass-through bytes; set media type by requested format (best-effort)
   media = f"audio/{'wav' if fmt=='wav' else 'mpeg'}"
   return Response(content=r.content, media_type=media)


3.2 file::requirements.txt
requests

3.3 file::Dockerfile

# Dockerfile
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.11

COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt

# openai_gateway.py 안에는 FastAPI 인스턴스 변수명이 app 여야 합니다.
COPY ./openai_gateway.py /app/main.py


3.4 proxy 용 docker 만들기
docker build -t melotts-openai-gateway .


3.5 melotts proxy docker 시작 스크립트

docker run -d --name melotts-openai-gw --network tts-net -p 8899:80 -e MELOTTS_URL=http://melotts-server:8080 -e DEFAULT_LANGUAGE=KR -e DEFAULT_SPEAKER_ID=KR melotts-openai-gateway


4. melotts proxy docker 테스트

curl -sS -X POST "http://localhost:8899/v1/audio/speech" \
 -H "Authorization: Bearer sk-local-test" \
 -H "Content-Type: application/json" \
 -d '{
   "model": "tts-1",
   "input": "안녕하세요, 오픈에이아이 호환 엔드포인트 테스트입니다.",
   "voice": "kr",
   "response_format": "mp3",
   "speed": 1.0
 }' --output out.mp3
 
curl -sS -X POST "http://192.168.1.234:8899/v1/audio/speech" \
 -H "Authorization: Bearer sk-local-test" \
 -H "Content-Type: application/json" \
 -d '{
   "model": "tts-1",
   "input": "안녕하세요, 오픈에이아이 호환 엔드포인트 테스트입니다.",
   "voice": "kr",
   "response_format": "mp3",
   "speed": 1.0
 }' --output out.mp3  

댓글 0개

이전글/다음글 목록
다음 intel arc gpu 로 comfyui 준비해보기