Communitygithub.com

diorama-pixel

Construye miniaturas animadas en píxel art: un pequeño lugar isométrico renderizado a baja resolución y ampliado con nitidez, con tramado ordenado en cada superficie, tablones, paja, adoquines, hierba y agua procesales, un suelo que se disuelve en la página blanca, sombras suaves y personajes diminutos con una acción en bucle. Un único archivo HTML autónomo sin dependencias (sin three.js, sin WebGL): un renderizador por software en un canvas 2D, de aproximadamente 50 KB.

¿Qué es diorama-pixel?

El skill `diorama-pixel` permite crear escenas isométricas en píxel art animadas, autocontenidas y sin dependencias, ideales para landing pages, blogs o tarjetas. Se basa en un kernel fijo que proporciona un renderizador por software sobre canvas 2D, con tramado ordenado (matriz Bayer 8×8), materiales procesales (madera, paja, piedra, hierba, agua) y un sistema de iluminación y sombras suaves. El escenario se define en un único archivo JavaScript que describe el suelo, las estructuras, los personajes y los elementos animados, sujeto a un estricto ortoedro de 320×240 píxeles. El skill incluye scripts de construcción, validación y revisión visual (capturando fotogramas clave en Chrometype sin red) para garantizar que la escena cumple con el presupuesto de fotogramas (24 fps) y la estética de píxel art. Está pensado para cuando se pida una viñeta retro o de 16 bits, con tramado, y no para ilustraciones vectoriales (que cubre el skill `diorama`) ni mundos 3D detallados (que cubre `diorama-worlds`).

Compatible con✓Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/educlopez/diorama/tree/HEAD/skills/diorama-pixel

Preguntar en tu IA favorita

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

Documentación

Diorama Pixel: una miniatura en píxel art que se mueve

Estás haciendo un lugar pequeño, un puesto, un embarcadero, un huerto o una entrada, visto desde una cámara isométrica fija y dibujado como píxel art: todo el fotograma se renderiza a 320×240 y se amplía con píxeles vecinos, cada superficie se cuantiza a una rampa corta de colores apagados mediante una matriz Bayer de 8×8, los materiales llevan textura procesal (líneas de tablones, vetas de paja, piedras, hierba punteada, agua manchada), el borde del suelo se disuelve en la página blanca, el sol proyecta sombras suaves, y una o dos personitas hacen una cosa clara en bucle. Las tres escenas en examples/ son el listón, y están en el formato que escribirás.

Este skill es uno de tres. diorama dibuja ilustraciones vectoriales SVG (escenas de interfaz, arte lineal, estados vacíos, temas); diorama-worlds renderiza mundos detallados en Three.js con personajes articulados y cuatro acabados. Usa este cuando la persona quiera píxeles, tramado, un aspecto retro o de 16 bits, o una escena de píxeles que deba ser pequeña y sin dependencias.

Escribes una sola cosa: la escena, un archivo .js. El kernel (kit/pixel.js) y la página (kit/page.html) son fijos. Nunca los edites, nunca pegues una copia modificada, y nunca escribas de nuevo lo que el kernel te da (la cámara, la luz, las sombras, las texturas, el tramado, el suelo, un esqueleto de persona, árboles y arbustos, un reloj que duerme fuera de la pantalla, el puntero).

Cada archivo nombrado a continuación está en la carpeta de este skill. Escribe la escena y la página construida en el directorio de trabajo de la persona, y ejecuta los scripts desde allí usando su ruta en esta carpeta.

1. Concepto

Escribe el concepto en una línea antes de cualquier código:

Nombre. El lugar y lo que hay en él. La única acción que hace una persona, y qué más se mueve. Lo que hace el puntero y un toque.

