Museum Label Generator
A tool that generates six interpretive text formats from a single artwork description. Built to support human editorial control, not replace it.
GitHub ↗Museum wall labels are written for visitors who already speak the language of art history. For everyone else — a child, a casual visitor, a designer who thinks visually — the infrastructure meant to help them often doesn't. Labels are a bottleneck: curators are overworked, the writing process is slow, and scaling across formats (audio, kids, alt text) is rarely prioritized. The tool takes a single artwork description and generates six interpretive formats simultaneously. The AI acts as a starting point. Human editorial control is built in at every step.
Click to pause · Double-click to resume
Famille noire porcelain exemplifying the Kangxi period's apotheosis of ferric oxide reduction firing, the pictorial program articulating a syncretic cosmological schema through the deployment of peony, prunus, and corvid iconography within a horror vacui compositional field. Wait, what? Use the generator.
Architecture
A browser form collects artwork metadata, source description, tone, and grounding preferences. A Netlify function keeps the API key server-side, sends one Claude request, validates the JSON response, and renders each label format as an editable draft.
Single source text · Six formats · Tone control · Accessibility constraints
Artwork upload stays local as gallery context; source text remains the model input
| Wall label | Standing visitor, 15 seconds — ~80 words, no jargon. |
| Extended label | Visitor who pauses — ~200 words, permits depth. |
| Kids label | Age 6–10 — not simplified, differently framed. Questions, wonder, sensory detail. |
| Audio guide script | Listener, not reader — written for the ear. Conversational rhythm, present tense, ~45 seconds spoken. |
| Alt text | Screen reader user — functional replacement for a visual. Objective, WCAG-compliant, no interpretation. |
| Curator notes | Internal — flags ambiguities, suggests research directions, notes what the source description didn't specify. |
- Structured JSON over streaming text All six formats arrive together and render into independent copyable cards. Streaming would have made per-section copy interactions much more complex, and curators typically want all formats at once anyway.
- A single API call for all six formats Higher latency per generation, but simpler architecture and a better match for how the tool gets used. The tradeoff was worth it.
- Tone as a prompt injection, not a separate system prompt The tone dropdown (Neutral, Warm, Playful, Academic) injects into the user prompt rather than switching system prompts. Less precise, but much simpler to maintain as a single prompt template.
- The 'Show Prompt & Architecture' toggle Exposes the system prompt, user template, and call flow to anyone who wants to see them. Institutional adopters want to audit what the model is doing before they trust it with their collections. Showing the work is also a trust signal for visitors skeptical of AI tools in cultural contexts.
- API key security via Netlify Function All calls route through a serverless function. The key never touches the browser. Cold starts add ~300ms latency on first request — acceptable for a tool used in considered, not rapid-fire, workflows.
See it in context
Upload your artwork
Generate a label above to see your draft here.