pixelsrc 0.2.0

Pixelsrc - GenAI-native pixel art format and compiler
Documentation
# Sprite Generation Examples

Example prompts and their expected outputs for generating pixel art with GenAI.

All examples use the recommended multi-line format for sprite grids.

---

## Simple Item: Heart

**Prompt:**
> Create a 7x6 pixel art heart icon with a red base color and pink highlight

**Output:**
```json
{"type": "sprite", "name": "heart", "palette": {"{_}": "#00000000", "{r}": "#FF0000", "{p}": "#FF6B6B"}, "grid": [
  "{_}{r}{r}{_}{r}{r}{_}",
  "{r}{p}{r}{r}{p}{r}{r}",
  "{r}{r}{r}{r}{r}{r}{r}",
  "{_}{r}{r}{r}{r}{r}{_}",
  "{_}{_}{r}{r}{r}{_}{_}",
  "{_}{_}{_}{r}{_}{_}{_}"
]}
```

---

## Collectible: Coin

**Prompt:**
> Create a 8x8 animated spinning coin with 4 frames showing rotation

**Output:**
```json
{"type": "palette", "name": "coin", "colors": {"{_}": "#00000000", "{g}": "#FFD700", "{y}": "#FFEC8B", "{o}": "#B8860B", "{d}": "#8B6914"}}

{"type": "sprite", "name": "coin_1", "palette": "coin", "grid": [
  "{_}{_}{g}{g}{g}{g}{_}{_}",
  "{_}{g}{y}{y}{y}{y}{g}{_}",
  "{g}{y}{y}{g}{g}{y}{y}{g}",
  "{g}{y}{g}{y}{y}{g}{y}{g}",
  "{g}{y}{g}{y}{y}{g}{y}{g}",
  "{g}{y}{y}{g}{g}{y}{y}{g}",
  "{_}{g}{o}{o}{o}{o}{g}{_}",
  "{_}{_}{d}{d}{d}{d}{_}{_}"
]}

{"type": "sprite", "name": "coin_2", "palette": "coin", "grid": [
  "{_}{_}{_}{g}{g}{_}{_}{_}",
  "{_}{_}{g}{y}{y}{g}{_}{_}",
  "{_}{g}{y}{y}{y}{y}{g}{_}",
  "{_}{g}{y}{g}{g}{y}{g}{_}",
  "{_}{g}{y}{g}{g}{y}{g}{_}",
  "{_}{g}{y}{y}{y}{y}{g}{_}",
  "{_}{_}{g}{o}{o}{g}{_}{_}",
  "{_}{_}{_}{d}{d}{_}{_}{_}"
]}

{"type": "sprite", "name": "coin_3", "palette": "coin", "grid": [
  "{_}{_}{_}{g}{g}{_}{_}{_}",
  "{_}{_}{_}{y}{y}{_}{_}{_}",
  "{_}{_}{g}{y}{y}{g}{_}{_}",
  "{_}{_}{g}{g}{g}{g}{_}{_}",
  "{_}{_}{g}{g}{g}{g}{_}{_}",
  "{_}{_}{g}{y}{y}{g}{_}{_}",
  "{_}{_}{_}{o}{o}{_}{_}{_}",
  "{_}{_}{_}{d}{d}{_}{_}{_}"
]}

{"type": "sprite", "name": "coin_4", "palette": "coin", "grid": [
  "{_}{_}{_}{g}{g}{_}{_}{_}",
  "{_}{_}{g}{y}{y}{g}{_}{_}",
  "{_}{g}{y}{y}{y}{y}{g}{_}",
  "{_}{g}{y}{g}{g}{y}{g}{_}",
  "{_}{g}{y}{g}{g}{y}{g}{_}",
  "{_}{g}{y}{y}{y}{y}{g}{_}",
  "{_}{_}{g}{o}{o}{g}{_}{_}",
  "{_}{_}{_}{d}{d}{_}{_}{_}"
]}

{"type": "animation", "name": "coin_spin", "frames": ["coin_1", "coin_2", "coin_3", "coin_4"], "duration": 150, "loop": true}
```

