tts-api / server.py
gavanduffy
Port pocket-tts to supertonic3: 44100 Hz, 10 voices, 31 languages
d715e26
#!/usr/bin/env python3
"""
SuperTonic3 OpenAI-Compatible Server
An OpenAI-compatible TTS API using the supertonic3 TTS engine.
Runs on CPU, supports 31 languages with 10 built-in voices.
Usage:
python server.py [OPTIONS]
# Or with environment variables:
SUPERTONIC3_PORT=8080 python server.py
"""
import argparse
import os
import sys
from app import create_app, init_tts_service
from app.config import Config
from app.logging_config import get_logger
def parse_args():
parser = argparse.ArgumentParser(
description='SuperTonic3 OpenAI-Compatible Server',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
# Start with defaults
python server.py
# Custom port
python server.py --port 8080
Environment Variables:
SUPERTONIC3_HOST Server host (default: 0.0.0.0)
SUPERTONIC3_PORT Server port (default: 7860)
SUPERTONIC3_VOICE Default voice (default: M1)
SUPERTONIC3_STREAM_DEFAULT Enable streaming by default
SUPERTONIC3_TEXT_PREPROCESS_DEFAULT Enable text preprocessing by default
SUPERTONIC3_LOG_LEVEL Log verbosity
""",
)
parser.add_argument(
'--host', type=str, default=Config.HOST, help=f'Host to bind to (default: {Config.HOST})'
)
parser.add_argument(
'--port', type=int, default=Config.PORT, help=f'Port to listen on (default: {Config.PORT})'
)
parser.add_argument(
'--voice',
type=str,
default=Config.DEFAULT_VOICE,
dest='voice',
help=f'Default voice (default: {Config.DEFAULT_VOICE})',
)
parser.add_argument(
'--stream',
action='store_true',
default=Config.STREAM_DEFAULT,
help='Enable streaming by default for all requests',
)
parser.add_argument(
'--text-preprocess',
action='store_true',
default=Config.TEXT_PREPROCESS_DEFAULT,
help='Enable text preprocessing for all requests',
)
parser.add_argument(
'--log-level',
type=str,
default=Config.LOG_LEVEL,
choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'],
dest='log_level',
help='Logging level',
)
return parser.parse_args()
def main():
args = parse_args()
os.environ.setdefault('SUPERTONIC3_LOG_LEVEL', args.log_level)
app = create_app(
{'STREAM_DEFAULT': args.stream, 'TEXT_PREPROCESS_DEFAULT': args.text_preprocess}
)
logger = get_logger()
try:
init_tts_service(voice=args.voice)
except Exception as e:
logger.error(f'Failed to initialize TTS service: {e}')
sys.exit(1)
try:
from waitress import serve
logger.info(f'Starting SuperTonic3 server on http://{args.host}:{args.port}')
logger.info('Press Ctrl+C to stop')
serve(app, host=args.host, port=args.port, threads=4, url_scheme='http')
except ImportError:
logger.warning('Waitress not installed, falling back to Flask dev server')
logger.warning('Install waitress for production: pip install waitress')
app.run(host=args.host, port=args.port, debug=False, threaded=True)
if __name__ == '__main__':
main()