Upload MVSepLess_Epsilon_Colab.ipynb
Browse files- MVSepLess_Epsilon_Colab.ipynb +558 -0
MVSepLess_Epsilon_Colab.ipynb
ADDED
|
@@ -0,0 +1,558 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": null,
|
| 6 |
+
"metadata": {
|
| 7 |
+
"cellView": "form",
|
| 8 |
+
"collapsed": true,
|
| 9 |
+
"id": "bMJNEsdIUHYM"
|
| 10 |
+
},
|
| 11 |
+
"outputs": [],
|
| 12 |
+
"source": [
|
| 13 |
+
"import os\n",
|
| 14 |
+
"# @title # Установка\n",
|
| 15 |
+
"repo_url = \"https://huggingface.co/noblebarkrr/mvsepless_colab\"\n",
|
| 16 |
+
"home_dir = os.path.join(os.sep, \"content\")\n",
|
| 17 |
+
"mvsepless_dir = os.path.join(home_dir, \"mvsepless-epsilon\")\n",
|
| 18 |
+
"%cd $home_dir\n",
|
| 19 |
+
"!git clone $repo_url $mvsepless_dir\n",
|
| 20 |
+
"%cd $mvsepless_dir\n",
|
| 21 |
+
"!pip install uv\n",
|
| 22 |
+
"req = \"\"\"\n",
|
| 23 |
+
"torch==2.9.0\n",
|
| 24 |
+
"torchvision==0.24.0\n",
|
| 25 |
+
"torchaudio==2.9.0\n",
|
| 26 |
+
"numpy==2.0.2\n",
|
| 27 |
+
"pandas\n",
|
| 28 |
+
"scipy==1.16.3\n",
|
| 29 |
+
"librosa==0.11.0\n",
|
| 30 |
+
"samplerate==0.1.0\n",
|
| 31 |
+
"matplotlib\n",
|
| 32 |
+
"tqdm==4.67.1\n",
|
| 33 |
+
"einops==0.8.1\n",
|
| 34 |
+
"protobuf==5.29.5\n",
|
| 35 |
+
"soundfile==0.13.1\n",
|
| 36 |
+
"pydub==0.25.1\n",
|
| 37 |
+
"webrtcvad==2.0.10\n",
|
| 38 |
+
"audiomentations==0.42.0\n",
|
| 39 |
+
"pedalboard==0.8.2\n",
|
| 40 |
+
"ffmpeg-python==0.2.0\n",
|
| 41 |
+
"ml_collections==1.1.0\n",
|
| 42 |
+
"timm==1.0.22\n",
|
| 43 |
+
"wandb==0.23.0\n",
|
| 44 |
+
"accelerate==1.12.0\n",
|
| 45 |
+
"bitsandbytes==0.46.0\n",
|
| 46 |
+
"tokenizers==0.22.1\n",
|
| 47 |
+
"huggingface-hub==0.36.0\n",
|
| 48 |
+
"transformers==4.57.2\n",
|
| 49 |
+
"segmentation_models_pytorch==0.5.0\n",
|
| 50 |
+
"torchseg==0.0.1a4\n",
|
| 51 |
+
"demucs==4.0.0\n",
|
| 52 |
+
"asteroid==0.7.0\n",
|
| 53 |
+
"prodigyopt==1.1.2\n",
|
| 54 |
+
"torch_log_wmse==0.3.0\n",
|
| 55 |
+
"rotary_embedding_torch==0.6.5\n",
|
| 56 |
+
"gradio\n",
|
| 57 |
+
"omegaconf==2.3.0\n",
|
| 58 |
+
"beartype==0.22.6\n",
|
| 59 |
+
"spafe==0.3.2\n",
|
| 60 |
+
"torch_audiomentations==0.12.0\n",
|
| 61 |
+
"auraloss==0.4.0\n",
|
| 62 |
+
"onnx>=1.17\n",
|
| 63 |
+
"onnx2torch>=0.3.0\n",
|
| 64 |
+
"onnxruntime-gpu>=1.17\n",
|
| 65 |
+
"ml_dtypes==0.5.4\n",
|
| 66 |
+
"resampy\n",
|
| 67 |
+
"yt_dlp\n",
|
| 68 |
+
"python-magic\n",
|
| 69 |
+
"pyngrok\n",
|
| 70 |
+
"tabulate\n",
|
| 71 |
+
"gradio_modal\n",
|
| 72 |
+
"neuraloperator==1.0.2\n",
|
| 73 |
+
"torchcrepe==0.0.23\n",
|
| 74 |
+
"praat-parselmouth==0.4.5\n",
|
| 75 |
+
"faiss-cpu==1.11\n",
|
| 76 |
+
"local-attention==1.11.1\n",
|
| 77 |
+
"tenacity==9.1.2\n",
|
| 78 |
+
"gdown\n",
|
| 79 |
+
"\"\"\"\n",
|
| 80 |
+
"with open(\"requirements.txt\", \"w\", encoding=\"utf-8\") as f:\n",
|
| 81 |
+
" f.write(req)\n",
|
| 82 |
+
"!uv pip install --no-cache-dir -qq -r requirements.txt\n",
|
| 83 |
+
"%cd $mvsepless_dir\n"
|
| 84 |
+
]
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"cell_type": "code",
|
| 88 |
+
"source": [
|
| 89 |
+
"import os\n",
|
| 90 |
+
"import yt_dlp\n",
|
| 91 |
+
"\n",
|
| 92 |
+
"DOWNLOAD_DIR = os.environ.get(\n",
|
| 93 |
+
" \"MVSEPLESS_DOWNLOAD_DIR\", os.path.join(os.getcwd(), \"downloaded\")\n",
|
| 94 |
+
")\n",
|
| 95 |
+
"\n",
|
| 96 |
+
"def dw_yt_dlp(\n",
|
| 97 |
+
" url,\n",
|
| 98 |
+
" output_dir=None,\n",
|
| 99 |
+
" cookie=None,\n",
|
| 100 |
+
" output_format=\"mp3\",\n",
|
| 101 |
+
" output_bitrate=\"320\",\n",
|
| 102 |
+
" title=None,\n",
|
| 103 |
+
"):\n",
|
| 104 |
+
" # Подготовка шаблона имени файла\n",
|
| 105 |
+
" outtmpl = \"%(title)s.%(ext)s\" if title is None else f\"{title}.%(ext)s\"\n",
|
| 106 |
+
"\n",
|
| 107 |
+
" ydl_opts = {\n",
|
| 108 |
+
" \"format\": \"bestaudio/best\",\n",
|
| 109 |
+
" \"outtmpl\": os.path.join(DOWNLOAD_DIR if not output_dir else output_dir, outtmpl),\n",
|
| 110 |
+
" \"postprocessors\": [\n",
|
| 111 |
+
" {\n",
|
| 112 |
+
" \"key\": \"FFmpegExtractAudio\",\n",
|
| 113 |
+
" \"preferredcodec\": output_format,\n",
|
| 114 |
+
" \"preferredquality\": output_bitrate,\n",
|
| 115 |
+
" }\n",
|
| 116 |
+
" ],\n",
|
| 117 |
+
" \"noplaylist\": True, # Скачивать только одно видео, не плейлист\n",
|
| 118 |
+
" \"quiet\": True, # Отключить вывод в консоль\n",
|
| 119 |
+
" \"no_warnings\": True, # Скрыть предупреждения\n",
|
| 120 |
+
" }\n",
|
| 121 |
+
"\n",
|
| 122 |
+
" # Добавляем cookies если указаны\n",
|
| 123 |
+
" if cookie and os.path.exists(cookie):\n",
|
| 124 |
+
" ydl_opts[\"cookiefile\"] = cookie\n",
|
| 125 |
+
"\n",
|
| 126 |
+
" with yt_dlp.YoutubeDL(ydl_opts) as ydl:\n",
|
| 127 |
+
" try:\n",
|
| 128 |
+
" info = ydl.extract_info(url, download=True)\n",
|
| 129 |
+
" if \"_type\" in info and info[\"_type\"] == \"playlist\":\n",
|
| 130 |
+
" # Для плейлистов берем первое видео\n",
|
| 131 |
+
" entry = info[\"entries\"][0]\n",
|
| 132 |
+
" filename = ydl.prepare_filename(entry)\n",
|
| 133 |
+
" else:\n",
|
| 134 |
+
" # Для одиночного видео\n",
|
| 135 |
+
" filename = ydl.prepare_filename(info)\n",
|
| 136 |
+
"\n",
|
| 137 |
+
" # Заменяем оригинальное расширение на выбранный формат\n",
|
| 138 |
+
" base, _ = os.path.splitext(filename)\n",
|
| 139 |
+
" audio_file = base + f\".{output_format}\"\n",
|
| 140 |
+
"\n",
|
| 141 |
+
" return os.path.join(DOWNLOAD_DIR, audio_file)\n",
|
| 142 |
+
" except Exception as e:\n",
|
| 143 |
+
" return None\n",
|
| 144 |
+
"\n",
|
| 145 |
+
"#@title # Скачивание аудио с интернета\n",
|
| 146 |
+
"\n",
|
| 147 |
+
"input_url = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Ссылка на аудио/видео\"}\n",
|
| 148 |
+
"output_dir = \"/content/downloaded\" # @param {\"type\":\"string\",\"placeholder\":\"Директория для сохранения скачанного аудио\"}\n",
|
| 149 |
+
"cookies_path = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Путь к cookies (дял успешного скачивания с ютуба)\"}\n",
|
| 150 |
+
"downloaded_file = dw_yt_dlp(url=input_url, output_dir=output_dir, cookie=cookies_path)\n"
|
| 151 |
+
],
|
| 152 |
+
"metadata": {
|
| 153 |
+
"cellView": "form",
|
| 154 |
+
"id": "3l7EYo3oZ76h"
|
| 155 |
+
},
|
| 156 |
+
"execution_count": null,
|
| 157 |
+
"outputs": []
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"cell_type": "code",
|
| 161 |
+
"execution_count": null,
|
| 162 |
+
"metadata": {
|
| 163 |
+
"cellView": "form",
|
| 164 |
+
"id": "QMG9TEdMtHJ6"
|
| 165 |
+
},
|
| 166 |
+
"outputs": [],
|
| 167 |
+
"source": [
|
| 168 |
+
"import os\n",
|
| 169 |
+
"from pyngrok import ngrok\n",
|
| 170 |
+
"import random\n",
|
| 171 |
+
"import string\n",
|
| 172 |
+
"import re\n",
|
| 173 |
+
"import urllib\n",
|
| 174 |
+
"import time\n",
|
| 175 |
+
"import ipywidgets as widgets\n",
|
| 176 |
+
"from IPython.display import display, Javascript\n",
|
| 177 |
+
"import threading\n",
|
| 178 |
+
"import subprocess\n",
|
| 179 |
+
"\n",
|
| 180 |
+
"%cd $mvsepless_dir\n",
|
| 181 |
+
"#@title # Web-UI\n",
|
| 182 |
+
"#@markdown ---\n",
|
| 183 |
+
"#@markdown ### Общий доступ\n",
|
| 184 |
+
"port = 7862\n",
|
| 185 |
+
"#@markdown * Способ поделится приложением\n",
|
| 186 |
+
"sharing_method = \"gradio\" # @param [\"gradio\",\"ngrok\",\"localtunnel\",\"not\"]\n",
|
| 187 |
+
"#@markdown * Токен для ngrok *(где взять его - https://dashboard.ngrok.com/get-started/your-authtoken)*\n",
|
| 188 |
+
"ngrok_token = \"\" # @param {\"type\":\"string\"}\n",
|
| 189 |
+
"\n",
|
| 190 |
+
"lt_sub_domain = \"mvsepless\"\n",
|
| 191 |
+
"def generate_subdomain(length=8):\n",
|
| 192 |
+
" \"\"\"Генерация случайного субдомена заданной длины\"\"\"\n",
|
| 193 |
+
" chars = string.ascii_lowercase + string.digits\n",
|
| 194 |
+
" return ''.join(random.choice(chars) for _ in range(length))\n",
|
| 195 |
+
"\n",
|
| 196 |
+
"if sharing_method == \"ngrok\":\n",
|
| 197 |
+
" try:\n",
|
| 198 |
+
" ngrok.set_auth_token(ngrok_token)\n",
|
| 199 |
+
" ngrok.kill()\n",
|
| 200 |
+
" tunnel = ngrok.connect(port)\n",
|
| 201 |
+
" print(f\"Публичная ссылка: {tunnel.public_url}\")\n",
|
| 202 |
+
" except KeyboardInterrupt:\n",
|
| 203 |
+
" ngrok.kill()\n",
|
| 204 |
+
"\n",
|
| 205 |
+
"if sharing_method == \"localtunnel\":\n",
|
| 206 |
+
" os.system(\"npm install -g localtunnel &>/dev/null\")\n",
|
| 207 |
+
" time.sleep(7)\n",
|
| 208 |
+
" with open('url.txt', 'w') as file:\n",
|
| 209 |
+
" file.write('')\n",
|
| 210 |
+
" subdomain = f\"{re.sub(r'[^a-zA-Z0-9]', '', lt_sub_domain)}-{generate_subdomain(25)}\"\n",
|
| 211 |
+
"\n",
|
| 212 |
+
" # Флаг для контроля работы потока\n",
|
| 213 |
+
" tunnel_running = True\n",
|
| 214 |
+
"\n",
|
| 215 |
+
" def run_tunnel():\n",
|
| 216 |
+
" while tunnel_running:\n",
|
| 217 |
+
" print(\"localtunnel включается...\")\n",
|
| 218 |
+
" try:\n",
|
| 219 |
+
" # Используем subprocess вместо os.system для лучшего контроля\n",
|
| 220 |
+
" process = subprocess.Popen(\n",
|
| 221 |
+
" f'lt --port {port} '\n",
|
| 222 |
+
" f'{f\"--subdomain {subdomain}\" if lt_sub_domain != \"\" and not lt_sub_domain.isspace() else \"\"}',\n",
|
| 223 |
+
" shell=True,\n",
|
| 224 |
+
" stdout=subprocess.PIPE,\n",
|
| 225 |
+
" stderr=subprocess.PIPE\n",
|
| 226 |
+
" )\n",
|
| 227 |
+
" process.wait() # Ждем завершения процесса\n",
|
| 228 |
+
" if not tunnel_running:\n",
|
| 229 |
+
" break\n",
|
| 230 |
+
" time.sleep(5) # Пауза перед перезапуском\n",
|
| 231 |
+
" except Exception as e:\n",
|
| 232 |
+
" if tunnel_running:\n",
|
| 233 |
+
" print(f\"Ошибка в localtunnel: {e}\")\n",
|
| 234 |
+
" time.sleep(5)\n",
|
| 235 |
+
"\n",
|
| 236 |
+
" tunnel_thread = threading.Thread(target=run_tunnel, daemon=True)\n",
|
| 237 |
+
" tunnel_thread.start()\n",
|
| 238 |
+
"\n",
|
| 239 |
+
" time.sleep(3)\n",
|
| 240 |
+
" try:\n",
|
| 241 |
+
" endpoint_ip = urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip()\n",
|
| 242 |
+
" tunnel_url = f\"https://{subdomain}.loca.lt\"\n",
|
| 243 |
+
" print(f\"Публичная ссылка: {tunnel_url}\")\n",
|
| 244 |
+
"\n",
|
| 245 |
+
" # Создаем текстовое поле с URL, а не IP\n",
|
| 246 |
+
" text_field = widgets.Text(\n",
|
| 247 |
+
" value=endpoint_ip, # Исправлено: показываем URL, а не IP\n",
|
| 248 |
+
" description='URL:',\n",
|
| 249 |
+
" disabled=True\n",
|
| 250 |
+
" )\n",
|
| 251 |
+
" text_field.add_class(\"copy-enabled\")\n",
|
| 252 |
+
"\n",
|
| 253 |
+
" display(text_field)\n",
|
| 254 |
+
"\n",
|
| 255 |
+
" # Исправленный JavaScript для копирования\n",
|
| 256 |
+
" display(Javascript(\"\"\"\n",
|
| 257 |
+
" setTimeout(() => {\n",
|
| 258 |
+
" const input = document.querySelector('.copy-enabled input');\n",
|
| 259 |
+
" if (!input) return;\n",
|
| 260 |
+
"\n",
|
| 261 |
+
" const btn = document.createElement('button');\n",
|
| 262 |
+
" btn.innerHTML = '📋';\n",
|
| 263 |
+
" btn.style.cssText = `\n",
|
| 264 |
+
" margin-left: 8px;\n",
|
| 265 |
+
" border: none;\n",
|
| 266 |
+
" background: none;\n",
|
| 267 |
+
" cursor: pointer;\n",
|
| 268 |
+
" font-size: 1.2em;\n",
|
| 269 |
+
" `;\n",
|
| 270 |
+
" input.parentNode.appendChild(btn);\n",
|
| 271 |
+
"\n",
|
| 272 |
+
" btn.addEventListener('click', () => {\n",
|
| 273 |
+
" navigator.clipboard.writeText(input.value) // Исправлено: input.value вместо input\n",
|
| 274 |
+
" .then(() => {\n",
|
| 275 |
+
" btn.innerHTML = '✓';\n",
|
| 276 |
+
" setTimeout(() => btn.innerHTML = '📋', 2000);\n",
|
| 277 |
+
" })\n",
|
| 278 |
+
" .catch(err => {\n",
|
| 279 |
+
" console.error('Ошибка копирования: ', err);\n",
|
| 280 |
+
" });\n",
|
| 281 |
+
" });\n",
|
| 282 |
+
" }, 300);\n",
|
| 283 |
+
" \"\"\"))\n",
|
| 284 |
+
"\n",
|
| 285 |
+
" except Exception as e:\n",
|
| 286 |
+
" print(f\"Ошибка при старте localtunnel: {e}\")\n",
|
| 287 |
+
"\n",
|
| 288 |
+
" # Функция для корректного завершения\n",
|
| 289 |
+
" def stop_tunnel():\n",
|
| 290 |
+
" global tunnel_running\n",
|
| 291 |
+
" tunnel_running = False\n",
|
| 292 |
+
" print(\"Localtunnel завершает работу...\")\n",
|
| 293 |
+
"\n",
|
| 294 |
+
" # Регистрируем обработчик для Ctrl+C\n",
|
| 295 |
+
" import signal\n",
|
| 296 |
+
" original_signal_handler = signal.getsignal(signal.SIGINT)\n",
|
| 297 |
+
"\n",
|
| 298 |
+
" def signal_handler(sig, frame):\n",
|
| 299 |
+
" stop_tunnel()\n",
|
| 300 |
+
" # Восстанавливаем оригинальный обработчик и вызываем его\n",
|
| 301 |
+
" signal.signal(signal.SIGINT, original_signal_handler)\n",
|
| 302 |
+
" raise KeyboardInterrupt\n",
|
| 303 |
+
"\n",
|
| 304 |
+
" signal.signal(signal.SIGINT, signal_handler)\n",
|
| 305 |
+
"\n",
|
| 306 |
+
"share_arg = \"--share\" if sharing_method == \"gradio\" else \"\"\n",
|
| 307 |
+
"!python mvsepless app --port $port $share_arg"
|
| 308 |
+
]
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"cell_type": "markdown",
|
| 312 |
+
"source": [
|
| 313 |
+
"# MVSepLess CLI"
|
| 314 |
+
],
|
| 315 |
+
"metadata": {
|
| 316 |
+
"id": "ydA_93K1Yt4D"
|
| 317 |
+
}
|
| 318 |
+
},
|
| 319 |
+
{
|
| 320 |
+
"cell_type": "code",
|
| 321 |
+
"execution_count": null,
|
| 322 |
+
"metadata": {
|
| 323 |
+
"cellView": "form",
|
| 324 |
+
"id": "KASVe41W6Fk-"
|
| 325 |
+
},
|
| 326 |
+
"outputs": [],
|
| 327 |
+
"source": [
|
| 328 |
+
"#@markdown ---\n",
|
| 329 |
+
"#@markdown ### Входные данные\n",
|
| 330 |
+
"#@markdown * Путь к входной папке/файлу:\n",
|
| 331 |
+
"input_path = \"\" # @param {\"type\":\"string\",\"placeholder\":\"/путь/к/файлу\"}\n",
|
| 332 |
+
"#@markdown ---\n",
|
| 333 |
+
"#@markdown ### Выбор модели\n",
|
| 334 |
+
"#@markdown * Тип / Имя модели:\n",
|
| 335 |
+
"model_name = \"bs_roformer / bs_6stem\" # @param ['mel_band_roformer / mbr_vocals_kim', 'mel_band_roformer / mbr_wsa', 'mel_band_roformer / mbr_instvoc_duality1_unwa', 'mel_band_roformer / mbr_instvoc_duality2_unwa', 'mel_band_roformer / mbr_kimft1_unwa', 'mel_band_roformer / mbr_kimft2_unwa', 'mel_band_roformer / mbr_kimft2b_unwa', 'mel_band_roformer / mbr_kimft3_prev_unwa', 'mel_band_roformer / mbr_bigbeta1_unwa', 'mel_band_roformer / mbr_bigbeta2_unwa', 'mel_band_roformer / mbr_bigbeta3_unwa', 'mel_band_roformer / mbr_bigbeta4_unwa', 'mel_band_roformer / mbr_bigbeta5e_unwa', 'mel_band_roformer / mbr_bigbeta6_unwa', 'mel_band_roformer / mbr_bigbeta6x_unwa', 'mel_band_roformer / mbr_inst1_unwa', 'mel_band_roformer / mbr_inst1+_unwa', 'mel_band_roformer / mbr_inst1e_unwa', 'mel_band_roformer / mbr_inst1e+_unwa', 'mel_band_roformer / mbr_inst2_unwa', 'mel_band_roformer / mbr_small_unwa', 'mel_band_roformer / mbr_bleed_supressor_unwa_97chris', 'mel_band_roformer / mbr_inst_becruily', 'mel_band_roformer / mbr_guitar_becruily', 'mel_band_roformer / mbr_karaoke_becruily', 'mel_band_roformer / mbr_vocals_becruily', 'mel_band_roformer / mbr_syhft1', 'mel_band_roformer / mbr_syhft2', 'mel_band_roformer / mbr_syhft2.5', 'mel_band_roformer / mbr_syhft3', 'mel_band_roformer / mbr_bigsyhft1fast', 'mel_band_roformer / mbr_syhftbeta1', 'mel_band_roformer / mbr_syhftB1_1', 'mel_band_roformer / mbr_syhftB1_2', 'mel_band_roformer / mbr_syhftB1_3', 'mel_band_roformer / mbr_syhft_4stem', 'mel_band_roformer / mbr_syhft_4stem2', 'mel_band_roformer / mbr_inst_1652_essid', 'mel_band_roformer / mbr_inst_1681_essid', 'mel_band_roformer / mbr_instfv1_gabox', 'mel_band_roformer / mbr_instfv2_gabox', 'mel_band_roformer / mbr_instfv3_gabox', 'mel_band_roformer / mbr_instfv4_gabox', 'mel_band_roformer / mbr_instfv4n_gabox', 'mel_band_roformer / mbr_instfv5_gabox', 'mel_band_roformer / mbr_instfv5n_gabox', 'mel_band_roformer / mbr_instfv6_gabox', 'mel_band_roformer / mbr_instfv6n_gabox', 'mel_band_roformer / mbr_instfv7_gabox', 'mel_band_roformer / mbr_instfv7n_gabox', 'mel_band_roformer / mbr_instfv7+_gabox', 'mel_band_roformer / mbr_instfv7z_gabox', 'mel_band_roformer / mbr_instfv8_gabox', 'mel_band_roformer / mbr_instfv8b_gabox', 'mel_band_roformer / mbr_instfv9_gabox', 'mel_band_roformer / mbr_instfv10_gabox', 'mel_band_roformer / mbr_instfvx_gabox', 'mel_band_roformer / mbr_instbv1_gabox', 'mel_band_roformer / mbr_instbv2_gabox', 'mel_band_roformer / mbr_instbv3_gabox', 'mel_band_roformer / mbr_vocalsfv1_gabox', 'mel_band_roformer / mbr_vocalsfv2_gabox', 'mel_band_roformer / mbr_vocalsfv3_gabox', 'mel_band_roformer / mbr_vocalsfv4_gabox', 'mel_band_roformer / mbr_vocalsfv5_gabox', 'mel_band_roformer / mbr_vocalsfv6_gabox', 'mel_band_roformer / mbr_karaoke25022025_gabox', 'mel_band_roformer / mbr_karaoke28022025_gabox', 'mel_band_roformer / mbr_karaoke1_gabox', 'mel_band_roformer / mbr_karaoke2_gabox', 'mel_band_roformer / mbr_leadvoc_dereverb_gabox', 'mel_band_roformer / mbr_denoise_debleed_gabox', 'mel_band_roformer / mbr_karaoke_fusion_gonzaluigi', 'mel_band_roformer / mbr_karaoke_fusion_aggr_gonzaluigi', 'mel_band_roformer / mbr_bve_gonzaluigi', 'mel_band_roformer / mbr_karaoke_fusion2_aggr_gonzaluigi', 'mel_band_roformer / mbr_karaoke_fusion_total_aggr_gonzaluigi', 'mel_band_roformer / mbr_dereverb_anvuew', 'mel_band_roformer / mbr_dereverb_less_aggr_anvuew', 'mel_band_roformer / mbr_dereverb_mono_anvuew', 'mel_band_roformer / mbr_aspiration_sucial', 'mel_band_roformer / mbr_derverb_echo1_sucial', 'mel_band_roformer / mbr_debigreverb_sucial', 'mel_band_roformer / mbr_desuperbigreverb_sucial', 'mel_band_roformer / mbr_dereverb-echo_fused_sucial', 'mel_band_roformer / mbr_dereverb-echo2_sucial', 'mel_band_roformer / mbr_karaoke_aufr33_viperx', 'mel_band_roformer / mbr_denoise_aufr33', 'mel_band_roformer / mbr_denoise_aggr_aufr33', 'mel_band_roformer / mbr_crowd_aufr33_viperx', 'mel_band_roformer / mbr_vocals_viperx', 'mel_band_roformer / mbr_vocalsf_aname', 'mel_band_roformer / mbr_kinft1_aname', 'mel_band_roformer / mbr_kinft2_aname', 'mel_band_roformer / mbr_kinft2f_aname', 'mel_band_roformer / mbr_kinft3_aname', 'mel_band_roformer / mbr_small_aname', 'mel_band_roformer / mbr_duality1_aname', 'mel_band_roformer / mbr_4stemlarge1_aname', 'mel_band_roformer / mbr_4stemlarge2_aname', 'mel_band_roformer / mbr_4stemxl1_aname', 'mel_band_roformer / mbr_percussion_yolkispaliks', 'mel_band_roformer / mbr_inst_metal_prev_meskvlla33', 'mel_band_roformer / mbr_neo_inst_vfx', 'bs_roformer / bs_drums_beatloo_labs', 'bs_roformer / bs_bass_beatloo_labs', 'bs_roformer / bs_vocals_1296_viperx', 'bs_roformer / bs_other_viperx', 'bs_roformer / bs_revive1_unwa', 'bs_roformer / bs_revive2_unwa', 'bs_roformer / bs_revive3e_unwa', 'bs_roformer / bs_resurrection_unwa', 'bs_roformer / bs_resurrection_inst_unwa', 'bs_roformer / bs_inst_fno_unwa', 'bs_roformer / bs_karaoke_becruily', 'bs_roformer / bs_voctest_gabox', 'bs_roformer / bs_karaoke_gabox', 'bs_roformer / bs_6stem', 'bs_roformer / bs_6stem_fixed', 'bs_roformer / bs_4stem_zfturbo', 'bs_roformer / bs_4stemft_syh99999', 'bs_roformer / bs_male_female_146_sucial', 'bs_roformer / bs_male_female_267_sucial', 'bs_roformer / bs_male_female_aufr33', 'bs_roformer / bs_deverb_256_8_anvuew', 'bs_roformer / bs_deverb_384_10_anvuew', 'bs_roformer / bs_karaoke_anvuew', 'bs_roformer / bs_vocals_anvuew', 'bs_roformer / bs_4stem_aname', 'mdx23c / mdx23c_instvoc_zfturbo', 'mdx23c / mdx23c_instvoc_hq1', 'mdx23c / mdx23c_instvoc_hq2', 'mdx23c / mdx23c_d1581', 'mdx23c / mdx23c_drumsep_6stem_aufr33_jarredou', 'mdx23c / mdx23c_drumsep_5stem_aufr33_jarredou', 'mdx23c / mdx23c_derverb_aufr33_jarredou', 'mdx23c / mdx23c_mid_side_wesleyr36', 'mdx23c / mdx23c_4stem_zfturbo', 'mdx23c / mdx23c_orch_verosment', 'mdxnet / mdx_kim_inst', 'mdxnet / mdx_kim_vocal1', 'mdxnet / mdx_kim_vocal2', 'mdxnet / mdx_kuielab_a_bass', 'mdxnet / mdx_kuielab_a_drums', 'mdxnet / mdx_kuielab_a_other', 'mdxnet / mdx_kuielab_a_vocals', 'mdxnet / mdx_kuielab_b_bass', 'mdxnet / mdx_kuielab_b_drums', 'mdxnet / mdx_kuielab_b_other', 'mdxnet / mdx_kuielab_b_vocals', 'mdxnet / mdx_reverb_hq_foxjoy', 'mdxnet / mdx_inst1', 'mdxnet / mdx_inst2', 'mdxnet / mdx_inst3', 'mdxnet / mdx_inst_full_292', 'mdxnet / mdx_inst_hq1', 'mdxnet / mdx_inst_hq2', 'mdxnet / mdx_inst_hq3', 'mdxnet / mdx_inst_hq4', 'mdxnet / mdx_inst_hq5', 'mdxnet / mdx_inst_main', 'mdxnet / mdx_vocft', 'mdxnet / mdx_crowd_hq1', 'mdxnet / mdx_inst_187_beta', 'mdxnet / mdx_inst_82_beta', 'mdxnet / mdx_inst_90_beta', 'mdxnet / mdx_main_340', 'mdxnet / mdx_main_390', 'mdxnet / mdx_main_406', 'mdxnet / mdx_main_427', 'mdxnet / mdx_main_438', 'mdxnet / mdx_1_9703', 'mdxnet / mdx_2_9682', 'mdxnet / mdx_3_9662', 'mdxnet / mdx_9482', 'mdxnet / mdx_karaoke1', 'mdxnet / mdx_karaoke2', 'mdxnet / mdx_main', 'vr / 1_hp-uvr', 'vr / 2_hp-uvr', 'vr / 3_hp-vocal-uvr', 'vr / 4_hp-vocal-uvr', 'vr / 5_hp-karaoke-uvr', 'vr / 6_hp-karaoke-uvr', 'vr / 7_hp2-uvr', 'vr / 8_hp2-uvr', 'vr / 9_hp2-uvr', 'vr / 10_sp-uvr-2b-32000-1', 'vr / 11_sp-uvr-2b-32000-2', 'vr / 12_sp-uvr-3b-44100', 'vr / 13_sp-uvr-4b-44100-1', 'vr / 14_sp-uvr-4b-44100-2', 'vr / 15_sp-uvr-mid-44100-1', 'vr / 16_sp-uvr-mid-44100-2', 'vr / 17_hp-wind_inst-uvr', 'vr / uvr-de-echo-aggressive', 'vr / uvr-de-echo-normal', 'vr / uvr-deecho-dereverb', 'vr / uvr-denoise-lite', 'vr / uvr-denoise', 'vr / uvr-bve-4b_sn-44100-1', 'vr / uvr-bve-v2-4b-sn-44100', 'vr / mgm-v5-karokee-32000-beta1', 'vr / mgm-v5-karokee-32000-beta2-agr', 'vr / mgm_highend_v4', 'vr / mgm_lowend_a_v4', 'vr / mgm_lowend_b_v4', 'vr / mgm_main_v4', 'vr / uvr-de-reverb-aufr33-jarredou', 'vr / uvr-de-breath-sucial-v1', 'vr / uvr-de-breath-sucial-v2', 'vr / vr_harmonic_noise_sep', 'scnet / scnet_4stem_zfturbo', 'scnet / scnet_xl_ihf_4stem_zfturbo', 'scnet / scnet_xl_4stem_starrytong', 'scnet / scnet_xl_4stem_zftrubo', 'scnet / scnet_jazz_4stem_jorisvaneyghen', 'scnet / scnet_xl_jazz_4stem_jorisvaneyghen', 'scnet / scnet_choirsep_exp', 'htdemucs / demucs4_mvsep_vocals', 'htdemucs / demucs4_4stem', 'htdemucs / demucs4_6stem', 'htdemucs / demucs3_mmi', 'htdemucs / demucs4_ft_bass', 'htdemucs / demucs4_ft_drums', 'htdemucs / demucs4_ft_vocals', 'htdemucs / demucs4_ft_other', 'htdemucs / demucs_mid_side_wesleyr36', 'htdemucs / demucs4_choirsep', 'bandit / bandit_plus', 'bandit_v2 / bandit_v2_multi']\n",
|
| 336 |
+
"# @markdown ---\n",
|
| 337 |
+
"# @markdown ### Настройки разделения\n",
|
| 338 |
+
"# @markdown * Извлечь инструментал:\n",
|
| 339 |
+
"instrumental = True # @param {type:\"boolean\"}\n",
|
| 340 |
+
"#@markdown ---\n",
|
| 341 |
+
"#@markdown ### Выходные данные\n",
|
| 342 |
+
"#@markdown * Формат:\n",
|
| 343 |
+
"output_format = \"mp3\" # @param [\"mp3\", \"wav\", \"flac\", \"ogg\", \"opus\", \"m4a\", \"aac\", \"aiff\"]\n",
|
| 344 |
+
"# @markdown * Битрейт\n",
|
| 345 |
+
"bitrate = 320 # @param {\"type\":\"slider\",\"min\":32,\"max\":320,\"step\":1}\n",
|
| 346 |
+
"# @markdown * Выбрать выходные стемы(через пробел, например (\"vocal\" \"instrumental\")):\n",
|
| 347 |
+
"stems_to_extract = \"\" # @param {type:\"string\"}\n",
|
| 348 |
+
"# @markdown * Шаблон именования выходных файлов:\n",
|
| 349 |
+
"output_template = \"NAME (STEM) MODEL\" # @param {type:\"string\"}\n",
|
| 350 |
+
"#@markdown * Путь к выходной папке:\n",
|
| 351 |
+
"output_dir = \"/content/output\" # @param {\"type\":\"string\",\"placeholder\":\"/путь/к/папке\"}\n",
|
| 352 |
+
"\n",
|
| 353 |
+
"model = model_name.split(\" / \")\n",
|
| 354 |
+
"\n",
|
| 355 |
+
"%cd $mvsepless_dir\n",
|
| 356 |
+
"\n",
|
| 357 |
+
"cmd = [\n",
|
| 358 |
+
" \"python\",\n",
|
| 359 |
+
" \"mvsepless\", \"cli\",\n",
|
| 360 |
+
" f\"--input \\\"{input_path}\\\"\",\n",
|
| 361 |
+
" f\"--output_dir \\\"{output_dir}\\\"\",\n",
|
| 362 |
+
" f\"--model_type \\\"{model[0]}\\\"\",\n",
|
| 363 |
+
" f\"--model_name \\\"{model[1]}\\\"\",\n",
|
| 364 |
+
" f\"--output_format \\\"{output_format}\\\"\",\n",
|
| 365 |
+
" f\"--output_bitrate \\\"{bitrate}k\\\"\",\n",
|
| 366 |
+
" f\"--template \\\"{output_template}\\\"\"\n",
|
| 367 |
+
"]\n",
|
| 368 |
+
"\n",
|
| 369 |
+
"if instrumental:\n",
|
| 370 |
+
" cmd.append(\"--ext_inst\")\n",
|
| 371 |
+
"\n",
|
| 372 |
+
"if stems_to_extract:\n",
|
| 373 |
+
" cmd.append(f\"--selected_stems {stems_to_extract}\")\n",
|
| 374 |
+
"\n",
|
| 375 |
+
"!{\" \".join(cmd)}"
|
| 376 |
+
]
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"cell_type": "markdown",
|
| 380 |
+
"source": [
|
| 381 |
+
"# Vbach CLI"
|
| 382 |
+
],
|
| 383 |
+
"metadata": {
|
| 384 |
+
"id": "H24RtVB1YlE0"
|
| 385 |
+
}
|
| 386 |
+
},
|
| 387 |
+
{
|
| 388 |
+
"cell_type": "markdown",
|
| 389 |
+
"source": [
|
| 390 |
+
"## Установка голосовой модели"
|
| 391 |
+
],
|
| 392 |
+
"metadata": {
|
| 393 |
+
"id": "VaGl6jKVYZfU"
|
| 394 |
+
}
|
| 395 |
+
},
|
| 396 |
+
{
|
| 397 |
+
"cell_type": "code",
|
| 398 |
+
"execution_count": null,
|
| 399 |
+
"metadata": {
|
| 400 |
+
"cellView": "form",
|
| 401 |
+
"id": "WiGjOEkaMtXi"
|
| 402 |
+
},
|
| 403 |
+
"outputs": [],
|
| 404 |
+
"source": [
|
| 405 |
+
"#@title Через локальные файлы\n",
|
| 406 |
+
"%cd $mvsepless_dir\n",
|
| 407 |
+
"pth_path = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Путь к *.pth файлу\"}\n",
|
| 408 |
+
"index_path = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Путь к *.index файлу\"}\n",
|
| 409 |
+
"voicemodel_name = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Имя модели\"}\n",
|
| 410 |
+
"index = f\"--index \\\"{index_path}\\\"\" if index_path != \"\" else \"\"\n",
|
| 411 |
+
"if pth_path != \"\" and voicemodel_name != \"\":\n",
|
| 412 |
+
" !python mvsepless/model_manager.py vbach install_local --model_name \"$voicemodel_name\" --pth \"$pth_path\" $index"
|
| 413 |
+
]
|
| 414 |
+
},
|
| 415 |
+
{
|
| 416 |
+
"cell_type": "code",
|
| 417 |
+
"execution_count": null,
|
| 418 |
+
"metadata": {
|
| 419 |
+
"cellView": "form",
|
| 420 |
+
"id": "PqrYh-j_Qh98"
|
| 421 |
+
},
|
| 422 |
+
"outputs": [],
|
| 423 |
+
"source": [
|
| 424 |
+
"#@title Через файлы с интернета\n",
|
| 425 |
+
"%cd $mvsepless_dir\n",
|
| 426 |
+
"pth_url = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Ссылка на *.pth файл\"}\n",
|
| 427 |
+
"index_url = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Ссылка на *.index файл\"}\n",
|
| 428 |
+
"voicemodel_name = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Имя модели\"}\n",
|
| 429 |
+
"index = f\"--index_url \\\"{index_url}\\\"\" if index_url != \"\" else \"\"\n",
|
| 430 |
+
"if pth_url != \"\" and voicemodel_name != \"\":\n",
|
| 431 |
+
" !python mvsepless/model_manager.py vbach install_url_files --model_name \"$voicemodel_name\" --pth_url \"$pth_url\" $index"
|
| 432 |
+
]
|
| 433 |
+
},
|
| 434 |
+
{
|
| 435 |
+
"cell_type": "code",
|
| 436 |
+
"execution_count": null,
|
| 437 |
+
"metadata": {
|
| 438 |
+
"cellView": "form",
|
| 439 |
+
"id": "J2nic-gYR2Bf"
|
| 440 |
+
},
|
| 441 |
+
"outputs": [],
|
| 442 |
+
"source": [
|
| 443 |
+
"#@title Через zip файл с интернета\n",
|
| 444 |
+
"%cd $mvsepless_dir\n",
|
| 445 |
+
"zip_url = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Ссылка на zip файл\"}\n",
|
| 446 |
+
"voicemodel_name = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Имя модели\"}\n",
|
| 447 |
+
"if zip_url != \"\" and voicemodel_name != \"\":\n",
|
| 448 |
+
" !python mvsepless/model_manager.py vbach install_url_zip --model_name \"$voicemodel_name\" --url \"$zip_url\""
|
| 449 |
+
]
|
| 450 |
+
},
|
| 451 |
+
{
|
| 452 |
+
"cell_type": "markdown",
|
| 453 |
+
"source": [
|
| 454 |
+
"## Инференс"
|
| 455 |
+
],
|
| 456 |
+
"metadata": {
|
| 457 |
+
"id": "4GSGHM4rYSVp"
|
| 458 |
+
}
|
| 459 |
+
},
|
| 460 |
+
{
|
| 461 |
+
"cell_type": "code",
|
| 462 |
+
"execution_count": null,
|
| 463 |
+
"metadata": {
|
| 464 |
+
"cellView": "form",
|
| 465 |
+
"id": "kdXg39EiSeLE"
|
| 466 |
+
},
|
| 467 |
+
"outputs": [],
|
| 468 |
+
"source": [
|
| 469 |
+
"#@markdown ### Входные данные\n",
|
| 470 |
+
"#@markdown * Путь к входной папке/файлу:\n",
|
| 471 |
+
"input_path = \"\" # @param {\"type\":\"string\",\"placeholder\":\"/путь/к/файлу\"}\n",
|
| 472 |
+
"#@markdown * Имя модели:\n",
|
| 473 |
+
"voicemodel_name = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Имя модели\"}\n",
|
| 474 |
+
"# @markdown ---\n",
|
| 475 |
+
"# @markdown ### Настройки преобразования\n",
|
| 476 |
+
"# @markdown * Влияние индекса\n",
|
| 477 |
+
"index_rate = 0 # @param {\"type\":\"slider\",\"min\":0,\"max\":1,\"step\":0.01}\n",
|
| 478 |
+
"# @markdown * Стерео режим\n",
|
| 479 |
+
"stereo_mode = \"mono\" # @param [\"mono\",\"left/right\",\"sim/dif\"]\n",
|
| 480 |
+
"# @markdown * Метод определения тона\n",
|
| 481 |
+
"method_pitch = \"rmvpe+\" # @param [\"rmvpe+\",\"mangio-crepe\",\"fcpe\"]\n",
|
| 482 |
+
"# @markdown * Изменение высоты тона (полутона)\n",
|
| 483 |
+
"pitch = 0 # @param {\"type\":\"slider\",\"min\":-48,\"max\":48,\"step\":1}\n",
|
| 484 |
+
"# @markdown * Длина шага (для mangio-crepe)\n",
|
| 485 |
+
"hop_length = 128 # @param {\"type\":\"slider\",\"min\":8,\"max\":512,\"step\":8}\n",
|
| 486 |
+
"# @markdown * Радиус фильтра\n",
|
| 487 |
+
"filter_radius = 3 # @param {\"type\":\"slider\",\"min\":1,\"max\":7,\"step\":1}\n",
|
| 488 |
+
"# @markdown * Соотношение огибающих громкости\n",
|
| 489 |
+
"rms = 0.25 # @param {\"type\":\"slider\",\"min\":0,\"max\":1,\"step\":0.01}\n",
|
| 490 |
+
"# @markdown * Защита согласных\n",
|
| 491 |
+
"protect = 0.33 # @param {\"type\":\"slider\",\"min\":0,\"max\":0.5,\"step\":0.01}\n",
|
| 492 |
+
"# @markdown ---\n",
|
| 493 |
+
"#@markdown ### Дополнительные настройки\n",
|
| 494 |
+
"# @markdown * Минимальная частота F0\n",
|
| 495 |
+
"f0_min = 50 # @param {type:\"integer\"}\n",
|
| 496 |
+
"# @markdown * Максимальная частота F0\n",
|
| 497 |
+
"f0_max = 1100 # @param {type:\"integer\"}\n",
|
| 498 |
+
"# @markdown ---\n",
|
| 499 |
+
"#@markdown ### Выходные данные\n",
|
| 500 |
+
"#@markdown * Формат:\n",
|
| 501 |
+
"output_format = \"mp3\" # @param [\"mp3\", \"wav\", \"flac\", \"ogg\", \"opus\", \"m4a\", \"aac\", \"aiff\"]\n",
|
| 502 |
+
"# @markdown * Имя выходного файла:\n",
|
| 503 |
+
"output_name = \"F0METHOD_PITCH_(MODEL)_NAME\" # @param {type:\"string\"}\n",
|
| 504 |
+
"#@markdown * Путь к выходной папке:\n",
|
| 505 |
+
"output_dir = \"/content/vbach_output\" # @param {\"type\":\"string\",\"placeholder\":\"/путь/к/папке\"}\n",
|
| 506 |
+
"\n",
|
| 507 |
+
"\n",
|
| 508 |
+
"\n",
|
| 509 |
+
"%cd $mvsepless_dir\n",
|
| 510 |
+
"\n",
|
| 511 |
+
"cmd = [\n",
|
| 512 |
+
" \"python\",\n",
|
| 513 |
+
" \"mvsepless/vbach_infer.py\",\n",
|
| 514 |
+
" f\"--input \\\"{input_path}\\\"\",\n",
|
| 515 |
+
" f\"--output_dir \\\"{output_dir}\\\"\",\n",
|
| 516 |
+
" f\"--model_name \\\"{voicemodel_name}\\\"\",\n",
|
| 517 |
+
" f\"--output_format \\\"{output_format}\\\"\",\n",
|
| 518 |
+
" f\"--index_rate {index_rate}\",\n",
|
| 519 |
+
" f\"--output_name \\\"{output_name}\\\"\",\n",
|
| 520 |
+
" \"--format_name\",\n",
|
| 521 |
+
" f\"--stereo_mode {stereo_mode}\",\n",
|
| 522 |
+
" f\"--method_pitch {method_pitch}\",\n",
|
| 523 |
+
" f\"--pitch {pitch}\",\n",
|
| 524 |
+
" f\"--hop_length {hop_length}\",\n",
|
| 525 |
+
" f\"--filter_radius {filter_radius}\",\n",
|
| 526 |
+
" f\"--rms {rms}\",\n",
|
| 527 |
+
" f\"--protect {protect}\",\n",
|
| 528 |
+
" f\"--f0_min {f0_min}\",\n",
|
| 529 |
+
" f\"--f0_max {f0_max}\"\n",
|
| 530 |
+
"]\n",
|
| 531 |
+
"\n",
|
| 532 |
+
"!{\" \".join(cmd)}"
|
| 533 |
+
]
|
| 534 |
+
}
|
| 535 |
+
],
|
| 536 |
+
"metadata": {
|
| 537 |
+
"accelerator": "GPU",
|
| 538 |
+
"colab": {
|
| 539 |
+
"gpuType": "T4",
|
| 540 |
+
"provenance": [],
|
| 541 |
+
"collapsed_sections": [
|
| 542 |
+
"ydA_93K1Yt4D",
|
| 543 |
+
"H24RtVB1YlE0",
|
| 544 |
+
"VaGl6jKVYZfU",
|
| 545 |
+
"4GSGHM4rYSVp"
|
| 546 |
+
]
|
| 547 |
+
},
|
| 548 |
+
"kernelspec": {
|
| 549 |
+
"display_name": "Python 3",
|
| 550 |
+
"name": "python3"
|
| 551 |
+
},
|
| 552 |
+
"language_info": {
|
| 553 |
+
"name": "python"
|
| 554 |
+
}
|
| 555 |
+
},
|
| 556 |
+
"nbformat": 4,
|
| 557 |
+
"nbformat_minor": 0
|
| 558 |
+
}
|