---

## Character: Hero

**Prompt:**
> Create a 16x16 pixel art character with brown hair, skin tone face, blue shirt, and dark pants. Include an outline for definition.

**Output:**
```json
{"type": "palette", "name": "hero", "colors": {"{_}": "#00000000", "{skin}": "#FFCC99", "{hair}": "#8B4513", "{eye}": "#000000", "{shirt}": "#4169E1", "{pants}": "#1E3A5F", "{shoes}": "#000000", "{outline}": "#2C1810"}}

{"type": "sprite", "name": "hero_idle", "palette": "hero", "grid": [
  "{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{_}{outline}{outline}{outline}{outline}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{outline}{hair}{hair}{hair}{hair}{outline}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{outline}{hair}{hair}{hair}{hair}{hair}{hair}{outline}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{outline}{hair}{hair}{hair}{hair}{hair}{hair}{outline}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{outline}{skin}{skin}{skin}{skin}{skin}{skin}{outline}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{outline}{skin}{eye}{skin}{skin}{eye}{skin}{outline}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{outline}{skin}{skin}{skin}{skin}{skin}{skin}{outline}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{outline}{skin}{skin}{skin}{skin}{outline}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{outline}{shirt}{shirt}{shirt}{shirt}{shirt}{shirt}{outline}{_}{_}{_}{_}",
  "{_}{_}{_}{outline}{skin}{shirt}{shirt}{shirt}{shirt}{shirt}{shirt}{skin}{outline}{_}{_}{_}",
  "{_}{_}{_}{outline}{skin}{outline}{shirt}{shirt}{shirt}{shirt}{outline}{skin}{outline}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{outline}{shirt}{shirt}{shirt}{shirt}{outline}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{outline}{pants}{pants}{pants}{pants}{outline}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{outline}{pants}{_}{_}{pants}{outline}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{shoes}{shoes}{_}{_}{shoes}{shoes}{_}{_}{_}{_}{_}"
]}
```

---

## Weapon: Sword

**Prompt:**
> Create a 16x16 pixel art sword with a silver blade, golden crossguard, and brown leather handle

**Output:**
```json
{"type": "sprite", "name": "sword", "palette": {"{_}": "#00000000", "{blade}": "#C0C0C0", "{edge}": "#E8E8E8", "{guard}": "#FFD700", "{handle}": "#8B4513", "{pommel}": "#DAA520"}, "grid": [
  "{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{edge}{_}",
  "{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{edge}{blade}{_}",
  "{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}",
  "{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}{_}",
  "{_}{_}{_}{_}{_}{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{edge}{blade}{blade}{_}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{guard}{guard}{blade}{blade}{guard}{guard}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{handle}{handle}{_}{_}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{handle}{handle}{_}{_}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{handle}{handle}{_}{_}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{handle}{handle}{_}{_}{_}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{pommel}{pommel}{_}{_}{_}{_}{_}{_}{_}{_}{_}"
]}
```

---

## Tile: Grass

**Prompt:**
> Create a 16x16 seamless grass tile for a top-down RPG with varied green shades

