{
  "$schema": "https://humangarden.ai/.well-known/skill-spec.schema.json",
  "canonical_url": "https://humangarden.ai/skills/canvas-design/spec.json",
  "slug": "canvas-design",
  "last_tested": "2026-06-05",
  "tested_by": "humangarden",
  "verdict_one_line": "A two-step \"write a philosophy, then express it\" generator with 54 bundled fonts and zero scaffolding — taste-ceiling skill; rendered an A2 archival poster in 60ms once we picked reportlab",
  "fires_when": [
    "user wants to generate a poster, plate, zine cover, or other static visual artwork",
    "user wants Claude to author a design philosophy first and then express it on a canvas",
    "user wants a single-page PDF or PNG with a strong typographic gesture and sparse marginalia",
    "user wants design-taste guidance (philosophy-first, minimal text, monumental gesture, subtle reference)",
    "user wants access to a curated typeface library without sourcing fonts themselves"
  ],
  "skip_when": [
    "user wants pixel-precise layout from a brief — this skill resists templates, it teaches an aesthetic",
    "user wants raster illustration, photo composites, or any output that depends on a pre-trained image model",
    "user wants logo design with brand constraints — the skill's \"subtle reference\" gesture pulls against literal brand marks",
    "user wants a one-shot fill-in-the-blanks generator — there is no make-my-canvas.py, the model must pick a renderer and write the code",
    "user needs deterministic output across runs — different models or different days will produce different compositions"
  ],
  "inputs": [
    {
      "type": "prompt",
      "constraint": "any short brief; the skill expects a \"subtle conceptual thread\" (a niche reference) rather than a literal subject"
    },
    {
      "type": "text",
      "format": "markdown",
      "constraint": "optional — the skill itself authors a philosophy.md as step 1; users do not supply it"
    }
  ],
  "outputs": [
    {
      "type": "file",
      "format": "pdf",
      "quality_note": "vector geometry + bundled TTFs render in ~60ms at A2; quality is bounded by the model's design taste, not the skill's tooling"
    },
    {
      "type": "file",
      "format": "png",
      "quality_note": "same composition rasterised; requires a separate renderer (sips/pdftoppm/Pillow) — not part of the skill itself"
    },
    {
      "type": "file",
      "format": "markdown",
      "quality_note": "the design philosophy itself, ~5-6 paragraphs; useful as a reusable aesthetic brief independent of the visual output"
    }
  ],
  "installation": {
    "pip": [
      "reportlab",
      "Pillow"
    ],
    "npm": [],
    "system": {
      "macos": "sips (built-in) or brew install poppler — for rasterising the PDF to PNG",
      "notes": "SKILL.md declares no renderer; the model picks one. reportlab is the natural fit for vector + TTF registration. The 54 bundled TTFs in canvas-fonts/ are the only first-party tooling."
    },
    "notes": "Zero scaffolding. No requirements.txt, no package.json, no example script. Required deps must be inferred from the visual the model wants to make. Pillow alone is not enough — it cannot embed TTF subsets into a PDF."
  },
  "artifacts": [
    {
      "kind": "image",
      "file": "https://humangarden.ai/spec-artifacts/canvas-design/vertical-silence.png",
      "caption": "Plate IV — \"Vertical Silence\". A2 archival survey of an imaginary face. 26-ring contour figure, hand-set elevation ruler, monumental \"IMPOSSIBLE\" in BigShoulders-Bold, Crimson italic aphorism, one rope-red accent at the summit. Generated in 60ms by reportlab from a six-paragraph philosophy authored by the skill in step 1.",
      "role": "output",
      "hero": true
    },
    {
      "kind": "image",
      "file": "https://humangarden.ai/spec-artifacts/canvas-design/plate-windrose.png",
      "caption": "Plate V — wind rose. Same archive grammar, different instrument. 24 spokes, NW prevailing in faded rope-red, \"WIND\" set small in BigShoulders. Tests the SKILL.md MULTI-PAGE OPTION (\"tell a story in a very tasteful way\").",
      "role": "output",
      "hero": true
    },
    {
      "kind": "image",
      "file": "https://humangarden.ai/spec-artifacts/canvas-design/plate-memorial.png",
      "caption": "Plate VI — closing memorial. Almost empty paper, one hairline rule, Crimson regular dedication \"for the routes not taken\", a single rope-red tick. The skill rewards restraint; this plate is the skill at full discipline.",
      "role": "output",
      "hero": true
    },
    {
      "kind": "pdf",
      "file": "https://humangarden.ai/spec-artifacts/canvas-design/vertical-silence.pdf",
      "caption": "The vector PDF behind plate IV — 107 KB, single A2 page, fonts subset-embedded.",
      "role": "output",
      "hero": false
    },
    {
      "kind": "pdf",
      "file": "https://humangarden.ai/spec-artifacts/canvas-design/vertical-silence-3pp.pdf",
      "caption": "Three plates in one document, verified by pypdf — same philosophy, three instruments, narrative arc from measurement to silence.",
      "role": "output",
      "hero": false
    },
    {
      "kind": "text",
      "inline": "# Vertical Silence\n\nA philosophy of monumental quietude — the aesthetic of cold air, slow stone, and the disciplined withdrawal of the body from where it does not belong. Vertical Silence treats the page as altitude. Composition is gravity, type is breath, and the viewer is asked to ascend the canvas the way one ascends a wall: deliberately, in measured pitches, with hands that have practiced this hold ten thousand times before.\n\nThe visual language is meticulously crafted from the vocabulary of survey instruments and field journals — isobars, contour lines, hand-ruled scales, the catalog stamp of an institution that has been weighing the unweighable for a century. Every mark is the product of deep expertise: lines are drawn as if measured against a granite face, not estimated; numerals are set with the patience of someone correcting their own work seven times before committing it to paper. Where most posters speak, Vertical Silence reports. Where most reports demand attention, Vertical Silence rewards the viewer who leans in.\n\nSpace is the dominant material. Negative areas are not voids but pressure systems — they hold the weight of what is not said. Color is restrained almost to monochrome: bone-white paper, ink the color of wet slate, a single low-saturation accent borrowed from old climbing rope or fading topo-map ink. No gradient, no glow, no decoration that would betray the principle that the work was hand-set, hand-printed, and reviewed under raking light.\n\n[...continued in philosophy.md — 6 paragraphs total, ending with \"Nothing decorative. Nothing wasted. Nothing that would not survive the cold.\"]\n",
      "caption": "The design philosophy (step 1 output) — six paragraphs of monumental quietude that drove every choice in the rendered plates. Full text at /spec-artifacts/canvas-design/philosophy.md.",
      "role": "reference",
      "hero": false
    }
  ],
  "caveats": [
    "Zero scaffolding ships with the skill. No requirements.txt, no example script, no make-my-canvas.py — SKILL.md never names a renderer (reportlab, cairo, Pillow, matplotlib are all unstated). The model must pick one and write the drawing code from scratch every run.",
    "Font registration is silently fragile. reportlab raises KeyError if you call setFont(\"BigShoulders\", 80) without first registering the TTF — no graceful fallback to Helvetica. Any agent that copies font names from the SKILL.md cookbook without also discovering canvas-fonts/ will crash, not degrade.",
    "Output quality is bounded by the model's design taste, not the skill's tooling. The skill teaches *what* to make (philosophy-first, minimal text, monumental gesture, subtle reference); it does not teach *how*. A weaker model will produce a weaker poster even with the same philosophy.",
    "The \"FINAL STEP\" injection (\"It isn't perfect enough. It must be pristine, a masterpiece\") is a hidden second-pass prompt that pushes the model toward more restraint, not more invention. Watch for compositions that ratchet themselves toward emptiness — the memorial plate in this review is what that ceiling looks like at its honest extreme.",
    "PDF to PNG is not part of the skill. SKILL.md says \"Output the final result as a single, downloadable .pdf or .png file\" but provides no path from one to the other. macOS sips works for single-page PDFs only; multi-page exports need pdftoppm or Pillow.",
    "The \"subtle reference\" instruction is load-bearing and undocumented in its risk: if the model picks too literal a reference (e.g. a real artist's signature motif), the skill silently violates its own \"never copying existing artists' work\" warning. We chose a thematic reference (Messner's philosophy of honorable retreat — \"the mountain is preserved by those who turn back\") that is never named in the work itself; not all model runs will be this careful.",
    "Deterministic geometry is the user's responsibility. The skill's aesthetic asks for \"perfect shapes\" and \"repeating patterns\" but does not warn that procedural noise (random.uniform, time.time seeds) will produce a different poster every run. Seed your randomness or your \"masterpiece\" is unreproducible."
  ],
  "needs_credentials": [],
  "source_repo": "https://github.com/anthropics/skills/tree/main/skills/canvas-design",
  "human_review_url": "https://humangarden.ai/skills/canvas-design/"
}