teddybear082 commited on
Commit
f459c16
·
2 Parent(s): effa59f67dd04d

Merge pull request #10 from teddybear082/upgrade_to_pocket_2_0_0

Browse files
.env.example CHANGED
@@ -6,6 +6,14 @@ POCKET_TTS_PORT=49112
6
  POCKET_TTS_LOG_LEVEL=INFO
7
  POCKET_TTS_STREAM_DEFAULT=true
8
 
 
 
 
 
 
 
 
 
9
  # Custom voices directory (mounted to container)
10
  # POCKET_TTS_VOICES_DIR=./my_custom_voices
11
 
 
6
  POCKET_TTS_LOG_LEVEL=INFO
7
  POCKET_TTS_STREAM_DEFAULT=true
8
 
9
+ # Model language (requires pocket-tts>=2.0.0)
10
+ # Options: english, french_24l, german_24l, portuguese, italian, spanish_24l
11
+ # Mutually exclusive with POCKET_TTS_MODEL_PATH
12
+ # POCKET_TTS_LANGUAGE=english
13
+
14
+ # Enable int8 quantization for lower memory usage and improved speed
15
+ # POCKET_TTS_QUANTIZE=false
16
+
17
  # Custom voices directory (mounted to container)
18
  # POCKET_TTS_VOICES_DIR=./my_custom_voices
19
 
AGENTS.md CHANGED
@@ -53,15 +53,21 @@ server.py # Entry point, CLI, starts Waitress
53
  }
54
  ```
55
 
56
- ## Configuration (Environment Variables)
57
-
58
- | Variable | Default | Purpose |
59
- | --------------------------- | --------- | ------------------ |
60
- | `POCKET_TTS_HOST` | `0.0.0.0` | Bind address |
61
- | `POCKET_TTS_PORT` | `49112` | Port |
62
- | `POCKET_TTS_VOICES_DIR` | None | Custom voices path |
63
- | `POCKET_TTS_STREAM_DEFAULT` | `true` | Default streaming |
64
- | `POCKET_TTS_LOG_LEVEL` | `INFO` | Log verbosity |
 
 
 
 
 
 
65
 
66
  ## Voice Resolution Order
67
 
@@ -79,9 +85,12 @@ server.py # Entry point, CLI, starts Waitress
79
  # Install
80
  pip install -r requirements.txt
81
 
82
- # Run
83
  python server.py --log-level DEBUG
84
 
 
 
 
85
  # Test
86
  curl http://localhost:49112/health
87
  curl -X POST http://localhost:49112/v1/audio/speech \
 
53
  }
54
  ```
55
 
56
+ ## CLI Arguments
57
+
58
+ | Argument | Env Variable | Default | Purpose |
59
+ | --------------------- | --------------------------- | ------- | ------------------ |
60
+ | `--host` | `POCKET_TTS_HOST` | `0.0.0.0` | Bind address |
61
+ | `--port` | `POCKET_TTS_PORT` | `49112` | Port |
62
+ | `--model-path` | `POCKET_TTS_MODEL_PATH` | None | Path to model config file (.yaml) or variant |
63
+ | `--language` | `POCKET_TTS_LANGUAGE` | None | Model language (english, french_24l, etc.) |
64
+ | `--quantize` | `POCKET_TTS_QUANTIZE` | `false` | Enable int8 quantization for lower memory usage |
65
+ | `--voices-dir` | `POCKET_TTS_VOICES_DIR` | None | Custom voices directory |
66
+ | `--stream` | `POCKET_TTS_STREAM_DEFAULT`| `false` | Enable streaming by default |
67
+ | `--text-preprocess` | `POCKET_TTS_TEXT_PREPROCESS_DEFAULT` | `false` | Enable text preprocessing by default |
68
+ | `--log-level` | `POCKET_TTS_LOG_LEVEL` | `INFO` | Log verbosity |
69
+
70
+ **Note**: `--language` and `--model-path` are mutually exclusive. Use `--language` to select a built-in language model (requires pocket-tts>=2.0.0).
71
 
72
  ## Voice Resolution Order
73
 
 
85
  # Install
86
  pip install -r requirements.txt
87
 
88
+ # Run with defaults (English model)
89
  python server.py --log-level DEBUG
90
 
