Piano Β· Oud Β· World Instruments β An offline desktop music workstation for practice, performance, and composition.
Load any MIDI score and play along with a scrolling sheet music display and a full 88-key virtual piano. Supports sustain, volume, octave controls, and bilingual UI (English / Arabic).
Step-by-step guided practice mode. The score waits for you to press the right key before advancing β perfect for learning at your own pace.
- Wait for Key β learn notes at your own speed
- Rhythm Challenge β strict tempo mode for performance training
- Hand Isolation β practice right hand, left hand, or both
- Combo & Accuracy tracking in real time
A full music notation composer built in. Tap piano keys or type to compose, then audition and export your work.
- Staff + Timeline views
- Add/remove measures, change clef, key & time signature
- Generate bass line automatically
- Export to MIDI or MusicXML
| Play | Practice β Select |
|---|---|
![]() |
![]() |
| Practice β Session | Composer |
|---|---|
![]() |
![]() |
git clone https://github.com/tizahranim/KeySmith.git
cd KeySmith
npm install
npm run devThen open http://localhost:5173 in your browser.
npm run electron:devnpm run distnpm run dist:winThe repo ships with 6 demo scores to get you started:
| Song | Composer |
|---|---|
| Ahwak | Abd El Halim Hafez |
| Baby Shark | Pinkfong |
| Bella Ciao | Traditional Italian |
| Canon in D | Johann Pachelbel |
| Super Mario Bros β Main Theme | Koji Kondo |
| Twinkle Twinkle Little Star | Traditional |
You can import any MIDI file via the Upload button in the app.
KeySmith supports English and Arabic β switch via the ΨΉΨ±Ψ¨Ω button in the top bar.
| Layer | Technology |
|---|---|
| UI | React 18 + TypeScript |
| Styling | Tailwind CSS |
| Desktop | Electron |
| Audio | Tone.js + Web Audio API |
| Build | Vite + electron-builder |
| Tests | Vitest (192 tests) |
MIT β free to use, modify, and distribute.
Made with β€οΈ for musicians everywhere



