Skip to content

Pixelbolt pixel art toolkit changelog

io.github.skulitom/pixelbolt

11 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.

  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.15.0/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.16.0/pixelbolt.mcpb
    version
    0.15.0 0.16.0

  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.13.0/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.15.0/pixelbolt.mcpb
    version
    0.13.0 0.15.0

  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.12.0/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.13.0/pixelbolt.mcpb
    version
    0.12.0 0.13.0

  • AGENTS.md +22 −13

    https://raw.githubusercontent.com/skulitom/Pixelbolt/HEAD/AGENTS.md

    − - `src/craft.js`: browser-compatible pixel-art helpers shared by the renderer, patches and compilers: ordered, noise and value-noise dither, De-Corner/De-Stray cleanup, RotSprite-style rotation, rewrite rules, easing, seeded hashing and engine-independent trigonometry. Keep new randomness seeded and new maths polynomial so output stays identical across JavaScript engines.− - `src/shapes.js`: browser-compatible shape layers for `pixelforge-fx` (ring, slash, beam, bolt, glyph, star, burst, stream): intensity fields in frame windows, plus the fx compiler's blob particles, cut into palette bands by named looks with lit and shade bands from the field's fall toward a light, then cleanup and outline, baked into one grid per frame. Same determinism rules as `craft.js` (its own polynomial `atan2Deg`); the golden hashes in `test/shapes.test.js` change with any change to its− - `src/wave.js`: browser-compatible `pixelforge-wave` compiler for looping coherent radial/directional fields. Sum signed sources before palette mapping; use craft trigonometry and fixed arithmetic. `scripts/wave-presets.mjs` supplies the reviewed examples; `showcase/waves/build.mjs --check` and its golden hashes protect their pixels. This is an art tool, not an obstacle or water solver.− - `src/fluid.js`: browser-compatible `pixelforge-fluid` compiler: stable-fluids gases and FLIP/APIC liquids on a one-cell-per-pixel grid, with implicit stress-form viscosity, yield stress and adhesion, baked into palette `grid` operations. Same determinism rules as `craft.js` (only + − × ÷ and sqrt, seeded hashing, fixed steps and iterations); the golden hashes in `test/fluid.test.js` and the GIFs from `showcase/fluid/build.mjs` change with any change to its output, so regenerate both deliberate− - `src/autotile.js`: browser-compatible blob/cardinal neighbour masks, template quarter layout and tilemap legends (variants, weights, neighbour rules), shared by scene tilemaps, the recipe `tilemap` operation and the autotile compiler in `src/authoring.js`. It imports `craft.js`, so copies of it (Tidewatch's game) need both.− - `src/godot.js`: browser-compatible Godot 4 `SpriteFrames` (`.tres`) written from atlas metadata, laid out as Godot 4.5+ saves it; the bundle, MCP `saveAs` and scene exports use it. `node scripts/verify-godot.mjs` loads exports in a real headless Godot 4 and checks regions, margins, pixels, timing and playback; run it after changing the `.tres` or the atlas.− - `src/sequence.js`: numbered PNG frames for video editors, from recipes and scenes: exact frame-rate fractions, whole-number enlargement onto a video-sized canvas (contained, or covering it and cropped), a sidecar and the ffmpeg command for an alpha video. It encodes no video itself; keep it that way.− - `src/mcp.js`, `src/server.js`: agent and studio interfaces. MCP tool calls run one at a time in a worker thread (`src/mcp-worker.js`, `createToolRunner`), so a call past the time or memory limit is stopped without stopping the server; keep tool code free of state between calls other than files on disk.− - `src/check.js`: the `check` in `pixel_render` and `render` replies: what an export delivered (frame size, frames, loops, colours, transparency, GIF size) against the user's `expect`, each mismatch with the call that fixes it. Read-only.− - `studio/`: plain HTML/CSS/JS preview studio; it shares the core renderer. `studio/fluid.html` and `fluid-lab.js` (the Fluid lab) compile fluid presets in the browser with `src/fluid.js`. `studio/draft.js` keeps each tab's unsaved recipe in the browser's own storage, under an id the tab keeps in `sessionStorage`, and never touches another open tab's; draft recovery must stay in the browser, never a server endpoint.− - `playground/`: the browser playground for the project site, not in the npm package. Static files: it loads the engine from jsDelivr at the version pinned in `playground/app.js`, renders in a module worker with a time limit, and every PNG it exports carries its recipe. `playground/render.js` takes the engine as an argument, so Node renders exactly what the page renders. `node scripts/deploy-playground.mjs <gh-pages checkout>` prepares the site change (see `playground/DEPLOY.md`); it never pushe− - `schema.json`, `poses.schema.json`, `scene.schema.json`, `autotile.schema.json`, `fx.schema.json`, `fluid.schema.json`, `wave.schema.json`, `normals.schema.json`: generated with `node scripts/generate-schema.js`.− Run `npm test` after functional changes. Keep the schema, authoring reference and runtime validation aligned. Keep what an agent reads on connect small: MCP tool schemas describe a recipe briefly (the server validates it), `pixel_help` returns the short quick start, and longer references are its topics; a test caps both. Binary export changes should also be checked with an independent image decoder. Do not replace the text-first workflow with a UI-only drawing tool.+ - `src/craft.js`: browser-compatible pixel-art helpers shared by the renderer, patches and compilers: ordered, noise and value-noise dither, De-Corner/De-Stray cleanup, RotSprite-style rotation, `turnRows` (a picture turned as a pixel artist turns a sprite: sides turned to whole pixel steps, outline and frame kept closed; its guard test in `test/craft.test.js` holds every whole degree), rewrite rules, easing, seeded hashing and engine-independent trigonometry. Keep new randomness seeded and new + - `src/shapes.js`: browser-compatible shape layers for `pixelforge-fx` (ring, slash, beam, bolt, glyph, star, burst, stream): intensity fields in frame windows, plus the fx compiler's blob particles, cut into palette bands by named looks with lit and shade bands from the field's fall toward a light, then cleanup and outline, baked into one grid per frame. Bands hold from frame to frame (a look's `hold`), so frames are drawn in order with one memory, and a loop is read once to settle the bands it+ - `src/wave.js`: browser-compatible `pixelforge-wave` compiler for looping coherent radial/directional fields. Sum signed sources before palette mapping; use craft trigonometry and fixed arithmetic. Bands hold at thresholds as a look's do (`look.hold`), settled round the loop. `scripts/wave-presets.mjs` supplies the reviewed examples; `showcase/waves/build.mjs --check` and its golden hashes protect their pixels. This is an art tool, not an obstacle or water solver.+ - `src/fluid.js`: browser-compatible `pixelforge-fluid` compiler: stable-fluids gases and FLIP/APIC liquids on a one-cell-per-pixel grid, with implicit stress-form viscosity, yield stress, adhesion and granular friction (sand: friction from pressure, rigid pieces at rest), and rigid bodies (bodies.js) as moving solids that stir what they turn in, that water floats and drags, what rests on them weighs on and resting sand holds up, and that gases push, in loops, with heat and in the live runner (`+ - `src/electric.js`: browser-compatible electricity and plasma for `pixelforge-fluid` gases: the field solve (conjugate gradients over a conductance network of side and corner links), dielectric-breakdown growth, plasma as linked markers that ride the gas, electrode supplies (resistance, charge) and dart restrikes down a channel's trace. `src/fluid.js` only calls it from small hooks (reading, the gas step, the look fields). Same determinism rules as `craft.js` (only + − × ÷ and sqrt, seeded draw+ - `src/bodies.js`: browser-compatible `pixelforge-bodies` compiler: rigid circles, boxes, convex polygons and fixed (or moving) hoops with gravity, walls and pixel obstacles traced into one-sided runs of exposed pixel edges, solved by sequential impulses in substeps (speculative contacts, warm starting, a relaxed push out of overlaps, restitution after the positions move), with sleeping, `asleep` bodies held until hit and the open `tireless` cheat, baked into palette `grid` operations; boxes, po+ - `src/territory.js`: browser-compatible territory, power-ups and heads-up display for `pixelforge-bodies` (docs/physics-model.md, section 13a): cells owned by teams, traced per team into walls with bodies.js's face tracer, a cell a body hits changing hands at the end of the substep, held speeds, pickups and events (split, grow, speed, warp, magnet) at the end of a frame, and the score drawn as recipe `text` and `rect` operations. `src/bodies.js` only calls it from small hooks (reading, contacts+ - `src/autotile.js`: browser-compatible blob/cardinal/corner neighbour masks (and `{corners}` names for layered sets), template quarter layout and tilemap legends (variants, weights, neighbour rules), shared by scene tilemaps, the recipe `tilemap` operation and the autotile compiler in `src/authoring.js`. It imports `craft.js`, so copies of it (Tidewatch's game) need both.+ - `src/terrain.js`: browser-compatible autotile templates drawn from a `terrain` description (a fill that repeats every tile, an edge per side with bands, margins and tufts, rounded corners), the seam check that compares every quarter join a map can make with the template's own continuation, and the test map holding all 47 tiles. A terrain is seamless by construction: `test/terrain.test.js` stitches its tiles into maps and compares them with the terrain drawn directly, and its golden hashes for + - `src/slopes.js`: browser-compatible slopes for side-view blob and cardinal sets (`slopes` in an autotile source): 45° and gentle (a cell up over two) tiles, each column the flat top edge moved down the slope over the fill in place, a foot for the cell under a slope's low end, collision under each slope's line, and the map legend and hill map the compiler hands out (the test map draws them). Whole-pixel arithmetic only.+ - `src/godot.js`: browser-compatible Godot 4 `SpriteFrames`, `CanvasTexture` (a lit scene asset's colour pass with its normal pass flipped to +Y up) and, for tile sets (autotile frames found by `autotileFrames` in `src/autotile.js`, and frames with a `tile` field: weight, collision, terrain), `TileSet` resources (`.tres`) written from atlas metadata, one atlas source per sheet and one terrain set per terrain, laid out as Godot 4.5+ saves them; the bundle, MCP `saveAs` and scene exports (one Tile+ - `src/tiled.js`: browser-compatible Tiled tilesets (`.tsx`) written from atlas metadata, one per sheet: the untrimmed sheet as Tiled's grid, each terrain a Wang set (blob mixed, cardinal edge, corner and layered sets corner) whose Wang ids are the tiles' masks, and each tile's probability, collision objects, `oneWay` property and animation; the bundle, MCP `saveAs` (`tiled`) and scene exports (one per asset) use it. It also writes a scene's `scene.tmx` (`tiledMap`) from what `renderScene` drew + - `src/sequence.js`: numbered PNG frames for video editors, from recipes, scenes and bodies matches (stepped frame after frame, so past 256 frames): exact frame-rate fractions, whole-number enlargement onto a video-sized canvas (contained, or covering it and cropped), a sidecar and the ffmpeg command for an alpha video. It encodes no video itself; keep it that way.+ - `src/mcp.js`, `src/server.js`: agent and studio interfaces. MCP tool calls run one at a time in a worker thread (`src/mcp-worker.js`, `createToolRunner`), so a call past the time or memory limit, or one the client cancels, is stopped without stopping the server; only `ping` and cancellations skip the queue. Keep tool code free of state between calls other than files on disk.+ - `src/help.js`: Node-side help topics shared by MCP `pixel_help` and `pixelbolt help <topic> [section]`: the quick start, the guides with their `## ` sections listed (one section by name), the schemas and the example.+ - `src/check.js`: the `check` in `pixel_render` and `render` replies: what an export delivered (frame size, frames, loops, colours, transparency, GIF size) against the user's `expect`, each mismatch with the call that fixes it, and each animation's silhouette boxes with advisory notes on named loops whose solid body lifts off its ground row, steps unevenly or jumps at the loop, or that repeat a frame; the notes never fail the check. Read-only.+ - `src/presets.js`: Node-side presets: the shipped `examples/` sources (`*.fluid.json`, `*.fx.json`, `*.wave.json`, `*.bodies.json`, `*.poses.json`) and looping plain recipes an agent compiles instead of drawing, for `pixel_help` topics `presets` and `preset`, `pixel_compile`'s `preset`, `pixelbolt presets` and `compile --preset`. It reads the folder when asked and takes titles from the Fluid and Effects labs' lists, so a new example is listed with no list to update; a preset compiles exactly as+ - `src/skill.js`: Node-side `pixelbolt skill install`: the pixel art skill on its own in a skills folder (`~/.claude/skills` by default), its commands rewritten to `npx -y pixelbolt@<version>` and the guides, schemas, examples and licence copied beside it, with a SHA-256 manifest so a changed copy is never replaced without `--force`. It never changes `skills/pixel-art/SKILL.md`, which the package and the plugin ship as written; when that skill cites a new guide, add it to `DOCS`.+ - `studio/`: plain HTML/CSS/JS preview studio; it shares the core renderer. `studio/fluid.html` and `fluid-lab.js` (the Fluid lab) compile fluid presets in the browser with `src/fluid.js`; `studio/effects.html` and `effects-lab.js` (the Effects lab) do the same for the self-contained `pixelforge-fx` presets listed in `effects-controls.js`, which the server's allowlist reads. `studio/draft.js` keeps each tab's unsaved recipe in the browser's own storage, under an id the tab keeps in `sessionStora+ - `playground/`: the browser playground for the project site, not in the npm package. Static files: it loads the engine from jsDelivr at the version pinned in `playground/app.js`, renders in a module worker with a time limit, and every PNG it exports carries its recipe. `playground/render.js` takes the engine as an argument, so Node renders exactly what the page renders. `node scripts/deploy-playground.mjs <gh-pages checkout>` prepares the site change (see `playground/DEPLOY.md`); it never pushe+ - `schema.json`, `poses.schema.json`, `scene.schema.json`, `autotile.schema.json`, `fx.schema.json`, `fluid.schema.json`, `wave.schema.json`, `bodies.schema.json`, `normals.schema.json`: generated with `node scripts/generate-schema.js`.+ Run `npm test` after functional changes. Tests and the studio walk never assert how long something takes, since a busy CI runner would fail them with nothing broken: hold the work instead (a count such as `renderProject`'s `stats`), and give a speed target a `budget` case in `scripts/bench.mjs`, which CI reports without failing. Keep the schema, authoring reference and runtime validation aligned. Keep what an agent reads on connect small: MCP tool schemas describe a recipe and each option briefl
  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.11.0/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.12.0/pixelbolt.mcpb
    version
    0.11.0 0.12.0

  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.9.2/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.11.0/pixelbolt.mcpb
    version
    0.9.2 0.11.0

  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.9.1/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.9.2/pixelbolt.mcpb
    version
    0.9.1 0.9.2

  • AGENTS.md +11 −5

    https://raw.githubusercontent.com/skulitom/Pixelbolt/HEAD/AGENTS.md

    − To **use** Pixelbolt for artwork, start with [the pixel art skill](skills/pixel-art/SKILL.md), [the authoring guide](docs/agent-guide.md) and [schema.json](schema.json). [llms.txt](llms.txt) indexes the public documentation; [README.md](README.md) includes CLI and MCP setup. The instructions below apply when **contributing to the toolkit**.− - `src/mcp.js`, `src/server.js`: agent and studio interfaces.− - `studio/`: plain HTML/CSS/JS preview studio; it shares the core renderer. `studio/fluid.html` and `fluid-lab.js` (the Fluid lab) compile fluid presets in the browser with `src/fluid.js`. `studio/draft.js` keeps one unsaved recipe in the browser's own storage; draft recovery must stay in the browser, never a server endpoint.− - `schema.json`, `poses.schema.json`, `scene.schema.json`, `autotile.schema.json`, `fx.schema.json`, `fluid.schema.json`, `normals.schema.json`: generated with `node scripts/generate-schema.js`.− Run `npm test` after functional changes. Keep the schema, authoring reference and runtime validation aligned. Binary export changes should also be checked with an independent image decoder. Do not replace the text-first workflow with a UI-only drawing tool.+ To **use** Pixelbolt for artwork, start with [the pixel art skill](skills/pixel-art/SKILL.md) and [the quick start](docs/agent-quick-start.md), then [the authoring guide](docs/agent-guide.md) and [schema.json](schema.json) as needed. [llms.txt](llms.txt) indexes the public documentation; [README.md](README.md) includes CLI and MCP setup. The instructions below apply when **contributing to the toolkit**.+ - `src/shapes.js`: browser-compatible shape layers for `pixelforge-fx` (ring, slash, beam, bolt, glyph, star, burst, stream): intensity fields in frame windows, plus the fx compiler's blob particles, cut into palette bands by named looks with lit and shade bands from the field's fall toward a light, then cleanup and outline, baked into one grid per frame. Same determinism rules as `craft.js` (its own polynomial `atan2Deg`); the golden hashes in `test/shapes.test.js` change with any change to its+ - `src/wave.js`: browser-compatible `pixelforge-wave` compiler for looping coherent radial/directional fields. Sum signed sources before palette mapping; use craft trigonometry and fixed arithmetic. `scripts/wave-presets.mjs` supplies the reviewed examples; `showcase/waves/build.mjs --check` and its golden hashes protect their pixels. This is an art tool, not an obstacle or water solver.+ - `src/godot.js`: browser-compatible Godot 4 `SpriteFrames` (`.tres`) written from atlas metadata, laid out as Godot 4.5+ saves it; the bundle, MCP `saveAs` and scene exports use it. `node scripts/verify-godot.mjs` loads exports in a real headless Godot 4 and checks regions, margins, pixels, timing and playback; run it after changing the `.tres` or the atlas.+ - `src/mcp.js`, `src/server.js`: agent and studio interfaces. MCP tool calls run one at a time in a worker thread (`src/mcp-worker.js`, `createToolRunner`), so a call past the time or memory limit is stopped without stopping the server; keep tool code free of state between calls other than files on disk.+ - `src/check.js`: the `check` in `pixel_render` and `render` replies: what an export delivered (frame size, frames, loops, colours, transparency, GIF size) against the user's `expect`, each mismatch with the call that fixes it. Read-only.+ - `src/share.js`: browser-compatible share links (the recipe in a playground URL's fragment) and recipes inside PNGs (a compressed iTXt chunk, keyword `pixelbolt-recipe`). It has no static imports, so the playground serves a byte-identical copy as `playground/share.js`; `test/share.test.js` keeps the two equal.+ - `studio/`: plain HTML/CSS/JS preview studio; it shares the core renderer. `studio/fluid.html` and `fluid-lab.js` (the Fluid lab) compile fluid presets in the browser with `src/fluid.js`. `studio/draft.js` keeps each tab's unsaved recipe in the browser's own storage, under an id the tab keeps in `sessionStorage`, and never touches another open tab's; draft recovery must stay in the browser, never a server endpoint.+ - `playground/`: the browser playground for the project site, not in the npm package. Static files: it loads the engine from jsDelivr at the version pinned in `playground/app.js`, renders in a module worker with a time limit, and every PNG it exports carries its recipe. `playground/render.js` takes the engine as an argument, so Node renders exactly what the page renders. `node scripts/deploy-playground.mjs <gh-pages checkout>` prepares the site change (see `playground/DEPLOY.md`); it never pushe+ - `schema.json`, `poses.schema.json`, `scene.schema.json`, `autotile.schema.json`, `fx.schema.json`, `fluid.schema.json`, `wave.schema.json`, `normals.schema.json`: generated with `node scripts/generate-schema.js`.+ Run `npm test` after functional changes. Keep the schema, authoring reference and runtime validation aligned. Keep what an agent reads on connect small: MCP tool schemas describe a recipe briefly (the server validates it), `pixel_help` returns the short quick start, and longer references are its topics; a test caps both. Binary export changes should also be checked with an independent image decoder. Do not replace the text-first workflow with a UI-only drawing tool.

  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.9.0/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.9.1/pixelbolt.mcpb
    version
    0.9.0 0.9.1

  • AGENTS.md +4 −2

    https://raw.githubusercontent.com/skulitom/Pixelbolt/HEAD/AGENTS.md

    − - `studio/`: plain HTML/CSS/JS preview studio; it shares the core renderer. `studio/draft.js` keeps one unsaved recipe in the browser's own storage; draft recovery must stay in the browser, never a server endpoint.− - `schema.json`, `poses.schema.json`, `scene.schema.json`, `autotile.schema.json`, `fx.schema.json`, `normals.schema.json`: generated with `node scripts/generate-schema.js`.+ - `src/fluid.js`: browser-compatible `pixelforge-fluid` compiler: stable-fluids gases and FLIP/APIC liquids on a one-cell-per-pixel grid, with implicit stress-form viscosity, yield stress and adhesion, baked into palette `grid` operations. Same determinism rules as `craft.js` (only + − × ÷ and sqrt, seeded hashing, fixed steps and iterations); the golden hashes in `test/fluid.test.js` and the GIFs from `showcase/fluid/build.mjs` change with any change to its output, so regenerate both deliberate+ - `src/pose-geometry.js`: deterministic joint angles and integer two-bone reach; `src/motions.js`: rig/template expansion into editable poses; `src/motion.js`: advisory contact, slide, ground, pose-spread and loop review with bounded images.+ - `studio/`: plain HTML/CSS/JS preview studio; it shares the core renderer. `studio/fluid.html` and `fluid-lab.js` (the Fluid lab) compile fluid presets in the browser with `src/fluid.js`. `studio/draft.js` keeps one unsaved recipe in the browser's own storage; draft recovery must stay in the browser, never a server endpoint.+ - `schema.json`, `poses.schema.json`, `scene.schema.json`, `autotile.schema.json`, `fx.schema.json`, `fluid.schema.json`, `normals.schema.json`: generated with `node scripts/generate-schema.js`.

  • server.json 2 fields changed
    package_identifier
    https://github.com/skulitom/Pixelbolt/releases/download/v0.8.0/pixelbolt.mcpb https://github.com/skulitom/Pixelbolt/releases/download/v0.9.0/pixelbolt.mcpb
    version
    0.8.0 0.9.0