import gradio as gr import subprocess import os def run_ultrasinger(opt_i, opt_o, mode, transcription, pitcher, extra, device): # Construct the command based on inputs cmd = ["python", "UltraSinger.py"] # Add options if opt_i: cmd.extend(["-i", opt_i.name]) if opt_o: cmd.extend(["-o", opt_o]) # Add mode if mode: cmd.extend(mode.split()) # Add transcription options if transcription: cmd.extend(transcription.split()) # Add pitcher options if pitcher: cmd.extend(pitcher.split()) # Add extra options if extra: cmd.extend(extra.split()) # Add device options if device: cmd.extend(device.split()) # Execute the command try: result = subprocess.run(cmd, capture_output=True, text=True) return result.stdout, result.stderr except Exception as e: return str(e), "Error occurred during execution" # Define Gradio inputs and outputs opt_i = gr.File(label="Ultrastar.txt or audio file (.mp3, .wav, YouTube link)") opt_o = gr.Textbox(label="Output folder") mode = gr.Textbox(label="Mode options (e.g., default -u -m -s)") transcription = gr.Textbox(label="Transcription options (e.g., --whisper large-v2 --language en)") pitcher = gr.Textbox(label="Pitcher options (e.g., --crepe full)") extra = gr.Textbox(label="Extra options (e.g., --hyphenation True)") device = gr.Textbox(label="Device options (e.g., --force_cpu False)") output_text = gr.Textbox(label="Standard Output") error_text = gr.Textbox(label="Error Output") # Create Gradio interface interface = gr.Interface( fn=run_ultrasinger, inputs=[opt_i, opt_o, mode, transcription, pitcher, extra, device], outputs=[output_text, error_text], title="UltraSinger App", description="Upload an Ultrastar.txt or an audio file, set the options, and run UltraSinger." ) # Launch the app if __name__ == "__main__": interface.launch()