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 -->

# blend Demos

## Multiply Blend Mode

Darkens underlying colors by multiplying base and blend values: result = base * blend. Useful for shadows and darkening effects.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "light_base", "palette": {"{w}": "#FFFFFF", "{c}": "#CCCCCC"}, "grid": ["{w}{w}{w}{w}{w}{w}", "{w}{c}{c}{c}{c}{c}", "{w}{c}{c}{c}{c}{c}", "{w}{c}{c}{c}{c}{c}", "{w}{c}{c}{c}{c}{c}", "{w}{c}{c}{c}{c}{c}"]}
{"type": "sprite", "name": "color_overlay", "palette": {"{.}": "#00000000", "{r}": "#FF0000", "{g}": "#00FF00", "{b}": "#0000FF"}, "grid": ["{r}{r}{r}{r}{r}{.}", "{r}{r}{r}{r}{r}{.}", "{g}{g}{g}{g}{g}{.}", "{g}{g}{g}{g}{g}{.}", "{b}{b}{b}{b}{b}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_multiply_demo", "size": [6, 6], "sprites": {"L": "light_base", "C": "color_overlay"}, "layers": [{"map": ["L"]}, {"map": ["C"], "blend": "multiply"}]}
```

</div>

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

## Normal Blend Mode

Standard alpha compositing (source over destination). The default blend mode.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "base_square", "palette": {"{.}": "#00000000", "{r}": "#FF4444", "{g}": "#44FF44", "{b}": "#4444FF"}, "grid": ["{r}{r}{r}{r}{r}{r}", "{r}{r}{r}{r}{r}{r}", "{g}{g}{g}{g}{g}{g}", "{g}{g}{g}{g}{g}{g}", "{b}{b}{b}{b}{b}{b}", "{b}{b}{b}{b}{b}{b}"]}
{"type": "sprite", "name": "semi_white", "palette": {"{.}": "#00000000", "{w}": "#FFFFFF80"}, "grid": ["{.}{.}{.}{.}{.}{.}", "{.}{.}{w}{w}{.}{.}", "{.}{.}{w}{w}{.}{.}", "{.}{.}{w}{w}{.}{.}", "{.}{.}{w}{w}{.}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_normal_demo", "size": [6, 6], "sprites": {"B": "base_square", "W": "semi_white"}, "layers": [{"map": ["B"]}, {"map": ["W"], "blend": "normal"}]}
```

</div>

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

## Darken Blend Mode

Keeps darker color per channel: result = min(base, blend).

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "light_colors", "palette": {"{y}": "#FFFF00", "{c}": "#00FFFF", "{m}": "#FF00FF"}, "grid": ["{y}{y}{y}{y}{y}{y}", "{y}{y}{y}{y}{y}{y}", "{c}{c}{c}{c}{c}{c}", "{c}{c}{c}{c}{c}{c}", "{m}{m}{m}{m}{m}{m}", "{m}{m}{m}{m}{m}{m}"]}
{"type": "sprite", "name": "medium_gray", "palette": {"{.}": "#00000000", "{g}": "#808080"}, "grid": ["{.}{.}{.}{.}{.}{.}", "{.}{g}{g}{g}{g}{.}", "{.}{g}{g}{g}{g}{.}", "{.}{g}{g}{g}{g}{.}", "{.}{g}{g}{g}{g}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_darken_demo", "size": [6, 6], "sprites": {"L": "light_colors", "G": "medium_gray"}, "layers": [{"map": ["L"]}, {"map": ["G"], "blend": "darken"}]}
```

</div>

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

## Lighten Blend Mode

Keeps lighter color per channel: result = max(base, blend).

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "dark_colors", "palette": {"{r}": "#880000", "{g}": "#008800", "{b}": "#000088"}, "grid": ["{r}{r}{r}{r}{r}{r}", "{r}{r}{r}{r}{r}{r}", "{g}{g}{g}{g}{g}{g}", "{g}{g}{g}{g}{g}{g}", "{b}{b}{b}{b}{b}{b}", "{b}{b}{b}{b}{b}{b}"]}
{"type": "sprite", "name": "light_gray", "palette": {"{.}": "#00000000", "{l}": "#AAAAAA"}, "grid": ["{.}{.}{.}{.}{.}{.}", "{.}{l}{l}{l}{l}{.}", "{.}{l}{l}{l}{l}{.}", "{.}{l}{l}{l}{l}{.}", "{.}{l}{l}{l}{l}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_lighten_demo", "size": [6, 6], "sprites": {"D": "dark_colors", "L": "light_gray"}, "layers": [{"map": ["D"]}, {"map": ["L"], "blend": "lighten"}]}
```

</div>

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

## Add (Additive) Blend Mode

Additive blending: result = min(1, base + blend). Useful for lights, glows, and brightening effects.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "rgb_base", "palette": {"{r}": "#AA0000", "{g}": "#00AA00", "{b}": "#0000AA"}, "grid": ["{r}{r}{r}{r}{r}{r}", "{r}{r}{r}{r}{r}{r}", "{g}{g}{g}{g}{g}{g}", "{g}{g}{g}{g}{g}{g}", "{b}{b}{b}{b}{b}{b}", "{b}{b}{b}{b}{b}{b}"]}
{"type": "sprite", "name": "additive_light", "palette": {"{.}": "#00000000", "{w}": "#555555"}, "grid": ["{.}{.}{.}{.}{.}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_add_demo", "size": [6, 6], "sprites": {"R": "rgb_base", "A": "additive_light"}, "layers": [{"map": ["R"]}, {"map": ["A"], "blend": "add"}]}
```

</div>

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

## Subtract (Subtractive) Blend Mode

Subtractive blending: result = max(0, base - blend). Useful for darkening by removal.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "bright_base", "palette": {"{r}": "#FF4444", "{g}": "#44FF44", "{b}": "#4444FF"}, "grid": ["{r}{r}{r}{r}{r}{r}", "{r}{r}{r}{r}{r}{r}", "{g}{g}{g}{g}{g}{g}", "{g}{g}{g}{g}{g}{g}", "{b}{b}{b}{b}{b}{b}", "{b}{b}{b}{b}{b}{b}"]}
{"type": "sprite", "name": "subtract_mask", "palette": {"{.}": "#00000000", "{s}": "#444444"}, "grid": ["{.}{.}{.}{.}{.}{.}", "{.}{s}{s}{s}{s}{.}", "{.}{s}{s}{s}{s}{.}", "{.}{s}{s}{s}{s}{.}", "{.}{s}{s}{s}{s}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_subtract_demo", "size": [6, 6], "sprites": {"B": "bright_base", "S": "subtract_mask"}, "layers": [{"map": ["B"]}, {"map": ["S"], "blend": "subtract"}]}
```

</div>

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

## Difference Blend Mode

Color difference: result = abs(base - blend). Creates inverted/negative effects where colors differ.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "solid_colors", "palette": {"{r}": "#FF0000", "{g}": "#00FF00", "{b}": "#0000FF"}, "grid": ["{r}{r}{r}{r}{r}{r}", "{r}{r}{r}{r}{r}{r}", "{g}{g}{g}{g}{g}{g}", "{g}{g}{g}{g}{g}{g}", "{b}{b}{b}{b}{b}{b}", "{b}{b}{b}{b}{b}{b}"]}
{"type": "sprite", "name": "white_patch", "palette": {"{.}": "#00000000", "{w}": "#FFFFFF"}, "grid": ["{.}{.}{.}{.}{.}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{w}{w}{w}{w}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_difference_demo", "size": [6, 6], "sprites": {"C": "solid_colors", "W": "white_patch"}, "layers": [{"map": ["C"]}, {"map": ["W"], "blend": "difference"}]}
```

</div>

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

## Overlay Blend Mode

Combines multiply and screen based on base brightness. Dark base colors are multiplied, light base colors are screened. Useful for contrast enhancement.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "gradient_base", "palette": {"{1}": "#222222", "{2}": "#444444", "{3}": "#666666", "{4}": "#888888", "{5}": "#AAAAAA", "{6}": "#CCCCCC"}, "grid": ["{1}{1}{1}{1}{1}{1}", "{2}{2}{2}{2}{2}{2}", "{3}{3}{3}{3}{3}{3}", "{4}{4}{4}{4}{4}{4}", "{5}{5}{5}{5}{5}{5}", "{6}{6}{6}{6}{6}{6}"]}
{"type": "sprite", "name": "color_band", "palette": {"{.}": "#00000000", "{o}": "#FF8800"}, "grid": ["{.}{.}{.}{.}{.}{.}", "{.}{o}{o}{o}{o}{.}", "{.}{o}{o}{o}{o}{.}", "{.}{o}{o}{o}{o}{.}", "{.}{o}{o}{o}{o}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_overlay_demo", "size": [6, 6], "sprites": {"G": "gradient_base", "C": "color_band"}, "layers": [{"map": ["G"]}, {"map": ["C"], "blend": "overlay"}]}
```

</div>

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

## Screen Blend Mode

Lightens underlying colors: result = 1 - (1 - base) * (1 - blend). Useful for highlights and lightening effects.

<div class="demo-source">

```jsonl
{"type": "sprite", "name": "dark_base", "palette": {"{k}": "#000000", "{d}": "#333333"}, "grid": ["{k}{k}{k}{k}{k}{k}", "{k}{d}{d}{d}{d}{d}", "{k}{d}{d}{d}{d}{d}", "{k}{d}{d}{d}{d}{d}", "{k}{d}{d}{d}{d}{d}", "{k}{d}{d}{d}{d}{d}"]}
{"type": "sprite", "name": "bright_overlay", "palette": {"{.}": "#00000000", "{r}": "#FF4444", "{g}": "#44FF44", "{b}": "#4444FF"}, "grid": ["{r}{r}{r}{r}{r}{.}", "{r}{r}{r}{r}{r}{.}", "{g}{g}{g}{g}{g}{.}", "{g}{g}{g}{g}{g}{.}", "{b}{b}{b}{b}{b}{.}", "{.}{.}{.}{.}{.}{.}"]}
{"type": "composition", "name": "blend_screen_demo", "size": [6, 6], "sprites": {"D": "dark_base", "B": "bright_overlay"}, "layers": [{"map": ["D"]}, {"map": ["B"], "blend": "screen"}]}
```

</div>

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