Elige un lugar con historia y utilidad: un puesto de mercado, un embarcadero, la puerta de una panadería, un huerto, una parada de autobús, un jardín en la azotea. Una acción sostiene la escena (atar un ramo, pescar, regar, amasar), con anticipación y una pausa, y dos o tres bucles silenciosos a su alrededor (tela, agua, hojas, una bandera). Luego escribe la lista de partes en cuatro líneas: suelo (zonas: hierba, adoquines, agua, arena, tierra, un camino), estructura (lo que se alza: un puesto, un cobertizo, una valla), personas (quién, dónde, hacia dónde miran, qué hacen), vida (lo que se mece, flota o brilla). Una escena tiene de 10 a 25 objetos. Si la lista parece escasa, la escena también lo será.

Ofrece dos o tres conceptos cuando haya alguien a quien preguntar, y espera. Si no hay nadie a quien preguntar, toma el que tenga el fotograma fijo más fuerte y di cuál.

2. Construcción

  1. Lee references/art-direction.md: paleta, materiales, tramado, el borde del suelo, la escala de las personas, qué hace que un fotograma se lea como una miniatura de píxeles en lugar de un render borroso.
  2. Lee references/scene-api.md: cada primitiva, material, ayuda y el contrato de tick. No leas kit/pixel.js por debajo de su comentario de índice.
  3. Lee el ejemplo más cercano: examples/flower-stall.js (adoquines y hierba, un toldo a rayas, dos personas, un banderín), examples/pier.js (agua y una orilla, una persona sentada con una caña, un bote, un cobertizo de paja) o examples/allotment.js (tierra, un camino de ladrillos, bancales elevados, un jardinero regando, un espantapájaros).
  4. Escribe <nombre>.js: un Pixel.scene({…}) con name, title, means (una frase, como máximo 140 caracteres), hint (qué pasar por encima, qué tocar), duration, still, ground, materials opcional, build(P) que devuelve parts (con parts.hot, cada grupo caliente nombrado) y tick(ctx) que posa todo desde ctx.t / ctx.q.
  5. Construye: node <skill>/scripts/build.mjs <nombre>.js escribe pixel-<nombre>.html, una página autónoma sin ninguna solicitud de red.

3. Revisión

  1. node <skill>/scripts/validate.mjs <nombre>.js pixel-<nombre>.html: la declaración, el reloj, la autonomía, sin URLs, el kernel byte a byte, el presupuesto de tamaño y el puntero. Corrige cada FAIL.
  2. npm ci --ignore-scripts --prefix <skill> una vez, luego node <skill>/scripts/look.mjs <nombre>.js <dirSalida>. Abre la página en Chromium sin cabeza con la red bloqueada y escribe <nombre>-look.json, el fotograma fijo, cuatro momentos del bucle, el paso por encima, la pulsación y una vista móvil, y comprueba el relleno, el movimiento, la costura del bucle, la selección, el paso por encima, la pulsación, el movimiento reducido, el coste del fotograma y el desbordamiento móvil. El coste del fotograma se juzga con respecto al presupuesto de fotogramas de la escena (41.7 ms a 24 fps); --throttle 4 lo mira en una CPU cuatro veces más lenta, como un ejecutor de CI o un teléfono. CHROME_PATH selecciona un navegador; de lo contrario, usa un Chrome o Chromium instalado.
  3. Abre los PNG y mira. Las comprobaciones superadas no hacen una imagen. Pregunta del fotograma fijo: ¿se lee la acción a este tamaño (manos, la herramienta, lo que se está trabajando)? ¿Hay alguien escondido detrás de un poste o un techo? ¿Cada superficie muestra su material? ¿El suelo se desvanece en la página por todos los lados, sin nada cortado por el marco? ¿Están las sombras en el suelo donde dice el sol? Luego arregla la escena, no el kernel, y mira de nuevo.

No entregues una página que el validador rechace. No digas que el aspecto está terminado si no abriste las imágenes. Sin un navegador, dilo claramente y entrega con el aspecto no verificado.

4. Entrega

