import gradio as gr def convert_suno_to_mp3(url: str): """ Convert a Suno song URL to the direct MP3 link. Example: https://suno.com/song/c0cdb3ad-f49d-4125-8e16-4d7dd7924a02?sh=... -> https://cdn1.suno.ai/c0cdb3ad-f49d-4125-8e16-4d7dd7924a02.mp3 """ import re match = re.search(r'suno\.com/song/([a-f0-9\-]+)', url) if not match: return "Invalid Suno URL", None song_id = match.group(1) mp3_url = f"https://cdn1.suno.ai/{song_id}.mp3" return mp3_url, mp3_url # first is displayed, second is downloadable link with gr.Blocks() as demo: gr.Markdown("## Suno Song → Direct MP3 Converter") with gr.Row(): song_input = gr.Textbox(label="Enter Suno song URL", placeholder="https://suno.com/song/...") mp3_output = gr.Textbox(label="MP3 URL") download_btn = gr.File(label="Download MP3") def update(url): mp3_link, downloadable = convert_suno_to_mp3(url) return mp3_link, downloadable song_input.change(update, inputs=song_input, outputs=[mp3_output, download_btn]) demo.launch()