Spaces:
Runtime error
Runtime error
File size: 4,843 Bytes
5b0d83d dbe4319 c6b8f95 8710b37 7d90627 c6b8f95 7d90627 8710b37 c6b8f95 abf8f9e b9d9615 2348631 96f47bd c6b8f95 96f47bd e95a1cd 7d90627 e95a1cd b9d9615 7d90627 e95a1cd 857c9c9 e95a1cd 7d90627 e95a1cd 3dc8327 ac48b9a 3dc8327 c6b8f95 3dc8327 ac48b9a dbe4319 b9d9615 e95a1cd ac48b9a c6b8f95 ac48b9a c6b8f95 ac48b9a c6b8f95 ac48b9a c6b8f95 ac48b9a e95a1cd 8710b37 |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
import gradio as gr
from transformers import pipeline
from gtts import gTTS
from moviepy.editor import ImageSequenceClip, CompositeVideoClip, ImageClip, AudioFileClip, VideoFileClip
from PIL import Image, ImageDraw, ImageFont
import numpy as np
from scipy.io.wavfile import write
# Load and Initialize Models
script_generator = pipeline("text-generation", model="gpt2", truncation=True, max_length=100)
def generate_comedy_script(prompt):
script = script_generator(prompt)[0]['generated_text']
return script
def text_to_speech(script):
tts = gTTS(text=script, lang='en')
audio_file = 'output.mp3'
tts.save(audio_file)
return audio_file
def create_images_from_script(script):
lines = script.split('. ')
image_paths = []
for i, line in enumerate(lines):
img = Image.new('RGB', (800, 400), color=(0, 0, 0))
d = ImageDraw.Draw(img)
fnt = ImageFont.load_default()
d.text((10, 180), line, font=fnt, fill=(255, 255, 255))
image_path = f'/tmp/image_{i}.png'
img.save(image_path)
image_paths.append(image_path)
return image_paths
def generate_animation_with_images(script):
image_paths = create_images_from_script(script)
clips = []
for i, img_path in enumerate(image_paths):
image_clip = ImageClip(img_path).set_duration(3).set_position(('center', 'center'))
clips.append(image_clip)
final_video = concatenate_videoclips(clips, method="compose")
final_video.write_videofile("/tmp/final_video.mp4", fps=24)
return "/tmp/final_video.mp4"
def combine_audio_video(video_path, audio_path):
video = VideoFileClip(video_path)
audio = AudioFileClip(audio_path)
final_video = video.set_audio(audio)
final_video.write_videofile("/tmp/final_comedy_video.mp4", fps=24)
return "/tmp/final_comedy_video.mp4"
def generate_comedy_and_animation(prompt):
script = generate_comedy_script(prompt)
audio_file = text_to_speech(script)
video_file = generate_animation_with_images(script)
final_video = combine_audio_video(video_file, audio_file)
return script, audio_file, final_video
def generate_sine_wave(frequency, duration, sample_rate=44100, amplitude=0.5):
t = np.linspace(0, duration, int(sample_rate * duration), False)
wave = amplitude * np.sin(2 * np.pi * frequency * t)
return wave
def generate_kids_music(theme, output_music_file="kids_music.wav"):
sample_rate = 44100
duration = 2
c4_wave = generate_sine_wave(261.63, duration)
d4_wave = generate_sine_wave(293.66, duration)
e4_wave = generate_sine_wave(329.63, duration)
wave = np.concatenate([c4_wave, d4_wave, e4_wave])
audio_wave = np.int16(wave * 32767)
write(output_music_file, sample_rate, audio_wave)
return output_music_file
def generate_kids_animation_with_music(theme, output_video_file="kids_animation.mp4"):
music_file = generate_kids_music(theme)
clips = []
for i in range(5):
img = Image.new('RGB', (800, 400), color=(0, 0, 255))
d = ImageDraw.Draw(img)
fnt = ImageFont.load_default()
d.text((10, 180), f"Kids Music: {theme}", font=fnt, fill=(255, 255, 0))
frame_path = f'/tmp/kids_temp_{i}.png'
img.save(frame_path)
clips.append(ImageClip(frame_path).set_duration(1).set_position(('center', 'center')))
final_video = CompositeVideoClip(clips, size=(800, 400))
final_video = final_video.set_audio(AudioFileClip(music_file))
final_video.write_videofile(output_video_file, fps=24)
return output_video_file, music_file
def generate_kids_content(theme):
video_file, music_file = generate_kids_animation_with_music(theme)
return music_file, video_file
with gr.Blocks() as app:
gr.Markdown("## AI Comedy and Kids Content Generator")
with gr.Tab("Generate Comedy Animation"):
prompt_input = gr.Textbox(label="Comedy Prompt")
generate_btn = gr.Button("Generate Comedy Script and Animation")
comedy_script = gr.Textbox(label="Generated Script")
comedy_audio = gr.Audio(label="Generated Audio")
comedy_video = gr.Video(label="Generated Animation")
generate_btn.click(
generate_comedy_and_animation,
inputs=prompt_input,
outputs=[comedy_script, comedy_audio, comedy_video]
)
with gr.Tab("Generate Kids Music Animation"):
theme_input = gr.Textbox(label="Kids Music Theme")
generate_music_btn = gr.Button("Generate Kids Music and Animation")
kids_music_audio = gr.Audio(label="Generated Music")
kids_music_video = gr.Video(label="Generated Kids Animation")
generate_music_btn.click(
generate_kids_content,
inputs=theme_input,
outputs=[kids_music_audio, kids_music_video]
)
app.launch()
|