Politrees commited on
Commit
ce5eee2
·
verified ·
1 Parent(s): 635b9df

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -31
app.py CHANGED
@@ -141,22 +141,23 @@ def prepare_output_dir(input_file, output_dir):
141
  raise RuntimeError(f"Failed to prepare output directory {out_dir}: {e}")
142
  return out_dir
143
 
144
- def rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem):
145
  base_name = os.path.splitext(os.path.basename(audio))[0]
146
  stems = {
147
- "Vocals": vocals_stem.replace("{base_name}", base_name),
148
- "Instrumental": instrumental_stem.replace("{base_name}", base_name),
149
- "Drums": drums_stem.replace("{base_name}", base_name),
150
- "Bass": bass_stem.replace("{base_name}", base_name),
151
- "Other": other_stem.replace("{base_name}", base_name),
152
- "Guitar": guitar_stem.replace("{base_name}", base_name),
153
- "Piano": piano_stem.replace("{base_name}", base_name),
154
  }
155
  return stems
156
 
 
157
  def roformer_separator(audio, model_key, seg_size, override_seg_size, overlap, pitch_shift, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
158
  """Separate audio using Roformer model."""
159
- stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem)
160
  print_message(audio, model_key)
161
  model = ROFORMER_MODELS[model_key]
162
  try:
