Repository navigation
Skills
The plugin has four skills. The agent picks one from its description; you do not call them by name, though you
can. The hub, artwright, also routes: a ranking question that lands there goes to artwright-judge, a sprite to
artwright-pixel, a change to the knowledge files to artwright-curate.
| Skill | Fires on | Does |
|---|---|---|
artwright |
critique of a painting, drawing, print, sculpture, ceramic, illustration or 3D render; "is this cubist"; "what is postmodernism"; "most expensive Ming vase"; "oldest painting"; "is this AI-made"; an image's light, composition or main colours; many images side by side on one contact sheet | critique of one work, style and movement, theory, art facts, ceramics; contact sheets, colours, light and composition through aw.py
|
artwright-judge |
"which is better", "pick the best of these", "rank this batch", "does this match my prompt", "what should I change in the prompt", "rewrite my prompt as a style or artist" | pairs in both orders, Bradley-Terry ranking, fit to a brief, the next prompt and settings per model; writes artwright/verdict.json
|
artwright-pixel |
"is this real pixel art", "check my sprite", "fix the grid", "too many colours", "does this tile seam", "check these animation frames" |
aw.py pixel, then a critique in priority order; points to the tools that fix grids |
artwright-curate |
"remember I liked this one", "add this movement", "label pairs for the judge" | the public knowledge files and the private taste record |
The trigger phrases come from each skill's description in its SKILL.md.
Each description names the sibling that owns the nearby request, so the agent does not stretch artwright to cover it:
| Request | Goes to |
|---|---|
| Generating an image, sprite or video | comfyui-gen |
| A 3D model or mesh | polywright |
| A video take judged against its shot card | cinewright-qc |
| Brand palettes and on-brand scoring | brandwright |
| Website visual direction | sitewright-direction |
| Dated history facts behind an art-fact answer | historywright (artwright fetches the sources itself when historywright is absent) |
| Snapping an AI sprite to a real pixel grid | Pixel Snapper, proper-pixel-art or unfake |
| Editing a sprite | the Aseprite MCP servers or Aseprite itself |
| Importing a sprite into a game engine | the engine's own plugin |
These are other projects; artwright does not install them.
Critique of one work. A cold read first, before the brief or the owner's framing: what the image shows and the
three things the eye goes to. Then a formal pass (greyscale read with aw.py stats --notan, value groups, focal
point, balance, colour, edges, space) and a critic pass in which every claim names a region ("upper left, the sky
band") and a reason. Questions about light, colour or composition ("is the light consistent", "where does the eye
go", "why does it look flat") get aw.py light, gamut, accents, depth or comp first, and a flag becomes a
finding only after the skill confirms it on the image (Light, colour and composition). Claims that cannot point at something are dropped, and "looks good", "feels" and "somewhat"
are not allowed. The verdict is the top two or three issues with one fix each, then what to keep. "My best work,
isn't it perfect?" changes nothing; a brief that asks for rough or naive work is judged on whether it achieves
that.
Style and movement. The answer is member, influenced or no evidence, never a bare yes or no, with the
traits seen, the expected traits missing and the neighbouring movements that lost (Cézanne is proto-cubist, so
influenced, not cubist; Mondrian in 1927 is De Stijl; Boccioni is Futurist). A missing Wikidata movement tag is not evidence. Non-Western
work is described in the tradition's own terms.
Theory. Dated, with key figures, what the idea reacted against, and the question it lets you ask of an image.
Facts (oldest, largest, most expensive, first). The skill names the possible readings of the question, finds the current holder for each, checks the category (Ming is 1368 to 1644; Qianlong is Qing), and states prices with currency, date, hammer or premium, and public or private sale. It hands the dated facts to historywright for two independent sources and ends with a confidence line.
The entry point other plugins call after they make images. A batch goes: dedupe, one contact sheet to strike
broken renders (never to rank), then pairs judged in both orders, then a ranking. A brief is split into yes/no
checks before the image is looked at, and the result is FITS, FITS WITH FIXES or DOES NOT FIT with the hard
fails listed. Fixes are classed by channel, cheapest first: prompt, setting, control, reference, inpaint,
model, and a revised prompt is written per target model with a one-line diff. Since 0.3.0 the judge treats
images in a three-way loop as having no order and checks the batch winner against the brief before reporting it:
winning a batch is not fitting the brief, and when nothing fits it says so. Since 0.5.0 it uses rubric version 3,
which adds a mechanism gate for pictures of working machines. Before ranking, candidates painted over 3D renders go
through aw.py geomgate (0.4.0) and candidates that join a series through aw.py setfit (0.5.0); one that fails
is listed with its failing gates or measures and not ranked. The mechanics are
on How images are judged; the output file is the Verdict contract.
Up to about 12 candidates are judged round robin; above that, Swiss rounds (aw.py rank --next) pair neighbours
that have not met. The skill's cost figure: a 16-image round robin in both orders is about 624k image tokens at
the default 768 px pair cell.
Measures first (aw.py pixel), then looks at a nearest-neighbour preview, never a smoothed resize, and critiques
in this order, stopping at the first level that fails badly: read at 1x, silhouette, value, palette roles,
clusters, outlines, light. Each finding cites the rule it breaks and the pixel coordinates. It reports what is
wrong and points to fixers; it never rebuilds the sprite. Since 0.7.0 it also reports the craft numbers (banding,
corner doubles, interior jaggies, pillow shading, a silhouette lost on the game's grounds), which point at where to
look and never fail a sprite (Commands). A painted game sprite
is not pixel art: since 0.4.0 the skill checks it with aw.py sprite against the sprites it will sit beside. "Clean pixel art" has a definition, given on
How images are judged.
Two stores. The public knowledge in the repository (movements, theory, traditions, model profiles, law, market
rules) gets a fetched source, a date and a verified flag on every row; anything not backed by a source fetched in
the session ships verified: no. The private taste record lives in ARTWRIGHT_HOME (default ~/.artwright):
verdicts.jsonl, taste.md, calibration/labels.jsonl, keywords/<model>.md and palettes/. Nothing private
enters the repository. A lesson from the private record is promoted to the public files only when it is general
and seen three times, written without the owner's names, projects or images. When it asks a person to label a
pair for calibration, a coin flip decides which image is shown first, and cache label --shown-first records it, so
cache agreement can report the person's own side bias.
- No attribution, authentication or valuation from pixels ("is this a real Rubens", "what is it worth"). The skill declines, says why, and names what would answer it: provenance, a technical study, a specialist.
- No "is this AI-made" from pixels. The answer is neither yes nor no; the skill describes visible traits, never as proof, and names what would settle it (provenance, the file's history, C2PA metadata).
- A living artist named in a prompt or an "in the style of" request becomes descriptive traits (medium, palette, line, subject, era), with one line saying so. Public-domain masters, movements and genres may be named.
- The golden ratio is never a reason. The rule of thirds is a description, never a score.
- An absolute 1 to 10 score only when asked, anchored by three labelled reference images, with the warning that model scores bunch at the top.
The four skills share one evergreen record at the repository root (evergreen.json, RESEARCH, CHANGELOG,
LEARNINGS, TESTS). Each skill reads it first and, when its research is past due, says so in one line and refreshes
after the task. Model profiles and the law file are rechecked every 60 to 90 days.
This wiki describes artwright 0.7.2 (the v0.7.2 tag, commit a185c05) and was last updated on 2026-10-26. The plugin is MIT licensed. Report problems in the issues. It installs from the repository, m4bwav/artwright, or from the 0.7.2 release.
Using it
- Getting started
- Skills
- Commands
- Light, colour and composition
- How images are judged
- Verdict contract
- Errors and edge cases
- Recipes
- FAQ
The releases
Contributing
Elsewhere