import gradio as gr from PIL import Image import base64 from io import BytesIO # ----------------------------- # Convertir imagen a base64 # ----------------------------- def image_to_base64(img_file): try: # Intentamos abrir con .name o directamente con .file try: img = Image.open(img_file.name) except: img_file.file.seek(0) img = Image.open(img_file.file) buffer = BytesIO() img.save(buffer, format="PNG") img_str = base64.b64encode(buffer.getvalue()).decode() return f"data:image/png;base64,{img_str}" except Exception as e: return None # ----------------------------- # Generar editor HTML + JS # ----------------------------- def generate_editor(image_file): img_src = image_to_base64(image_file) if not img_src: return "Error cargando imagen" html = f"""

🎬 Sprite Editor PRO – Editor + Timeline

Selecciona un área con el mouse para recortar un frame. Luego añádelo a la timeline.

Timeline

Vista previa de la animación

""" return html # ----------------------------- # Interfaz Gradio # ----------------------------- iface = gr.Interface( fn=generate_editor, inputs=[gr.File(label="Sube tu hoja de sprites")], outputs=gr.HTML(label="Editor Visual"), title="🎬 Sprite Editor PRO — Editor + Timeline (Con Export GIF)", description="Recorta frames, crea animaciones y exporta GIF animados." ) if __name__ == "__main__": iface.launch()