import gradio as gr from PIL import Image, ImageDraw import os # Função para criar frames a partir de prompts (exemplo usando texto sobre imagens) def generate_frame(prompt, frame_number, width=256, height=256): # Cria uma imagem em branco img = Image.new("RGB", (width, height), color="white") draw = ImageDraw.Draw(img) # Adiciona o texto do prompt no centro text = f"{prompt} ({frame_number})" text_width, text_height = draw.textsize(text) draw.text( ((width - text_width) / 2, (height - text_height) / 2), text, fill="black", ) return img # Função para criar uma animação (GIF) def create_animation_from_prompts(prompt, frame_count=10, duration=100): frames = [] # Gera os frames com base no prompt for i in range(frame_count): frame = generate_frame(prompt, i + 1) frames.append(frame) # Salva a animação como GIF gif_path = "output.gif" frames[0].save( gif_path, save_all=True, append_images=frames[1:], duration=duration, loop=0, ) return gif_path # Interface Gradio def animate_sprite(prompt, frame_count, duration): gif_path = create_animation_from_prompts(prompt, frame_count, duration) return gif_path # Criação da interface with gr.Blocks() as app: gr.Markdown("# Gerador de Animações com Prompt de Texto") with gr.Row(): prompt = gr.Textbox( label="Descrição do Sprite", placeholder="Descreva o sprite ou a animação que deseja criar", ) frame_count = gr.Slider( label="Número de Frames", minimum=1, maximum=30, value=10, step=1, ) duration = gr.Slider( label="Duração do Frame (ms)", minimum=50, maximum=500, value=100, step=10, ) # Saída de imagem animation_output = gr.Image(label="Animação Gerada", type="filepath") generate_button = gr.Button("Gerar Animação") # Configuração do botão para gerar a animação generate_button.click( animate_sprite, inputs=[prompt, frame_count, duration], outputs=animation_output, ) # Lançamento da aplicação app.launch()