CommunityImagengithub.com

OmniSprite

Crea sprites, tilesets y animaciones de pixel art grandes y detalladas en Aseprite a través del servidor pixel-mcp.

¿Qué es OmniSprite?

OmniSprite es una skill para agentes de IA (como Claude Code, Cursor o Codex) que automatiza la creación de pixel art profesional en Aseprite. El flujo de trabajo guía al agente desde la configuración del servidor MCP (incluyendo compilar Aseprite si es necesario) hasta la entrega final de sprites, tilesets, spritesheets y animaciones. La skill impone restricciones de calidad: resolución mínima (por defecto 128×128), uso obligatorio de paletas indexadas con rampas de color, orientación fija de la cámara, construcción por capas en un orden específico y ciclos de revisión visual con exportaciones intermedias. Soporta 12 estilos predefinidos (8-bit, 16-bit, HD pixel, dark fantasy, etc.), animaciones multi-ciclo (idle, walk, attack) a 8-12 fps y exportación en múltiples formatos (.aseprite, PNG, GIF, spritesheet + JSON). También proporciona referencias detalladas para compilar Aseprite, trabajar con paletas Lospec, hacer rigging de personajes y seguir checklists de calidad. Ideal para desarrolladores de juegos, artistas de pixel art y cualquier flujo que necesite sprites detallados con consistencia técnica y artística.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/LimaEdu-7x/omni-sprite/tree/HEAD

Installed? Explore more Imagen skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Preguntar en tu IA favorita

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

Documentación

OmniSprite 🎮✨ — comando /sprite

Flujo quirúrgico de pixel art sobre el servidor pixel-mcp de Aseprite (catálogo de herramientas: references/mcp-tools.md). Responde al usuario en su idioma.

Comando /sprite

Uso: /sprite [descripción] [flags]. Sin argumentos, pregunta qué crear.

FlagEfecto
--tamanho S|M|L|XL|cenanivel de tamaño (por defecto L, 128×128)
--estilo <preset>uno de 12 estilos de references/styles.md (por defecto hd-pixel)
--vista lateral|3-4|frontal|isovista fija (por defecto lateral, mirando a la derecha)
--anim idle,walk,attack,...ciclos a animar (recetas en references/animation.md)
--paleta <slug-lospec|#hex,#hex|ref:ruta>paleta dada, de Lospec o derivada de una imagen
--doctorsolo diagnostica: ¿Aseprite encontrado? ¿MCP registrado? (pasos del ítem 0)
--compilarfuerza el flujo de compilar Aseprite desde el código fuente (ítem 0.4a)

Las flags informadas dispensan la pregunta correspondiente del briefing; lo que falte va a la ronda de grill-me. Ej.: /sprite caballero dark fantasy --tamanho L --anim idle,walk,attack.

0. Prerrequisitos (plug and play; verifica una vez y corrige lo que falte)

  1. ¿Las herramientas MCP están visibles? (create_canvas, draw_pixels, export_sprite…). Si sí, ve al paso 1.
  2. Si no, encuentra Aseprite: ejecuta scripts/find-aseprite.ps1 (Windows) o scripts/find-aseprite.sh. Salida 0 imprime la ruta; salida 2 = no encontrado.
  3. Aseprite encontrado → ejecuta scripts/install-mcp.ps1 / .sh (detecta solo, descarga la versión fija de pixel-mcp, verifica el SHA-256 y lo registra). Pide al usuario que reinicie el cliente y continúa.
  4. Aseprite NO encontrado → pregunta al usuario (una pregunta, con opciones); no asumas:
    • "Aseprite no está instalado. ¿Quieres que descargue su código de GitHub, lo compile y configure? (necesita git, CMake, Ninja y un compilador C++; toma unos 10–40 minutos; la licencia de Aseprite permite compilar para uso personal, no redistribuir el binario)."
    • Opciones: (a) Sí, compílame (recomendado) · (b) Lo instalo yo (Steam / aseprite.org / itch.io; de pago, apoya al desarrollador) · (c) Saltar Aseprite y usar el plan B con Python/Pillow (sin archivo .aseprite, mismas reglas de estilo).
    • En (a): ejecuta scripts/build-aseprite.ps1 (Windows) o scripts/build-aseprite.sh. Si falta un prerrequisito, di cuál y ofrece instalarlo con el gestor de paquetes de la plataforma (winget / brew / apt) después de preguntar. En caso de fallo, sigue references/build-aseprite.md. Al terminar, ejecuta el paso 3.
  5. Nunca dibujes antes de cerrar el briefing (sección 1). Si faltan respuestas → pregunta, o usa el valor por defecto e indícalo.