**Output:**
```json
{"type": "sprite", "name": "grass", "palette": {"{g1}": "#228B22", "{g2}": "#32CD32", "{g3}": "#3CB371", "{d}": "#1E5F1E"}, "grid": [
  "{g1}{g2}{g1}{g1}{g3}{g1}{g2}{g1}{g1}{g1}{g2}{g3}{g1}{g1}{g2}{g1}",
  "{g1}{g1}{g3}{g1}{g1}{g2}{g1}{g1}{g3}{g1}{g1}{g1}{g2}{g1}{g1}{g3}",
  "{g2}{g1}{g1}{g2}{g1}{g1}{g1}{g3}{g1}{g2}{g1}{g1}{g1}{g3}{g1}{g1}",
  "{g1}{g1}{g1}{g1}{g3}{g1}{g2}{g1}{g1}{g1}{g1}{g2}{g1}{g1}{g1}{g2}",
  "{g1}{g3}{g1}{g1}{g1}{g1}{g1}{g1}{d}{g1}{g3}{g1}{g1}{g1}{g2}{g1}",
  "{g1}{g1}{g2}{g1}{g2}{g1}{g3}{g1}{g1}{g1}{g1}{g1}{g2}{g1}{g1}{g1}",
  "{g3}{g1}{g1}{g1}{g1}{g1}{g1}{g2}{g1}{g2}{g1}{g1}{g1}{g3}{g1}{g1}",
  "{g1}{g1}{g1}{g3}{g1}{g2}{g1}{g1}{g1}{g1}{g1}{g3}{g1}{g1}{g2}{g1}",
  "{g1}{g2}{g1}{g1}{g1}{g1}{g1}{g3}{g1}{g1}{g2}{g1}{g1}{g1}{g1}{g1}",
  "{g1}{g1}{g1}{g2}{g1}{g1}{g2}{g1}{g1}{g1}{g1}{g1}{g2}{g1}{g3}{g1}",
  "{g1}{g1}{g3}{g1}{g1}{g1}{g1}{g1}{g2}{g1}{g3}{g1}{g1}{g1}{g1}{g2}",
  "{g2}{g1}{g1}{g1}{g3}{g1}{g1}{g1}{g1}{g1}{g1}{g2}{g1}{g2}{g1}{g1}",
  "{g1}{g1}{g2}{g1}{g1}{g2}{g1}{g3}{g1}{g2}{g1}{g1}{g1}{g1}{g1}{g1}",
  "{g1}{g3}{g1}{g1}{g1}{g1}{g1}{g1}{g1}{g1}{g1}{g1}{g3}{g1}{g2}{g1}",
  "{g1}{g1}{g1}{g2}{g1}{g3}{g1}{g2}{g1}{g3}{g1}{g1}{g1}{g1}{g1}{g3}",
  "{g2}{g1}{g1}{g1}{g1}{g1}{g1}{g1}{g1}{g1}{g2}{g1}{g2}{g1}{g1}{g1}"
]}
```

---

## Animation: Walk Cycle

**Prompt:**
> Create a 16x16 character walk animation with 4 frames showing left foot forward, standing, right foot forward, standing

**Output:**
```json
{"type": "palette", "name": "walker", "colors": {"{_}": "#00000000", "{h}": "#654321", "{s}": "#FFCC99", "{b}": "#4169E1", "{p}": "#2F4F4F", "{f}": "#1C1C1C"}}

{"type": "sprite", "name": "walk_1", "palette": "walker", "grid": [
  "{_}{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{p}{p}{_}{_}{_}{_}{p}{p}{_}{_}{_}{_}",
  "{_}{_}{_}{p}{p}{_}{_}{_}{_}{_}{_}{p}{p}{_}{_}{_}",
  "{_}{_}{_}{f}{f}{_}{_}{_}{_}{_}{_}{f}{f}{_}{_}{_}"
]}

{"type": "sprite", "name": "walk_2", "palette": "walker", "grid": [
  "{_}{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{f}{f}{_}{_}{f}{f}{_}{_}{_}{_}{_}"
]}

{"type": "sprite", "name": "walk_3", "palette": "walker", "grid": [
  "{_}{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{_}{p}{p}{p}{p}{_}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{f}{f}{_}{_}{f}{f}{_}{_}{_}{_}{_}"
]}

{"type": "sprite", "name": "walk_4", "palette": "walker", "grid": [
  "{_}{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{h}{h}{h}{h}{h}{h}{h}{h}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{s}{s}{s}{s}{s}{s}{s}{s}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{b}{b}{b}{b}{b}{b}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{p}{p}{_}{_}{p}{p}{_}{_}{_}{_}{_}",
  "{_}{_}{_}{_}{_}{f}{f}{_}{_}{f}{f}{_}{_}{_}{_}{_}"
]}

{"type": "animation", "name": "walk_cycle", "frames": ["walk_1", "walk_2", "walk_3", "walk_4"], "duration": 150, "loop": true}
```

