jeysshon commited on
Commit
8a83ccf
·
verified ·
1 Parent(s): 758b5b4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +190 -1
app.py CHANGED
@@ -608,4 +608,193 @@ def setup_models():
608
  # Crear data.json con configuraciones
609
  create_data_json()
610
 
611
- logger.info("✅
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
608
  # Crear data.json con configuraciones
609
  create_data_json()
610
 
611
+ logger.info("✅ Modelos configurados")
612
+ return True
613
+
614
+ except Exception as e:
615
+ logger.error(f"❌ Error configurando modelos: {e}")
616
+ return False
617
+
618
+ def process_audio(audio_file, separation_mode, progress=gr.Progress()):
619
+ """Procesar audio con IA como r3gm"""
620
+ if audio_file is None:
621
+ return [], "⚠️ Sube un archivo de audio"
622
+
623
+ try:
624
+ # Verificar tamaño
625
+ file_size = os.path.getsize(audio_file) / (1024 * 1024)
626
+ if file_size > 100:
627
+ return [], f"❌ Archivo muy grande: {file_size:.1f}MB (máx 100MB)"
628
+
629
+ progress(0.1, desc="Configurando modelos de IA...")
630
+
631
+ # Crear directorios y configurar modelos
632
+ create_directories()
633
+ if not setup_models():
634
+ return [], "❌ Error configurando modelos"
635
+
636
+ progress(0.3, desc="Procesando con IA...")
637
+
638
+ # Seleccionar modelos según modo
639
+ if separation_mode == "vocals_ultra":
640
+ models = ["UVR-MDX-NET-Voc_FT.onnx"]
641
+ elif separation_mode == "complete_4stems":
642
+ models = ["UVR-MDX-NET-Voc_FT.onnx", "UVR-MDX-NET-Kag_2.onnx", "Kim_Bass_1.onnx", "UVR-MDX-NET-Inst_HQ_4.onnx"]
643
+ elif separation_mode == "piano_only":
644
+ models = ["Kim_Piano_1.onnx"]
645
+ elif separation_mode == "drums_only":
646
+ models = ["UVR-MDX-NET-Kag_2.onnx"]
647
+ elif separation_mode == "bass_only":
648
+ models = ["Kim_Bass_1.onnx"]
649
+ elif separation_mode == "guitar_only":
650
+ models = ["UVR-MDX-NET-Kag_3.onnx"]
651
+ elif separation_mode == "karaoke":
652
+ models = ["UVR_MDXNET_KARA_2.onnx"]
653
+ elif separation_mode == "dereverb":
654
+ models = ["Reverb_HQ_By_FoxJoy.onnx"]
655
+ elif separation_mode == "professional":
656
+ models = ["UVR-MDX-NET-Voc_FT.onnx", "UVR_MDXNET_KARA_2.onnx", "Reverb_HQ_By_FoxJoy.onnx"]
657
+ else:
658
+ models = ["UVR-MDX-NET-Voc_FT.onnx"] # Default
659
+
660
+ progress(0.5, desc=f"Separando con {len(models)} modelo(s) de IA...")
661
+
662
+ # Procesar con modelos seleccionados
663
+ result_files = separate_multi_instrument(audio_file, models)
664
+
665
+ progress(1.0, desc="¡Completado!")
666
+
667
+ if result_files:
668
+ success_msg = f"✅ Separación con IA completada: {len(result_files)} archivo(s)"
669
+ return result_files, success_msg
670
+ else:
671
+ return [], "❌ No se generaron archivos"
672
+
673
+ except Exception as e:
674
+ error_msg = f"❌ Error: {str(e)}"
675
+ logger.error(error_msg)
676
+ return [], error_msg
677
+
678
+ def create_interface():
679
+ """Crear interfaz - Estilo r3gm mejorado"""
680
+ with gr.Blocks(title="🎵 Multi-Instrument AI Separator", theme=gr.themes.Soft()) as app:
681
+
682
+ gr.Markdown(title)
683
+ gr.Markdown(description)
684
+
685
+ with gr.Row():
686
+ with gr.Column():
687
+ audio_input = gr.Audio(
688
+ label="🎵 Subir archivo de audio (máx 100MB)",
689
+ type="filepath"
690
+ )
691
+
692
+ separation_mode = gr.Radio(
693
+ choices=[
694
+ ("🎤 Voces Ultra HD (MDX-Net)", "vocals_ultra"),
695
+ ("🎯 Completo 4-Stems (Multi-IA)", "complete_4stems"),
696
+ ("🎹 Solo Piano (Kim Model)", "piano_only"),
697
+ ("🥁 Solo Batería (Kag Model)", "drums_only"),
698
+ ("🎸 Solo Bajo (Kim Model)", "bass_only"),
699
+ ("🎸 Solo Guitarra (Kag Model)", "guitar_only"),
700
+ ("🎤 Karaoke (KARA Model)", "karaoke"),
701
+ ("🔄 Eliminar Reverb", "dereverb"),
702
+ ("👑 Profesional (Multi-modelo)", "professional")
703
+ ],
704
+ value="complete_4stems",
705
+ label="🤖 Modelos de IA",
706
+ info="Cada opción usa redes neuronales especializadas"
707
+ )
708
+
709
+ process_btn = gr.Button(
710
+ "🚀 Separar con IA",
711
+ variant="primary",
712
+ size="lg"
713
+ )
714
+
715
+ with gr.Column():
716
+ status_output = gr.Textbox(
717
+ label="🤖 Estado de la IA",
718
+ lines=8,
719
+ interactive=False
720
+ )
721
+
722
+ output_files = gr.File(
723
+ label="📥 Archivos separados por IA",
724
+ file_count="multiple",
725
+ interactive=False
726
+ )
727
+
728
+ process_btn.click(
729
+ fn=process_audio,
730
+ inputs=[audio_input, separation_mode],
731
+ outputs=[output_files, status_output],
732
+ show_progress=True
733
+ )
734
+
735
+ gr.Markdown("""
736
+ ### 🤖 Tecnología de IA utilizada:
737
+
738
+ | **Modelo** | **Tecnología** | **Especialización** | **Calidad** |
739
+ |------------|----------------|---------------------|-------------|
740
+ | 🎤 **UVR-MDX-NET-Voc_FT** | MDX-Net híbrida | Voces de máxima calidad | ⭐⭐⭐⭐⭐ |
741
+ | 🥁 **UVR-MDX-NET-Kag_2** | MDX-Net percusiva | Batería y elementos rítmicos | ⭐⭐⭐⭐ |
742
+ | 🎸 **Kim_Bass_1** | Red especializada | Frecuencias graves y bajo | ⭐⭐⭐⭐ |
743
+ | 🎹 **Kim_Piano_1** | IA para teclas | Piano y elementos percusivos-melódicos | ⭐⭐⭐⭐ |
744
+ | 🎸 **UVR-MDX-NET-Kag_3** | MDX-Net armónica | Guitarra y componentes melódicos | ⭐⭐⭐⭐ |
745
+ | 🎤 **UVR_MDXNET_KARA_2** | Red KARA | Voces principales vs coros | ⭐⭐⭐⭐ |
746
+ | 🔄 **Reverb_HQ_By_FoxJoy** | Anti-reverb | Eliminar reverberación | ⭐⭐⭐⭐ |
747
+ | 🎛️ **UVR-MDX-NET-Inst_HQ_4** | MDX-Net instrumental | Elementos no vocales | ⭐⭐⭐⭐ |
748
+
749
+ ### ⚡ Arquitecturas de IA:
750
+ - **MDX-Net**: Red neuronal híbrida tiempo-frecuencia para separación de alta fidelidad
751
+ - **Kim Models**: Modelos especializados entrenados en instrumentos específicos
752
+ - **UVR Models**: Modelos de Ultimate Vocal Remover optimizados profesionalmente
753
+ - **KARA**: Arquitectura especializada en separación vocal avanzada
754
+
755
+ ### 🔧 Características técnicas:
756
+ - ✅ **Misma tecnología que r3gm** - Código base probado y funcional
757
+ - ✅ **ONNX Runtime optimizado** - Inferencia de IA de alta velocidad
758
+ - ✅ **Descarga automática** - Modelos se descargan según necesidad
759
+ - ✅ **Configuración por hash** - Sistema de configuración preciso como UVR
760
+ - ✅ **Multiples arquitecturas** - 8+ modelos especializados disponibles
761
+ - ✅ **Processing threads** - Optimizado para GPU y CPU
762
+
763
+ ### 📝 Instrucciones:
764
+ 1. **Sube archivo de audio** (MP3, WAV, FLAC, M4A - máx 100MB)
765
+ 2. **Selecciona modo de IA** según instrumentos que quieras separar
766
+ 3. **Haz clic en "Separar con IA"** - Los modelos se descargan automáticamente
767
+ 4. **Descarga los resultados** - Archivos separados por redes neuronales
768
+
769
+ > **Nota**: La primera vez que uses cada modelo, se descargará automáticamente (puede tomar unos minutos según tu conexión). Las siguientes veces será mucho más rápido.
770
+ """)
771
+
772
+ return app
773
+
774
+ def main():
775
+ """Función principal - Exacta como r3gm"""
776
+ try:
777
+ logger.info("🤖 Iniciando Multi-Instrument AI Separator")
778
+ logger.info("🔧 Tecnología exacta de r3gm con múltiples instrumentos")
779
+ logger.info(f"🔧 PyTorch: {torch.__version__}")
780
+ logger.info(f"🔧 CUDA: {torch.cuda.is_available()}")
781
+
782
+ # Crear directorios base
783
+ create_directories()
784
+
785
+ # Crear y lanzar interfaz
786
+ app = create_interface()
787
+ app.queue(default_concurrency_limit=3)
788
+ app.launch(
789
+ server_name="0.0.0.0",
790
+ server_port=7860,
791
+ share=False,
792
+ show_error=True
793
+ )
794
+
795
+ except Exception as e:
796
+ logger.error(f"❌ Error: {e}")
797
+ traceback.print_exc()
798
+
799
+ if __name__ == "__main__":
800
+ main()