Spaces:
Running
Running
import gradio as gr | |
import os | |
import asyncio | |
from dotenv import load_dotenv | |
from utility.logging import log_response | |
from utility.script_generator import generate_script | |
from utility.audio_generator import generate_audio | |
from utility.timed_captions_generator import generate_timed_captions | |
from utility.image_generator import generate_image_prompts, generate_images | |
from utility.render_engine import get_output_media | |
# Load environment variables | |
load_dotenv() | |
# Async function to generate content | |
async def generate_content_gradio(topic): | |
script = generate_script(topic) | |
audio_file = "output_audio.mp3" | |
await generate_audio(script, audio_file) | |
captions_timed = generate_timed_captions(audio_file) | |
prompts = generate_image_prompts(script) | |
image_files = generate_images(prompts) | |
output_file = get_output_media(audio_file, captions_timed, image_files) | |
return script, audio_file, image_files, output_file | |
# Gradio interface function | |
async def generate_content_interface(topic): | |
script, audio_file, image_files, output_file = await generate_content_gradio(topic) | |
# For Gradio outputs: Text for script, audio file, image(s), and output media file | |
return script, audio_file, image_files, output_file | |
# Define Gradio app layout | |
def main(): | |
# Gradio Interface | |
with gr.Blocks() as demo: | |
gr.Markdown("# AI Media Content Generator") | |
gr.Markdown("This app generates audio, images, and captions based on a topic using AI.") | |
# Input field for the topic | |
topic_input = gr.Textbox(label="Enter a topic", placeholder="Future of AI") | |
# Outputs: Script (Text), Audio (Audio), Images (Image List), Final Media (Video) | |
script_output = gr.Textbox(label="Generated Script") | |
audio_output = gr.Audio(label="Generated Audio") | |
images_output = gr.Gallery(label="Generated Images") | |
output_media = gr.Video(label="Output Media") | |
# Define the event when clicking the button | |
generate_btn = gr.Button("Generate Content") | |
generate_btn.click(fn=generate_content_interface, inputs=topic_input, outputs=[script_output, audio_output, images_output, output_media]) | |
return demo | |
if __name__ == "__main__": | |
main().launch() | |