Repository navigation
Releases
0.11.0 — vocabulary 23: stickman, the default avatar
Stickman, the default avatar: a new core primitive stickman (spec 030), an articulated stick
figure that acts, gestures at the rest of the frame, speaks, moves with host data, and draws a
whole crowd from one layer. No existing reference frame moved.
- 15 actions: idle, walk, run, jump, punch, kick, hit, fall (tips over once and stays down),
ko, wave and dance, pluspoint,present,reachandlookaimed at
targetX/targetY;travelandfacing. Every pose is a closed-form function of time. - Interaction through params and frame data: aim at a target such as a
line-chart's newest
point,speech(the frame's label in a bubble),from: "coords"(stand where the host
says), anddrivelevel or beat; every number is bindable. - Crowds in one layer:
countup to 12,arrangementrow, cluster or split, each figure's
phase and size from the seed, onehighlightand one speaker,coords[index + i]per
figure. - Six styles (classic, bold, outline, chibi, pixel, joints) and
colour(fg, accent, fg2).
The pixel style, and every style underpixelMode, is exact in the palette and the
profiles. - In the core vocabulary and the data-viz, minimal and arcade kits. Showcase:
stickman-presenter,stickman-fightandstickman-dance; a gallery demo. - AI prompting: three stickman use cases (data narrator, scenes from a prompt, interactive);
the vocabulary example now matches theselect/selectDetailedAPI. - Dev dependency:
@types/node26.6.6.
0.10.0 — vocabulary 22: palette profiles, a fighter and a line chart
Palette profiles, a fighter and a line chart: named Game Boy and Genesis palettes (spec 028,
#102, #104), the fighter character with fighting poses and palette variants (spec 029), and
line-chart (#133). No existing reference frame moved.
profile(spec-level, creative mode only):gameboy-dmgsets the background, ink, accent,
fg2and the hero's and fighter's parts from the four DMG greens, so a solid 160 × 144
scene uses exactly those four;genesissnaps every named colour and every image colour drawn
in its own colours to the 512-colour 9-bit grid, with on-or-off transparency. Fixed greys in
primitives follow the profile;plasmamixes from background to ink. Constitution 6.3.0:
"The format" namesprofile.dithergainsmatrix: "2", a 2 × 2 checkerboard for the Genesis colour mix;tetrisjoins
pixel mode.sprite: thefightercharacter (a 28 × 34 martial artist with walk, guard, jump, punch, hit
and KO frames, using the hero's role names);pose(auto,punch,hit,ko) holds a
fighting pose, switched over time withsequenceclips;variant: "alt"is a player-two
palette swap through<role>-altroles.sprite: theshipcharacter, a nose-up shooter craft whose engine flame flickers; the
tate-shooterloop now flies it under a drifting alien formation.line-chart: the frame'scoords(or the spectrum) as a revealed polyline over light axes,
the newest point an accent head that grows with the signal.- Style profiles: Game Boy (160 × 144), Genesis (320 × 224) and a MAME-era horizontal arcade
(256 × 224) join CPS II and tate. - Showcase:
game-boy-dmg,genesisandarcade-attract;cps2-versusrestaged with two
fighters, a punch and a hit; aline-chartgallery demo.
0.9.0 — vocabulary 19: pixel mode, an arcade HUD and a news ticker
Pixel mode, an arcade HUD and a news ticker: palette-exact whole-pixel drawing (spec 026,
#111, #158, #159), the data-bound versus-bars and hud-score (spec 027, #105, #106), and
ticker (#139). No existing reference frame moved.
pixelMode: true(spec-level): camera offsets round to whole pixels, image smoothing is off
for the frame, andbars,hbars,rings,emitter,particlesandimagedraw on whole
pixels, so on a solid background every pixel they draw is exactly a palette colour (bars at a
248.025 px pitch: 2 colours, previously 26). Emitter particles show while their fade is at
least one half. Constitution 6.2.0: "The format" namespixelMode.tone2onbars(alternate,peak) andrings(alternate): the second tonefg2
(roles.fg2in creative mode, else mid grey).versus-bars: two opposed health bars whose health and damage tail come from the frame's
coords, with whole-pixel stepped ends.hud-score: arcade read-outs (1UP, HI-SCORE,
CREDIT, or a versus timer and names) from the frame'slabels.ticker: the frame'slabelsas a scrolling news band; the centre item turns accent on loud
frames.- Style profiles in the user guide: CPS II versus stage (384 × 224) and arcade tate
(224 × 288). The CRT finish stays Motion Studio's (#90). - Showcase:
print-exact,cps2-versus,tate-shooterandnews-ticker; gallery demos for
the three new primitives. ditherrenders about five times faster with byte-identical frames, so its default layer
stays inside the 50 ms budget on CI runners.
0.8.2 — vocabulary 16: reporting fixes for dropped layers, asset ids and signal tracks (#154, #155, #156, #157)
Reporting fixes for dropped layers, asset ids and signal tracks (#154, #155, #156, #157). The
vocabulary and every reference frame are unchanged.
validateAnimSpecreports layers past the 12-layer cap, at the top level and in each clip
(layers: only the first 12 layers are used (14 given)), and lists their types in
dropped(#155).animspec renderprints the validator'serrorsas a JSON line on stderr, and a new
--strictflag exits with code 2 instead of rendering when anything was dropped or
reported (#154).- An invalid asset or plugin id now states the rule: lowercase letters, digits and
-,
starting with a letter, at most 16 characters (#154). type-reveal: thexandaligndescriptions state that rows align inside amaxWidth
box centred onx. The validator reports a left- or right-aligned box that leaves the
frame (#156). Rendering is unchanged.decodeSignalTrackaccepts raw file bytes (any byte view) as a track with no sidecar, and
a wrong argument throws an error that names the expected shape (#157).
0.8.1 — vocabulary 16: a rendering fix for `emitter` petals (#126)
A rendering fix for emitter petals (#126). The vocabulary is unchanged.
emitterpetals are drawn as a transformed unit circle instead of a rotated ellipse: the
same shape, but small petals now rasterise within the cross-type tolerance (a dense fall
differed by 13 of 255 between arm64 and x64; now at most 5).- Two reference frames moved (
emitter:petals-top@mid,@loud) and a dense-petal case was
added, including a steady-state frame at 5 s; seegolden/CHANGES.md. gallery/emitter.pngandloops/emitter.gifregenerated.
0.8.0 — vocabulary 16: image assets, sprite sheets, plugin slot, clip sequences
Art in, animated, and the Motion Studio integration: image assets (spec 022, #108, #109),
sprite sheets (spec 023, #110), the plugin slot (spec 024, #92) and clip sequences (spec 025,
#91). The finish chain (#90) is decided as Motion Studio's. No existing reference frame moved.
image: a declared, digest-pinned image asset (specassets: id, sha256, size), placed,
fitted, cropped, flipped, faded, tiled and scrolled; in the art's own colours in creative
mode, or mapped to the palette. Hosts pass decoded bitmaps;checkAssetsverifies bytes.- The command-line renderer loads
<id>.pngnext to the spec (or--assets <dir>), refuses a
missing or mismatched asset with exit 5, records digests in the manifest, and gains
--creative. - Constitution 5.0.0: Principles III and IV amended for image assets. The finish chain (#90)
is decided as Motion Studio's; post-process effects stay out of scope. - A
parallax-forestshowcase loop. imagesprite sheets:sheetCols,sheetRows,frames,fpsandframeStartplay one
cell per frame as a closed form of time (spec 023, #110). Asheet-walkshowcase loop.- The plugin slot (spec 024, #92):
registerPluginadds namespacedext:<plugin>/<type>
primitives from a host; specs declarepluginswith exact versions;animspec/verify
(verifyPlugin) andanimspec verify-plugin [--json]run the core checks on a plugin; the
CLI loads--pluginmodules and records their digests. Constitution 6.0.0. - Clip sequences (spec 025, #91): a spec-level
sequenceof clips with absolute frame ranges,
per-clip layers and camera, and cut, wipe, iris or fade transitions; any frame renders alone.
Ashot-listshowcase loop. Constitution 6.1.0.
0.7.0 — vocabulary 14: palette roles, sprite v2, two-tone patterns, dither
Palette roles and retro looks: sprite format v2 with the hero character (spec 020, #103), a
second pattern tone (spec 019, #97), and ordered-dither scenes (spec 021, #107), with Game Boy,
SNES and DOS adventure showcase loops. No existing reference frame moved.
- A spec may carry a
rolesmap of named colours (up to 16), used only in creative mode.
Outside creative mode every role falls back to a grey, so output stays monochrome. spritegainshero, a 16 × 20 character whose ten parts (hair, skin, eyes, gold trim,
cloak, boots and more) take their colours fromroles. Built-in characters may now
declare a per-letter palette (format v2, up to 32 × 48);mascot,botandghostare
unchanged.sanitizeRolesis exported.npm run verifynow checks that built-in characters are
well-formed, and the palette gate accepts mixes of the background with a declared role.gridandcheckerpatterns: the letterbdraws a second tone, coloured byroles.fg2in
creative mode and mid grey otherwise (spec 019, #97). Patterns withoutbare unchanged.dither: an ordered (Bayer) dither gradient through up to six palette roles in a region,
for DOS/VGA-style skies, ground, props and UI bars (spec 021, #107).captiongains
margin, and a spec may declarepixelAspect(recorded in the command-line manifest, never
changing a pixel). Ados-adventureshowcase loop shows the look.- Constitution 4.0.0: Principle III now reads "palette roles" instead of only background,
foreground and accent. Constitution 4.1.0: the palette
gate accepts a role mixed with both background and foreground, as it does the accent.
Constitution 4.2.0:pixelAspectjoins the format.
0.6.0 — vocabulary 13: designed grids, pattern and breaks on grid and checker
Designed grids, a showcase page, and stricter gallery checks. No existing reference frame moved.
gridandchecker: apatternparam, one letter per cell with rows split by/
(.off,#foreground,aaccent,~lit by the spectrum), so designed patterns such
as quilts, mosaics and boards can be authored (#96). Abreaksparam turns or shifts
single cells, for example"3,2 r15; 0,4 dx0.25"(#101). Both default to empty, so no
existing frame moved. Problems are reported by the validator, and the layer still renders.- Site: a showcase page for the params and
spec options the default-layer gallery cannot show (0.4.0 and 0.5.0 additions), generated
bynpm run showcase:generate. npm run verifynow fails when a committed gallery thumbnail or showcase still is stale,
not only when it is missing. Constitution 3.2.0.
0.5.0 — vocabulary 12: camera shake, a wider camera range, the transparent background
Two format additions; the vocabulary is unchanged and no existing reference frame moved.
- Camera shake:
camera.shake = { amp, freq }, a seeded, closed-form tremble (ampup to
0.05 of the frame,frequp to 5 per second, default 3), scaled bydepthunder
parallax (#87). A camera without a shake renders exactly as before. - Camera keyframe
x/ynow run from -1 to 2 instead of 0 to 1, so a camera can travel
one and a half screens from the centre (#111). Cameras inside 0..1 are unchanged. - Intended change: a spec stored without validation, with a camera keyframe outside
0..1, used to be clamped to 0..1 when validated; it now renders at its stated position
(within -1..2). Specs stored after validation already hold clamped values and do not
change. Constitution 2.16.0. - Transparent background:
background: "transparent"with an optionalink("light", the
default, or"dark"). Frames carry alpha; laid over black (light) or white (dark) they equal
the solid render, for every primitive.animspec render --pngwrites RGBA PNGs and--raw
carries alpha (#100). Constitution 3.1.0. - Cross-type reference checks now include alpha, and a pixel that is not fully opaque is
compared by its colour weighted by alpha. Opaque pixels are compared as before, so no
existing result changed. Constitution 3.0.0 (Principle I). - Intended change: a spec stored without validation with
background: "transparent"used
to draw on black; it now draws transparent. Validated specs hold"black"and do not change.
0.4.0 — vocabulary 12: figure, rig, grid, thickness; composition budget gate
Every new param defaults to the earlier behaviour: no existing reference frame moved.
figure:x,yandscaleparams, and thewaveandcheerstances (#88, #89).rig: thewave,presentandreachposes (#89).grid:solid, lit cells at full opacity on whole pixels, so every pixel is exactly
bg, fg or accent (#98).thickness(line width in pixels) onradial,lissajous,shape,ringsandgraph;
wave's thickness now goes up to 32 (#99).- A whole-composition budget gate: specs at the 12-layer cap, with a camera, stay within
12,000 drawing operations and 200 ms per 1080p frame (#93). Constitution 2.15.0. buildJsonSchema()andbuildVocabPrompt()without a selection throw a clear error;
there is still no full-vocabulary default (#112).- README links are absolute, so they work on the npm page (#112).
- This changelog (#86).
- Toolchain: TypeScript 7 (#10); Dependabot pull requests that change only the manifest and
lockfile are exempt from the CLA check.
Install: npm install animspec@0.4.0. Full history: CHANGELOG.md.