|
import gradio as gr |
|
from scene_planner import plan_scenes |
|
from generate_image import generate_scene_image |
|
from tts import generate_audio |
|
from animate import animate_scene |
|
from compose import compose_video |
|
import os |
|
import shutil |
|
import spaces |
|
|
|
LANGUAGES = ["Gujarati", "Hindi", "English"] |
|
|
|
@spaces.GPU |
|
def full_pipeline(script, language): |
|
scenes = plan_scenes(script) |
|
|
|
if os.path.exists("assets"): |
|
shutil.rmtree("assets") |
|
os.makedirs("assets/images") |
|
os.makedirs("assets/audio") |
|
os.makedirs("assets/video") |
|
|
|
video_segments = [] |
|
for idx, scene in enumerate(scenes): |
|
prompt = scene['prompt'] |
|
line = scene['dialogue'] |
|
|
|
image_path = generate_scene_image(prompt, idx) |
|
audio_path = generate_audio(line, idx, language) |
|
video_path = animate_scene(image_path, audio_path, idx) |
|
video_segments.append(video_path) |
|
|
|
final_path = compose_video(video_segments) |
|
return final_path |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# Script to Cartoon Video Generator (Gujarati | Hindi | English)") |
|
with gr.Row(): |
|
script_input = gr.Textbox(label="Enter Story or Script", lines=10) |
|
lang_input = gr.Dropdown(choices=LANGUAGES, label="Select Narration Language") |
|
gen_btn = gr.Button("Generate Cartoon Video") |
|
output_video = gr.Video(label="Final Video") |
|
|
|
gen_btn.click(full_pipeline, inputs=[script_input, lang_input], outputs=output_video) |
|
|
|
demo.launch() |