BytePlus_Seedance / curlapp.py
MySafeCode's picture
Update curlapp.py
74af09c verified
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()