91
+ # Run with French model and quantization
92
+ python server.py --language french_24l --quantize --log-level DEBUG
93
+
94
  # Test
95
  curl http://localhost:49112/health
96
  curl -X POST http://localhost:49112/v1/audio/speech \
app/__init__.py CHANGED
@@ -48,13 +48,20 @@ def create_app(config_overrides: dict = None) -> Flask:
48
  return app
49
 
50
 
51
- def init_tts_service(model_path: str = None, voices_dir: str = None) -> None:
 
 
 
 
 
52
  """
53
  Initialize the TTS service with model and voices.
54
 
55
  Args:
56
- model_path: Optional path to model file
57
  voices_dir: Optional path to voices directory
 
 
58
  """
59
  from app.services.tts import get_tts_service
60
 
@@ -62,7 +69,7 @@ def init_tts_service(model_path: str = None, voices_dir: str = None) -> None:
62
  tts = get_tts_service()
63
 
64
  # Load model
65
- tts.load_model(model_path)
66
 
67
  # Set voices directory
68
  if voices_dir:
 
48
  return app
49
 
50
 
51
+ def init_tts_service(
52
+ model_path: str = None,
53
+ voices_dir: str = None,
54
+ language: str = None,
55
+ quantize: bool = False,
56
+ ) -> None:
57
  """
58
  Initialize the TTS service with model and voices.
59
 
60
  Args:
61
+ model_path: Optional path to model config file
62
  voices_dir: Optional path to voices directory
63
+ language: Optional language identifier (e.g., english, french_24l)
64
+ quantize: Whether to apply dynamic int8 quantization
65
  """
66
  from app.services.tts import get_tts_service
67
 
 
69
  tts = get_tts_service()
70
 
71
  # Load model
72
+ tts.load_model(model_path=model_path, language=language, quantize=quantize)
73
 
74
  # Set voices directory
75
  if voices_dir:
app/config.py CHANGED
@@ -33,6 +33,8 @@ class Config:
33
 
34
  # Model settings
35
  MODEL_PATH = os.environ.get('POCKET_TTS_MODEL_PATH', None)
 
 
36
  DEFAULT_VOICE = os.environ.get(
37
  'POCKET_TTS_DEFAULT_VOICE', 'hf://kyutai/tts-voices/alba-mackenna/casual.wav'
38
  )
 
33
 
34
  # Model settings
35
  MODEL_PATH = os.environ.get('POCKET_TTS_MODEL_PATH', None)
36
+ LANGUAGE = os.environ.get('POCKET_TTS_LANGUAGE', None)
37
+ QUANTIZE = os.environ.get('POCKET_TTS_QUANTIZE', 'false').lower() == 'true'
38
  DEFAULT_VOICE = os.environ.get(
39
  'POCKET_TTS_DEFAULT_VOICE', 'hf://kyutai/tts-voices/alba-mackenna/casual.wav'
40
  )
app/services/tts.py CHANGED
@@ -61,12 +61,20 @@ class TTSService:
61
  return str(self.model.device)
62
  return 'unknown'
63
 
64
- def load_model(self, model_path: str | None = None) -> None:
 
 
 
 
 
65
  """
66
  Load the TTS model.
67
 
68
  Args:
69
- model_path: Optional path to model file or variant name
 
 
 
70
  """
71
  _ensure_pocket_tts()
72
 
@@ -86,10 +94,13 @@ class TTSService:
86
  try:
87
  if effective_path:
88
  logger.info(f'Loading model from: {effective_path}')
89
- self.model = TTSModel.load_model(config=effective_path)
 
 
 
90
  else:
91
  logger.info('Loading default model from HuggingFace...')
92
- self.model = TTSModel.load_model()
93
 
94
  self._model_loaded = True
95
  load_time = time.time() - t0
 
61
  return str(self.model.device)
62
  return 'unknown'
63
 
64
+ def load_model(
65
+ self,
66
+ model_path: str | None = None,
67
+ language: str | None = None,
68
+ quantize: bool = False,
69
+ ) -> None:
70
  """
71
  Load the TTS model.
72
 
73
  Args:
74
+ model_path: Optional path to model config file (.yaml)
75
+ language: Optional language identifier (e.g., english, french_24l).
76
+ Incompatible with model_path.
77
+ quantize: If True, apply dynamic int8 quantization to reduce memory.
78
  """
