pixelsrc 0.2.0

Pixelsrc - GenAI-native pixel art format and compiler
Documentation
<!-- Generated by scripts/generate-demos.sh -->
<!-- Do not edit manually - regenerate with: ./scripts/generate-demos.sh -->

# sprite Demos

## Minimal Valid Sprite

A 3x3 sprite with an inline palette demonstrating the minimum required fields.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "square", "size": [3, 3], "palette": {"{_}": "#00000000", "{r}": "#FF0000"}, "grid": ["{r}{r}{r}", "{r}{_}{r}", "{r}{r}{r}"]}
```

</div>

<div class="demo-container" data-demo="basic">
</div>

## Sprite Color Count

Verifies palette color count is correctly reported.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "square", "size": [3, 3], "palette": {"{_}": "#00000000", "{r}": "#FF0000"}, "grid": ["{r}{r}{r}", "{r}{_}{r}", "{r}{r}{r}"]}
```

</div>

<div class="demo-container" data-demo="colors">
</div>

## Sprite Dimension Verification

Uses assert_dimensions helper for explicit dimension checks.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "square", "size": [3, 3], "palette": {"{_}": "#00000000", "{r}": "#FF0000"}, "grid": ["{r}{r}{r}", "{r}{_}{r}", "{r}{r}{r}"]}
```

</div>

<div class="demo-container" data-demo="dimensions">
</div>

## Inline Palette Definition

Sprite with colors defined inline rather than referencing a named palette.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "heart", "palette": {"{_}": "#00000000", "{r}": "#e43b44", "{p}": "#f77622"}, "grid": ["{_}{r}{_}{r}{_}", "{r}{p}{r}{p}{r}", "{r}{p}{p}{p}{r}", "{_}{r}{p}{r}{_}", "{_}{_}{r}{_}{_}"]}
```

</div>

<div class="demo-container" data-demo="inline_palette">
</div>

## Inline Color Count

Heart sprite with 3 colors: transparent, red, and orange.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "heart", "palette": {"{_}": "#00000000", "{r}": "#e43b44", "{p}": "#f77622"}, "grid": ["{_}{r}{_}{r}{_}", "{r}{p}{r}{p}{r}", "{r}{p}{p}{p}{r}", "{_}{r}{p}{r}{_}", "{_}{_}{r}{_}{_}"]}
```

</div>

<div class="demo-container" data-demo="inline_colors">
</div>

## Inline Palette Dimensions

Verifies heart sprite renders at expected 5x5 dimensions.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "heart", "palette": {"{_}": "#00000000", "{r}": "#e43b44", "{p}": "#f77622"}, "grid": ["{_}{r}{_}{r}{_}", "{r}{p}{r}{p}{r}", "{r}{p}{p}{p}{r}", "{_}{r}{p}{r}{_}", "{_}{_}{r}{_}{_}"]}
```

</div>

<div class="demo-container" data-demo="inline_dimensions">
</div>

## No Named Palette

Verifies inline palette sprites have no palette_name set.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "heart", "palette": {"{_}": "#00000000", "{r}": "#e43b44", "{p}": "#f77622"}, "grid": ["{_}{r}{_}{r}{_}", "{r}{p}{r}{p}{r}", "{r}{p}{p}{p}{r}", "{_}{r}{p}{r}{_}", "{_}{_}{r}{_}{_}"]}
```

</div>

<div class="demo-container" data-demo="inline_no_palette_ref">
</div>

## Origin Point

Sprite with an origin point `[x, y]` for positioning and rotation.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "player", "palette": {"{_}": "#00000000", "{b}": "#3a4466", "{s}": "#ffcd75"}, "grid": ["{_}{b}{b}{b}{_}", "{b}{s}{b}{s}{b}", "{b}{b}{b}{b}{b}", "{_}{b}{_}{b}{_}"], "metadata": {"origin": [2, 3], "boxes": {"hurt": {"x": 0, "y": 0, "w": 5, "h": 4}, "hit": {"x": 1, "y": 1, "w": 3, "h": 2}}, "attach_in": [2, 0], "attach_out": [2, 4]}}
```

</div>

<div class="demo-container" data-demo="origin">
</div>

## Collision Boxes

Sprite with named collision boxes for hitbox detection.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "player", "palette": {"{_}": "#00000000", "{b}": "#3a4466", "{s}": "#ffcd75"}, "grid": ["{_}{b}{b}{b}{_}", "{b}{s}{b}{s}{b}", "{b}{b}{b}{b}{b}", "{_}{b}{_}{b}{_}"], "metadata": {"origin": [2, 3], "boxes": {"hurt": {"x": 0, "y": 0, "w": 5, "h": 4}, "hit": {"x": 1, "y": 1, "w": 3, "h": 2}}, "attach_in": [2, 0], "attach_out": [2, 4]}}
```

</div>

<div class="demo-container" data-demo="collision">
</div>

## Attachment Points

Sprite with attach_in and attach_out points for chaining sprites.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "player", "palette": {"{_}": "#00000000", "{b}": "#3a4466", "{s}": "#ffcd75"}, "grid": ["{_}{b}{b}{b}{_}", "{b}{s}{b}{s}{b}", "{b}{b}{b}{b}{b}", "{_}{b}{_}{b}{_}"], "metadata": {"origin": [2, 3], "boxes": {"hurt": {"x": 0, "y": 0, "w": 5, "h": 4}, "hit": {"x": 1, "y": 1, "w": 3, "h": 2}}, "attach_in": [2, 0], "attach_out": [2, 4]}}
```

