noblebarkrr commited on
Commit
ffc4a75
·
verified ·
1 Parent(s): 4a26913

Upload MVSepLess_Epsilon_Colab.ipynb

Browse files
Files changed (1) hide show
  1. 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
+ }