A browser-based toolkit for processing brass band sheet music PDFs. All processing happens client-side - your PDFs never leave your device!
(Also available at: https://clementnuss.github.io/partutti/)
Automatically split brass band PDFs by instrument using OCR and text detection.
- Auto-detects instrument names
- OCR fallback for scanned PDFs
- Edit instrument names
- Merge/split pages
- Download individually or as ZIP
Combine 2 pages into 1 for A5 printing.
- Process multiple PDFs at once
- Optional margin cropping
- First page alone mode
- Batch download as ZIP
Merge common pages (lyrics, etc.) with all parts.
- Two-step upload process
- Adds common PDF to beginning of each part
- Batch processing
Combine all parts into one master PDF with configurable replicas.
- Set number of copies per part (e.g., 2 euphoniums)
- Drag-and-drop reordering
- Smart filename detection
- Total page count
# Install dependencies
npm install
# Start dev server (http://localhost:3000)
npm run dev
# Build for production
npm run buildThis project uses GitHub Actions to automatically deploy to GitHub Pages on every push to main.
- Go to your repository Settings
- Navigate to Pages (under Code and automation)
- Under Source, select "GitHub Actions"
- Push to main branch - the site deploys automatically!
To use a custom domain like music.n8r.ch:
- In repository settings → Pages → Custom domain:
music.n8r.ch - In your DNS provider, add a CNAME record:
music.n8r.ch → clementnuss.github.io - Wait for DNS propagation (5-30 minutes)
- GitHub automatically provisions SSL certificate ✨
- Vite - Build tool and dev server
- PDF.js - PDF rendering and text extraction
- pdf-lib - PDF manipulation
- Tesseract.js - Browser-based OCR
- JSZip - ZIP file creation
- Fuse.js - Fuzzy string matching
All PDF processing happens entirely in your browser using WebAssembly and JavaScript. No data is sent to any server. Your PDFs stay on your device!
MIT