Network-enabled batch photo scanning application for digitizing physical photo collections.
- Scanner Discovery: Automatic detection of eSCL-compatible scanners via mDNS/Bonjour
- Photo Detection: Intelligent detection and cropping of multiple photos per scan using edge analysis
- Batch Processing: Scan multiple photos at once and automatically separate them
- Real-time Progress: WebSocket-based UI updates during scanning and processing
- Date Extraction: OCR-based detection of dates from photo backs
- Runtime: Bun
- Server: Fastify with WebSocket support
- Client: React 18 with Vite, Tailwind CSS, Radix UI
- Image Processing: Sharp, OpenCV.js
- State Management: Zustand
- Database: SQLite with Drizzle ORM
- Testing: Bun test, Playwright
- Bun >= 1.0
- An eSCL-compatible scanner on your network
bun install# Start development server (API + client)
bun run dev
# Or run separately
bun run dev:server # API server with hot reload
bun run dev:client # Vite dev server# Discover scanners on your network
bun run scanner:discover
# Test scanning with a discovered scanner
bun run scanner:testbun test # Run all tests
bun test --watch # Watch mode
bun test --coverage # With coverage
bun run test:e2e # Playwright E2E testsbun run build # Build server and client
bun run start # Run production buildsrc/
├── client/ # React frontend
│ ├── components/ # UI components
│ ├── stores/ # Zustand state stores
│ └── styles/ # CSS and Tailwind
├── server/ # Fastify backend
│ ├── detection/ # Photo detection (OpenCV)
│ ├── processing/ # Image processing pipeline
│ ├── routes/ # REST API endpoints
│ ├── services/ # Scanner, storage services
│ └── websocket/ # Real-time event handlers
└── shared/ # Shared types and constants
- OpenCV Setup Guide - Photo detection implementation details