Merge pull request #557 from Paladinium/alltalkbeta_docker_env_variables
Introduce ENV variables for Docker
This commit is contained in:
7 files changed
+121
-35
No files matched your search
+22
-3
@@ -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
@@ -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
@@ -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 \
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"delete_output_wavs": "1",
|
|
||||||
"rvc_settings": {
|
|
||||||
"rvc_enabled": true,
|
|
||||||
"f0method": "rmvpe"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user