1. Briefing (usa grill-me si está instalada)

Haz las preguntas siguientes como una ronda corta de grill-me (todas las preguntas independientes juntas, cada una con respuesta recomendada, para que "sí" acepte); si la skill no existe, pregunta normalmente. Pregunta solo lo que falte.

PreguntaValor por defecto si no hay respuesta
¿Qué es, en una frase + ambiente?–
¿Dónde se usará (género del juego, UI, impresión)? Cámara: lateral / 3/4 top-down / isométrica / frontalvista lateral
Estilo (ver references/styles.md)hd-pixel
Nivel de tamaño (tabla abajo)L
¿Animación? ¿qué ciclos?ninguna
Paleta: dada / elegir en Lospec / derivar de referenciaderivar con la skill color (/color) si existe, si no Lospec

2. Niveles de tamaño (ve más allá del "tamaño de icono"; sigue siendo pixel art)

NivelLienzoUso típicoColores
S32×32ítems, iconos8–16
M64×64personajes pequeños, props16–24
L128×128personajes principales, props detallados24–40
XL192×192 / 256×256retratos de héroe, jefes32–64
Cena320×180 o 480×270escenarios, key art32–64

Regla: el píxel es cuadrado y nunca escalado con valor no entero. El detalle viene de más píxeles, no de desenfoque. Si el usuario pide "más detalle", sube un nivel antes de añadir ruido.

