agentsclimarketplace

Figure taste

Skill QuantumBFS/sci-brain/skills/figure-taste

Use when reviewing the visual design/quality of a figure, plot, or diagram — "is this figure well-designed", "review my plot", "critique this figure's layout/colors", "does this figure have good taste". Judges alignment, proximity, color, typography, clarity, and scientific-plot conventions against an 18-rule rubric, renders the figure to look at it, reads its source when available, then prints a scorecard. Report-only (never edits) and terminal-first (saves a file only on request). Not for whether a figure is cited/discussed in a manuscript (use paper-reviewer) or for drafting figures (paper-writer's Figure Rulebook).From its SKILL.md

Install
npx -y skills add QuantumBFS/sci-brain --skill figure-taste

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

9.7 KB, as published. Nobody here has run it

Figure Taste

Run a structured visual-design review over one or more figures and print a scorecard. The skill renders the figure to a raster so it can see it, reads the source (matplotlib .py, Typst .typ, SVG) so suggestions can name the exact line or parameter to change, scores it against an 18-rule rubric, and delivers severity-ranked findings with concrete fixes.

Scope note. This judges how a figure looks — the artifact itself. It is not paper-reviewer, which checks whether figures are referenced and discussed in the manuscript (orphan figures, undiscussed features, caption sufficiency). It is not paper-writer, which authors figures figures-first. Use figure-taste when a figure already exists and the user wants its visual quality assessed. For the why behind a plotting convention, consult paper-writer's Figure Rulebook rather than restating it here.

The full rubric — each rule's "good looks like" and "flag when" — lives in skills/figure-taste/checklist.md.


Operating principle

Source-aware, report-only, terminal-first.

  • Source-aware — always look at a rendered raster before scoring (never judge a figure you have not seen); when source exists, read it too so a fix can cite a line or parameter.
  • Report-only — never edit the figure or its source. Suggest concrete changes; the user applies them.
  • Terminal-first — print the scorecard to the chat by default. Write a file only when the user asks.

The rubric — 18 rules

All 11 general rules apply to every figure. The 7 scientific rules add on when the figure is a scientific plot (quantitative axes / data series). Numbering is stable: scientific IDs skip S4/S6/S10 (axes-with-units, honest-axes, show-uncertainty were considered and not selected — keep the gaps if added later).

IDRuleApplies to
G1Alignment — contents align to a shared grid / baselines, not eyeballedall
G2Proximity — related elements are physically close; unrelated ones separatedall
G3Edge padding — text and content have breathing room from the boundariesall
G4Unified color — a limited, coherent palette; not too colorfulall
G5Clear focus — the main message stands out; not too many competing highlightsall
G6Reading order / hierarchy — the eye knows where to start and go next; the key element reads firstall
G7Consistent sizing & spacing — same-type elements share size; gutters/margins are uniformall
G8Contrast & legibility — text and lines stand out from their backgroundall
G9Colorblind / grayscale-safe — no meaning carried by red-vs-green alone; survives B&Wall
G10No overlap / clipping / occlusion — nothing collides, covers data, or is cut off at edgesall
G11Consistent typography — one or two font families; a small set of sizes as a hierarchyall
S1Text large enough — readable at the intended display sizeplots
S2Lines strong enough — data lines/markers have enough weight to readplots
S3Efficient use of space — no large empty regions; data fills the frameplots
S5Minimize chartjunk — drop 3D effects, heavy gridlines, redundant borders, decorative fillsplots
S7Legend & direct labeling — legend unambiguous and not occluding; prefer direct labels for few seriesplots
S8Cross-panel consistency — comparable subpanels share scales/axes/colors; consistent (a)(b)(c) labelsplots
S9Resolution / format adequate — vector where possible; no pixelation or blur at display sizeplots

Severity rubric

Rank every non-pass finding so the user can triage:

  • high — breaks readability or meaning: illegible text at display size, clipped/cut-off content, meaning lost in grayscale (G9), data occluded by a legend, pixelated-to-unreadable.
  • med — hurts clarity but not correctness: too colorful (G4), weak hierarchy/focus (G5/G6), inconsistent spacing (G7), chartjunk (S5), weak lines (S2), large blank areas (S3).
  • low — polish: minor edge padding (G3), marker/typography inconsistency, an ambiguous-but-survivable legend.

Phase 0 — Scope & render

  1. Resolve target(s). Accept explicit path(s), a directory, or auto-detect (images/, figures/, then *.png|jpg|jpeg|pdf|svg|typ in the working directory). If several are found and the user did not name one, list them and ask which to review.

  2. Establish the display context. Ask once (with a default): where will this figure appear — paper single-column / paper double-column / slide / poster / web — and the final width. This is what makes S1 (text size) and S9 (resolution) meaningful. Default if unspecified: paper double-column (~3.4 in wide).

  3. Render to a raster you can look at (source-aware). Use the helper:

    python3 skills/figure-taste/helpers/render.py <path> [--dpi 200] [--allow-exec]
    
    • raster (.png/.jpg) and .pdf → read directly (the helper passes them through).
    • .typ → compiled to PNG via typst.
    • .svg → converted to PNG via the first available of rsvg-convert / inkscape / cairosvg.
    • matplotlib .py → rendered only with --allow-exec (open figures captured to PNG). Confirm with the user before passing --allow-exec; otherwise prefer an already-rendered output, or ask for a PNG.
    • The helper prints the viewable PNG path(s) to stdout. If it fails (no renderer available), ask the user to export a PNG — do not score an unseen figure.

    Then read the produced raster with your image-reading ability. When the source exists, also read it as text so fixes can cite a line/parameter.

  4. Classify each figure as scientific plot (quantitative axes / data series) or general/schematic (diagram, flowchart, conceptual art). State the classification so the user can override. General rules apply to all; scientific rules add on only for plots.

Do not score a figure before you have looked at its rendered raster.


Phase 1 — Score against the rubric

For each figure, view the render (and source, if available) and rate every applicable rule. Each finding has this shape:

{ rule:      G1–G11 or S1–S9,
  rating:    pass | warn | fail,
  location:  where in the figure (panel, region, the offending element),
  observation: what you see, in one sentence,
  fix:       a concrete change — and the source line/parameter when source is available,
  severity:  high | med | low   (omit for pass) }
  • Judge S1/S9 against the Phase-0 display context, not the on-screen render size.
  • Ground each finding in something visible in the raster (or a line in the source). Where a call is subjective, say so rather than asserting.
  • The per-rule "good looks like / flag when" detail is in skills/figure-taste/checklist.md — walk it as you score.

Phase 2 — Deliver

Print, per figure:

  1. Header — file, classification (general / scientific), and the display context used.
  2. Scorecard table — rule → rating (✓ / ⚠ / ✗) → one-line note.
  3. Severity-ranked findings — high → low, each with its concrete fix.
  4. Top fixes — a short prioritized list of the highest-leverage changes.

For a multi-figure run, add a brief cross-figure summary (shared problems, inconsistencies across the set).

Then offer to save: only on a yes, write figure-review-YYYY-MM-DD.md beside the reviewed figure(s) (or a path the user gives), using the same structure. This matches the repo's dated-output convention (cf. paper-reviewer).


Reused vs. new

Reused: the dated-output convention and severity-rubric shape from paper-reviewer; paper-writer's Figure Rulebook for the why behind plotting conventions (referenced, not restated).

New here: the render-then-look protocol (Phase 0), the general/scientific classification gate, the 18-rule visual-design rubric, and helpers/render.py (normalize any figure input to a viewable PNG).


Common mistakes

MistakeInstead
Scoring a figure you never renderedPhase 0 step 3: render and look first; ask for a PNG if rendering fails.
Judging "text too small" with no contextPhase 0 step 2 fixes the intended display size before S1/S9.
Applying scientific rules to a schematicClassify first; S-rules add on only for plots.
Editing the figure or its sourceReport-only — suggest, never apply.
Running a matplotlib .py silentlyRender .py only with --allow-exec after user confirmation; else use existing output or ask for a PNG.
Asserting a subjective taste call as factMark subjective findings as opinion; ground the rest in the raster/source.

Integrations

  • Rendering / normalize-to-PNG: skills/figure-taste/helpers/render.py.
  • Full rubric checklist: skills/figure-taste/checklist.md.
  • Figure-text integration, captions, orphan figures: paper-reviewer (different concern).
  • Plotting-convention rationale: paper-writer Figure Rulebook.

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.