StoryForge / app.py
Omkar4141's picture
Create app.py
a972e4a verified
import gradio as gr
import os
import subprocess
import tempfile
from pathlib import Path
# Set environment variables
os.environ['SDL_AUDIODRIVER'] = 'dummy'
os.environ['XDG_RUNTIME_DIR'] = '/tmp'
def generate_story_video(topic, groq_api_key, pexels_key):
"""Generate story video from topic"""
if not groq_api_key or not pexels_key:
return None, "Please provide both API keys"
# Set API keys
os.environ['GROQ_API_KEY'] = groq_api_key
os.environ['PEXELS_KEY'] = pexels_key
try:
# Run the original app.py script
result = subprocess.run([
'python', 'story_generator.py', topic
], capture_output=True, text=True, timeout=300)
if result.returncode == 0:
# Check if video was generated
video_path = 'rendered_video.mp4'
if os.path.exists(video_path):
return video_path, "Video generated successfully!"
else:
return None, "Video generation completed but file not found"
else:
return None, f"Error: {result.stderr}"
except subprocess.TimeoutExpired:
return None, "Generation timed out (5 minutes limit)"
except Exception as e:
return None, f"Error: {str(e)}"
# Create Gradio interface
with gr.Blocks(title="StoryForge - AI Story Video Generator") as demo:
gr.Markdown("# 🎬 StoryForge")
gr.Markdown("Transform any topic into a fully-rendered, narrated short video with AI-generated script, voiceover, and background visuals.")
with gr.Row():
with gr.Column():
topic_input = gr.Textbox(
label="Story Topic",
placeholder="e.g., Adventure journey of a boy in a small town",
lines=2
)
groq_key = gr.Textbox(
label="Groq API Key",
placeholder="Your Groq API key for script generation",
type="password"
)
pexels_key = gr.Textbox(
label="Pexels API Key",
placeholder="Your Pexels API key for background videos",
type="password"
)
generate_btn = gr.Button("Generate Story Video", variant="primary")
with gr.Column():
output_video = gr.Video(label="Generated Video")
status_text = gr.Textbox(label="Status", interactive=False)
# API Key instructions
gr.Markdown("""
### 🔑 Getting API Keys:
- **Groq API**: Sign up at [console.groq.com](https://console.groq.com) for free LLM access
- **Pexels API**: Get free key at [pexels.com/api](https://www.pexels.com/api/)
### ⏱️ Processing Time:
Video generation typically takes 2-5 minutes depending on content complexity.
""")
generate_btn.click(
fn=generate_story_video,
inputs=[topic_input, groq_key, pexels_key],
outputs=[output_video, status_text]
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)