This is a work in progress. There are issues to address: - RVC does not work yet. - There is a stutter on the 1st TTS generation. - Transcoding damages the file in some way (seems to be a colab specific issue) - First model selection and other configuration settings may need to be pre-set. - Long TTS generations can timeout in Gradio interface, hence should be run on at least a T4 runtime.
203 lines
8.0 KiB
Plaintext
203 lines
8.0 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "H-WKVp4Uukcl"
|
|
},
|
|
"source": [
|
|
"#Install Server Requirements\n",
|
|
"This should be run on a minimum of a T4 runtime, though it will run on a CPU only session, however long TTS generations may time out/error.\n",
|
|
"\n",
|
|
"This is a **work in progress**. Known issues:\n",
|
|
"\n",
|
|
"- The 1st TTS generation has a brief stutter.\n",
|
|
"- RVC is not yet working.\n",
|
|
"- Transcoding/ffmpeg isnt working.\n",
|
|
"- Things yet to do on selecting your first model and other configuration setups.\n",
|
|
"\n",
|
|
"If you enable DeepSpeed for XTTS models, DeepSpeed has to compile on the 1st TTS generation which can take about 90 seconds. After that it should be fine."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"id": "W6ls-RHTQeZv",
|
|
"cellView": "form"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#@markdown #####You can enable gdrive that drag and drop samples directly through your google drive via the `drive/Mydrive` path\n",
|
|
"mount_gdrive = False #@param{type:\"boolean\"}\n",
|
|
"\n",
|
|
"if mount_gdrive:\n",
|
|
" from google.colab import drive\n",
|
|
" drive.mount('/content/drive')\n",
|
|
"from IPython.display import clear_output\n",
|
|
"print(\"*******************************************************************\")\n",
|
|
"print(\"** Installing server requirements. This will take 5-10 minutes ****\")\n",
|
|
"print(\"*******************************************************************\")\n",
|
|
"!apt install libasound2-dev portaudio19-dev libportaudio2 libportaudiocpp0 libaio-dev espeak-ng > '/dev/null' 2>&1\n",
|
|
"clear_output()\n",
|
|
"print(\"************************\")\n",
|
|
"print(\"*** Cloning AllTalk ****\")\n",
|
|
"print(\"************************\\n\")\n",
|
|
"!git clone -b alltalkbeta https://github.com/erew123/alltalk_tts\n",
|
|
"clear_output()\n",
|
|
"print(\"\\n********************************\")\n",
|
|
"print(\"*** Installing Requirements ****\")\n",
|
|
"print(\"********************************\\n\")\n",
|
|
"!pip install --quiet -r /content/alltalk_tts/system/requirements/requirements_colab.txt\n",
|
|
"clear_output()\n",
|
|
"print(\"\\n*****************************\")\n",
|
|
"print(\"*** Installing DeepSpeed ****\")\n",
|
|
"print(\"*****************************\\n\")\n",
|
|
"!pip install deepspeed\n",
|
|
"!pip install orjson\n",
|
|
"!pip install faiss-cpu\n",
|
|
"!pip install fairseq\n",
|
|
"clear_output()\n",
|
|
"print(\"\\n******************************\")\n",
|
|
"print(\"*** Installing Cloudflare ****\")\n",
|
|
"print(\"******************************\\n\")\n",
|
|
"# Install cloudflare\n",
|
|
"!wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb > '/dev/null' 2>&1\n",
|
|
"!apt install ./cloudflared-linux-amd64.deb aria2 > '/dev/null' 2>&1\n",
|
|
"!rm cloudflared-linux-amd64.deb > '/dev/null' 2>&1\n",
|
|
"!python -m spacy download en_core_web_md\n",
|
|
"clear_output()\n",
|
|
"print(\"\\n***************************\")\n",
|
|
"print(\"*** Installing Cutlass ****\")\n",
|
|
"print(\"***************************\\n\")\n",
|
|
"# Clone the CUTLASS repository\n",
|
|
"!git clone https://github.com/NVIDIA/cutlass.git\n",
|
|
"!export CUTLASSPATH=/content/cutlass\n",
|
|
"!sudo curl -L https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz -o /usr/local/bin/ffmpeg.tar.xz\n",
|
|
"clear_output()\n",
|
|
"%cd /usr/local/bin/\n",
|
|
"clear_output()\n",
|
|
"!7z e /usr/local/bin/ffmpeg.tar.xz -y\n",
|
|
"clear_output()\n",
|
|
"!7z e /usr/local/bin/ffmpeg.tar -y\n",
|
|
"clear_output()\n",
|
|
"!sudo chmod a+rx /usr/local/bin/ffmpeg\n",
|
|
"clear_output()\n",
|
|
"!pip uninstall jax -y\n",
|
|
"clear_output()\n",
|
|
"print(\"************************************\")\n",
|
|
"print(\"** Server requirements installed ***\")\n",
|
|
"print(\"*** Please proceed to next step ****\")\n",
|
|
"print(\"************************************\\n\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "2nk26r66RQ23"
|
|
},
|
|
"source": [
|
|
"\n",
|
|
"# Start AllTalk"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"id": "9PCQhSoiWvhL",
|
|
"cellView": "form"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"#@markdown Links to the API and Gradio interface will be shown when AllTalk has loaded in.<br>\n",
|
|
"#@markdown The API address is what you would use in SillyTavern.\n",
|
|
"import re\n",
|
|
"import time\n",
|
|
"import json\n",
|
|
"import threading\n",
|
|
"import time\n",
|
|
"\n",
|
|
"def keep_alive():\n",
|
|
" while True:\n",
|
|
" time.sleep(60) # Run every 60 seconds (adjust as needed)\n",
|
|
"\n",
|
|
"keep_alive_thread = threading.Thread(target=keep_alive)\n",
|
|
"keep_alive_thread.start()\n",
|
|
"\n",
|
|
"Tunnel = \"cloudflare\"\n",
|
|
"host = \"127.0.0.1\"\n",
|
|
"ports = [7851, 7852]\n",
|
|
"tunnel_urls = []\n",
|
|
"\n",
|
|
"# Starting tunnels for each port.\n",
|
|
"for port in ports:\n",
|
|
" if Tunnel == \"cloudflare\":\n",
|
|
" !nohup cloudflared tunnel --url http://{host}:{port} > lt_{port}.log 2>&1 &\n",
|
|
" else:\n",
|
|
" !nohup npx lt -p {port} > lt_{port}.log 2>&1 &\n",
|
|
"\n",
|
|
"# Wait a couple of seconds for the tunnels to initialize.\n",
|
|
"time.sleep(10)\n",
|
|
"\n",
|
|
"# Extract URLs for each tunnel.\n",
|
|
"for port in ports:\n",
|
|
" log_file = f'lt_{port}.log'\n",
|
|
" with open(log_file, 'r') as testwritefile:\n",
|
|
" log_content = testwritefile.read()\n",
|
|
"\n",
|
|
" # Use regular expressions to find the URL.\n",
|
|
" if Tunnel == \"cloudflare\":\n",
|
|
" url_match = re.search(r'(https://[-a-z0-9]+\\.trycloudflare\\.com)', log_content)\n",
|
|
" else:\n",
|
|
" url_match = re.search(r'your url is: (https?://\\S+)', log_content)\n",
|
|
"\n",
|
|
" if url_match:\n",
|
|
" tunnel_url = url_match.group(1)\n",
|
|
" tunnel_urls.append(tunnel_url)\n",
|
|
" else:\n",
|
|
" print(f\"URL for port {port} not found.\")\n",
|
|
"\n",
|
|
"# Save the tunnel URLs to a JSON file.\n",
|
|
"try:\n",
|
|
" # Try to open the JSON file for reading.\n",
|
|
" with open('/content/alltalk_tts/googlecolab.json', 'r') as f:\n",
|
|
" data = json.load(f)\n",
|
|
"except FileNotFoundError:\n",
|
|
" # If the file doesn't exist, create an empty dictionary.\n",
|
|
" data = {}\n",
|
|
"\n",
|
|
"data['google_ip_address'] = tunnel_urls\n",
|
|
"\n",
|
|
"# Write the modified data (or newly created data) back to the file.\n",
|
|
"with open('/content/alltalk_tts/googlecolab.json', 'w') as f:\n",
|
|
" json.dump(data, f)\n",
|
|
"\n",
|
|
"host = \"0.0.0.0\"\n",
|
|
"\n",
|
|
"if Tunnel == \"localtunnel\":\n",
|
|
" print(\"Before you copy the link above click on it and copy that ip:\")\n",
|
|
" !curl ipv4.icanhazip.com\n",
|
|
"\n",
|
|
"# Start API server.\n",
|
|
"!python /content/alltalk_tts/script.py\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"accelerator": "GPU",
|
|
"colab": {
|
|
"gpuType": "T4",
|
|
"provenance": []
|
|
},
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"name": "python"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0
|
|
} |