Inspiration

Sheet music exists for almost every song, but most beginner guitarists can't read it, and tabs are often missing or wrong. I wanted to turn the notation that's already out there into something a beginner can actually play, and tell them how hard it is and how to practice it.

What it does

Six Strings reads a photo or scan of sheet music (or a MusicXML file) and converts it into guitar tab. It rates each song from 1 to 10 with an explanation of what makes it hard, plays the tab back with notation, speed control and measure looping, and includes a local AI coach that builds practice plans and answers questions. A library of songs is sorted by difficulty, and everything runs offline on a laptop.

How we built it

  • Music recognition: oemer, an open-source deep-learning OMR model, turns images into MusicXML, which a custom Python parser converts into notes.
  • Fingering: a Viterbi-style dynamic-programming search picks a string and fret for every note, minimizing hand movement.
  • Difficulty: an explainable weighted score from speed, position shifts, stretches, string skips and neck position.
  • App: FastAPI backend, plain HTML/CSS/JS frontend, alphaTab for tab rendering and playback.
  • AI coach: Qwen 2.5 3B running locally through Ollama, given structured song analysis so its advice stays grounded. The LLM explains; it never computes the tab or the score.

Challenges we ran into

Ollama's CUDA build crashed with my NVIDIA driver, so I disabled CUDA and ran it through Vulkan instead. oemer's models also broke on newer ONNX Runtime versions, which took some version-matching to fix. Sheet music isn't written for guitar, so the app has to shift notes into guitar range and pull a single melody line out of piano-style scores.

Accomplishments that we're proud of

A working pipeline from a picture of sheet music to playable tab, a difficulty score and AI coaching, built solo in one day, running entirely on open-source models with no cloud.

What we learned

How optical music recognition works, how to frame guitar fingering as an optimization problem, how to give a small local LLM structured context so it stays accurate, and a lot about debugging GPU drivers and Python dependencies on Windows.

What's next for Six Strings

Multi-page uploads, chord support, audio input with Spotify's Basic Pitch (hum a melody, get tab), a much larger library, and progress tracking that suggests what to learn next.

Built With

Share this project:

Updates

Submission history