Journalistic data visualization

Generate and critique
the charts that carry
a data story.

vizier decides the parts of a chart that are actually decidable — which form fits the comparison, whether a palette survives colorblindness and contrast, whether the label ink is being confused for a series hue — and, with a corpus of critical writing, judges what a finished chart got wrong. Generation and critique, from one set of thresholds.

$ pip install datavizier
$ vizier recommend-form "composition of a total over time" --n-series 5
→ stacked-area   (Part-to-whole · Change over time)
$ vizier validate "#e69f00,#0072b2,#009e73" --pairs all
→ ALL CHECKS PASS   (CVD ΔE, WCAG contrast, OKLCH lightness/chroma)

Two halves, one system

vizier started as a critic and grew a generator, and the two are colocated on purpose — they share the same DNA. The thresholds that let vizier suggest a form or palette are the thresholds it critiques against, so what it proposes is what it would pass. Held apart, they can be pointed at each other: a generator proposes, the critic pushes back.

generate

Give me one that's right

Chart-form recommendation, colorblind-safe palettes and ordinal ramps, legible label ink — every suggestion validated before it's returned. A request that can't be satisfied honestly errors instead of returning something that fails.

critique

Is this one right?

Structural and color checks straight from an SVG or HTML chart, plus retrieval-augmented judgment against a corpus of award commentary, structural critique, and practitioner walkthroughs — with prior-art citation.

What it decides

The computable half is deterministic, needs no LLM and no keys. What vizier suggests is what vizier would pass — the color math is a faithful port of a published validator (Machado-2009 CVD transforms, OKLCH lightness/chroma, WCAG contrast).

Chart-form recommendation

Describe the comparison and the data shape; get the form that matches, with the honest alternatives and the anti-patterns. Backed by 43 patterns across the nine FT Visual Vocabulary families.

Colorblind-safe color

Categorical palettes and one-hue ordinal ramps generated and validated: CVD separation under deuteranopia / protanopia / tritanopia, an OKLCH lightness band and chroma floor, and contrast against the surface. Legible label ink for any fill.

Structural checks from the artifact

Point vizier analyze at a chart's SVG or HTML and get the palette pulled out and checked, plus structural issues — no re-typing the colors, no guessing the encoding.

Corpus-backed critique

vizier critique <image> retrieves the relevant pattern checklist and critical writing, then an LLM synthesizes a structured review — the language of critique, grounded in prior art rather than vibes.

MCP-native

vizier mcp serves every decision above — plus the corpus query — as an MCP stdio server. Your Claude Code / Cursor session, or a charting tool, asks vizier for the right call instead of re-deriving it.

A core with no keys and no heavy deps

validate, suggest, recommend, analyze, ink, and the pattern query all work from pip install datavizier alone. Retrieval and LLM critique are opt-in extras.

Install

$ pip install datavizier                 # computable toolkit + pattern query + MCP server
$ pip install "datavizier[search]"       # + semantic retrieval (find_similar)
$ pip install "datavizier[critique]"     # + LLM critique/eval (routes through somm)
$ pip install "datavizier[ingest]"       # + rebuild the corpus from source

Python 3.12+. The core has no proprietary and no heavyweight dependencies. Register the MCP server with one line:

$ claude mcp add vizier -- vizier mcp

Try the computable toolkit — no keys

$ vizier suggest-palette 6                 # a CVD-safe categorical palette, validated
$ vizier suggest-ramp 5 --hue navy         # a one-hue ordinal ramp, validated
$ vizier ink "#0072b2"                     # the legible text color for a fill
$ vizier analyze chart.svg                 # palette + structural checks from an SVG

The chart-forms guide

43 patterns, nine families, live demos

A self-contained reader: for every chart form, when it earns its place, when to reach for something else, the common mistakes, and a reading checklist — each with a live d3 demo you can drive. Generated from the same pattern data vizier answers recommend-form with.

Open the guide →

Critique & evaluation

The critique path (vizier critique) and the vizier eval harness use an LLM, routed through somm — a self-hosted gateway on PyPI. Provide a key in .env, or swap in any client by adapting one small module. The color-CVD case under evals/ measures the lift the computable findings give a critique: alignment rose from 2 to 5 on the focused A/B.

vizier & weaver

vizier is the decision + critique companion to weaver, which renders the graphics. weaver draws the pixels; vizier decides which form and which colors, and judges the result. The same thresholds serve both directions.

Status

v0.1.0 · MIT licensed. What the corpus draws on and the philosophy behind distilling broad expert taste into a determination are in INFLUENCES.md; the house posture on charts is in PRINCIPLES.md.

Star on GitHub →