videogen / app.py
evaluator42's picture
Update app.py
1a4fa2e verified
import os
import gradio as gr
from config import DEFAULT_REGION, FIXED_WIDTH, FIXED_HEIGHT, FIXED_FPS, FIXED_DURATION
from handlers.video_generation_type import generate_single_shot, refresh_listing
with gr.Blocks(title="Nova Reel β€” Text β†’ Video (Single-shot)") as demo:
gr.Markdown(
f"# 🎬DEval Nova Reel 1:0 β€” Text/Image β†’ Video\n"
f"**Single-shot only.** Fixed **{FIXED_WIDTH}Γ—{FIXED_HEIGHT} @ {FIXED_FPS} fps**, duration **{FIXED_DURATION}s**.\n"
"Starts an async job, polls until completion, then downloads `output.mp4` from your S3 path."
)
with gr.Row():
with gr.Column(scale=2):
prompt = gr.Textbox(
label="Prompt",
placeholder="Closeup of a cute old steampunk robot riding a horse. Camera zoom in.",
lines=4,
)
reference_image = gr.Image(
label="Optional reference image (PNG/JPEG, ideally 1280Γ—720)",
type="filepath",
)
with gr.Column(scale=1):
s3_uri = gr.Textbox(
label="S3 output base URI",
value="s3://bucketvideogenerationwest",
placeholder="s3://your-bucket[/optional/prefix]",
)
region = gr.Textbox(label="AWS Region", value=DEFAULT_REGION)
seed = gr.Textbox(label="Seed (optional)", value="", placeholder="leave blank for random")
custom_name = gr.Textbox(
label="Video name (optional)",
placeholder="Defaults to part of the prompt",
value=""
)
go = gr.Button("πŸš€ Generate")
with gr.Row():
vid = gr.Video(label="Generated Video")
status = gr.Markdown("", elem_id="status")
gr.Markdown("### πŸ“Ό Videos already in this bucket/prefix")
table = gr.Dataframe(
headers=["Key", "Size (MB)", "Last Modified (UTC)", "S3 URI"],
interactive=False,
wrap=False,
label="Existing .mp4 objects"
)
refresh_btn = gr.Button("πŸ”„ Refresh list")
go.click(
fn=generate_single_shot,
inputs=[prompt, s3_uri, seed, region, reference_image, custom_name],
outputs=[vid, status, table],
api_name="generate"
)
refresh_btn.click(
fn=refresh_listing,
inputs=[s3_uri, region],
outputs=[table]
)
s3_uri.change(
fn=refresh_listing,
inputs=[s3_uri, region],
outputs=[table]
)
if __name__ == "__main__":
auth_user = os.getenv("USER")
auth_pass = os.getenv("PASS")
demo.queue().launch(
auth=(auth_user, auth_pass), share=True, ssr_mode=False
)