Spaces:
Running
Running
Update app.py
Browse files
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 |
-
|
| 419 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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,
|
| 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 |
|