ASesYusuf1 commited on
Commit
e0ac733
Β·
verified Β·
1 Parent(s): 8568202

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -7
app.py CHANGED
@@ -412,11 +412,18 @@ def roformer_separator(audio, model_key, seg_size, override_seg_size, overlap, p
412
  progress(0.7, desc="Separating audio...")
413
  separation = separator.separate(audio)
414
  stems = [os.path.join(output_dir, file_name) for file_name in separation]
 
415
  if exclude_stems.strip():
416
  excluded = [s.strip().lower() for s in exclude_stems.split(',')]
417
  filtered_stems = [stem for stem in stems if not any(ex in os.path.basename(stem).lower() for ex in excluded)]
418
- return filtered_stems[0] if filtered_stems else None, filtered_stems[1] if len(filtered_stems) > 1 else None
419
- return stems[0], stems[1] if len(stems) > 1 else None
 
 
 
 
 
 
420
  except Exception as e:
421
  logger.error(f"Separation error: {e}")
422
  raise RuntimeError(f"Separation error: {e}")
@@ -606,7 +613,15 @@ def auto_ensemble_process(audio, model_keys, seg_size=64, overlap=0.1, out_forma
606
  progress(1.0, desc="Ensemble completed")
607
  elapsed = time.time() - start_time
608
  logger.info(f"Total processing time: {elapsed:.2f}s")
609
- return output_file, f"Ensemble completed with {ensemble_method}, excluded: {exclude_stems if exclude_stems else 'None'}, {len(model_keys)} models in {elapsed:.2f}s"
 
 
 
 
 
 
 
 
610
  except Exception as e:
611
  logger.error(f"Ensemble processing error: {e}")
612
  if "numpy" in str(e).lower() or "copy" in str(e).lower():
@@ -683,6 +698,7 @@ def create_interface():
683
  with gr.Row():
684
  roformer_stem1 = gr.Audio(label="🎸 Stem 1", type="filepath", interactive=False)
685
  roformer_stem2 = gr.Audio(label="πŸ₯ Stem 2", type="filepath", interactive=False)
 
686
  with gr.Tab("🎚️ Auto Ensemble"):
687
  with gr.Group(elem_classes="dubbing-theme"):
688
  gr.Markdown("### Ensemble Processing")
@@ -705,7 +721,8 @@ def create_interface():
705
  ensemble_weights = gr.Textbox(label="βš–οΈ Weights", placeholder="e.g., 1.0, 1.0, 1.0 (comma-separated)", interactive=True)
706
  ensemble_button = gr.Button("πŸŽ›οΈ Run Ensemble!", variant="primary")
707
  ensemble_output = gr.Audio(label="🎢 Ensemble Result", type="filepath", interactive=False)
708
- ensemble_status = gr.Textbox(label="πŸ“’ Status", interactive=False)
 
709
  gr.HTML("<div class='footer'>Powered by Audio-Separator 🌟🎢 | Made with ❀️</div>")
710
  roformer_category.change(update_roformer_models, inputs=[roformer_category], outputs=[roformer_model])
711
  download_roformer.click(
@@ -720,7 +737,7 @@ def create_interface():
720
  roformer_overlap, roformer_pitch_shift, model_file_dir, output_dir,
721
  output_format, norm_threshold, amp_threshold, batch_size, roformer_exclude_stems
722
  ],
723
- outputs=[roformer_stem1, roformer_stem2]
724
  )
725
  ensemble_category.change(update_ensemble_models, inputs=[ensemble_category], outputs=[ensemble_models])
726
  download_ensemble.click(
@@ -732,11 +749,11 @@ def create_interface():
732
  fn=auto_ensemble_process,
733
  inputs=[
734
  ensemble_audio, ensemble_models, ensemble_seg_size, ensemble_overlap,
735
- output_format, ensemble_use_tta, model_file_dir, output_dir,
736
  norm_threshold, amp_threshold, batch_size, ensemble_method,
737
  ensemble_exclude_stems, ensemble_weights
738
  ],
739
- outputs=[ensemble_output, ensemble_status]
740
  )
741
  return app
742
 
 
412
  progress(0.7, desc="Separating audio...")
413
  separation = separator.separate(audio)
414
  stems = [os.path.join(output_dir, file_name) for file_name in separation]
415
+ file_list = []
416
  if exclude_stems.strip():
417
  excluded = [s.strip().lower() for s in exclude_stems.split(',')]
418
  filtered_stems = [stem for stem in stems if not any(ex in os.path.basename(stem).lower() for ex in excluded)]
419
+ file_list = filtered_stems
420
+ stem1 = filtered_stems[0] if filtered_stems else None
421
+ stem2 = filtered_stems[1] if len(filtered_stems) > 1 else None
422
+ else:
423
+ file_list = stems
424
+ stem1 = stems[0]
425
+ stem2 = stems[1] if len(stems) > 1 else None
426
+ return stem1, stem2, file_list
427
  except Exception as e:
428
  logger.error(f"Separation error: {e}")
429
  raise RuntimeError(f"Separation error: {e}")
 
613
  progress(1.0, desc="Ensemble completed")
614
  elapsed = time.time() - start_time
615
  logger.info(f"Total processing time: {elapsed:.2f}s")
616
+ # Prepare file list for download
617
+ file_list = [output_file] + all_stems
618
+ # Create status message with download links
619
+ status = f"Ensemble completed with {ensemble_method}, excluded: {exclude_stems if exclude_stems else 'None'}, {len(model_keys)} models in {elapsed:.2f}s<br>Download files:<ul>"
620
+ for file in file_list:
621
+ file_name = os.path.basename(file)
622
+ status += f"<li><a href='file={file}' download>{file_name}</a></li>"
623
+ status += "</ul>"
624
+ return output_file, status, file_list
625
  except Exception as e:
626
  logger.error(f"Ensemble processing error: {e}")
627
  if "numpy" in str(e).lower() or "copy" in str(e).lower():
 
698
  with gr.Row():
699
  roformer_stem1 = gr.Audio(label="🎸 Stem 1", type="filepath", interactive=False)
700
  roformer_stem2 = gr.Audio(label="πŸ₯ Stem 2", type="filepath", interactive=False)
701
+ roformer_files = gr.File(label="πŸ“₯ Download Stems", interactive=False)
702
  with gr.Tab("🎚️ Auto Ensemble"):
703
  with gr.Group(elem_classes="dubbing-theme"):
704
  gr.Markdown("### Ensemble Processing")
 
721
  ensemble_weights = gr.Textbox(label="βš–οΈ Weights", placeholder="e.g., 1.0, 1.0, 1.0 (comma-separated)", interactive=True)
722
  ensemble_button = gr.Button("πŸŽ›οΈ Run Ensemble!", variant="primary")
723
  ensemble_output = gr.Audio(label="🎢 Ensemble Result", type="filepath", interactive=False)
724
+ ensemble_status = gr.Textbox(label="πŸ“’ Status", interactive=False, render_markdown=True)
725
+ ensemble_files = gr.File(label="πŸ“₯ Download Ensemble and Stems", interactive=False)
726
  gr.HTML("<div class='footer'>Powered by Audio-Separator 🌟🎢 | Made with ❀️</div>")
727
  roformer_category.change(update_roformer_models, inputs=[roformer_category], outputs=[roformer_model])
728
  download_roformer.click(
 
737
  roformer_overlap, roformer_pitch_shift, model_file_dir, output_dir,
738
  output_format, norm_threshold, amp_threshold, batch_size, roformer_exclude_stems
739
  ],
740
+ outputs=[roformer_stem1, roformer_stem2, roformer_files]
741
  )
742
  ensemble_category.change(update_ensemble_models, inputs=[ensemble_category], outputs=[ensemble_models])
743
  download_ensemble.click(
 
749
  fn=auto_ensemble_process,
750
  inputs=[
751
  ensemble_audio, ensemble_models, ensemble_seg_size, ensemble_overlap,
752
+ output_format, ensemble_use_tta, model_dir, output_dir,
753
  norm_threshold, amp_threshold, batch_size, ensemble_method,
754
  ensemble_exclude_stems, ensemble_weights
755
  ],
756
+ outputs=[ensemble_output, ensemble_status, ensemble_files]
757
  )
758
  return app
759