3. Paleta primero

  1. Elige/deriva la paleta (references/palette-workflow.md; hex de Lospec: https://lospec.com/palette-list/<slug>.hex).
  2. create_canvas en modo de color indexado, luego set_palette. Ordena la paleta de oscuro a claro dentro de cada rampa (sort_palette por matiz y luego luminancia, si es necesario).
  3. Monta rampas, no colores sueltos: 3–5 escalones por material (sombra, medio, luz, brillo), con cambio de matiz (sombras → más frías/saturadas, luces → más cálidas). Verifica con analyze_palette_harmonies.
  4. Pasa use_palette: true en las llamadas de dibujo para que cada píxel se ajuste a la paleta.

3b. Orientación y pose (bloquea antes de dibujar; ver references/orientation-and-pose.md)

Declara view (lateral / 3/4 / frontal / isométrica), facing (dibuja vistas laterales mirando a la derecha), dirección de la luz, qué mano sostiene cada accesorio y hacia dónde caen capas/cabello. Reglas: miembros del lado de la cámara delante del torso, los del lado opuesto detrás, cabeza girada hacia la dirección de la mirada, capas sujetas en la espalda y en la capa más baja, un accesorio por mano, delante del cuerpo. Para cualquier cosa animada, monta el esqueleto primero: articulaciones + IK de 2 huesos, luego las formas (rig.py en https://github.com/LimaEdu-7x/omni-sprite/tree/main/examples/knight). Haz las pruebas de silueta/espejo/superposición tras el primer render.

4. Orden de construcción (capas, siempre en este orden)

Crea capas de abajo arriba con add_layer: bg, shadow-cast, base, shade, light, detail, outline, fx.

  1. Silueta – rellena toda la forma con un color oscuro plano en base. Mírala a 1×: si no es reconocible como silueta, rehazla. Asimetría fuerte, separación clara de cabeza/torso/miembros, espacio negativo legible.
  2. Colores planos – un tono medio por material con fill_area / draw_rectangle / draw_circle / draw_contour.
  3. Sombra de forma – elige UNA dirección de luz (por defecto: superior izquierda). Usa apply_shading (estilo hard para nítido, smooth para HD) en shade/light; añade luz de contorno selectiva en el lado opuesto a la luz principal.
  4. Textura y detalle – draw_with_dither solo donde el estilo lo permita (ver estilos); draw_pixels manual para ojos, costuras, hebillas, brillos. Agrupa píxeles; evita píxeles sueltos (ruido) y "dientes de sierra" (escalones irregulares en las líneas).
  5. Contorno – apply_outline y luego ajusta a mano: contorno selectivo (color más oscuro con cambio de matiz, no negro puro) para HD; contorno oscuro completo para 8/16-bit; ninguno para "sin contorno".
  6. Antialiasing – suggest_antialiasing en curvas/diagonales (salta en 1-bit/NES).
  7. FX – brillo, chispas, sombra en el suelo en fx/shadow-cast.

Para formas orgánicas complejas usa el método de la cuadrícula: escribe el sprite como cuadrícula ASCII (un carácter = índice de la paleta), convierte con scripts/grid_to_pixels.py en un lote de draw_pixels (ver references/grid-method.md). Áreas grandes con herramientas de forma, detalles con la cuadrícula.

5. Ciclo de renderizar y revisar (obligatorio)

Tras cada etapa importante: export_sprite PNG → copia con scale_sprite ×4 (nearest) o PNG ampliado → mira la imagen (Read en el PNG). Pasa la lista de verificación de references/quality-checklist.md. Corrige el peor defecto y renderiza de nuevo. Máximo 3 ciclos por etapa; luego informa lo que quede.

6. Animación (cuando se pida)

Sigue references/animation.md: poses clave primero, luego intermedias, 8–12 fps (set_frame_duration 80–125 ms), una etiqueta por ciclo (create_tag: idle, walk, run, attack, hurt, death), duplicate_frame + edición, link_cel para partes estáticas, pivote/pies fijos en la misma línea de píxeles. Exporta con export_sprite (GIF de vista previa) y export_spritesheet (+JSON).

7. Entrega

Guarda el .aseprite (save_as), exporta PNG 1×, PNG de vista previa ×4 y, para animación, GIF + hoja + JSON. Informa: tamaño del lienzo, nombre/número de colores de la paleta, dirección de la luz, estilo y rutas de los archivos.

Trampas (verificadas en pixel-mcp 0.5.0)

  • create_canvas devuelve JSON {"file_path": ...}; esa ruta es el sprite_path de todas las demás herramientas. No hay parámetro de nombre; usa save_as para nombrar.
  • Usa barras normales en output_path (C:/Users/yo/salida.png). Las barras invertidas rompen el Lua generado (\U se lee como escape) y fallan con "invalid character 'U'".
  • scale_sprite altera el sprite en el lugar: haz save_as de una copia, escala la copia y exporta.
  • Los números de frame empiezan en 1 (export_sprite con frame 0 = todos).
  • draw_pixels recibe [{x,y,color}], hasta ~10 000 por llamada; es lo que genera grid_to_pixels.py.
  • Al hablar con el servidor por stdio: JSON-RPC por línea, escribe bytes con \n (CRLF falla con "invalid trailing data").
  • Un ejemplo completo (esqueleto → partes sombreadas → capas → exportaciones) está en https://github.com/LimaEdu-7x/omni-sprite/tree/main/examples/knight.

Referencias extra (carga bajo demanda)

  • references/build-aseprite.md – compilar Aseprite desde el código fuente y resolver fallos.
  • references/orientation-and-pose.md – vista/lado de mirada, capas cerca/lejos, rigs, conjuntos de direcciones.
  • references/styles.md – 12 estilos con reglas exactas.
  • references/palette-workflow.md – rampas, cambio de matiz, paletas de Lospec, presupuesto de colores.
  • references/animation.md – ciclos, frames, tiempos, easing.
  • references/quality-checklist.md – lista de revisión aprobado/reprobado.
  • references/resources.md – 12+ sitios y 20+ skills/servidores de la comunidad para estudiar e integrar.
  • references/mcp-tools.md – catálogo de herramientas.
  • Skills compañeras opcionales: color / /color (elección y espejo de paleta), una skill de diseño frontend si los sprites son para una UI web.

Límites honestos

Dibujar píxel a píxel mediante llamadas de herramienta es lento y el modelo no "ve" el lienzo sin exportar. Prefiere formas + método de la cuadrícula + ciclo de revisión; usa analyze_reference / downsample_image cuando el usuario envíe una imagen de referencia.

Skills relacionados