Desktop app for guitar note detection, fretboard visualization, related scale lookup, and piano mirroring.
Built with Electron, React, TypeScript, Canvas, and Web Audio.
Use it прямо в браузере:
https://kroq86.github.io/fret/
No installation required.
- Detects guitar notes from microphone input in real time
- Lets you freeze live input and click notes manually on the fretboard
- Clears the current note set so you can build scales manually
- Finds the most likely matching scale from the last detected/selected notes
- Shows related scales and lets you select one explicitly
- Mirrors the currently selected scale on a two-octave piano view
- Supports switching between audio input devices
- Includes a watch-based local dev mode for fast iteration
Prebuilt desktop releases are published on the Releases page.
- macOS: download the
.dmg - Windows: download the
.exe
A browser version can be deployed for free through GitHub Pages.
Expected URL for this repository:
https://kroq86.github.io/fret/
GitHub Pages deploys from the workflow in .github/workflows/pages.yml.
This project currently ships as an unsigned desktop build. That keeps releases simple and free, but macOS and Windows may warn before opening the app.
If macOS says the app is "damaged" or refuses to open it:
- Download the
.dmgfrom Releases. - Drag
Fret.appintoApplications. - Open
Terminal. - Run:
xattr -dr com.apple.quarantine /Applications/Fret.app- Open
Fretagain fromApplications.
If macOS still blocks it, try:
sudo xattr -dr com.apple.quarantine /Applications/Fret.appYou may also need to allow microphone access in:
System Settings -> Privacy & Security -> Microphone
Windows SmartScreen may warn that the app is from an unknown publisher.
To continue:
- Download the installer from Releases.
- Open it.
- If SmartScreen appears, click
More info. - Click
Run anyway.
- Node.js 20+ recommended
- npm
- Microphone access
git clone <repo>
cd fret
npm installnpm run devnpm run dev starts:
- TypeScript watch for the Electron main process
- webpack watch for the renderer
- automatic Electron restart when built files change
npm start # run Electron from current build
npm run build # production build into dist/
npm run watch # renderer watch only
npm run watch:mainnpm run build:mac
npm run build:win
npm run build:allArtifacts are written to release/.
Releases are created through GitHub Actions when a version tag is pushed.
Current flow:
- Bump version in
package.json - Commit changes
- Create a tag like
v0.1.5 - Push
main - Push the tag
The workflow in .github/workflows/release.yml then:
- builds Windows
.exe - builds macOS
.dmg - uploads both to a GitHub Release
This repository also supports a free web deployment through GitHub Pages.
Use:
npm run build:webFor local browser-only development:
npm run dev:webTo enable Pages on GitHub:
- Open
Settings -> Pages - Set
SourcetoGitHub Actions - Push to
main
The workflow will build the web app and publish dist/ automatically.
src/components/NoteDetector.tsxMain app state, note aggregation, device selection, freeze/manual mode, selected scale syncsrc/components/Fretboard.tsxGuitar fretboard rendering, played-note highlight, related scale selectionsrc/components/PianoKeyboard.tsxTwo-octave piano mirror for the currently selected scalesrc/utils/pitchyProcessor.tsMicrophone capture and pitch detectionsrc/utils/scales.tsScale definitions and compatibility lookup
- macOS builds are not signed or notarized
- Windows builds are unsigned
- Scale detection is heuristic and based on the current played/manual note set
- Piano view mirrors the selected scale from
Related Scales; it is not a full piano trainer
MIT
