Skip to content

Releases

0.11.0 — vocabulary 23: stickman, the default avatar

Choose a tag to compare

@github-actions github-actions released this 07 Nov 05:36
be42f79

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, plus point, present, reach and look aimed at
    targetX/targetY; travel and facing. 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), and drive level or beat; every number is bindable.
  • Crowds in one layer: count up to 12, arrangement row, cluster or split, each figure's
    phase and size from the seed, one highlight and 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 under pixelMode, is exact in the palette and the
    profiles.
  • In the core vocabulary and the data-viz, minimal and arcade kits. Showcase:
    stickman-presenter, stickman-fight and stickman-dance; a gallery demo.
  • AI prompting: three stickman use cases (data narrator, scenes from a prompt, interactive);
    the vocabulary example now matches the select / selectDetailed API.
  • Dev dependency: @types/node 26.6.6.

0.10.0 — vocabulary 22: palette profiles, a fighter and a line chart

Choose a tag to compare

@github-actions github-actions released this 28 Oct 14:59
da3f85c

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-dmg sets the background, ink, accent,
    fg2 and the hero's and fighter's parts from the four DMG greens, so a solid 160 × 144
    scene uses exactly those four; genesis snaps 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; plasma mixes from background to ink. Constitution 6.3.0:
    "The format" names profile.
  • dither gains matrix: "2", a 2 × 2 checkerboard for the Genesis colour mix; tetris joins
    pixel mode.
  • sprite: the fighter character (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 with sequence clips; variant: "alt" is a player-two
    palette swap through <role>-alt roles.
  • sprite: the ship character, a nose-up shooter craft whose engine flame flickers; the
    tate-shooter loop now flies it under a drifting alien formation.
  • line-chart: the frame's coords (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, genesis and arcade-attract; cps2-versus restaged with two
    fighters, a punch and a hit; a line-chart gallery demo.

0.9.0 — vocabulary 19: pixel mode, an arcade HUD and a news ticker

Choose a tag to compare

@github-actions github-actions released this 28 Oct 14:22
8e85825

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, and bars, hbars, rings, emitter, particles and image draw 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" names pixelMode.
  • tone2 on bars (alternate, peak) and rings (alternate): the second tone fg2
    (roles.fg2 in 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's labels.
  • ticker: the frame's labels as 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-shooter and news-ticker; gallery demos for
    the three new primitives.
  • dither renders 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)

Choose a tag to compare

@github-actions github-actions released this 28 Oct 12:34
dcaca5f

Reporting fixes for dropped layers, asset ids and signal tracks (#154, #155, #156, #157). The
vocabulary and every reference frame are unchanged.

  • validateAnimSpec reports 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 render prints the validator's errors as a JSON line on stderr, and a new
    --strict flag 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: the x and align descriptions state that rows align inside a maxWidth
    box centred on x. The validator reports a left- or right-aligned box that leaves the
    frame (#156). Rendering is unchanged.
  • decodeSignalTrack accepts 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)

Choose a tag to compare

@github-actions github-actions released this 24 Oct 16:05
5076fdd

A rendering fix for emitter petals (#126). The vocabulary is unchanged.

  • emitter petals 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; see golden/CHANGES.md.
  • gallery/emitter.png and loops/emitter.gif regenerated.

0.8.0 — vocabulary 16: image assets, sprite sheets, plugin slot, clip sequences

Choose a tag to compare

@tosin2013 tosin2013 released this 24 Oct 15:44
e10b4e8

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 (spec assets: 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; checkAssets verifies bytes.
  • The command-line renderer loads <id>.png next 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-forest showcase loop.
  • image sprite sheets: sheetCols, sheetRows, frames, fps and frameStart play one
    cell per frame as a closed form of time (spec 023, #110). A sheet-walk showcase loop.
  • The plugin slot (spec 024, #92): registerPlugin adds namespaced ext:<plugin>/<type>
    primitives from a host; specs declare plugins with exact versions; animspec/verify
    (verifyPlugin) and animspec verify-plugin [--json] run the core checks on a plugin; the
    CLI loads --plugin modules and records their digests. Constitution 6.0.0.
  • Clip sequences (spec 025, #91): a spec-level sequence of clips with absolute frame ranges,
    per-clip layers and camera, and cut, wipe, iris or fade transitions; any frame renders alone.
    A shot-list showcase loop. Constitution 6.1.0.

0.7.0 — vocabulary 14: palette roles, sprite v2, two-tone patterns, dither

Choose a tag to compare

@tosin2013 tosin2013 released this 24 Oct 15:44
a5b21d9

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 roles map 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.
  • sprite gains hero, a 16 × 20 character whose ten parts (hair, skin, eyes, gold trim,
    cloak, boots and more) take their colours from roles. Built-in characters may now
    declare a per-letter palette (format v2, up to 32 × 48); mascot, bot and ghost are
    unchanged.
  • sanitizeRoles is exported. npm run verify now checks that built-in characters are
    well-formed, and the palette gate accepts mixes of the background with a declared role.
  • grid and checker patterns: the letter b draws a second tone, coloured by roles.fg2 in
    creative mode and mid grey otherwise (spec 019, #97). Patterns without b are 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). caption gains
    margin, and a spec may declare pixelAspect (recorded in the command-line manifest, never
    changing a pixel). A dos-adventure showcase 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: pixelAspect joins the format.

0.6.0 — vocabulary 13: designed grids, pattern and breaks on grid and checker

Choose a tag to compare

@tosin2013 tosin2013 released this 24 Oct 02:38
f387c73

Designed grids, a showcase page, and stricter gallery checks. No existing reference frame moved.

  • grid and checker: a pattern param, one letter per cell with rows split by /
    (. off, # foreground, a accent, ~ lit by the spectrum), so designed patterns such
    as quilts, mosaics and boards can be authored (#96). A breaks param 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
    by npm run showcase:generate.
  • npm run verify now 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

Choose a tag to compare

@tosin2013 tosin2013 released this 24 Oct 01:42
d142ee5

Two format additions; the vocabulary is unchanged and no existing reference frame moved.

  • Camera shake: camera.shake = { amp, freq }, a seeded, closed-form tremble (amp up to
    0.05 of the frame, freq up to 5 per second, default 3), scaled by depth under
    parallax (#87). A camera without a shake renders exactly as before.
  • Camera keyframe x/y now 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 optional ink ("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 --png writes 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

Choose a tag to compare

@tosin2013 tosin2013 released this 23 Oct 14:38
e1fe5fe

Every new param defaults to the earlier behaviour: no existing reference frame moved.

  • figure: x, y and scale params, and the wave and cheer stances (#88, #89).
  • rig: the wave, present and reach poses (#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) on radial, lissajous, shape, rings and graph;
    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() and buildVocabPrompt() 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.