· 2 min read
Solo Scores: The Vision Model Reads, the App Decides
Solo Scores' PDF import uses a vision model for what it's good at, reading messy printed pages, and plain rules in the app for everything that needs to be predictable.
A folder full of parts
When an ensemble starts using Solo Scores, the music usually arrives as a folder of PDFs: one file per part, named however whoever scanned them felt like that day. Turning that into scores, each with its title, composer and parts, is slow work by hand.
Bulk Import does it in one go. The trick was splitting the job in two: AI for the part it's genuinely good at, and plain rules in the app for everything that needs to be predictable.
What the model is for: reading
Reading a page of sheet music is hard to do with rules. Titles, composers and part names sit somewhere near the top, in any font, on scans that are tilted or faint. A vision model handles that well. It reads the page in context and can tell which line is the title, which is the composer's credit and which says "Violin 2".
It's less dependable when the answer isn't printed. With no title on the page, it would sometimes offer the composer's name instead. So its job is kept narrow: report what's printed, and leave a field empty when it can't tell.
What the rules are for: deciding
Everything after reading is a decision, and decisions belong in code, where they're predictable and testable.
- Grouping. Which parts belong to the same score is worked out by the app from what the model read, not asked of the model.
- Checking. Every field is checked before it reaches the score, and anything that doesn't make sense is set aside rather than trusted.
- Unassigned. A PDF the app can't place isn't guessed into a score. It goes to an Unassigned tray for the musician to sort.
Given the same reading, the rules always reach the same answer, and when something goes wrong, there's a rule to look at rather than a model to second-guess.
Then the musician has the last word. The proposed scores appear on a sort screen where parts can be dragged between scores, and nothing is imported until they confirm.
Takeaways
- Use AI where rules struggle. Reading messy, varied pages is exactly what a vision model is for.
- Use rules where you need to be sure. Grouping and checking are decisions, and decisions are better predictable.
- Let "unclear" go somewhere useful. An empty field or an Unassigned tray is easier to fix than a confident wrong guess.