Merge pull request #557 from Paladinium/alltalkbeta_docker_env_variables

Introduce ENV variables for Docker
This commit is contained in:
Paladinium authored and GitHub committed 2025-03-14 09:20:50 +01:00
commit 2bd1a5b43b
7 files changed
+121 -35

No files matched your search

+22 -3
View File
@@ -53,7 +53,7 @@ following optional arguments:
- Example: `docker-start.sh --voices /my/voices/dir` - Example: `docker-start.sh --voices /my/voices/dir`
- `--rvc-voices` similar to voices, this option lets you pick the folder containing the [RVC models](https://github.com/erew123/alltalk_tts/wiki/RVC-(Retrieval%E2%80%90based-Voice-Conversion)). - `--rvc-voices` similar to voices, this option lets you pick the folder containing the [RVC models](https://github.com/erew123/alltalk_tts/wiki/RVC-(Retrieval%E2%80%90based-Voice-Conversion)).
- Example: `docker-start.sh --rvc_voices /my/rvc/voices/dir` - Example: `docker-start.sh --rvc_voices /my/rvc/voices/dir`
- `--no-ui` allows you to not expose port 7852 for the gradio interface and sets `launch_gradio` to `false`. - `--no-ui` allows you to not expose port 7852 for the gradio interface and sets `launch_gradio` and `gradio_interface` to `false`.
- `--with-multi-engine-manager` enables the use of the [multi engine manager (MEM)](https://github.com/erew123/alltalk_tts/wiki/Multi-Engine-Manager) - `--with-multi-engine-manager` enables the use of the [multi engine manager (MEM)](https://github.com/erew123/alltalk_tts/wiki/Multi-Engine-Manager)
which allows for more parallel requests. By default, one TTS engine is started. Optionally, you can pass the which allows for more parallel requests. By default, one TTS engine is started. Optionally, you can pass the
file path of a JSON file which can be a subset of `mem_config.json` with more fine-grained configuration options. file path of a JSON file which can be a subset of `mem_config.json` with more fine-grained configuration options.
@@ -66,8 +66,27 @@ following optional arguments:
- Since the above commands only address the most important options, you might pass additional arbitrary docker arguments - Since the above commands only address the most important options, you might pass additional arbitrary docker arguments
to the `docker-start.sh`. to the `docker-start.sh`.
Of course, like any other Docker image, you can also directly use `docker run` directly and use `docker-start.sh` Of course, like for any other Docker image, you can also directly use `docker run` directly and use
as an inspiration. [docker-start.sh](https://github.com/erew123/alltalk_tts/blob/alltalkbeta/docker-start.sh) as an inspiration.
### Using environment variables for setting config values
Instead of using config JSON files, there are config settings that can be directly set using environment (ENV) variables
when starting the application. This is also what is used internally in `docker-start.sh`.
Since `docker-start.sh` allows to pass arbitrary params, it can also be used to set env variables, e.g:
```
./docker-start.sh -e ALLTALK_BRANDING="My Brand " -e ALLTALK_API_PORT_NUMBER=9876
```
or when using Docker directly:
```
docker run -e ALLTALK_BRANDING="My Brand " -e ALLTALK_API_PORT_NUMBER=9876 ...
```
Consult [docker_default_confignew.json](https://github.com/erew123/alltalk_tts/blob/alltalkbeta/docker_default_confignew.json)
and [docker_default_mem_config.json](https://github.com/erew123/alltalk_tts/blob/alltalkbeta/docker_default_mem_config.json)
for a list of all available env variables.
## Building your own images (advanced) ## Building your own images (advanced)
+29 -12
View File
@@ -13,8 +13,18 @@ ARG ALLTALK_DIR=/opt/alltalk
ENV GRADIO_SERVER_NAME="0.0.0.0" ENV GRADIO_SERVER_NAME="0.0.0.0"
ENV ENABLE_MULTI_ENGINE_MANAGER=false # Switch for using the multi engine manager:
ENV WITH_UI=true ENV ALLTALK_ENABLE_MULTI_ENGINE_MANAGER=false
# Default settings used in docker_default_confignew.json:
ENV ALLTALK_DELETE_OUTPUT_WAVS="1"
ENV ALLTALK_GRADIO_INTERFACE=true
ENV ALLTALK_RVC_ENABLED=true
ENV ALLTALK_RVC_F0METHOD="rmvpe"
# Default settings used in docker_default_mem_config.json:
ENV ALLTALK_MEM_AUTO_START_ENGINES=1
ENV ALLTALK_MEM_MAX_INSTANCES=1
WORKDIR ${ALLTALK_DIR} WORKDIR ${ALLTALK_DIR}
@@ -118,21 +128,28 @@ RUN <<EOR
#!/usr/bin/env bash #!/usr/bin/env bash
source ~/.bashrc source ~/.bashrc
# Enabling or disabling UI: replace_env_vars() {
jq ".launch_gradio = \$WITH_UI" docker_default_config.json > docker_default_config.json.tmp echo "{}" > /tmp/empty.json
mv docker_default_config.json.tmp docker_default_config.json jq "\$( cat \$1 ) | del(.. | select(. == null))" /tmp/empty.json > \$1.tmp
mv \$1.tmp \$1
rm -f /tmp/empty.json
}
# Merging config from docker_confignew.json into confignew.json: merge_json_files() {
jq -s '.[0] * .[1] * .[2]' confignew.json docker_default_config.json docker_confignew.json > confignew.json.tmp # Merging JSON config with docker default values followed by values set on startup:
mv confignew.json.tmp confignew.json jq -s '.[0] * .[1] * .[2]' \$1 docker_default_\$1 docker_\$1 > \$1.tmp
mv \$1.tmp \$1
}
replace_env_vars docker_default_confignew.json
merge_json_files confignew.json
conda activate alltalk conda activate alltalk
if [ "\$ENABLE_MULTI_ENGINE_MANAGER" = true ] ; then if [ "\$ALLTALK_ENABLE_MULTI_ENGINE_MANAGER" = true ] ; then
echo "Starting alltalk using multi engine manager" echo "Starting alltalk using multi engine manager"
# Merging config from docker_mem_config.json into mem_config.json: replace_env_vars docker_default_mem_config.json
jq -s '.[0] * .[1] * .[2]' mem_config.json docker_default_mem_config.json docker_mem_config.json > mem_config.json.tmp merge_json_files mem_config.json
mv mem_config.json.tmp mem_config.json
python tts_mem.py python tts_mem.py
else else
echo "Starting alltalk" echo "Starting alltalk"
+10 -8
View File
@@ -3,8 +3,8 @@
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
. ${SCRIPT_DIR=}/docker/variables.sh . ${SCRIPT_DIR=}/docker/variables.sh
WITH_UI=true ALLTALK_GRADIO_INTERFACE=true
ENABLE_MULTI_ENGINE_MANAGER=false ALLTALK_ENABLE_MULTI_ENGINE_MANAGER=false
MULTI_ENGINE_MANAGER_CONFIG= MULTI_ENGINE_MANAGER_CONFIG=
DOCKER_TAG=latest-xtts DOCKER_TAG=latest-xtts
DOCKER_REPOSITORY=erew123 DOCKER_REPOSITORY=erew123
@@ -26,10 +26,10 @@ while [ "$#" -gt 0 ]; do
shift shift
;; ;;
--no-ui) --no-ui)
WITH_UI=false ALLTALK_GRADIO_INTERFACE=false
;; ;;
--with-multi-engine-manager) --with-multi-engine-manager)
ENABLE_MULTI_ENGINE_MANAGER=true ALLTALK_ENABLE_MULTI_ENGINE_MANAGER=true
if [ -n "$2" ] && ! [[ $2 =~ ^--.* ]]; then if [ -n "$2" ] && ! [[ $2 =~ ^--.* ]]; then
MULTI_ENGINE_MANAGER_CONFIG=$2 MULTI_ENGINE_MANAGER_CONFIG=$2
shift shift
@@ -74,8 +74,8 @@ if [[ -n $RVC_VOICES ]]; then
DOCKER_ARGS+=( -v ${RVC_VOICES}:${ALLTALK_DIR}/models/rvc_voices ) DOCKER_ARGS+=( -v ${RVC_VOICES}:${ALLTALK_DIR}/models/rvc_voices )
fi fi
if [ "$WITH_UI" = true ] ; then if [ "ALLTALK_GRADIO_INTERFACE" = true ] ; then
if [ "$ENABLE_MULTI_ENGINE_MANAGER" = true ] ; then if [ "$ALLTALK_ENABLE_MULTI_ENGINE_MANAGER" = true ] ; then
DOCKER_ARGS+=( -p 7500:7500 ) DOCKER_ARGS+=( -p 7500:7500 )
else else
DOCKER_ARGS+=( -p 7852:7852 ) DOCKER_ARGS+=( -p 7852:7852 )
@@ -87,8 +87,10 @@ if [[ -n $MULTI_ENGINE_MANAGER_CONFIG ]]; then
fi fi
# Pass env variables: # Pass env variables:
DOCKER_ARGS+=( -e ENABLE_MULTI_ENGINE_MANAGER=${ENABLE_MULTI_ENGINE_MANAGER} ) DOCKER_ARGS+=( -e ALLTALK_ENABLE_MULTI_ENGINE_MANAGER=${ALLTALK_ENABLE_MULTI_ENGINE_MANAGER} )
DOCKER_ARGS+=( -e WITH_UI=${WITH_UI} ) DOCKER_ARGS+=( -e ALLTALK_GRADIO_INTERFACE=${ALLTALK_GRADIO_INTERFACE} )
DOCKER_ARGS+=( -e ALLTALK_LAUNCH_GRADIO=${ALLTALK_GRADIO_INTERFACE} )
docker run \ docker run \
--rm \ --rm \
-7
View File
@@ -1,7 +0,0 @@
{
"delete_output_wavs": "1",
"rvc_settings": {
"rvc_enabled": true,
"f0method": "rmvpe"
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"branding": $ENV.ALLTALK_BRANDING,
"delete_output_wavs": $ENV.ALLTALK_DELETE_OUTPUT_WAVS,
"gradio_interface": $ENV.ALLTALK_GRADIO_INTERFACE,
"output_folder": $ENV.ALLTALK_OUTPUT_FOLDER,
"gradio_port_number": $ENV.ALLTALK_GRADIO_PORT_NUMBER,
"launch_gradio": $ENV.ALLTALK_LAUNCH_GRADIO,
"transcode_audio_format": $ENV.ALLTALK_TRANSCODE_AUDIO_FORMAT,
"rvc_settings": {
"rvc_enabled": $ENV.ALLTALK_RVC_ENABLED,
"rvc_char_model_file": $ENV.ALLTALK_RVC_CHAR_MODEL_FILE,
"rvc_narr_model_file": $ENV.ALLTALK_RVC_NARR_MODEL_FILE,
"split_audio": $ENV.ALLTALK_RVC_SPLIT_AUDIO,
"autotune": $ENV.ALLTALK_RVC_AUTOTUNE,
"pitch": $ENV.ALLTALK_RVC_PITCH,
"filter_radius": $ENV.ALLTALK_RVC_FILTER_RADIUS,
"index_rate": $ENV.ALLTALK_RVC_INDEX_RATE,
"rms_mix_rate": $ENV.ALLTALK_RVC_RMS_MIX_RATE,
"protect": $ENV.ALLTALK_RVC_PROTECT,
"hop_length": $ENV.ALLTALK_RVC_HOP_LENGTH,
"f0method": $ENV.ALLTALK_RVC_F0METHOD,
"embedder_model": $ENV.ALLTALK_RVC_EMBEDDER_MODEL,
"training_data_size": $ENV.ALLTALK_RVC_TRAINING_DATA_SIZE
},
"api_def": {
"api_port_number": $ENV.ALLTALK_API_PORT_NUMBER,
"api_allowed_filter": $ENV.ALLTALK_API_ALLOWED_FILTER,
"api_length_stripping": $ENV.ALLTALK_API_LENGTH_STRIPPING,
"api_max_characters": $ENV.ALLTALK_API_MAX_CHARACTERS,
"api_use_legacy_api": $ENV.ALLTALK_API_USE_LEGACY_API,
"api_text_filtering": $ENV.ALLTALK_API_TEXT_FILTERING,
"api_narrator_enabled": $ENV.ALLTALK_API_NARRATOR_ENABLED,
"api_text_not_inside": $ENV.ALLTALK_API_TEXT_NOT_INSIDE,
"api_language": $ENV.ALLTALK_API_LANGUAGE,
"api_output_file_name": $ENV.ALLTALK_API_OUTPUT_FILE_NAME,
"api_output_file_timestamp": $ENV.ALLTALK_API_OUTPUT_FILE_TIMESTAMP,
"api_autoplay": $ENV.ALLTALK_API_AUTOPLAY,
"api_autoplay_volume": $ENV.ALLTALK_API_AUTOPLAY_VOLUME
}
}
+16 -1
View File
@@ -1,3 +1,18 @@
{ {
"auto_start_engines": 1 "base_port": $ENV.ALLTALK_MEM_BASE_PORT,
"api_server_port": $ENV.ALLTALK_MEM_API_SERVER_PORT,
"auto_start_engines": $ENV.ALLTALK_MEM_AUTO_START_ENGINES,
"max_instances": $ENV.ALLTALK_MEM_MAX_INSTANCES,
"gradio_interface_port": $ENV.ALLTALK_MEM_GRADIO_INTERFACE_PORT,
"max_retries": $ENV.ALLTALK_MEM_MAX_RETRIES,
"initial_wait": $ENV.ALLTALK_MEM_INITIAL_WAIT,
"backoff_factor": $ENV.ALLTALK_MEM_BACKOFF_FACTOR,
"debug_mode": $ENV.ALLTALK_MEM_DEBUG_MODE,
"max_queue_time": $ENV.ALLTALK_MEM_MAX_QUEUE_TIME,
"queue_check_interval": $ENV.ALLTALK_MEM_QUEUE_CHECK_INTERVAL,
"tts_request_timeout": $ENV.ALLTALK_MEM_TTS_REQUEST_TIMEOUT,
"text_length_factor": $ENV.ALLTALK_MEM_TEXT_LENGTH_FACTOR,
"concurrent_request_factor": $ENV.ALLTALK_MEM_CONCURRENT_REQUEST_FACTOR,
"diminishing_factor": $ENV.ALLTALK_MEM_DIMINISHING_FACTOR,
"queue_position_factor": $ENV.ALLTALK_MEM_QUEUE_POSITION_FACTOR
} }
+4 -4
View File
@@ -55,7 +55,7 @@ from collections import deque
from datetime import datetime, timedelta from datetime import datetime, timedelta
from requests.exceptions import RequestException from requests.exceptions import RequestException
from werkzeug.serving import make_server, WSGIRequestHandler from werkzeug.serving import make_server, WSGIRequestHandler
from config import AlltalkMultiEngineManagerConfig from config import AlltalkMultiEngineManagerConfig, AlltalkConfig
from flask_cors import CORS, cross_origin from flask_cors import CORS, cross_origin
from flask import Flask, request, jsonify, send_from_directory, send_file from flask import Flask, request, jsonify, send_from_directory, send_file
@@ -76,7 +76,6 @@ should_exit = threading.Event()
# Global variable to hold the monitor thread # Global variable to hold the monitor thread
stop_monitor = threading.Event() stop_monitor = threading.Event()
monitor = None monitor = None
WITH_UI = os.getenv("WITH_UI", True).lower() == 'true'
flask_app = Flask(__name__) flask_app = Flask(__name__)
CORS(flask_app) CORS(flask_app)
@@ -84,6 +83,7 @@ flask_app.config['OUTPUT_FOLDER'] = str(Path(os.getcwd()) / 'outputs')
# Load configuration at the start of the script # Load configuration at the start of the script
config = AlltalkMultiEngineManagerConfig.get_instance() config = AlltalkMultiEngineManagerConfig.get_instance()
USE_GRADIO = AlltalkConfig.get_instance().gradio_interface
def signal_handler(signum, frame): def signal_handler(signum, frame):
print("[AllTalk MEM] Interrupt received, shutting down...") print("[AllTalk MEM] Interrupt received, shutting down...")
@@ -125,7 +125,7 @@ print(f"[AllTalk MEM] \033[93m MEM is not intended for production use and\03
print(f"[AllTalk MEM] \033[93m there is NO support being offered on MEM\033[00m") print(f"[AllTalk MEM] \033[93m there is NO support being offered on MEM\033[00m")
print(f"[AllTalk MEM]") print(f"[AllTalk MEM]")
print(f"[AllTalk MEM] \033[94mAPI/Queue :\033[00m \033[92mhttp://127.0.0.1:{config.api_server_port}/api/tts-generate\033[00m") print(f"[AllTalk MEM] \033[94mAPI/Queue :\033[00m \033[92mhttp://127.0.0.1:{config.api_server_port}/api/tts-generate\033[00m")
if WITH_UI: if USE_GRADIO:
print(f"[AllTalk MEM] \033[94mGradio Light:\033[00m \033[92mhttp://127.0.0.1:{config.gradio_interface_port}\033[00m") print(f"[AllTalk MEM] \033[94mGradio Light:\033[00m \033[92mhttp://127.0.0.1:{config.gradio_interface_port}\033[00m")
print(f"[AllTalk MEM] \033[94mGradio Dark :\033[00m \033[92mhttp://127.0.0.1:{config.gradio_interface_port}?__theme=dark\033[00m") print(f"[AllTalk MEM] \033[94mGradio Dark :\033[00m \033[92mhttp://127.0.0.1:{config.gradio_interface_port}?__theme=dark\033[00m")
print(f"[AllTalk MEM]") print(f"[AllTalk MEM]")
@@ -1492,7 +1492,7 @@ def auto_start_engines():
# Main execution # Main execution
if __name__ == "__main__": if __name__ == "__main__":
signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGINT, signal_handler)
if WITH_UI: if USE_GRADIO:
print("[AllTalk MEM] Starting gradio...") print("[AllTalk MEM] Starting gradio...")
interface = create_gradio_interface() interface = create_gradio_interface()
# Start the Gradio interface # Start the Gradio interface