79
  _ensure_pocket_tts()
80
 
 
94
  try:
95
  if effective_path:
96
  logger.info(f'Loading model from: {effective_path}')
97
+ self.model = TTSModel.load_model(config=effective_path, quantize=quantize)
98
+ elif language:
99
+ logger.info(f'Loading model with language: {language}')
100
+ self.model = TTSModel.load_model(language=language, quantize=quantize)
101
  else:
102
  logger.info('Loading default model from HuggingFace...')
103
+ self.model = TTSModel.load_model(quantize=quantize)
104
 
105
  self._model_loaded = True
106
  load_time = time.time() - t0
docker-compose.yml CHANGED
@@ -25,6 +25,11 @@ services:
25
  - POCKET_TTS_VOICES_DIR=/app/voices
26
  - POCKET_TTS_LOG_LEVEL=${POCKET_TTS_LOG_LEVEL:-INFO}
27
  - POCKET_TTS_STREAM_DEFAULT=${POCKET_TTS_STREAM_DEFAULT:-true}
 
 
 
 
 
28
  # Hugging Face token for voice cloning (optional)
29
  - HF_TOKEN=${HF_TOKEN:-}
30
 
 
25
  - POCKET_TTS_VOICES_DIR=/app/voices
26
  - POCKET_TTS_LOG_LEVEL=${POCKET_TTS_LOG_LEVEL:-INFO}
27
  - POCKET_TTS_STREAM_DEFAULT=${POCKET_TTS_STREAM_DEFAULT:-true}
28
+ # Model language (e.g., english, french_24l, german_24l, portuguese, italian, spanish_24l)
29
+ # Mutually exclusive with POCKET_TTS_MODEL_PATH. Requires pocket-tts>=2.0.0.
30
+ - POCKET_TTS_LANGUAGE=${POCKET_TTS_LANGUAGE:-}
31
+ # Enable int8 quantization for lower memory usage and improved speed
32
+ - POCKET_TTS_QUANTIZE=${POCKET_TTS_QUANTIZE:-false}
33
  # Hugging Face token for voice cloning (optional)
34
  - HF_TOKEN=${HF_TOKEN:-}
35
 
pyproject.toml CHANGED
@@ -4,12 +4,12 @@ license = {text = "MIT"}
4
  name = "pocket-tts-openai-server"
5
  readme = "README.md"
6
  requires-python = ">=3.10"
7
- version = "2.4.0"
8
 
