import gradio as gr import requests import os import json # Suno API key SUNO_KEY = os.environ.get("SunoKey", "") if not SUNO_KEY: print("⚠️ SunoKey not set!") def submit_song_generation(lyrics_text, style, title, instrumental, model): """Submit song generation request and return Task ID immediately""" if not SUNO_KEY: return "❌ Error: SunoKey not configured in environment variables" if not lyrics_text.strip() and not instrumental: return "❌ Error: Please provide lyrics or select instrumental" if not style.strip(): return "❌ Error: Please provide a music style" if not title.strip(): return "❌ Error: Please provide a song title" try: # Prepare request data request_data = { "customMode": True, "instrumental": instrumental, "model": model, "callBackUrl": "https://1hit.no/callback.php", "style": style, "title": title, } if not instrumental: # Apply character limits if model == "V4" and len(lyrics_text) > 3000: lyrics_text = lyrics_text[:3000] elif model in ["V4_5", "V4_5PLUS", "V4_5ALL", "V5"] and len(lyrics_text) > 5000: lyrics_text = lyrics_text[:5000] request_data["prompt"] = lyrics_text else: request_data["prompt"] = "" # Submit generation request resp = requests.post( "https://api.sunoapi.org/api/v1/generate", json=request_data, headers={ "Authorization": f"Bearer {SUNO_KEY}", "Content-Type": "application/json" }, timeout=30 ) print(f"Submission response: {resp.status_code}") print(f"Response: {resp.text}") if resp.status_code != 200: return f"❌ Submission failed: HTTP {resp.status_code}\n\n{resp.text}" data = resp.json() print(f"Parsed data: {data}") # Extract task ID from response task_id = None if "taskId" in data: task_id = data["taskId"] output = f"## ✅ TASK SUBMITTED SUCCESSFULLY!\n\n" output += f"**🎯 Your Task ID:** `{task_id}`\n\n" elif "data" in data and "taskId" in data["data"]: task_id = data["data"]["taskId"] output = f"## ✅ TASK SUBMITTED SUCCESSFULLY!\n\n" output += f"**🎯 Your Task ID:** `{task_id}`\n\n" elif data.get("data") and "taskId" in data.get("data", {}): task_id = data["data"]["taskId"] output = f"## ✅ TASK SUBMITTED SUCCESSFULLY!\n\n" output += f"**🎯 Your Task ID:** `{task_id}`\n\n" else: return f"❌ Could not extract Task ID from response\n\n**Raw Response:**\n```json\n{json.dumps(data, indent=2)}\n```" output += f"**📱 What to do with this Task ID:**\n\n" output += "1. **Copy this Task ID:** `" + task_id + "`\n" output += "2. **Switch to the 'Check Any Task' tab**\n" output += "3. **Paste the Task ID** in the input field\n" output += "4. **Click 'Check Status'** to see your song results\n\n" output += "**⏱️ What happens now:**\n" output += "- Suno AI is generating your song (1-3 minutes)\n" output += "- You can check status anytime with the Task ID\n" output += "- When ready, you'll see audio URLs