Communitygithub.com

hanamorix/image-to-animated-pixel-art

Convierte una imagen o ilustración en pixel art detallado con Aseprite, incluyendo animaciones (ciclo de reposo, respiración, parpadeo, movimiento de cabello/ropa, brillo, agua) a través del MCP de Aseprite.

¿Qué es image-to-animated-pixel-art?

Esta habilidad transforma imágenes en pixel art animado usando Aseprite y su MCP. Se enfoca en mantener la fidelidad a la imagen original y evitar roturas visuales en la animación. Soporta movimientos como respiración, parpadeo, cabello, ropa, objetos blandos, extremidades, brillos y agua. El flujo de trabajo incluye pasos medidos: planificación, reducción de tamaño, creación de la imagen estática, poses de parpadeo, animación completa y efectos. Cada paso tiene verificaciones automatizadas (mapas de calor, detección de parpadeo, saltos) para garantizar calidad. Utiliza scripts Lua y requiere el MCP de Aseprite. Está diseñada para Claude Code, Cursor y otras herramientas compatibles con MCP.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hanamorix/hana-pixel/tree/HEAD/skills/image-to-animated-pixel-art

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

De imagen a pixel art animado

El resultado debe mantenerse fiel a la fuente: corrige lo que la reducción a tamaño píxel dañó, nunca inventes detalles. En movimiento, el enemigo son las roturas: cualquier píxel que salte, se rompa, aparezca o parpadee. Claude no puede ver un GIF, por lo que cada presentación va precedida de comprobaciones medidas, nunca de "se ve bien en una imagen fija".

Si el usuario guarda preferencias de pixel art (en su CLAUDE.md o en un archivo al que apunte), léelas primero; estas anulan los valores predeterminados aquí. Necesita el MCP de Aseprite: references/aseprite-mcp.md. Léelo cuando llegues a esa etapa: references/still-recipe.md, references/motion-and-breaks.md.

Flujo de trabajo

Cada confirmación es un mensaje: una imagen lado a lado (fuente | antes | después, o un GIF más un flip-book recortado) y una pregunta. Copia el archivo actual a _vN antes de cada cambio, para que una ronda rechazada pueda revertirse desde ahí. Cada ronda hace exactamente el cambio solicitado y nada más.

  1. Breve. Pregunta qué se desea antes de planificar: qué partes se mueven, cuánto y qué tan rápido, qué se queda quieto, qué está protegido. Escribe un plan breve (media página) y obtén un sí. Terminado cuando el usuario aprueba el plan.
  2. Fuente. Recorta o redimensiona la fuente para que su tamaño sea exactamente 3 veces el sprite objetivo (aproximadamente 200-260 px de ancho). Los scripts asumen 3x.
  3. Imagen fija (1_still.lua, luego correcciones con 2_local_rerender.lua, 3_join_outline.lua). Mide los parámetros en still-recipe.md para esta imagen. Confirmaciones en orden: manos, luego cara y ojos, luego contornos, metal y fondo. Terminado cuando cada parte está aprobada y la imagen fija se guarda como *_still_FINAL.
  4. Poses de parpadeo (4_blink_poses.lua, trazos de ojos a mano a 14x). Muestra las cuatro poses lado a lado más un GIF de parpadeo en una sola confirmación, construido como en motion-and-breaks.md. Terminado cuando se aprueba.
  5. Movimiento (5_animation_frames.lua). Llena su bloque SETTINGS a partir de las mediciones de la imagen fija, ejecuta con BF_ZERO = true primero (debe cambiar 0 px), luego la ejecución real, luego 6_deflicker_metrics.lua. Pasa las comprobaciones a continuación, luego muestra el GIF completo más un flip-book recortado de la parte en movimiento.
  6. Efectos (8_effects.lua, solo color, después del desparpadeo). Comprueba, luego muestra.
  7. Extras una solicitud a la vez (brazos, agua, ...), cada una con su propia confirmación.
  8. Final. Copia a *_FINAL (.aseprite + GIF 3x), conservando los finales anteriores.

Comprobaciones antes de cada confirmación de animación

ComprobaciónPasaDónde
Renderizado con desplazamiento cero igual a la pose0 px cambiados con BF_ZERO5
Partes rígidas (manos) exactasel cuadro de cada fotograma, desplazado hacia atrás por su elevación en píxeles enteros, es igual a la imagen fija: 0 pxcomparación propia en Lua
Parpadeos de un fotograma (A→B→A)ninguno fuera del parpadeo y los efectos6 los imprime
Saltoslos fotogramas de paso listados en BA_STEPS están excluidos; cada otro fotograma tiene ≤ ~2x la mediana de píxeles cambiados, y cualquier fotograma por encima tiene una causa nombrada6
Mapa de calorsin rojo (≥ 8 cambios por bucle) en contornos, correas, pestañas, ojos7_flicker_heatmap.lua
Efectoscada píxel de efecto se mantiene ≥ 2 fotogramas; el conteo de píxeles cambiados está por encima de 0 (una mezcla débil puede volver al mismo color de paleta)8 imprime conteos
Ojo cerradosin color de iris restante en los fotogramas cerradosview_sprite a 12x
Flip-book8-16 fotogramas de manos, cara y cada borde en movimiento a 6x+ se ven continuosview_sprite región + fotogramas

Scripts (scripts/)

Cada script necesita PA_DIR (carpeta del proyecto, terminando en el separador de ruta: \ en Windows, / en macOS) y PA_SRC (nombre del archivo de imagen fuente) configurados primero, además de sus propias globales listadas en su encabezado. Ejecútalos mediante run_lua_script con un lanzador corto; <skill> es el directorio base de esta habilidad, proporcionado cuando la habilidad se carga:

PA_DIR, PA_SRC = [[/ruta/al/proyecto/]], "referencia.jpg"
BF_POSES, BF_OUT, BF_PUSH = "blink_poses.aseprite", "frames", true
dofile([[<skill>/scripts/5_animation_frames.lua]])
ScriptHace
1_still.luaReducción 3x3 preservando líneas, paleta k-means + acentos, paso de pecas, fusión de huérfanos
2_local_rerender.luaRe-renderiza cuadros con otro umbral de línea o con colores extra (manos, labios)
3_join_outline.luaUne contornos punteados donde la fuente tiene una línea fina
4_blink_poses.luaPoses abierta, media, cercana, cerrada (los trazos de ojos en el archivo son por imagen)
5_animation_frames.luaTodos los fotogramas; cada coordenada vive en su bloque SETTINGS (valores de ejemplo incluidos)
6_deflicker_metrics.luaDesparpadeo, parpadeos, comprobación de saltos (BA_SKIP cuadros rígidos, BA_STEPS fotogramas de paso)
7_flicker_heatmap.luaPNG de mapa de calor
8_effects.luaLuz aplastada, destello, destellos marinos, brillos de arena (bloque SETTINGS por imagen)
checkin_sheet.luaHoja fuente / antes / después para una región
example_metal_rerender.luaEjemplo práctico solamente: metal re-renderizado con bandas de sombra de la fuente

5_animation_frames.lua contiene los tipos de movimiento encontrados hasta ahora (banda de respiración, cúpulas suaves, cuadros de movimiento, empuje rígido de píxeles enteros, segmentos de extremidades, mar). Una nueva imagen con diferentes partes en movimiento agrega un campo allí.

Skills relacionados