About this project

Oh Sheet! is an open-source pipeline that converts songs into two-hand piano sheet music. Users can paste a YouTube URL, upload MP3/WAV audio, or provide a MIDI file, and the system returns a PDF score, MusicXML, and humanized MIDI. The backend is built with Python and FastAPI. It uses yt-dlp for audio ingestion, Demucs for optional stem separation, and Spotify's Basic Pitch for audio-to-MIDI transcription. A custom arrangement stage assigns melody to the right hand and bass/harmony to the left hand. A humanization stage adds micro-timing, velocity dynamics, pedal marks, and articulations. Engraving defaults to an in-process music21 and LilyPond pipeline that produces MusicXML and PDF; an optional remote HTTP engraver service can be used as a fallback. The frontend is a Flutter application with an interactive sheet music viewer powered by OpenSheetMusicDisplay (OSMD) and Tone.js playback. It also includes a custom canvas-based piano roll with color-coded hands and a tempo-synced beat grid. WebSocket events stream pipeline progress with mascot animations for each stage. The project exposes a REST API for uploading audio or MIDI, submitting jobs, polling status, streaming live events, and downloading artifacts. Per-stage worker endpoints are also available for external orchestration. Deployment is supported via Docker Compose, and the repository includes CI workflows, offline transcription evaluation tooling, and integration with the TuneChat collaborative music learning platform.