</div>

<div class="demo-container" data-demo="attachments">
</div>

## Metadata Sprite Dimensions

Verifies sprite with metadata renders at expected dimensions.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "player", "palette": {"{_}": "#00000000", "{b}": "#3a4466", "{s}": "#ffcd75"}, "grid": ["{_}{b}{b}{b}{_}", "{b}{s}{b}{s}{b}", "{b}{b}{b}{b}{b}", "{_}{b}{_}{b}{_}"], "metadata": {"origin": [2, 3], "boxes": {"hurt": {"x": 0, "y": 0, "w": 5, "h": 4}, "hit": {"x": 1, "y": 1, "w": 3, "h": 2}}, "attach_in": [2, 0], "attach_out": [2, 4]}}
```

</div>

<div class="demo-container" data-demo="metadata_dimensions">
</div>

## Named Palette Reference

Sprite referencing a separately-defined palette by name.

<div class="demo-source">

```jsonl
{"type": "palette", "name": "retro", "colors": {"{_}": "#00000000", "{bg}": "#1a1c2c", "{fg}": "#f4f4f4", "{accent}": "#ffcd75"}}
{"type": "sprite", "name": "icon", "palette": "retro", "grid": ["{bg}{fg}{bg}", "{fg}{accent}{fg}", "{bg}{fg}{bg}"]}
```

</div>

<div class="demo-container" data-demo="named_palette">
</div>

## Palette Reference Verification

Verifies sprite correctly references its named palette.

<div class="demo-source">

```jsonl
{"type": "palette", "name": "retro", "colors": {"{_}": "#00000000", "{bg}": "#1a1c2c", "{fg}": "#f4f4f4", "{accent}": "#ffcd75"}}
{"type": "sprite", "name": "icon", "palette": "retro", "grid": ["{bg}{fg}{bg}", "{fg}{accent}{fg}", "{bg}{fg}{bg}"]}
```

</div>

<div class="demo-container" data-demo="palette_reference">
</div>

## Palette Color Count

Named palette with 4 colors: transparent, bg, fg, accent.

<div class="demo-source">

```jsonl
{"type": "palette", "name": "retro", "colors": {"{_}": "#00000000", "{bg}": "#1a1c2c", "{fg}": "#f4f4f4", "{accent}": "#ffcd75"}}
{"type": "sprite", "name": "icon", "palette": "retro", "grid": ["{bg}{fg}{bg}", "{fg}{accent}{fg}", "{bg}{fg}{bg}"]}
```

</div>

<div class="demo-container" data-demo="palette_colors">
</div>

## Horizontal Flip (Mirror)

Sprite mirrored horizontally using transform: ["mirror-h"].

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "grid": ["{_}{_}{a}", "{a}{a}{a}", "{_}{_}{a}"]}
{"type": "sprite", "name": "arrow_left", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["mirror-h"]}
{"type": "sprite", "name": "arrow_down", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["rotate:90"]}
{"type": "sprite", "name": "arrow_scaled", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["scale:2.0,2.0"]}
```

</div>

<div class="demo-container" data-demo="flip_horizontal">
</div>

## Rotation Transform

Sprite rotated 90 degrees using transform: ["rotate:90"].

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "grid": ["{_}{_}{a}", "{a}{a}{a}", "{_}{_}{a}"]}
{"type": "sprite", "name": "arrow_left", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["mirror-h"]}
{"type": "sprite", "name": "arrow_down", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["rotate:90"]}
{"type": "sprite", "name": "arrow_scaled", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["scale:2.0,2.0"]}
```

</div>

<div class="demo-container" data-demo="rotate">
</div>

## Scale Transform

Sprite scaled 2x using transform: ["scale:2.0,2.0"].

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "grid": ["{_}{_}{a}", "{a}{a}{a}", "{_}{_}{a}"]}
{"type": "sprite", "name": "arrow_left", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["mirror-h"]}
{"type": "sprite", "name": "arrow_down", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["rotate:90"]}
{"type": "sprite", "name": "arrow_scaled", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["scale:2.0,2.0"]}
```

</div>

<div class="demo-container" data-demo="scale">
</div>

## Source Reference

Transformed sprite referencing another sprite via "source" field.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "grid": ["{_}{_}{a}", "{a}{a}{a}", "{_}{_}{a}"]}
{"type": "sprite", "name": "arrow_left", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["mirror-h"]}
{"type": "sprite", "name": "arrow_down", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["rotate:90"]}
{"type": "sprite", "name": "arrow_scaled", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["scale:2.0,2.0"]}
```

</div>

<div class="demo-container" data-demo="source_ref">
</div>

## Transform Chain Verification

Verifies parsed transform specs match expected operations.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "grid": ["{_}{_}{a}", "{a}{a}{a}", "{_}{_}{a}"]}
{"type": "sprite", "name": "arrow_left", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["mirror-h"]}
{"type": "sprite", "name": "arrow_down", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["rotate:90"]}
{"type": "sprite", "name": "arrow_scaled", "source": "arrow_right", "palette": {"{_}": "#00000000", "{a}": "#5fcde4"}, "transform": ["scale:2.0,2.0"]}
```

</div>

<div class="demo-container" data-demo="transform_chain">
</div>