---

## Scene: Tiled Composition

**Prompt:**
> Create a 32x32 scene using 8x8 tiles. Make sky and grass tiles, then compose them into a simple landscape with sky on top and grass on bottom.

**Output:**
```jsonl
{"type":"palette","name":"nature","colors":{"{sky}":"#87CEEB","{cloud}":"#FFFFFF","{grass}":"#228B22","{grass_dark}":"#1E5F1E"}}
{"type":"sprite","name":"sky_tile","size":[8,8],"palette":"nature","grid":["{sky}{sky}{sky}{sky}{sky}{sky}{sky}{sky}","{sky}{sky}{cloud}{cloud}{sky}{sky}{sky}{sky}","{sky}{cloud}{cloud}{cloud}{cloud}{sky}{sky}{sky}","{sky}{sky}{cloud}{cloud}{sky}{sky}{sky}{sky}","{sky}{sky}{sky}{sky}{sky}{sky}{sky}{sky}","{sky}{sky}{sky}{sky}{sky}{sky}{sky}{sky}","{sky}{sky}{sky}{sky}{sky}{sky}{sky}{sky}","{sky}{sky}{sky}{sky}{sky}{sky}{sky}{sky}"]}
{"type":"sprite","name":"grass_tile","size":[8,8],"palette":"nature","grid":["{grass}{grass_dark}{grass}{grass}{grass}{grass_dark}{grass}{grass}","{grass}{grass}{grass}{grass_dark}{grass}{grass}{grass}{grass_dark}","{grass_dark}{grass}{grass}{grass}{grass}{grass}{grass}{grass}","{grass}{grass}{grass}{grass}{grass_dark}{grass}{grass}{grass}","{grass}{grass_dark}{grass}{grass}{grass}{grass}{grass_dark}{grass}","{grass}{grass}{grass}{grass}{grass}{grass}{grass}{grass}","{grass}{grass}{grass}{grass_dark}{grass}{grass_dark}{grass}{grass}","{grass_dark}{grass}{grass}{grass}{grass}{grass}{grass}{grass_dark}"]}
{"type":"composition","name":"landscape","size":[32,32],"cell_size":[8,8],"sprites":{"S":"sky_tile","G":"grass_tile"},"layers":[{"map":["SSSS","SSSS","GGGG","GGGG"]}]}
```

---

## Variant: Color Swap

**Prompt:**
> Create a hero sprite, then make a variant with red hair for an "enemy" version

**Output:**
```jsonl
{"type":"sprite","name":"hero","palette":{"{_}":"#00000000","{skin}":"#FFCC99","{hair}":"#8B4513","{shirt}":"#4169E1"},"grid":["{_}{hair}{hair}{_}","{hair}{skin}{skin}{hair}","{_}{skin}{skin}{_}","{shirt}{shirt}{shirt}{shirt}","{shirt}{_}{_}{shirt}"]}
{"type":"variant","name":"enemy","base":"hero","palette":{"{hair}":"#FF0000","{shirt}":"#8B0000"}}
```

---

## Tips for Writing Prompts

1. **Be specific about size**: "16x16", "32x32", "8x8"
2. **Name colors explicitly**: "silver blade", "golden hilt", "brown handle"
3. **Reference real games**: "like Zelda items", "SNES-era style"
4. **Request semantic tokens**: "use descriptive token names like {skin} and {hair}"
5. **Ask for palettes separately**: "first create a palette, then the sprite"
6. **Request multi-line format**: "output grids with one row per line for readability"

## Formatting Generated Output

Use `pxl fmt` to ensure consistent formatting:

```bash
# Format a generated file
pxl fmt generated.pxl

# Check if formatting is needed
pxl fmt --check generated.pxl
```