import gradio as gr import requests import os import time import json # Your API key from Hugging Face secret "key" API_KEY = os.environ.get("Key", "") def generate_video(prompt_text, image_url): """Exactly like the curl command""" # 1. Create task - EXACT curl command in Python create_url = "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}" # Exactly like curl: -H "Authorization: Bearer $ARK_API_KEY" } # Exactly the curl data data = { "model": "seedance-1-5-pro-251215", "content": [ { "type": "text", "text": prompt_text }, { "type": "image_url", "image_url": { "url": image_url } } ] } # Make the request (like curl -X POST) response = requests.post(create_url, headers=headers, json=data) if response.status_code != 200: return f"Error: {response.text}", None task_id = response.json()["id"] # 2. Poll for results (like the while loop) status_url = f"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/{task_id}" for _ in range(60): # 60 second timeout status_response = requests.get(status_url, headers=headers) result = status_response.json() if result.get("status") == "succeeded": # Get video URL from response video_url = result.get("output", [{}])[0].get("video_url") return "Success!", video_url elif result.get("status") == "failed": return f"Failed: {result.get('error')}", None time.sleep(1) return "Timeout", None # Simple Gradio interface with gr.Blocks() as demo: gr.Markdown("# BytePlus Video Generator") gr.Markdown(f"API Key loaded: {'✅' if API_KEY else '❌'}") with gr.Row(): with gr.Column(): prompt = gr.Textbox( label="Prompt", lines=3, value="At breakneck speed, drones fly through obstacles --duration 5 --camerafixed false" ) image_url = gr.Textbox( label="Image URL", value="https://ark-doc.tos-ap-southeast-1.bytepluses.com/seepro_i2v%20.png" ) btn = gr.Button("Generate", variant="primary") with gr.Column(): status = gr.Textbox(label="Status") video = gr.Video(label="Result") btn.click( fn=generate_video, inputs=[prompt, image_url], outputs=[status, video] ) demo.launch()