Skip to content
m4bwav edited this page Oct 26, 2026 · 3 revisions

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.

What artwright leaves to other plugins

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.

artwright (the hub)

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.

artwright-judge

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.

artwright-pixel

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.

artwright-curate

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.

Guards (every skill)

  • 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.

Freshness

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.

Clone this wiki locally