Entrega pixel-<nombre>.html como la persona pidió (el archivo, o un artefacto si puedes publicar uno). Luego, una línea cada uno: el concepto; el segundo del fotograma fijo y por qué; el tamaño (aproximadamente 50 KB, sin dependencias); cómo incrustarlo (references/scene-api.md, "Incrustación": un <canvas>, el kernel y la escena en dos etiquetas <script> y Pixel.mount, o el componente React que allí se indica); cualquier cosa que no pudieras verificar.

5. Ajustes

Cuando la persona pida un cambio, edita solo <nombre>.js, construye, valida y mira de nuevo.

Lo que sale mal

Si te encuentrasHaz esto en su lugar
buscando three.js, WebGL o un archivo de imagenno los hay: el kernel rasteriza sólidos en un canvas 2D; usa P.box, P.cyl, P.ball, P.wedge, P.line
escribiendo requestAnimationFrame, setTimeout o Math.randomposa todo desde ctx.t / ctx.q en tick; usa P.hash(i, j) para variedad que se mantenga fija
position.x += speed * dtuna posición desde P.phase(t, period), para que el fotograma fijo y la costura del bucle sean exactos
una persona escondida detrás de un mostrador, un poste o un techomuévela, baja el mostrador, sube el techo: la cámara es fija y ellos son la historia
brazos que se leen como una masa con el cuerpouna pose con los antebrazos extendidos (P.pose(p, 'work' / 'hold')), las manos sosteniendo algo con un color propio
un árbol como una bola grandeP.tree y P.bush: racimos de grupos de hojas sombreadas redondeadas
un color plano en una superficie grandeun material texturizado: 'wood', 'thatch', 'stone', 'paving', 'leaf', 'cloth', o una rampa con tex
un borde duro donde termina el sueloel suelo es ground: { rx, rz, wobble, fade }: ya se disuelve; nunca añadas una losa o un pedestal
una escena más ancha que su suelomantén todo dentro de rx y rz; el marco se ajusta al suelo
más de 480 px de ancho interno320×240 es el aspecto; más píxeles parecen un render, no píxel art
editando kit/pixel.js para que una escena funcionela escena está mal; cambia la escena

Referencias

  • references/scene-api.md: la declaración, P (primitivas, materiales, personas, poses, árboles, ruido), el contexto de tick y el puntero, el runtime y la incrustación.
  • references/art-direction.md: paleta y rampas, materiales y texturas, tramado, el borde del suelo, luz y sombra, personas a escala de píxeles, composición.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

diorama

Build small animated 3D worlds for the web (isometric camera, blocks on a rounded base, soft shadows, little vehicles and people that move) in one of six themes you can tune: toy (pastel blocks, warm sun), soft, mono (one accent, the rest tints of ink), line (a hairline drawing, white fills and ink edges, by hand if asked), print (flat tones and ink, a printed illustration) and night. A hero scene for a landing page, a card-sized illustration for docs or a blog, or a mini figure for any small spot (an empty state, a feature in a list, a 404). Use this whenever someone asks for a 3D illustration, an isometric scene, a low-poly or "toy town" animation, a monochrome or line-art 3D figure, a hand-drawn or sketched figure of an object with a bit of life in it, a blank/empty-state illustration, an illustration that answers a hover or a tap, a little game-like SVG world, even if they never say "3D" or "isometric". Ships one self-contained HTML file that draws SVG with no dependency (no th...

diorama-worlds

Build narrative miniature worlds with a fixed orthographic camera, textured terrain, articulated people and coordinated looping actions. Use for detailed low-poly 3D dioramas or pixel-finish animated vignettes: sports grounds, street performers, gardens or other small places with a story. Four finishes, miniature, pixel, halftone and blueprint, use the same Three.js scene. This is a separate skill from the diorama SVG illustrations; prefer the diorama skill for lightweight UI illustrations, line art and empty states, and diorama-pixel for dependency-free dithered pixel-art miniatures.

Skills relacionados