Whiteboard-to-structured-content pipeline using Claude Vision. Takes a photo of a physical whiteboard and produces a multi-format output package: raw transcription, structured summary, recreated diagrams (Mermaid + Excalidraw), and follow-up actions.
# From this repo
bun scripts/board-capture.ts whiteboard.jpg
# Or after installing as a skill
bun ~/.claude/skills/board-capture/scripts/board-capture.ts whiteboard.jpg- Bun runtime
- Claude Code CLI (
claude) or OpenCode CLI (opencode)
- ImageMagick - Image enhancement and downscaling for large files (
--enhanceflag) - sips - HEIC to JPEG conversion (macOS native, pre-installed)
See INSTALL.md. The repo layout mirrors the skill directory, so installation is just copying SKILL.md and scripts/ to the appropriate skill location:
- Claude Code:
~/.claude/skills/board-capture/ - OpenCode:
~/.config/opencode/skills/board-capture/
# Full 3-pass pipeline (most detailed output)
bun scripts/board-capture.ts <image-path>
# Specify output directory
bun scripts/board-capture.ts photo.jpg --output ./meeting-notes/
# Enhance image before processing (auto-orient, contrast, glare reduction)
bun scripts/board-capture.ts photo.jpg --enhance
# Quick single-pass mode for simple boards
bun scripts/board-capture.ts photo.jpg --quick| Flag | Description |
|---|---|
--output <dir> |
Output directory (default: ./boardcapture-<timestamp>/) |
--enhance |
Preprocess image with ImageMagick |
--quick |
Single-pass mode, faster but less detailed |
--help |
Show help |
JPEG, PNG, HEIC, WEBP. HEIC auto-converts via sips (macOS).
Each run creates a timestamped directory with:
| File | Contents |
|---|---|
raw-extraction.md |
Verbatim transcription preserving spatial context |
structured-summary.md |
Reorganized with hierarchy, tables, action items |
diagrams/*.mmd |
Mermaid files for structured diagrams |
diagrams/*.excalidraw |
Excalidraw JSON for freeform layouts |
follow-up.md |
Priority actions, open questions, next steps |
The full pipeline runs three Claude Vision passes:
- Pass 1 - Faithful Extraction (smart): Exhaustive literal capture of all text, shapes, arrows, and spatial relationships
- Pass 2 - Structural Analysis (smart): Identifies hierarchy, classifies content (action items, decisions, questions), determines diagram types
- Pass 3 - Package Generation (smart): Produces the complete multi-format output package
Quick mode (--quick) collapses this into a single pass.
If Pass 2 or 3 fails, the pipeline saves whatever it completed. You'll always get at least the raw extraction from Pass 1.
board-capture/
├── README.md # This file
├── INSTALL.md # Installation guide (Claude Code + OpenCode)
├── VERIFY.md # Post-install verification checklist
├── SKILL.md # Skill definition (copied during install)
├── package.json
├── tsconfig.json
├── scripts/ # Copied to skill directory during install
│ ├── board-capture.ts
│ ├── inference.ts
│ └── prompts/
│ ├── pass1-extraction.md
│ ├── pass2-analysis.md
│ ├── pass3-generation.md
│ └── quick-mode.md
└── examples/
├── full-pipeline/
└── quick-mode/
See the examples/ directory for real output from test runs:
examples/full-pipeline/- Complete 3-pass output with Mermaid and Excalidraw diagramsexamples/quick-mode/- Single-pass quick mode output
Zero npm dependencies. Uses only:
- Node built-ins (
node:fs,node:path,node:child_process) - Bundled
inference.tswrapper (auto-detectsclaudeoropencodeCLI)
MIT