File size: 2,278 Bytes
bef91cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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()