Appearance
Showcase
The gallery draws every primitive with its default params. This page shows what the defaults hide: params and spec options added since, each drawn by the committed library from the spec under its picture (seed 12345). Moving examples loop one second at 30 frames per second; transparent examples sit on a checkerboard so the alpha is visible.
Rendered with npm run showcase:generate
Added in 0.11.0

stickman: the presenter
animspec's default avatar points at a line-chart's newest point (action: "point" with targetX/targetY) and speaks the frame's label in a bubble (speech: true). The chart and the speech both come from the host's frame data.
Spec
{
"accent": "#ff2d2d",
"layers": [
{
"type": "line-chart",
"points": 8,
"fill": true
},
{
"type": "stickman",
"action": "point",
"x": 0.08,
"scale": 0.5,
"targetX": 0.9,
"targetY": 0.22,
"speech": true,
"colour": "accent",
"style": "joints"
}
]
}
stickman: a choreographed fight
Two stickman layers and a sequence of clips: they square up, one punches as the other is hit, a kick sends the second into a fall, then a dance over the ko. Interaction is choreography: each beat is a clip, and no figure reads another.
Spec
{
"accent": "#ff2d2d",
"sequence": [
{
"from": 0,
"to": 24,
"layers": [
{
"type": "stickman",
"action": "walk",
"x": 0.38,
"scale": 0.55,
"facing": "right",
"style": "bold"
},
{
"type": "stickman",
"action": "walk",
"x": 0.62,
"scale": 0.55,
"facing": "left",
"style": "bold",
"colour": "accent"
}
]
},
{
"from": 24,
"to": 44,
"layers": [
{
"type": "stickman",
"action": "punch",
"x": 0.415,
"scale": 0.55,
"facing": "right",
"style": "bold"
},
{
"type": "stickman",
"action": "hit",
"x": 0.585,
"scale": 0.55,
"facing": "left",
"style": "bold",
"colour": "accent"
}
]
},
{
"from": 44,
"to": 64,
"layers": [
{
"type": "stickman",
"action": "kick",
"x": 0.415,
"scale": 0.55,
"facing": "right",
"style": "bold"
},
{
"type": "stickman",
"action": "fall",
"x": 0.585,
"scale": 0.55,
"facing": "left",
"style": "bold",
"colour": "accent"
}
]
},
{
"from": 64,
"to": 90,
"layers": [
{
"type": "stickman",
"action": "dance",
"x": 0.38,
"scale": 0.55,
"facing": "right",
"style": "bold"
},
{
"type": "stickman",
"action": "ko",
"x": 0.62,
"scale": 0.55,
"facing": "left",
"style": "bold",
"colour": "accent"
}
]
}
]
}
stickman: a crowd on the beat
One layer, nine figures: count: 9 with arrangement: "cluster" dances out of step (each figure's phase and size come from the seed) and hops on loud frames (drive: "beat"); highlight: 5 picks the one in red.
Spec
{
"accent": "#ff2d2d",
"layers": [
{
"type": "dots",
"count": 90
},
{
"type": "stickman",
"action": "dance",
"count": 9,
"arrangement": "cluster",
"highlight": 5,
"scale": 0.36,
"y": 0.9,
"drive": "beat"
}
]
}Added in 0.10.0

Game Boy DMG profile
160 × 144 with profile: "gameboy-dmg" and pixelMode: the background, ink, accent, fg2 and the hero's parts all come from the four DMG greens, so every pixel of every frame is one of them. No roles are written by hand.
Spec
{
"background": "white",
"profile": "gameboy-dmg",
"pixelMode": true,
"layers": [
{
"type": "checker",
"pattern": "b",
"size": 16
},
{
"type": "tetris",
"cols": 8
},
{
"type": "sprite",
"character": "hero",
"motion": "bounce",
"speed": 1.2,
"scale": 2,
"y": 0.95,
"reactive": false
}
]
}
Genesis profile
320 × 224 with profile: "genesis": four image planes scroll at their own speeds, the hero walks in front, and a dither band with matrix: "2" mixes two sea tones in a checkerboard. Every colour, including the art's, is snapped to the 512-colour 9-bit grid.
Spec
{
"profile": "genesis",
"pixelMode": true,
"roles": {
"boots": "#5a3418",
"cloak": "#2d4a8c",
"cloak-shade": "#1a2c55",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#8a4a20",
"hair-light": "#d08850",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#a02828",
"sea-dark": "#1830a0",
"sea-light": "#3878e0"
},
"assets": {
"sky": {
"sha256": "48c82ff3921e8fe7a9f4e9a73d197a95784ef73fb9d4f0d5d6e5231c9f599404",
"width": 320,
"height": 180
},
"mountains": {
"sha256": "fdad037c5bea251875d3ea4632643028adce2647ccda534e0c11cc46206655b4",
"width": 320,
"height": 180
},
"trees": {
"sha256": "096f17fbeac2b3bd01762cbdc203282894dbc7474400ba7212518ea6a7f213d6",
"width": 160,
"height": 180
},
"ground": {
"sha256": "139d9d18324ee765983b674ebec862c6d85556482dff003a3cf11c5a3dca1b54",
"width": 64,
"height": 180
}
},
"layers": [
{
"type": "image",
"asset": "sky",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0,
"drive": "none"
},
{
"type": "image",
"asset": "mountains",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0.05,
"drive": "none"
},
{
"type": "image",
"asset": "trees",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0.2,
"drive": "none"
},
{
"type": "image",
"asset": "ground",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0.5,
"drive": "none"
},
{
"type": "dither",
"colors": "sea-dark,sea-light",
"y0": 0.8,
"matrix": "2",
"drive": "none"
},
{
"type": "sprite",
"character": "hero",
"motion": "static",
"scale": 3,
"x": 0.35,
"y": 0.62,
"reactive": false
}
]
}
Arcade attract mode (horizontal)
A MAME-era horizontal attract screen at 256 × 224 with pixelMode: a dots starfield over a gridhorizon floor, the player sprite, and hud-score reading 1UP, HI-SCORE and CREDIT from the frame's labels; 1UP flashes on the beat, and INSERT COIN waits. The CRT look is a finish added after animspec (Motion Studio).
Spec
{
"pixelMode": true,
"accent": "#f0c020",
"layers": [
{
"type": "dots",
"count": 90
},
{
"type": "gridhorizon"
},
{
"type": "sprite",
"character": "bot",
"motion": "bounce",
"speed": 1.4,
"scale": 3,
"y": 0.7,
"reactive": false
},
{
"type": "type-reveal",
"text": "INSERT COIN",
"framesPerUnit": 1,
"fontSize": 14,
"y": 0.86
},
{
"type": "hud-score",
"size": 0.055
}
]
}Added in 0.9.0

News ticker
ticker scrolls the frame's labels as a news band, joined by separators; the headline crossing the centre turns accent on loud frames. The bars above follow the same signal.
Spec
{
"accent": "#e02020",
"layers": [
{
"type": "bars",
"heightFrac": 0.6
},
{
"type": "ticker",
"speed": 3
}
]
}
Versus stage (CPS II profile)
384 × 224 with pixelMode: two fighter sprites, the second a player-two palette swap (variant: "alt") facing left. A sequence of clips stages the exchange: guard, a pose: "punch" against a pose: "hit", then guard again. versus-bars reads each side's health and damage tail from the frame's coords (the tail drains after the hit); hud-score draws the timer and names from its labels.
Spec
{
"pixelMode": true,
"accent": "#e02020",
"roles": {
"boots": "#c03030",
"cloak": "#203870",
"cloak-shade": "#152650",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#202020",
"hair-light": "#484848",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#101010",
"s0": "#101040",
"s1": "#a04050",
"d0": "#6a4a28",
"cloak-alt": "#a03018",
"cloak-shade-alt": "#702010",
"gold-alt": "#f0f0f0"
},
"sequence": [
{
"from": 0,
"to": 10,
"layers": [
{
"type": "dither",
"colors": "s0,s1",
"x0": 0,
"y0": 0,
"x1": 1,
"y1": 0.78,
"drive": "none"
},
{
"type": "dither",
"colors": "d0",
"x0": 0,
"y0": 0.78,
"x1": 1,
"y1": 1,
"drive": "none"
},
{
"type": "sprite",
"character": "fighter",
"motion": "static",
"scale": 4,
"x": 0.36,
"y": 0.56,
"reactive": false,
"pose": "auto"
},
{
"type": "sprite",
"character": "fighter",
"motion": "static",
"scale": 4,
"x": 0.64,
"y": 0.56,
"reactive": false,
"faceLeft": true,
"variant": "alt",
"pose": "auto"
},
{
"type": "versus-bars"
},
{
"type": "hud-score",
"layout": "versus",
"drive": "none"
}
]
},
{
"from": 10,
"to": 16,
"layers": [
{
"type": "dither",
"colors": "s0,s1",
"x0": 0,
"y0": 0,
"x1": 1,
"y1": 0.78,
"drive": "none"
},
{
"type": "dither",
"colors": "d0",
"x0": 0,
"y0": 0.78,
"x1": 1,
"y1": 1,
"drive": "none"
},
{
"type": "sprite",
"character": "fighter",
"motion": "static",
"scale": 4,
"x": 0.36,
"y": 0.56,
"reactive": false,
"pose": "punch"
},
{
"type": "sprite",
"character": "fighter",
"motion": "static",
"scale": 4,
"x": 0.64,
"y": 0.56,
"reactive": false,
"faceLeft": true,
"variant": "alt",
"pose": "hit"
},
{
"type": "versus-bars"
},
{
"type": "hud-score",
"layout": "versus",
"drive": "none"
}
]
},
{
"from": 16,
"to": 30,
"layers": [
{
"type": "dither",
"colors": "s0,s1",
"x0": 0,
"y0": 0,
"x1": 1,
"y1": 0.78,
"drive": "none"
},
{
"type": "dither",
"colors": "d0",
"x0": 0,
"y0": 0.78,
"x1": 1,
"y1": 1,
"drive": "none"
},
{
"type": "sprite",
"character": "fighter",
"motion": "static",
"scale": 4,
"x": 0.36,
"y": 0.56,
"reactive": false,
"pose": "auto"
},
{
"type": "sprite",
"character": "fighter",
"motion": "static",
"scale": 4,
"x": 0.64,
"y": 0.56,
"reactive": false,
"faceLeft": true,
"variant": "alt",
"pose": "auto"
},
{
"type": "versus-bars"
},
{
"type": "hud-score",
"layout": "versus",
"drive": "none"
}
]
}
]
}
Vertical shooter (tate profile)
224 × 288 portrait with pixelMode: the player's ship (a built-in sprite character, its engine flame flickering) weaves under a drifting formation of alien sprites over a dots starfield, and hud-score shows 1UP, HI-SCORE and CREDIT from the frame's labels; the score rises as the host's data changes.
Spec
{
"pixelMode": true,
"roles": {
"outline": "#101018",
"cloak": "#c8d0e0",
"cloak-shade": "#6878a0",
"hair-light": "#40c8f0",
"tunic": "#d02020",
"gold": "#f8c020",
"boots": "#f03030"
},
"layers": [
{
"type": "dots",
"count": 120
},
{
"type": "sprite",
"icon": "alien",
"motion": "bounce",
"speed": 0.6,
"scale": 2,
"x": 0.395,
"y": 0.24,
"reactive": false
},
{
"type": "sprite",
"icon": "alien",
"motion": "bounce",
"speed": 0.6,
"scale": 2,
"x": 0.465,
"y": 0.32,
"reactive": false
},
{
"type": "sprite",
"icon": "alien",
"motion": "bounce",
"speed": 0.6,
"scale": 2,
"x": 0.535,
"y": 0.24,
"reactive": false
},
{
"type": "sprite",
"icon": "alien",
"motion": "bounce",
"speed": 0.6,
"scale": 2,
"x": 0.605,
"y": 0.32,
"reactive": false
},
{
"type": "sprite",
"character": "ship",
"motion": "bounce",
"speed": 1.2,
"scale": 2,
"y": 0.86,
"reactive": false
},
{
"type": "hud-score"
}
]
}
Print-exact bars and rings
pixelMode: true puts every bar edge and ring outline on whole pixels, so each pixel is exactly a palette colour; tone2: "alternate" draws every other bar and ring in roles.fg2.
Spec
{
"accent": "#c8963e",
"pixelMode": true,
"roles": {
"fg2": "#d8c8a0"
},
"layers": [
{
"type": "bars",
"tone2": "alternate",
"heightFrac": 0.5
},
{
"type": "rings",
"tone2": "alternate",
"count": 6,
"thickness": 6
}
]
}Added in 0.8.0

Shot list
A sequence of four clips in one spec: a title, a dithered night scene (wipe in), the hero (iris in) and an end card (fade in). Each clip animates from its own first frame; any frame renders alone.
Spec
{
"roles": {
"boots": "#5a3418",
"cloak": "#2d4a8c",
"cloak-shade": "#1a2c55",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#8a4a20",
"hair-light": "#d08850",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#a02828",
"s0": "#000014",
"s1": "#281444",
"s2": "#6c3468",
"d0": "#a06438",
"d1": "#d8a868"
},
"sequence": [
{
"from": 0,
"to": 8,
"layers": [
{
"type": "text"
}
]
},
{
"from": 8,
"to": 16,
"layers": [
{
"type": "dither",
"colors": "s0,s1,s2",
"y1": 0.7,
"drive": "none"
},
{
"type": "dither",
"colors": "d0,d1",
"y0": 0.7,
"drive": "none"
}
],
"transition": {
"type": "wipe",
"frames": 4,
"direction": "left"
}
},
{
"from": 16,
"to": 24,
"layers": [
{
"type": "dither",
"colors": "d1,d0,s2",
"y1": 0.7,
"drive": "none"
},
{
"type": "dither",
"colors": "s1,s0",
"y0": 0.7,
"drive": "none"
},
{
"type": "sprite",
"character": "hero",
"motion": "static",
"scale": 4,
"y": 0.6,
"reactive": false
}
],
"transition": {
"type": "iris",
"frames": 4
}
},
{
"from": 24,
"to": 30,
"layers": [
{
"type": "caption",
"box": "outline",
"position": "center"
}
],
"transition": {
"type": "fade",
"frames": 4
}
}
]
}
Sprite sheet walk
An 8-frame walk-cycle sheet played by image with sheetCols: 8 and fps: 8: the frame is a closed form of time, so any frame renders alone. The ground scrolls beneath.
Spec
{
"roles": {
"soil": "#6a4a2a",
"grass": "#3a8a2a"
},
"assets": {
"walk": {
"sha256": "9c29d0267a97a9b0fde7e4437e6249643f98e64cdf77fec0d63bcd551b3ee0d5",
"width": 256,
"height": 40
},
"ground": {
"sha256": "139d9d18324ee765983b674ebec862c6d85556482dff003a3cf11c5a3dca1b54",
"width": 64,
"height": 180
}
},
"layers": [
{
"type": "dither",
"colors": "grass,soil",
"y0": 0.78,
"drive": "none"
},
{
"type": "image",
"asset": "ground",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0.2,
"drive": "none"
},
{
"type": "image",
"asset": "walk",
"sheetCols": 8,
"fps": 8,
"fit": "none",
"scale": 3,
"x": 0.5,
"y": 0.86,
"anchor": "bottom",
"drive": "none"
}
]
}
Parallax forest
Four declared image assets (assets, pinned by sha256) wrap and scroll at four speeds with wrap and scrollX; the hero walks in front. The art keeps its own colours in creative mode.
Spec
{
"roles": {
"boots": "#5a3418",
"cloak": "#2d4a8c",
"cloak-shade": "#1a2c55",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#8a4a20",
"hair-light": "#d08850",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#a02828"
},
"assets": {
"sky": {
"sha256": "48c82ff3921e8fe7a9f4e9a73d197a95784ef73fb9d4f0d5d6e5231c9f599404",
"width": 320,
"height": 180
},
"mountains": {
"sha256": "fdad037c5bea251875d3ea4632643028adce2647ccda534e0c11cc46206655b4",
"width": 320,
"height": 180
},
"trees": {
"sha256": "096f17fbeac2b3bd01762cbdc203282894dbc7474400ba7212518ea6a7f213d6",
"width": 160,
"height": 180
},
"ground": {
"sha256": "139d9d18324ee765983b674ebec862c6d85556482dff003a3cf11c5a3dca1b54",
"width": 64,
"height": 180
}
},
"layers": [
{
"type": "image",
"asset": "sky",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0,
"drive": "none"
},
{
"type": "image",
"asset": "mountains",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0.05,
"drive": "none"
},
{
"type": "image",
"asset": "trees",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0.2,
"drive": "none"
},
{
"type": "image",
"asset": "ground",
"fit": "none",
"x": 0,
"y": 0,
"anchor": "top-left",
"wrap": "x",
"scrollX": 0.5,
"drive": "none"
},
{
"type": "sprite",
"character": "hero",
"motion": "static",
"scale": 3,
"x": 0.35,
"y": 0.62,
"reactive": false
}
]
}Added in 0.7.0

DOS adventure
Ordered Bayer dither bands for the sky, sand, props and the UI bar; the hero walks; the verb and parser line sit in the bar with caption.margin. pixelAspect: 1.2 records the Mode 13h pixel shape.
Spec
{
"pixelAspect": 1.2,
"accent": "#0000a8",
"roles": {
"boots": "#5a3418",
"cloak": "#2d4a8c",
"cloak-shade": "#1a2c55",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#8a4a20",
"hair-light": "#d08850",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#a02828",
"s0": "#000014",
"s1": "#281444",
"s2": "#6c3468",
"d0": "#a06438",
"d1": "#d8a868",
"glow": "#38fc38"
},
"layers": [
{
"type": "dither",
"colors": "s0,s1,s2",
"x0": 0,
"y0": 0,
"x1": 1,
"y1": 0.556,
"drive": "none"
},
{
"type": "dither",
"colors": "d0,d1",
"x0": 0,
"y0": 0.556,
"x1": 1,
"y1": 0.7,
"drive": "none"
},
{
"type": "dither",
"colors": "accent",
"x0": 0,
"y0": 0.7,
"x1": 1,
"y1": 1,
"drive": "none"
},
{
"type": "dither",
"colors": "outline",
"x0": 0.694,
"y0": 0.244,
"x1": 0.763,
"y1": 0.611,
"drive": "none"
},
{
"type": "dither",
"colors": "cloak-shade",
"x0": 0.694,
"y0": 0.244,
"x1": 0.713,
"y1": 0.611,
"drive": "none"
},
{
"type": "dither",
"colors": "cloak",
"x0": 0.1875,
"y0": 0.511,
"x1": 0.269,
"y1": 0.644,
"drive": "none"
},
{
"type": "dither",
"colors": "bg",
"x0": 0.197,
"y0": 0.528,
"x1": 0.259,
"y1": 0.6,
"drive": "none"
},
{
"type": "dither",
"colors": "glow",
"x0": 0.203,
"y0": 0.544,
"x1": 0.231,
"y1": 0.55,
"drive": "none"
},
{
"type": "dither",
"colors": "glow",
"x0": 0.203,
"y0": 0.561,
"x1": 0.244,
"y1": 0.567,
"drive": "none"
},
{
"type": "sprite",
"character": "hero",
"motion": "bounce",
"speed": 3.141592653589793,
"scale": 3,
"y": 0.66,
"reactive": false
},
{
"type": "caption",
"box": "none",
"margin": 0,
"maxLines": 2
}
]
}
Game Boy level
The four DMG greens from palette roles alone: the sky is a b-filled checker in roles.fg2, the bricks are accent cells, and the hero's parts take the darker greens.
Spec
{
"background": "white",
"accent": "#306230",
"roles": {
"fg2": "#9bbc0c",
"outline": "#0f380f",
"hair": "#306230",
"hair-light": "#8bac0f",
"skin": "#8bac0f",
"eyes": "#0f380f",
"gold": "#8bac0f",
"cloak": "#306230",
"cloak-shade": "#0f380f",
"tunic": "#306230",
"boots": "#0f380f"
},
"layers": [
{
"type": "checker",
"pattern": "b",
"size": 40
},
{
"type": "grid",
"solid": true,
"pattern": "................/................/................/................/................/.........aaa..../................/................/aaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaa"
},
{
"type": "sprite",
"character": "hero",
"motion": "bounce",
"speed": 3.141592653589793,
"scale": 5,
"y": 0.8,
"reactive": false
}
]
}
SNES level
The same level in 16-bit colour: a sky-blue roles.fg2, brick accent cells, white clouds from # cells, and the hero in full roles colour.
Spec
{
"background": "black",
"accent": "#c84c0c",
"roles": {
"boots": "#5a3418",
"cloak": "#2d4a8c",
"cloak-shade": "#1a2c55",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#8a4a20",
"hair-light": "#d08850",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#a02828",
"fg2": "#5c94fc"
},
"layers": [
{
"type": "checker",
"pattern": "b",
"size": 40
},
{
"type": "grid",
"solid": true,
"pattern": "................/..##........##../.####......####./................/................/.........aaa..../................/................/aaaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaa"
},
{
"type": "sprite",
"character": "hero",
"motion": "bounce",
"speed": 3.141592653589793,
"scale": 5,
"y": 0.8,
"reactive": false
}
]
}
Two-tone quilt
b cells take the second tone, roles.fg2, next to # and the accent; in monochrome they draw mid grey.
Spec
{
"accent": "#c8963e",
"roles": {
"fg2": "#d8c8a0"
},
"layers": [
{
"type": "grid",
"solid": true,
"pattern": "##.a.##/#b...b#/..###../#b...b#/##.a.##"
}
]
}
hero: palette roles
The v2 hero walking, each part in the colour the spec's roles map gives it (creative mode).
Spec
{
"roles": {
"boots": "#5a3418",
"cloak": "#2d4a8c",
"cloak-shade": "#1a2c55",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#8a4a20",
"hair-light": "#d08850",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#a02828"
},
"layers": [
{
"type": "sprite",
"character": "hero",
"scale": 6,
"speed": 1.4,
"reactive": false
}
]
}
hero: monochrome
Without creative mode the same character falls back to the legacy greys and reads in pure black and white.
Spec
{
"roles": {
"boots": "#5a3418",
"cloak": "#2d4a8c",
"cloak-shade": "#1a2c55",
"eyes": "#1e6b3a",
"gold": "#e0b030",
"hair": "#8a4a20",
"hair-light": "#d08850",
"outline": "#201010",
"skin": "#f0c8a0",
"tunic": "#a02828"
},
"layers": [
{
"type": "sprite",
"character": "hero",
"motion": "static",
"scale": 6,
"y": 0.55
}
]
}Added in 0.6.0

Quilt pattern
pattern draws exactly the authored cells: . empty, # foreground, a accent. With solid, every pixel is one of the three.
Spec
{
"accent": "#c8963e",
"layers": [
{
"type": "grid",
"solid": true,
"pattern": "##.a.##/#.....#/..###../#.....#/##.a.##"
}
]
}
Break it once
breaks: "3,2 r15" turns one block about its centre; every other cell stays put.
Spec
{
"accent": "#c8963e",
"layers": [
{
"type": "grid",
"solid": true,
"pattern": "##.a.##/#.....#/..###../#.....#/##.a.##",
"breaks": "3,2 r15"
}
]
}
Patterned checker
A checker pattern tiles from the top-left; ~ squares still flip with the signal.
Spec
{
"accent": "#c8963e",
"layers": [
{
"type": "checker",
"size": 30,
"pattern": "#.~/.a./~.#"
}
]
}Added in 0.5.0

Camera shake
A seeded tremble on a static camera: shake: { amp: 0.03, freq: 4 }.
Spec
{
"camera": {
"move": "static",
"from": {
"frame": 0,
"zoom": 1,
"x": 0.5,
"y": 0.5
},
"shake": {
"amp": 0.03,
"freq": 4
}
},
"layers": [
{
"type": "grid"
},
{
"type": "wave"
}
]
}
Shake under parallax
Each layer shakes by its depth: the horizon at depth 0 stays still, the figures at depth 1 shake fully.
Spec
{
"camera": {
"move": "parallax",
"from": {
"frame": 0,
"zoom": 1,
"x": 0.5,
"y": 0.5
},
"to": {
"frame": 29,
"zoom": 1,
"x": 0.5,
"y": 0.5
},
"shake": {
"amp": 0.04,
"freq": 3
}
},
"layers": [
{
"type": "gridhorizon",
"depth": 0
},
{
"type": "figure",
"count": 3,
"depth": 1
}
]
}
Wide pan
A pan from x: 0.5 to x: 1.5, past the old 0..1 range, over parallax layers.
Spec
{
"camera": {
"move": "parallax",
"from": {
"frame": 0,
"zoom": 1,
"x": 0.5,
"y": 0.5
},
"to": {
"frame": 29,
"zoom": 1,
"x": 1.5,
"y": 0.5
}
},
"layers": [
{
"type": "gridhorizon",
"depth": 0.3
},
{
"type": "figure",
"count": 3,
"depth": 1
}
]
}
Transparent, light ink
background: "transparent": the black lifted out to alpha, shown over a checkerboard.
Spec
{
"background": "transparent",
"layers": [
{
"type": "grid"
},
{
"type": "wave"
},
{
"type": "figure",
"count": 3
}
]
}
Transparent, dark ink
ink: "dark": drawn as on white with the white lifted out, for print over light paper.
Spec
{
"background": "transparent",
"ink": "dark",
"layers": [
{
"type": "grid"
},
{
"type": "wave"
},
{
"type": "figure",
"count": 3
}
]
}
Transparent with an accent
An accent colour in creative mode on a transparent background.
Spec
{
"background": "transparent",
"accent": "#ff2d2d",
"layers": [
{
"type": "rings"
},
{
"type": "wave"
}
]
}Added in 0.4.0

grid: solid
solid: true lights cells at full opacity on whole pixels, so every pixel is exactly bg, fg or accent.
Spec
{
"layers": [
{
"type": "grid",
"solid": true
}
]
}
Line thickness
thickness in pixels: rings at 8 and wave at 20.
Spec
{
"layers": [
{
"type": "rings",
"thickness": 8
},
{
"type": "wave",
"thickness": 20
}
]
}
figure: wave and cheer
The wave stance in a row, and cheer in an outlined cluster placed with x, y and scale.
Spec
{
"layers": [
{
"type": "figure",
"count": 2,
"stance": "wave",
"x": 0.3,
"y": 0.55,
"scale": 0.45
},
{
"type": "figure",
"count": 3,
"stance": "cheer",
"arrangement": "cluster",
"style": "outline",
"x": 0.75,
"y": 0.6,
"scale": 0.4
}
]
}
rig: wave
The host rig's wave pose.
Spec
{
"layers": [
{
"type": "rig",
"pose": "wave"
}
]
}
rig: present
The host rig's present pose.
Spec
{
"layers": [
{
"type": "rig",
"pose": "present"
}
]
}
rig: reach
The bot rig's reach pose.
Spec
{
"layers": [
{
"type": "rig",
"rig": "bot",
"pose": "reach"
}
]
}