@@ -192,7 +193,7 @@ def roformer_separator(audio, model_key, seg_size, override_seg_size, overlap, p
192
 
193
  def mdx23c_separator(audio, model, seg_size, override_seg_size, overlap, pitch_shift, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
194
  """Separate audio using MDX23C model."""
195
- stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem)
196
  print_message(audio, model)
197
  try:
198
  out_dir = prepare_output_dir(audio, out_dir)
@@ -227,7 +228,7 @@ def mdx23c_separator(audio, model, seg_size, override_seg_size, overlap, pitch_s
227
 
228
  def mdx_separator(audio, model, hop_length, seg_size, overlap, denoise, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
229
  """Separate audio using MDX-NET model."""
230
- stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem)
231
  print_message(audio, model)
232
  try:
233
  out_dir = prepare_output_dir(audio, out_dir)
@@ -262,7 +263,7 @@ def mdx_separator(audio, model, hop_length, seg_size, overlap, denoise, model_di
262
 
263
  def vr_separator(audio, model, window_size, aggression, tta, post_process, post_process_threshold, high_end_process, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
264
  """Separate audio using VR ARCH model."""
265
- stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem)
266
  print_message(audio, model)
267
  try:
268
  out_dir = prepare_output_dir(audio, out_dir)
@@ -299,7 +300,7 @@ def vr_separator(audio, model, window_size, aggression, tta, post_process, post_
299
 
300
  def demucs_separator(audio, model, seg_size, shifts, overlap, segments_enabled, model_dir, out_dir, out_format, norm_thresh, amp_thresh, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
301
  """Separate audio using Demucs model."""
302
- stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem)
303
  print_message(audio, model)
304
  try:
305
  out_dir = prepare_output_dir(audio, out_dir)
@@ -327,7 +328,7 @@ def demucs_separator(audio, model, seg_size, shifts, overlap, segments_enabled,
327
  print(f"Separation complete!\nResults: {', '.join(separation)}")
328
 
329
  stems = [os.path.join(out_dir, file_name) for file_name in separation]
330
-
331
  if model == "htdemucs_6s.yaml":
332
  return stems[0], stems[1], stems[2], stems[3], stems[4], stems[5]
333
  else:
@@ -335,12 +336,7 @@ def demucs_separator(audio, model, seg_size, shifts, overlap, segments_enabled,
335
  except Exception as e:
336
  raise RuntimeError(f"Demucs separation failed: {e}") from e
337
 
338
- def update_stems(model):
339
- if model == "htdemucs_6s.yaml":
340
- return gr.update(visible=True)
341
- else:
342
- return gr.update(visible=False)
343
-
344
  with gr.Blocks(
345
  title="🎵 PolUVR 🎵",
346
  css="footer{display:none !important}",
@@ -437,7 +433,6 @@ with gr.Blocks(
437
  with gr.Row():
438
  demucs_stem1 = gr.Audio(label="Stem 1", type="filepath", interactive=False)
439
  demucs_stem2 = gr.Audio(label="Stem 2", type="filepath", interactive=False)
440
- with gr.Row():
441
  demucs_stem3 = gr.Audio(label="Stem 3", type="filepath", interactive=False)
442
  demucs_stem4 = gr.Audio(label="Stem 4", type="filepath", interactive=False)
443
  with gr.Row(visible=False) as stem6:
@@ -453,22 +448,26 @@ with gr.Blocks(
453
  output_format = gr.Dropdown(value="wav", choices=["wav", "flac", "mp3"], label="Output Format", info="The format of the output audio file.")
454
  with gr.Row():
455
  norm_threshold = gr.Slider(minimum=0.1, maximum=1, step=0.1, value=0.9, label="Normalization threshold", info="The threshold for audio normalization.")
456
- amp_threshold = gr.Slider(minimum=0.0, maximum=1, step=0.1, value=0.0, label="Amplification threshold", info="The threshold for audio amplification.")
457
  with gr.Row():
458
  batch_size = gr.Slider(minimum=1, maximum=16, step=1, value=1, label="Batch Size", info="Larger consumes more RAM but may process slightly faster.")
459
 
460
  with gr.Accordion("Rename Stems", open=False):
461
- gr.HTML("<h3> `{base_name}` - input file name </h3>")
 
 
 
 
462
  with gr.Row():
463
- vocals_stem = gr.Textbox(value="{base_name}_(Vocals)", label="Vocals Stem", placeholder="{base_name}_(Vocals)")
464
- instrumental_stem = gr.Textbox(value="{base_name}_(Instrumental)", label="Instrumental Stem", placeholder="{base_name}_(Instrumental)")
465
- other_stem = gr.Textbox(value="{base_name}_(Other)", label="Other Stem", placeholder="{base_name}_(Other)")
466
  with gr.Row():
467
- drums_stem = gr.Textbox(value="{base_name}_(Drums)", label="Drums Stem", placeholder="{base_name}_(Drums)")
468
- bass_stem = gr.Textbox(value="{base_name}_(Bass)", label="Bass Stem", placeholder="{base_name}_(Bass)")
469
  with gr.Row():
470
- guitar_stem = gr.Textbox(value="{base_name}_(Guitar)", label="Guitar Stem", placeholder="{base_name}_(Guitar)")
471
- piano_stem = gr.Textbox(value="{base_name}_(Piano)", label="Piano Stem", placeholder="{base_name}_(Piano)")
472
 
473
  demucs_model.change(update_stems, inputs=[demucs_model], outputs=stem6)
474
 
@@ -600,7 +599,7 @@ with gr.Blocks(
600
  )
601
 
602
  def main():
603
- app.launch(share=True, debug=True)
604
 
605
  if __name__ == "__main__":
606
  main()
 
141
  raise RuntimeError(f"Failed to prepare output directory {out_dir}: {e}")
142
  return out_dir
143
 
144
+ def rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, model):
145
  base_name = os.path.splitext(os.path.basename(audio))[0]
146
  stems = {
147
+ "Vocals": vocals_stem.replace("<IN>", base_name).replace("<SN>", "Vocals").replace("<MN>", model),
148
+ "Instrumental": instrumental_stem.replace("<IN>", base_name).replace("<SN>", "Instrumental").replace("<MN>", model),
149
+ "Drums": drums_stem.replace("<IN>", base_name).replace("<SN>", "Drums").replace("<MN>", model),
150
+ "Bass": bass_stem.replace("<IN>", base_name).replace("<SN>", "Bass").replace("<MN>", model),
151
+ "Other": other_stem.replace("<IN>", base_name).replace("<SN>", "Other").replace("<MN>", model),
152
+ "Guitar": guitar_stem.replace("<IN>", base_name).replace("<SN>", "Guitar").replace("<MN>", model),
153
+ "Piano": piano_stem.replace("<IN>", base_name).replace("<SN>", "Piano").replace("<MN>", model),
154
  }
155
  return stems
156
 
157
+ # Обновленные функции для сепарации
158
  def roformer_separator(audio, model_key, seg_size, override_seg_size, overlap, pitch_shift, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
159
  """Separate audio using Roformer model."""
160
+ stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, model_key)
161
  print_message(audio, model_key)
162
  model = ROFORMER_MODELS[model_key]
163
  try:
 
193
 
194
  def mdx23c_separator(audio, model, seg_size, override_seg_size, overlap, pitch_shift, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
195
  """Separate audio using MDX23C model."""
196
+ stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, model)
197
  print_message(audio, model)
198
  try:
199
  out_dir = prepare_output_dir(audio, out_dir)
 
228
 
229
  def mdx_separator(audio, model, hop_length, seg_size, overlap, denoise, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
230
  """Separate audio using MDX-NET model."""
231
+ stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, model)
232
  print_message(audio, model)
233
  try:
234
  out_dir = prepare_output_dir(audio, out_dir)
 
263
 
264
  def vr_separator(audio, model, window_size, aggression, tta, post_process, post_process_threshold, high_end_process, model_dir, out_dir, out_format, norm_thresh, amp_thresh, batch_size, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
265
  """Separate audio using VR ARCH model."""
266
+ stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, model)
267
  print_message(audio, model)
268
  try:
269
  out_dir = prepare_output_dir(audio, out_dir)
 
300
 
301
  def demucs_separator(audio, model, seg_size, shifts, overlap, segments_enabled, model_dir, out_dir, out_format, norm_thresh, amp_thresh, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, progress=gr.Progress(track_tqdm=True)):
302
  """Separate audio using Demucs model."""
303
+ stemname = rename_stems(audio, vocals_stem, instrumental_stem, other_stem, drums_stem, bass_stem, guitar_stem, piano_stem, model)
304
  print_message(audio, model)
305
  try:
306
  out_dir = prepare_output_dir(audio, out_dir)
 
328
  print(f"Separation complete!\nResults: {', '.join(separation)}")
329
 
330
  stems = [os.path.join(out_dir, file_name) for file_name in separation]
331
+
332
  if model == "htdemucs_6s.yaml":
333
  return stems[0], stems[1], stems[2], stems[3], stems[4], stems[5]
334
  else:
 
336
  except Exception as e:
337
  raise RuntimeError(f"Demucs separation failed: {e}") from e
338
 
339
+ # Обновленный интерфейс
 
 
 
 
 
340
  with gr.Blocks(
341
  title="🎵 PolUVR 🎵",
342
  css="footer{display:none !important}",
 
433
  with gr.Row():
434
  demucs_stem1 = gr.Audio(label="Stem 1", type="filepath", interactive=False)
435
  demucs_stem2 = gr.Audio(label="Stem 2", type="filepath", interactive=False)
 
436
  demucs_stem3 = gr.Audio(label="Stem 3", type="filepath", interactive=False)
437
  demucs_stem4 = gr.Audio(label="Stem 4", type="filepath", interactive=False)
438
  with gr.Row(visible=False) as stem6:
 
448
  output_format = gr.Dropdown(value="wav", choices=["wav", "flac", "mp3"], label="Output Format", info="The format of the output audio file.")
449
  with gr.Row():
450
  norm_threshold = gr.Slider(minimum=0.1, maximum=1, step=0.1, value=0.9, label="Normalization threshold", info="The threshold for audio normalization.")
451
+ amp_threshold = gr.Slider(minimum=0.1, maximum=1, step=0.1, value=0.0, label="Amplification threshold", info="The threshold for audio amplification.")
452
  with gr.Row():
453
  batch_size = gr.Slider(minimum=1, maximum=16, step=1, value=1, label="Batch Size", info="Larger consumes more RAM but may process slightly faster.")
454
 
455
  with gr.Accordion("Rename Stems", open=False):
456
+ gr.HTML("<h3>Input File Name: <code><IN></code> - Automatic detection</h3>")
457
+ gr.HTML("<h3>Stem Name: <code><SN></code> - Automatic detection (e.g., Vocals, Instrumental)</h3>")
458
+ gr.HTML("<h3>Model Name: <code><MN></code> - Automatic detection (e.g., BS-Roformer-Viperx-1297)</h3>")
459
+ gr.HTML("<h3>Usage Example: <code><IN>_<SN>_<MN></code></h3>")
460
+ gr.HTML("<h3>Output File Name: <code>Music_(Vocals)_BS-Roformer-Viperx-1297</code></h3>")
461
  with gr.Row():
462
+ vocals_stem = gr.Textbox(value="<IN>_(<SN>)_<MN>", label="Vocals Stem", info="Пример вывода: Music_(Vocals)_BS-Roformer-Viperx-1297", placeholder="<IN>_(<SN>)_<MN>")
463
+ instrumental_stem = gr.Textbox(value="<IN>_(<SN>)_<MN>", label="Instrumental Stem", info="Пример вывода: Music_(Instrumental)_BS-Roformer-Viperx-1297", placeholder="<IN>_(<SN>)_<MN>")
464
+ other_stem = gr.Textbox(value="<IN>_(<SN>)_<MN>", label="Other Stem", info="Пример вывода: Music_(Other)_BS-Roformer-Viperx-1297", placeholder="<IN>_(<SN>)_<MN>")
465
  with gr.Row():
466
+ drums_stem = gr.Textbox(value="<IN>_(<SN>)_<MN>", label="Drums Stem", info="Пример вывода: Music_(Drums)_BS-Roformer-Viperx-1297", placeholder="<IN>_(<SN>)_<MN>")
467
+ bass_stem = gr.Textbox(value="<IN>_(<SN>)_<MN>", label="Bass Stem", info="Пример вывода: Music_(Bass)_BS-Roformer-Viperx-1297", placeholder="<IN>_(<SN>)_<MN>")
468
  with gr.Row():
469
+ guitar_stem = gr.Textbox(value="<IN>_(<SN>)_<MN>", label="Guitar Stem", info="Пример вывода: Music_(Guitar)_BS-Roformer-Viperx-1297", placeholder="<IN>_(<SN>)_<MN>")
470
+ piano_stem = gr.Textbox(value="<IN>_(<SN>)_<MN>", label="Piano Stem", info="Пример вывода: Music_(Piano)_BS-Roformer-Viperx-1297", placeholder="<IN>_(<SN>)_<MN>")
471
 
472
  demucs_model.change(update_stems, inputs=[demucs_model], outputs=stem6)
473
 
 
599
  )
600
 
601
  def main():
602
+ app.launch(share=True)
603
 
604
  if __name__ == "__main__":
605
  main()