9
  dependencies = [
10
  "flask>=3.0.0",
11
  "waitress>=3.0.0",
12
- "pocket-tts>=1.1.1",
13
  "torch>=2.0.0,<=2.8.0",
14
  "torchaudio>=2.0.0,<=2.8.0",
15
  "scipy>=1.10.0",
 
4
  name = "pocket-tts-openai-server"
5
  readme = "README.md"
6
  requires-python = ">=3.10"
7
+ version = "2.5.1"
8
 
9
  dependencies = [
10
  "flask>=3.0.0",
11
  "waitress>=3.0.0",
12
+ "pocket-tts>=2.0.0",
13
  "torch>=2.0.0,<=2.8.0",
14
  "torchaudio>=2.0.0,<=2.8.0",
15
  "scipy>=1.10.0",
requirements.txt CHANGED
@@ -4,7 +4,7 @@
4
  # Core dependencies
5
  flask>=3.0.0
6
  waitress>=3.0.0
7
- pocket-tts>=1.1.0
8
 
9
  # Audio processing
10
  torch>=2.0.0,<=2.8.0
 
4
  # Core dependencies
5
  flask>=3.0.0
6
  waitress>=3.0.0
7
+ pocket-tts>=2.0.0
8
 
9
  # Audio processing
10
  torch>=2.0.0,<=2.8.0
run_pocket_tts_server.bat CHANGED
@@ -68,6 +68,16 @@ set "TEXT_PREPROCESS_ARG=--text-preprocess"
68
  set /p "INPUT_PREPROCESS=Enable Text Preprocessing? (Y/N) [Y]: "
69
  if /i "%INPUT_PREPROCESS%"=="N" set "TEXT_PREPROCESS_ARG="
70
 
 
 
 
 
 
 
 
 
 
 
71
  echo.
72
  echo ========================================================
73
  echo Starting Pocket TTS Server...
@@ -77,11 +87,13 @@ if defined MODEL_PATH echo Model: %MODEL_PATH%
77
  if defined VOICES_DIR echo Voices: %VOICES_DIR%
78
  if defined STREAM_ARG echo Streaming: Enabled
79
  if defined TEXT_PREPROCESS_ARG echo Text Preprocessing: Enabled
 
 
80
  echo ========================================================
81
  echo.
82
 
83
- :: 8. Run Command
84
- python server.py --host %HOST% --port %PORT% %MODEL_PATH% %VOICES_DIR_ARG% %STREAM_ARG% %TEXT_PREPROCESS_ARG%
85
 
86
  if %ERRORLEVEL% NEQ 0 (
87
  echo.
 
68
  set /p "INPUT_PREPROCESS=Enable Text Preprocessing? (Y/N) [Y]: "
69
  if /i "%INPUT_PREPROCESS%"=="N" set "TEXT_PREPROCESS_ARG="
70
 
71
+ :: 8. Language
72
+ set "LANGUAGE_ARG="
73
+ set /p "INPUT_LANGUAGE=Language (english, french_24l, german_24l, portuguese, italian, spanish_24l - leave blank for default): "
74
+ if not "%INPUT_LANGUAGE%"=="" set "LANGUAGE_ARG=--language %INPUT_LANGUAGE%"
75
+
76
+ :: 9. Quantization
77
+ set "QUANTIZE_ARG="
78
+ set /p "INPUT_QUANTIZE=Enable int8 Quantization? (Y/N) [N]: "
79
+ if /i "%INPUT_QUANTIZE%"=="Y" set "QUANTIZE_ARG=--quantize"
80
+
81
  echo.
82
  echo ========================================================
83
  echo Starting Pocket TTS Server...
 
87
  if defined VOICES_DIR echo Voices: %VOICES_DIR%
88
  if defined STREAM_ARG echo Streaming: Enabled
89
  if defined TEXT_PREPROCESS_ARG echo Text Preprocessing: Enabled
90
+ if defined LANGUAGE_ARG echo Language: %INPUT_LANGUAGE%
91
+ if defined QUANTIZE_ARG echo Quantization: Enabled
92
  echo ========================================================
93
  echo.
94
 
95
+ :: 10. Run Command
96
+ python server.py --host %HOST% --port %PORT% %MODEL_PATH% %VOICES_DIR_ARG% %STREAM_ARG% %TEXT_PREPROCESS_ARG% %LANGUAGE_ARG% %QUANTIZE_ARG%
97
 
98
  if %ERRORLEVEL% NEQ 0 (
99
  echo.
run_pocket_tts_server.sh ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ # Pocket TTS Server Launcher (Linux/macOS)
3
+ # This script provides an interactive configuration menu before starting the server.
4
+
5
+ set -euo pipefail
6
+
7
+ # Resolve the script directory (handles symlinks)
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ cd "$SCRIPT_DIR"
10
+
11
+ # Banner
12
+ echo ""
13
+ echo "========================================"
14
+ echo " Pocket TTS OpenAI Streaming Server"
15
+ echo "========================================"
16
+ echo ""
17
+
18
+ # --- 0. Hugging Face Token ---
19
+ HF_TOKEN="${HF_TOKEN:-}"
20
+ if [ -z "$HF_TOKEN" ]; then
21
+ read -r -p "Hugging Face Token (leave blank if already logged in): " INPUT_HF
22
+ if [ -n "$INPUT_HF" ]; then
23
+ HF_TOKEN="$INPUT_HF"
24
+ export HF_TOKEN
25
+ echo "[INFO] Hugging Face Token set."
26
+ fi
27
+ fi
28
+
29
+ # --- 1. Activate Virtual Environment ---
30
+ if [ -d "venv" ]; then
31
+ echo "[INFO] Activating virtual environment..."
32
+ source venv/bin/activate
33
+ else
34
+ echo "[WARNING] 'venv' not found. Using system Python..."
35
+ fi
36
+
37
+ echo ""
38
+ echo "Configure the server (press Enter to accept defaults):"
39
+ echo ""
40
+
41
+ # --- 2. Host ---
42
+ read -r -p "Host IP [0.0.0.0]: " INPUT_HOST
43
+ HOST="${INPUT_HOST:-0.0.0.0}"
44
+
45
+ # --- 3. Port ---
46
+ read -r -p "Port [49112]: " INPUT_PORT
47
+ PORT="${INPUT_PORT:-49112}"
48
+
49
+ # --- 4. Model Path ---
50
+ echo "Model Config Path (.yaml) or variant name (leave blank for built-in):"
51
+ read -r INPUT_MODEL
52
+ MODEL_ARG=()
53
+ if [ -n "$INPUT_MODEL" ]; then
54
+ MODEL_ARG+=("--model-path" "$INPUT_MODEL")
55
+ fi
56
+
57
+ # --- 5. Voices Directory ---
58
+ DEFAULT_VOICES="$SCRIPT_DIR/voices"
59
+ if [ ! -d "$DEFAULT_VOICES" ]; then
60
+ DEFAULT_VOICES=""
61
+ fi
62
+ PROMPT_VOICES=""
63
+ if [ -n "$DEFAULT_VOICES" ]; then
64
+ PROMPT_VOICES="$DEFAULT_VOICES"
65
+ fi
66
+ [ -n "$DEFAULT_VOICES" ] && PROMPT_VOICES="$DEFAULT_VOICES"
67
+ read -r -p "Voices Directory [$(if [ -n "$DEFAULT_VOICES" ]; then echo "$DEFAULT_VOICES"; else echo "None"; fi)]: " INPUT_VOICES
68
+ VOICES_ARG=()
69
+ if [ -n "$INPUT_VOICES" ]; then
70
+ VOICES_ARG+=("--voices-dir" "$INPUT_VOICES")
71
+ fi
72
+
73
+ # --- 6. Streaming ---
74
+ read -r -p "Enable Streaming? (y/n) [Y]: " INPUT_STREAM
75
+ STREAM_ARG=()
76
+ if [ "${INPUT_STREAM,,}" != "n" ]; then
77
+ STREAM_ARG+=("--stream")
78
+ fi
79
+
80
+ # --- 7. Text Preprocessing ---
81
+ read -r -p "Enable Text Preprocessing? (y/n) [Y]: " INPUT_PREPROCESS
82
+ PREPROCESS_ARG=()
83
+ if [ "${INPUT_PREPROCESS,,}" != "n" ]; then
84
+ PREPROCESS_ARG+=("--text-preprocess")
85
+ fi
86
+
87
+ # --- 8. Language ---
88
+ echo "Language (english, french_24l, german_24l, portuguese, italian, spanish_24l - leave blank for default):"
89
+ read -r INPUT_LANGUAGE
90
+ LANGUAGE_ARG=()
91
+ if [ -n "$INPUT_LANGUAGE" ]; then
92
+ LANGUAGE_ARG+=("--language" "$INPUT_LANGUAGE")
93
+ fi
94
+
95
+ # --- 9. Quantization ---
96
+ read -r -p "Enable int8 Quantization? (y/n) [N]: " INPUT_QUANTIZE
97
+ QUANTIZE_ARG=()
98
+ if [ "${INPUT_QUANTIZE,,}" = "y" ]; then
99
+ QUANTIZE_ARG+=("--quantize")
100
+ fi
101
+
102
+ # --- Summary ---
103
+ echo ""
104
+ echo "========================================"
105
+ echo "Starting Pocket TTS Server..."
106
+ echo " Host : $HOST"
107
+ echo " Port : $PORT"
108
+ [ -n "$INPUT_MODEL" ] && echo " Model : $INPUT_MODEL"
109
+ [ -n "$INPUT_VOICES" ] && echo " Voices : $INPUT_VOICES"
110
+ echo " Streaming : $([ "${INPUT_STREAM,,}" = "n" ] && echo "Disabled" || echo "Enabled")"
111
+ echo " Preprocessing: $([ "${INPUT_PREPROCESS,,}" = "n" ] && echo "Disabled" || echo "Enabled")"
112
+ [ -n "$INPUT_LANGUAGE" ] && echo " Language : $INPUT_LANGUAGE"
113
+ [ "${INPUT_QUANTIZE,,}" = "y" ] && echo " Quantization : Enabled"
114
+ echo "========================================"
115
+ echo ""
116
+
117
+ # --- Run ---
118
+ python server.py \
119
+ --host "$HOST" \
120
+ --port "$PORT" \
121
+ "${MODEL_ARG[@]+"${MODEL_ARG[@]}"}" \
122
+ "${VOICES_ARG[@]+"${VOICES_ARG[@]}"}" \
123
+ "${STREAM_ARG[@]+"${STREAM_ARG[@]}"}" \
124
+ "${PREPROCESS_ARG[@]+"${PREPROCESS_ARG[@]}"}" \
125
+ "${LANGUAGE_ARG[@]+"${LANGUAGE_ARG[@]}"}" \
126
+ "${QUANTIZE_ARG[@]+"${QUANTIZE_ARG[@]}"}"
127
+
128
+ EXIT_CODE=$?
129
+
130
+ if [ $EXIT_CODE -ne 0 ]; then
131
+ echo ""
132
+ echo "[ERROR] Server exited with error code $EXIT_CODE."
133
+ fi
134
+ exit $EXIT_CODE
run_pocket_tts_server_exe.bat CHANGED
@@ -61,6 +61,16 @@ set "TEXT_PREPROCESS_ARG=--text-preprocess"
61
  set /p "INPUT_PREPROCESS=Enable Text Preprocessing? (Y/N) [Y]: "
62
  if /i "%INPUT_PREPROCESS%"=="N" set "TEXT_PREPROCESS_ARG="
63
 
 
 
 
 
 
 
 
 
 
 
64
  echo.
65
  echo ========================================================
66
  echo Starting Pocket TTS Server (EXE)...
@@ -70,12 +80,14 @@ if defined MODEL_PATH echo Model: %MODEL_PATH%
70
  if defined VOICES_DIR (echo Voices: %VOICES_DIR%) else (echo Voices: Default/None)
71
  if defined STREAM_ARG (echo Streaming: Enabled) else (echo Streaming: Disabled)
72
  if defined TEXT_PREPROCESS_ARG (echo Text Preprocessing: Enabled) else (echo Text Preprocessing: Disabled)
 
 
73
  echo ========================================================
74
  echo.
75
 
76
- :: 7. Run Command
77
  if exist "%~dp0PocketTTS-Server.exe" (
78
- "%~dp0PocketTTS-Server.exe" --host %HOST% --port %PORT% %MODEL_PATH% %VOICES_DIR% %STREAM_ARG% %TEXT_PREPROCESS_ARG%
79
  ) else (
80
  echo [ERROR] PocketTTS-Server.exe not found in the current directory.
81
  echo Please make sure the executable is located in: %~dp0
 
61
  set /p "INPUT_PREPROCESS=Enable Text Preprocessing? (Y/N) [Y]: "
62
  if /i "%INPUT_PREPROCESS%"=="N" set "TEXT_PREPROCESS_ARG="
63
 
64
+ :: 7. Language
65
+ set "LANGUAGE_ARG="
66
+ set /p "INPUT_LANGUAGE=Language (english, french_24l, german_24l, portuguese, italian, spanish_24l - leave blank for default): "
67
+ if not "%INPUT_LANGUAGE%"=="" set "LANGUAGE_ARG=--language %INPUT_LANGUAGE%"
68
+
69
+ :: 8. Quantization
70
+ set "QUANTIZE_ARG="
71
+ set /p "INPUT_QUANTIZE=Enable int8 Quantization? (Y/N) [N]: "
72
+ if /i "%INPUT_QUANTIZE%"=="Y" set "QUANTIZE_ARG=--quantize"
73
+
74
  echo.
75
  echo ========================================================
76
  echo Starting Pocket TTS Server (EXE)...
 
80
  if defined VOICES_DIR (echo Voices: %VOICES_DIR%) else (echo Voices: Default/None)
81
  if defined STREAM_ARG (echo Streaming: Enabled) else (echo Streaming: Disabled)
82
  if defined TEXT_PREPROCESS_ARG (echo Text Preprocessing: Enabled) else (echo Text Preprocessing: Disabled)
83
+ if defined LANGUAGE_ARG echo Language: %INPUT_LANGUAGE%
84
+ if defined QUANTIZE_ARG echo Quantization: Enabled
85
  echo ========================================================
86
  echo.
87
 
88
+ :: 9. Run Command
89
  if exist "%~dp0PocketTTS-Server.exe" (
90
+ "%~dp0PocketTTS-Server.exe" --host %HOST% --port %PORT% %MODEL_PATH% %VOICES_DIR% %STREAM_ARG% %TEXT_PREPROCESS_ARG% %LANGUAGE_ARG% %QUANTIZE_ARG%
91
  ) else (
92
  echo [ERROR] PocketTTS-Server.exe not found in the current directory.
93
  echo Please make sure the executable is located in: %~dp0
server.py CHANGED
@@ -34,13 +34,15 @@ Examples:
34
  # Custom port and voices directory
35
  python server.py --port 8080 --voices-dir ./my_voices
36
 
37
- # Enable streaming by default
38
- python server.py --stream
39
 
40
  Environment Variables:
41
  POCKET_TTS_HOST Server host (default: 0.0.0.0)
42
  POCKET_TTS_PORT Server port (default: 49112)
43
- POCKET_TTS_MODEL_PATH Path to model file
 
 
44
  POCKET_TTS_VOICES_DIR Path to voices directory
45
  POCKET_TTS_STREAM_DEFAULT Enable streaming by default
46
  POCKET_TTS_TEXT_PREPROCESS_DEFAULT Enable text preprocessing by default
@@ -80,6 +82,19 @@ Environment Variables:
80
  default=Config.TEXT_PREPROCESS_DEFAULT,
81
  help='Enable text preprocessing for all requests',
82
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  parser.add_argument(
84
  '--log-level',
85
  type=str,
@@ -106,9 +121,19 @@ def main():
106
 
107
  logger = get_logger()
108
 
 
 
 
 
 
109
  # Initialize TTS service
110
  try:
111
- init_tts_service(model_path=args.model_path, voices_dir=args.voices_dir)
 
 
 
 
 
112
  except Exception as e:
113
  logger.error(f'Failed to initialize TTS service: {e}')
114
  sys.exit(1)
 
34
  # Custom port and voices directory
35
  python server.py --port 8080 --voices-dir ./my_voices
36
 
37
+ # Load French model with quantization
38
+ python server.py --language french_24l --quantize
39
 
40
  Environment Variables:
41
  POCKET_TTS_HOST Server host (default: 0.0.0.0)
42
  POCKET_TTS_PORT Server port (default: 49112)
43
+ POCKET_TTS_MODEL_PATH Path to model config file
44
+ POCKET_TTS_LANGUAGE Model language (e.g., english, french_24l)
45
+ POCKET_TTS_QUANTIZE Enable int8 quantization (default: false)
46
  POCKET_TTS_VOICES_DIR Path to voices directory
47
  POCKET_TTS_STREAM_DEFAULT Enable streaming by default
48
  POCKET_TTS_TEXT_PREPROCESS_DEFAULT Enable text preprocessing by default
 
82
  default=Config.TEXT_PREPROCESS_DEFAULT,
83
  help='Enable text preprocessing for all requests',
84
  )
85
+ parser.add_argument(
86
+ '--language',
87
+ type=str,
88
+ default=Config.LANGUAGE,
89
+ dest='language',
90
+ help='Model language (e.g., english, french_24l, german_24l, portuguese, italian, spanish_24l). Incompatible with --model-path.',
91
+ )
92
+ parser.add_argument(
93
+ '--quantize',
94
+ action='store_true',
95
+ default=Config.QUANTIZE,
96
+ help='Apply dynamic int8 quantization to reduce memory usage and improve speed.',
97
+ )
98
  parser.add_argument(
99
  '--log-level',
100
  type=str,
 
121
 
122
  logger = get_logger()
123
 
124
+ # Validate mutually exclusive options
125
+ if args.language and args.model_path:
126
+ logger.error('--language and --model-path are mutually exclusive. Use one or the other.')
127
+ sys.exit(1)
128
+
129
  # Initialize TTS service
130
  try:
131
+ init_tts_service(
132
+ model_path=args.model_path,
133
+ voices_dir=args.voices_dir,
134
+ language=args.language,
135
+ quantize=args.quantize,
136
+ )
137
  except Exception as e:
138
  logger.error(f'Failed to initialize TTS service: {e}')
139
  sys.exit(1)