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.
| Flag | Efecto |
|---|---|
--tamanho S|M|L|XL|cena | nivel 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|iso | vista 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 |
--doctor | solo diagnostica: ¿Aseprite encontrado? ¿MCP registrado? (pasos del ítem 0) |
--compilar | fuerza 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)
- ¿Las herramientas MCP están visibles? (
create_canvas,draw_pixels,export_sprite…). Si sí, ve al paso 1. - Si no, encuentra Aseprite: ejecuta
scripts/find-aseprite.ps1(Windows) oscripts/find-aseprite.sh. Salida 0 imprime la ruta; salida 2 = no encontrado. - Aseprite encontrado → ejecuta
scripts/install-mcp.ps1/.sh(detecta solo, descarga la versión fija depixel-mcp, verifica el SHA-256 y lo registra). Pide al usuario que reinicie el cliente y continúa. - 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) oscripts/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, siguereferences/build-aseprite.md. Al terminar, ejecuta el paso 3.
- 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.
| Pregunta | Valor 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 / frontal | vista 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 referencia | derivar 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)
| Nivel | Lienzo | Uso típico | Colores |
|---|---|---|---|
| S | 32×32 | ítems, iconos | 8–16 |
| M | 64×64 | personajes pequeños, props | 16–24 |
| L | 128×128 | personajes principales, props detallados | 24–40 |
| XL | 192×192 / 256×256 | retratos de héroe, jefes | 32–64 |
| Cena | 320×180 o 480×270 | escenarios, key art | 32–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
- Elige/deriva la paleta (
references/palette-workflow.md; hex de Lospec:https://lospec.com/palette-list/<slug>.hex). create_canvasen modo de color indexado, luegoset_palette. Ordena la paleta de oscuro a claro dentro de cada rampa (sort_palettepor matiz y luego luminancia, si es necesario).- 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. - Pasa
use_palette: trueen 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.
- 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. - Colores planos – un tono medio por material con
fill_area/draw_rectangle/draw_circle/draw_contour. - Sombra de forma – elige UNA dirección de luz (por defecto: superior izquierda). Usa
apply_shading(estilo hard para nítido, smooth para HD) enshade/light; añade luz de contorno selectiva en el lado opuesto a la luz principal. - Textura y detalle –
draw_with_dithersolo donde el estilo lo permita (ver estilos);draw_pixelsmanual para ojos, costuras, hebillas, brillos. Agrupa píxeles; evita píxeles sueltos (ruido) y "dientes de sierra" (escalones irregulares en las líneas). - Contorno –
apply_outliney 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". - Antialiasing –
suggest_antialiasingen curvas/diagonales (salta en 1-bit/NES). - 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_canvasdevuelve JSON{"file_path": ...}; esa ruta es elsprite_pathde todas las demás herramientas. No hay parámetro de nombre; usasave_aspara nombrar.- Usa barras normales en
output_path(C:/Users/yo/salida.png). Las barras invertidas rompen el Lua generado (\Use lee como escape) y fallan con "invalid character 'U'". scale_spritealtera el sprite en el lugar: hazsave_asde una copia, escala la copia y exporta.- Los números de frame empiezan en 1 (
export_spritecon frame 0 = todos). draw_pixelsrecibe[{x,y,color}], hasta ~10 000 por llamada; es lo que generagrid_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.