Repository navigation
Versions And Upgrading
Every release is a tag with a GitHub release and no files attached; claude plugin install takes the newest. The versions between two tags were never released on their own: 0.8.2 holds the changes of 0.7.1 to 0.8.1 too. The CHANGELOG has every entry with its reason.
| Tag | Date (UTC) | What changed |
|---|---|---|
v0.6.0 |
2026-10-24 | first public release; spritewright renamed, the make half added (Coming from spritewright) |
v0.6.1 |
2026-10-24 |
make calls artwright with --scale 1 (Gates) |
v0.6.2 |
2026-10-24 | a missing input prints JSON, not a traceback; artwright is also looked for under CLAUDE_CONFIG_DIR
|
v0.6.3 |
2026-10-25 | review page items display: full and kind: info
|
v0.7.0 |
2026-10-25 | natural construction: assemble plan "vocabulary": "natural", effect site
|
v0.8.2 |
2026-10-26 | the versions below |
v0.8.3 |
2026-10-26 | natural plans can lay whole log courses and plank roofs board by board; plans without the new fields are unchanged |
v0.8.4 |
2026-10-26 | flicker motion matching; flicker_at format and fog caveats; image output unchanged |
What 0.8.2 holds, from the CHANGELOG:
| Version | Change | Opt-in? |
|---|---|---|
| 0.7.1 | skill advice: a natural plan needs a roof of a different material than the walls | docs only |
| 0.7.2 |
site lines clipped to the finished silhouette (clip: false for the old lines); drawn_outside_silhouette in every animation's gates, failing site animations above 0 |
clipping is the new default for site
|
| 0.7.3 | skill advice: trace natural roofs on a grid; put shared loops out of step with a random hold on frame 0 | docs only |
| 0.8.0 |
snap tests its grid against chance |
no: changes default output |
| 0.8.0 |
background.holes (bg --holes), dither.space: linear and dither.max_step (--dither-space, --max-step), clean.corners (--corners), fog, the swap command, model_rotate's filter: box
|
yes |
| 0.8.1 |
flicker_pixels and flicker_at in the gates (failing only with max_flicker_pixels), cadence_uneven, arc's perfect
|
reports only; perfect yes |
| 0.8.2 | skill advice: open-sided buildings take the ordinary natural plan | docs only |
The wiki's program ran every case on these pages with 0.8.2, and the smooth-render snap case with 0.7.0 as well. Against the 0.7.0 outputs saved on 2026-10-24, these were the differences:
-
snapon images with few edges. A smooth JPEG render that 0.7.0 snapped at scale 57 into a 13x13 image now comes back at scale 1, unchanged (Making pixel art). Every render with a real grid on these pages snapped exactly as before. If a recipe relied on detection for a soft image that is pixel art after all, give the scale:"snap": {"scale": S, "offset": [X, Y]}. -
New report fields. The background step prints
enclosed_cleared(0 unlessholesis set), inbgand in everymakereport. Each animation's gates adddrawn_outside_silhouetteandflicker_pixels(withflicker_atwhen there are any), andcadence_unevenwhen it applies. A script that compares whole reports will see them; one that readsokandpasswill not. On these pages they changed nopass: the forge's animations passed and failed as in 0.7.0. -
Help text.
swapis in the command list, andpalette --helpshows--dither-spaceand--max-step, so the usage text runs to more lines. - The same. Every sprite, sheet and number on these pages other than those fields and versions, and the three pictures on Home, Making pixel art and Animating a sprite (byte for byte). The CHANGELOG says the same of default outputs on random images for every dither pattern, and that sheets and frames from 0.8.1 match 0.8.0.
site animations built with 0.7.0 draw fewer construction lines in 0.8.2 and can now fail on drawn_outside_silhouette; that was not run for this wiki (no site case). Add "clip": false to the track to keep the 0.7.0 frames.
Natural construction plans can set "walls": "logs" with a course size in pixels, and "roofOrder": "boards" with a board size. Whole log courses grow from the front corner out; roof boards are laid side by side from the front rake, each whole from eave to ridge. Plans without these fields are unchanged. This comes from the source and CHANGELOG; the wiki's examples do not use the options.
The flicker gate now matches a travelling pixel through three frames even when its step exceeds 1 px. Incoming and outgoing steps may differ by 1 px. Over transparent sky the match uses alpha so a spark may change colour; over opaque art it uses RGBA. flicker_pixels and its flicker_at sample may shrink. An animation capped with max_flicker_pixels may now pass without changing a pixel in the sheet.
flicker_at keeps the same format: up to 8 unique [x, y] pairs in row order, with no frame index. The docs now say this explicitly. Motion matching is a heuristic; unmatched motion and intentional blinks can still count.
Fog output is unchanged. The recipe now warns that a high amount with a sparse palette can reduce every opaque pixel to one colour while the gates still pass. Inspect the result, lower the amount or choose a palette with more steps near the air colour.
claude plugin marketplace update pixelwright
claude plugin update pixelwright@pixelwrightBoth commands are listed by claude plugin --help and claude plugin marketplace --help in Claude Code 2.1.281; neither was run for this wiki, which installed 0.8.2 fresh into an empty configuration folder (Getting started). claude plugin update says a restart is needed to apply it. Check the version afterwards with python pxw.py --version.
This wiki describes pixelwright 0.8.4 and was last updated on 2026-10-26. The plugin is MIT licensed. Report problems in the issues. On GitHub: release v0.8.4.
Using it
The releases
Contributing
Elsewhere