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)