Update src/webui.py
Browse files- src/webui.py +36 -36
src/webui.py
CHANGED
@@ -155,11 +155,11 @@ def show_hop_slider(pitch_detection_algo):
|
|
155 |
|
156 |
|
157 |
if __name__ == '__main__':
|
158 |
-
parser = ArgumentParser(description='
|
159 |
-
parser.add_argument("--share", action="store_true", dest="share_enabled", default=False, help="
|
160 |
-
parser.add_argument("--listen", action="store_true", default=False, help="
|
161 |
-
parser.add_argument('--listen-host', type=str, help='
|
162 |
-
parser.add_argument('--listen-port', type=int, help='
|
163 |
args = parser.parse_args()
|
164 |
|
165 |
voice_models = get_current_models(rvc_models_dir)
|
@@ -173,12 +173,12 @@ if __name__ == '__main__':
|
|
173 |
with gr.Accordion('Main Options'):
|
174 |
with gr.Row():
|
175 |
with gr.Column():
|
176 |
-
rvc_model = gr.Dropdown(voice_models, label='Voice Models', info='
|
177 |
ref_btn = gr.Button('Refresh Models 🔁', variant='primary')
|
178 |
|
179 |
with gr.Column() as yt_link_col:
|
180 |
-
song_input = gr.Text(label='Song input', info='
|
181 |
-
|
182 |
|
183 |
with gr.Column(visible=False) as file_upload_col:
|
184 |
local_file = gr.File(label='Audio file')
|
@@ -187,22 +187,22 @@ if __name__ == '__main__':
|
|
187 |
song_input_file.upload(process_file_upload, inputs=[song_input_file], outputs=[local_file, song_input])
|
188 |
|
189 |
with gr.Column():
|
190 |
-
pitch = gr.Slider(-3, 3, value=0, step=1, label='Pitch Change (Vocals ONLY)', info='
|
191 |
-
pitch_all = gr.Slider(-12, 12, value=0, step=1, label='Overall Pitch Change', info='
|
192 |
show_file_upload_button.click(swap_visibility, outputs=[file_upload_col, yt_link_col, song_input, local_file])
|
193 |
show_yt_link_button.click(swap_visibility, outputs=[yt_link_col, file_upload_col, song_input, local_file])
|
194 |
|
195 |
with gr.Accordion('Voice conversion options', open=False):
|
196 |
with gr.Row():
|
197 |
-
index_rate = gr.Slider(0, 1, value=0.5, label='Index Rate', info="
|
198 |
-
filter_radius = gr.Slider(0, 7, value=3, step=1, label='Filter radius', info='
|
199 |
-
rms_mix_rate = gr.Slider(0, 1, value=0.25, label='RMS mix rate', info="
|
200 |
-
protect = gr.Slider(0, 0.5, value=0.33, label='Protect rate', info='
|
201 |
with gr.Column():
|
202 |
-
f0_method = gr.Dropdown(['rmvpe', 'mangio-crepe'], value='rmvpe', label='Pitch detection algorithm', info='
|
203 |
-
crepe_hop_length = gr.Slider(32, 320, value=128, step=1, visible=False, label='Crepe hop length', info='
|
204 |
f0_method.change(show_hop_slider, inputs=f0_method, outputs=crepe_hop_length)
|
205 |
-
keep_files = gr.Checkbox(label='Keep intermediate files', info='
|
206 |
|
207 |
with gr.Accordion('Audio mixing options', open=False):
|
208 |
gr.Markdown('### Volume Change (decibels)')
|
@@ -213,13 +213,13 @@ if __name__ == '__main__':
|
|
213 |
|
214 |
gr.Markdown('### Reverb Control on AI Vocals')
|
215 |
with gr.Row():
|
216 |
-
reverb_rm_size = gr.Slider(0, 1, value=0.15, label='Room size', info='
|
217 |
-
reverb_wet = gr.Slider(0, 1, value=0.2, label='Wetness level', info='
|
218 |
-
reverb_dry = gr.Slider(0, 1, value=0.8, label='Dryness level', info='
|
219 |
-
reverb_damping = gr.Slider(0, 1, value=0.7, label='Damping level', info='
|
220 |
|
221 |
gr.Markdown('### Audio Output Format')
|
222 |
-
output_format = gr.Dropdown(['mp3', 'wav'], value='mp3', label='Output file type', info='mp3:
|
223 |
|
224 |
with gr.Row():
|
225 |
clear_btn = gr.ClearButton(value='Clear', components=[song_input, rvc_model, keep_files, local_file])
|
@@ -244,8 +244,8 @@ if __name__ == '__main__':
|
|
244 |
|
245 |
with gr.Tab('From HuggingFace/Pixeldrain URL'):
|
246 |
with gr.Row():
|
247 |
-
model_zip_link = gr.Text(label='Download link to model', info='
|
248 |
-
model_name = gr.Text(label='Name your model', info='
|
249 |
|
250 |
with gr.Row():
|
251 |
download_btn = gr.Button('Download 🌐', variant='primary', scale=19)
|
@@ -257,8 +257,8 @@ if __name__ == '__main__':
|
|
257 |
gr.Examples(
|
258 |
[
|
259 |
['https://huggingface.co/phant0m4r/LiSA/resolve/main/LiSA.zip', 'Lisa'],
|
260 |
-
['https://pixeldrain.com/u/3tJmABXA', 'Gura'],
|
261 |
-
['https://pixeldrain.com/u/3Uf84csp', 'Yandex Alisa'],
|
262 |
['https://huggingface.co/Kit-Lemonfoot/kitlemonfoot_rvc_models/resolve/main/AZKi%20(Hybrid).zip', 'Azki']
|
263 |
],
|
264 |
[model_zip_link, model_name],
|
@@ -268,11 +268,11 @@ if __name__ == '__main__':
|
|
268 |
|
269 |
with gr.Tab('From Public Index'):
|
270 |
|
271 |
-
gr.Markdown('##
|
272 |
-
gr.Markdown('-
|
273 |
-
gr.Markdown('-
|
274 |
-
gr.Markdown('-
|
275 |
-
gr.Markdown('-
|
276 |
|
277 |
with gr.Row():
|
278 |
pub_zip_link = gr.Text(label='Download link to model')
|
@@ -295,11 +295,11 @@ if __name__ == '__main__':
|
|
295 |
|
296 |
# Upload tab
|
297 |
with gr.Tab('Upload model'):
|
298 |
-
gr.Markdown('##
|
299 |
-
gr.Markdown('-
|
300 |
-
gr.Markdown('-
|
301 |
-
gr.Markdown('-
|
302 |
-
gr.Markdown('-
|
303 |
|
304 |
with gr.Row():
|
305 |
with gr.Column():
|
|
|
155 |
|
156 |
|
157 |
if __name__ == '__main__':
|
158 |
+
parser = ArgumentParser(description='Создайте AI кавер-версию в каталоге song_output/id.', add_help=True)
|
159 |
+
parser.add_argument("--share", action="store_true", dest="share_enabled", default=False, help="Включить общий доступ")
|
160 |
+
parser.add_argument("--listen", action="store_true", default=False, help="Сделайте WebUI доступным из вашей локальной сети.")
|
161 |
+
parser.add_argument('--listen-host', type=str, help='Имя хоста, которое будет использовать сервер.')
|
162 |
+
parser.add_argument('--listen-port', type=int, help='Порт прослушивания, который будет использовать сервер.')
|
163 |
args = parser.parse_args()
|
164 |
|
165 |
voice_models = get_current_models(rvc_models_dir)
|
|
|
173 |
with gr.Accordion('Main Options'):
|
174 |
with gr.Row():
|
175 |
with gr.Column():
|
176 |
+
rvc_model = gr.Dropdown(voice_models, label='Voice Models', info='Папка моделей «AICoverGen --> rvc_models». После добавления новых моделей в эту папку нажмите кнопку «Обновить».')
|
177 |
ref_btn = gr.Button('Refresh Models 🔁', variant='primary')
|
178 |
|
179 |
with gr.Column() as yt_link_col:
|
180 |
+
song_input = gr.Text(label='Song input', info='Ссылка на песню на YouTube или полный путь к локальному файлу. Для загрузки файла нажмите кнопку ниже. Пример: https://www.youtube.com/watch?v=M-mtdN6R3bQ')
|
181 |
+
show_file_upload_button = gr.Button('Вместо этого загрузите файл')
|
182 |
|
183 |
with gr.Column(visible=False) as file_upload_col:
|
184 |
local_file = gr.File(label='Audio file')
|
|
|
187 |
song_input_file.upload(process_file_upload, inputs=[song_input_file], outputs=[local_file, song_input])
|
188 |
|
189 |
with gr.Column():
|
190 |
+
pitch = gr.Slider(-3, 3, value=0, step=1, label='Pitch Change (Vocals ONLY)', info='Обычно 1 используется для преобразования мужского голоса в женский, а -1 наоборот. (Октавы)')
|
191 |
+
pitch_all = gr.Slider(-12, 12, value=0, step=1, label='Overall Pitch Change', info='Изменяет высоту/тональность вокала и инструментальной партии одновременно. Изменение этого параметра немного снижает качество звука. (Полутона)')
|
192 |
show_file_upload_button.click(swap_visibility, outputs=[file_upload_col, yt_link_col, song_input, local_file])
|
193 |
show_yt_link_button.click(swap_visibility, outputs=[yt_link_col, file_upload_col, song_input, local_file])
|
194 |
|
195 |
with gr.Accordion('Voice conversion options', open=False):
|
196 |
with gr.Row():
|
197 |
+
index_rate = gr.Slider(0, 1, value=0.5, label='Index Rate', info="Управляет тем, какую часть акцента голоса AI следует сохранить в вокале.")
|
198 |
+
filter_radius = gr.Slider(0, 7, value=3, step=1, label='Filter radius', info='Если >=3: применить медианную фильтрацию к собранным результатам основного тона. Может уменьшить одышку')
|
199 |
+
rms_mix_rate = gr.Slider(0, 1, value=0.25, label='RMS mix rate', info="Управляйте тем, насколько имитировать громкость исходного вокала (0) или фиксированную громкость (1).")
|
200 |
+
protect = gr.Slider(0, 0.5, value=0.33, label='Protect rate', info='Защищайте глухие согласные и звуки дыхания. Установите значение 0,5, чтобы отключить.')
|
201 |
with gr.Column():
|
202 |
+
f0_method = gr.Dropdown(['rmvpe', 'mangio-crepe'], value='rmvpe', label='Pitch detection algorithm', info='Лучший вариант — rmvpe (четкость вокала), затем mangio-crepe (более плавный вокал).')
|
203 |
+
crepe_hop_length = gr.Slider(32, 320, value=128, step=1, visible=False, label='Crepe hop length', info='Более низкие значения приводят к более длительному преобразованию и более высокому риску прерывания голоса, но к большей точности высоты тона.')
|
204 |
f0_method.change(show_hop_slider, inputs=f0_method, outputs=crepe_hop_length)
|
205 |
+
keep_files = gr.Checkbox(label='Keep intermediate files', info='Сохраняйте все сгенерированные аудиофайлы в каталоге song_output/id, например. Изолированный вокал/инструментал. Оставьте флажок снятым, чтобы сэкономить место')
|
206 |
|
207 |
with gr.Accordion('Audio mixing options', open=False):
|
208 |
gr.Markdown('### Volume Change (decibels)')
|
|
|
213 |
|
214 |
gr.Markdown('### Reverb Control on AI Vocals')
|
215 |
with gr.Row():
|
216 |
+
reverb_rm_size = gr.Slider(0, 1, value=0.15, label='Room size', info='Чем больше комната, тем дольше время реверберации.')
|
217 |
+
reverb_wet = gr.Slider(0, 1, value=0.2, label='Wetness level', info='Уровень AI-вокала с реверберацией')
|
218 |
+
reverb_dry = gr.Slider(0, 1, value=0.8, label='Dryness level', info='Уровень AI-вокала без реверберации')
|
219 |
+
reverb_damping = gr.Slider(0, 1, value=0.7, label='Damping level', info='Поглощение высоких частот в реверберации')
|
220 |
|
221 |
gr.Markdown('### Audio Output Format')
|
222 |
+
output_format = gr.Dropdown(['mp3', 'wav'], value='mp3', label='Output file type', info='mp3: небол��шой размер файла, достойное качество. wav: большой размер файла, лучшее качество.')
|
223 |
|
224 |
with gr.Row():
|
225 |
clear_btn = gr.ClearButton(value='Clear', components=[song_input, rvc_model, keep_files, local_file])
|
|
|
244 |
|
245 |
with gr.Tab('From HuggingFace/Pixeldrain URL'):
|
246 |
with gr.Row():
|
247 |
+
model_zip_link = gr.Text(label='Download link to model', info='Это должен быть ZIP-файл, содержащий файл модели .pth и необязательный файл .index.')
|
248 |
+
model_name = gr.Text(label='Name your model', info='Дайте вашей новой модели уникальное имя среди других ваших моделей голоса.')
|
249 |
|
250 |
with gr.Row():
|
251 |
download_btn = gr.Button('Download 🌐', variant='primary', scale=19)
|
|
|
257 |
gr.Examples(
|
258 |
[
|
259 |
['https://huggingface.co/phant0m4r/LiSA/resolve/main/LiSA.zip', 'Lisa'],
|
260 |
+
['https://pixeldrain.com/u/3tJmABXA', '- Gura'],
|
261 |
+
['https://pixeldrain.com/u/3Uf84csp', '- Yandex Alisa'],
|
262 |
['https://huggingface.co/Kit-Lemonfoot/kitlemonfoot_rvc_models/resolve/main/AZKi%20(Hybrid).zip', 'Azki']
|
263 |
],
|
264 |
[model_zip_link, model_name],
|
|
|
268 |
|
269 |
with gr.Tab('From Public Index'):
|
270 |
|
271 |
+
gr.Markdown('## Как использовать')
|
272 |
+
gr.Markdown('- Нажмите «Инициализировать таблицу общедоступных моделей»')
|
273 |
+
gr.Markdown('- Фильтрация моделей по тегам или строке поиска')
|
274 |
+
gr.Markdown('- Выберите строку для автозаполнения ссылки для скачивания и названия модели')
|
275 |
+
gr.Markdown('- Нажмите Загрузить')
|
276 |
|
277 |
with gr.Row():
|
278 |
pub_zip_link = gr.Text(label='Download link to model')
|
|
|
295 |
|
296 |
# Upload tab
|
297 |
with gr.Tab('Upload model'):
|
298 |
+
gr.Markdown('## Загрузить локально обученную модель RVC v2 и индексный файл')
|
299 |
+
gr.Markdown('- Найти файл модели (папка весов) и дополнительный индексный файл (папка журналов/[имя])')
|
300 |
+
gr.Markdown('- Сжать файлы в zip-файл')
|
301 |
+
gr.Markdown('- Загрузите zip-файл и укажите уникальное имя для голоса')
|
302 |
+
gr.Markdown('- Нажмите Загрузить модель')
|
303 |
|
304 |
with gr.Row():
|
305 |
with gr.Column():
|