omr-synth — It reads the notation the world forgot, then sings it back
omr-synth · a weekend experiment — trained overnight on a Mac mini

It reads the notation
the world forgot.
Then it sings it back.

One engine reads Western staff, Jianpu (简谱), and Sargam — the numbered and solfège systems that general vision models can't — collapses them into a single symbolic score, and turns that score into sound. Pick a page below, watch it be understood, then press Sing.

Two things on this page. First, an interactive demo below of the shared-notation idea — the images and token targets are genuine engine output; its recognition step is illustrative and the audio is truly synthesized in your browser. Then, further down, the real trained model: predictions on held-out pages it never saw, with honest per-notation accuracy. The model is early (one overnight run, $0) — the engine and the results are both real.
How to try it 1. Pick a melody. 2. Pick a notation — Western / Jianpu / Sargam (the picture changes, not the tune). 3. Hit Read the page → watch it become one symbolic score. 4. Hit Sing it → hear the melody. Then scroll down to see the real trained model reading held-out pages it never saw.
Reading & Singing Console
Melody
How that melody is written · the model sees this image Switching notation changes the picture, not the sound — it's the same melody in three scripts, so it sings identically. That shared result is the point.
western · input image
rendered music notation the model reads
Idle — pick a page and press Read.
The recognized melody appears here as a piano-roll,
then the playhead sweeps it while it sings.
Shared symbolic score · OMRDSL
— awaiting recognition —

The same OMRDSL target appears no matter which notation you pick — that invariant is the product: three ways of writing music, one thing the machine understands.

Trained overnight · real results

No longer a mockup — the model reads them itself

A ~26M-param image→sequence model, trained overnight on a Mac mini (M4) I already had, on thousands of synthetic pages. Everything below is its genuine prediction on held-out pages it never saw — image in, symbolic score out. Correct tokens are green, mistakes red.

In plain terms: we show the model a page of music it has never seen and ask it to write out the score; then we check how much it got right. Two numbers below. Token accuracy counts everything it wrote — including the easy bits every score has (clef, time signature, bar-lines), which it almost always nails. Content-only counts just the hard part — the actual notes. The gap between them is the honest story: it gets the layout of a page right, and the real music only partially — about one note in ten, so far. Hover any number for a plain-English explanation.

The encouraging part is the balance: it reads Jianpu and Sargam about as well as Western staff — the engine generalizes across notations, not just the familiar one. It reliably recovers structure and reads content partially; predicted lengths now match the targets closely. Still an early model (this is one overnight run at level-0 difficulty), but a real, honest one — these are held-out results, not cherry-picked beyond the per-notation numbers above. More steps and higher resolution are the obvious next lift.

Can it read the signs?

What the trained model will understand

Bounded honestly by what the engine can already generate perfect labels for. This is the melodic core — deep and multi-notation, not yet wide.

NotationsWestern staff · Jianpu (简谱) · Sargam — one shared target
Image qualityClean engraving → manuscript-like: warp, ink-bleed, wavy & broken staff lines, jitter (4 curriculum levels)
Clef / rangeTreble · about two octaves (G3–B5)
Rhythm16th → dotted-half, seven durations, rests
Keys / meterup to ±4 sharps or flats · 2/4, 3/4, 4/4, 6/8
TextureMonophonic, up to two voices
Not yetFull polyphony, multiple clefs, dynamics, ornaments, slurs — and real historical manuscripts (the funded domain step).
Can it sing?

Two honest answers

Yes — today's pipeline

It sings the melody

Recognized notes → MusicXML → MIDI → a synthesizer. That's exactly the audio above — music box, flute, or a voice on a vowel. Read a Sargam page, hear the tune. A better instrument only means a better synth, not more training.

  • howOMRDSL → MusicXML (predict.py --musicxml) → synth
  • this pagebrowser Web-Audio formant voice, live
Later — funded

Singing the words

To sing lyrics needs syllables in the notation and the DSL, plus a singing-voice synthesizer (pitch + duration + phonemes → vocal audio). Expression — dynamics, phrasing — comes with it.

  • needslyric tokens + vocal-synth model
  • thenit sings the piece, not just the tune
How is it trained?

We write the answer first, then draw the question

There's no labeled dataset of real Jianpu or Sargam pages — so we don't hunt for one. We run the labeling backwards and manufacture unlimited perfect pairs for free. The whole trick is where the label sits.

Traditional OMR · the blocked road
Real pageyou have this
expert reads
The notesthe label
no such dataset exists for these notations

The label sits at the end — locked behind slow, costly human transcription that, for Jianpu & Sargam, nobody has done at scale. Dead end.

omr-synth · render-forward
Invent notesthe label, first
render
Image3 notations
×∞ · free
Train readerimage → notes
every image ships with a perfect label · $0

The label sits at the start — we chose it, so the answer key is automatic. Unlimited pairs, no humans, perfect ground truth.

The last mile · the funded step
Train on syntheticfree · unlimited
then
A few hundred real pagessmall · hand-labeled
closes gap
Reads real manuscriptsthe goal

Synthetic gets the model most of the way for free; a small, affordable batch of real pages bridges the last gap to messy real-world scans. That hand-labeling is the only labeling anyone ever does — and it's tiny, because the model already learned the notation on the synthetic flood.

From this mockup to the real thing

What's built, and what your investment buys

Built · $0
01 — ENGINE

Render-forward data

Three notations from one symbolic record, perfect labels, unlimited pairs, curriculum degradation. Public on GitHub.

Built · $0
02 — PIPELINE

Read & play, end-to-end

Tokenizer, data loader, model + train.py, predict.py inference, MusicXML round-trip, this demo.

Done · $0
03 — THE MODEL

Trained overnight on a Mac mini

A ~26M model trained on level-0 synthetic pages, MPS, $0 — reads held-out pages (see results above). Early but real.

Next
04 — TO PRODUCTION

Scale + real manuscripts

More steps/curriculum for Jianpu & Sargam, then adapt to real handwritten and non-Western sources; add lyrics & voice.