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
- alphatab
- css3
- fastapi
- git
- html5
- javascript
- musicmxl
- oemer
- ollama
- onnxruntime
- python
- qwen
- uvicorn
Log in or sign up for Devpost to join the conversation.