Convert whiteboard photos into interactive Miro boards using AI vision analysis.
Perfect for teams who do a lot of in-person whiteboarding and want to quickly digitize their diagrams.
- Drag-and-drop photo upload
- AI-powered diagram analysis (detects shapes, text, arrows, sticky notes)
- Automatic Miro board creation with all detected elements
- Support for flowcharts, mind maps, and general diagrams
- Preview mode to see what will be extracted before creating the board
cd snap-a-miro
npm installCopy the example environment file and add your credentials:
cp .env.example .envEdit .env with your API keys (see setup guides below).
npm run devOpen http://localhost:3000 in your browser.
- Go to Anthropic Console
- Sign in or create an account
- Navigate to API Keys
- Click Create Key
- Copy the key and add it to your
.envfile:ANTHROPIC_API_KEY=sk-ant-...
-
Create a Miro Account (if you don't have one)
- Go to miro.com and sign up
-
Access Developer Settings
- Go to miro.com/app/settings/user-profile/apps
- Or: Click your profile picture → Settings → Your apps
-
Create a New App
- Click Create new app
- App name:
snap-a-miro - Team: Select your team
- Click Create app
-
Configure Permissions
- In your app settings, scroll to Permissions
- Enable these scopes:
boards:write- Create and modify boardsboards:read- Read board data
-
Get Your Access Token
- Scroll to Access Token section
- Click Copy to copy your token
- Add it to your
.envfile:MIRO_ACCESS_TOKEN=your-token-here
-
(Optional) Get Your Team ID
- If you want boards created in a specific team
- Go to your Miro team dashboard
- The Team ID is in the URL:
miro.com/app/dashboard/?team=TEAM_ID - Add it to your
.env:MIRO_TEAM_ID=your-team-id
-
Upload a Photo
- Drag and drop a whiteboard photo onto the upload zone
- Or click to browse and select a file
- Supports JPEG, PNG, WebP (max 10MB)
-
Preview (Optional)
- Click "Analyze Only" to see what elements were detected
- Shows counts of shapes, connectors, text blocks, and sticky notes
-
Convert to Miro
- Click "Convert to Miro" to create the board
- Wait for processing (usually 10-30 seconds)
- Click "Open in Miro" to view your new board
- Good lighting: Take photos in well-lit conditions
- Clear contrast: Dark markers on white boards work best
- Straight angle: Capture the whiteboard straight-on if possible
- Readable text: Ensure handwriting is legible
- Complete view: Include the full diagram in the frame
snap-a-miro/
├── server/
│ ├── index.js # Express server
│ ├── routes/
│ │ └── convert.js # API endpoints
│ ├── services/
│ │ ├── vision.js # Claude Vision analysis
│ │ └── miro.js # Miro API client
│ └── utils/
│ └── transform.js # Coordinate transformation
├── public/
│ ├── index.html # Web UI
│ ├── styles.css # Styling
│ └── app.js # Frontend logic
├── package.json
├── .env.example
└── README.md
Converts a whiteboard image to a Miro board.
Request: multipart/form-data with image field
Response:
{
"success": true,
"boardId": "uXjVN...",
"boardUrl": "https://miro.com/app/board/uXjVN.../",
"itemCount": 12,
"title": "System Architecture"
}Analyzes an image without creating a board.
Request: multipart/form-data with image field
Response:
{
"success": true,
"analysis": {
"title": "System Architecture",
"shapes": 5,
"textBlocks": 2,
"stickyNotes": 3,
"connectors": 4
}
}Health check endpoint.
- Ensure you've copied your token to the
.envfile - Restart the server after changing
.env
- Check that your Miro token has
boards:writepermission - Verify the token hasn't expired
- Try with a clearer, higher-resolution photo
- Ensure good lighting and contrast
- Make sure the whiteboard content is visible
- Backend: Node.js, Express
- AI Vision: Anthropic Claude (claude-3-5-sonnet)
- Diagram Creation: Miro REST API v2
- Frontend: Vanilla HTML/CSS/JavaScript
MIT