
Guitab
Guitar audio → Guitar Pro tab
Weights of Guitab, which turns a recording of a solo guitar, a phone video is fine, into a tab for Guitar Pro, TuxGuitar or MuseScore. It is made for steel-string fingerstyle playing. You can also try it in the browser at danielemorotti.github.io/guitab, with nothing to install.
Quick start
git clone https://github.com/DanieleMorotti/guitab && cd guitab
uv venv .venv --python 3.11
uv pip install --python .venv/bin/python -r requirements.txt huggingface_hub
uv pip install --python .venv/bin/python -e . --no-deps
.venv/bin/hf download danmor/guitab --local-dir weights # optional: the code downloads each file into weights/ when it first needs it
.venv/bin/guitab --audio my_song.mp3 --out_dir out/my_song # -> out/my_song/my_song.gp5
Files
| File | What it is |
|---|---|
guitab_e25.safetensors |
E25, the default (6.2M parameters, 24 MB): the best model, distilled from two larger ones. |
guitab_e24.safetensors |
E24, the tiny model (2.9M, 11 MB): about one point behind E25, 2.3× faster than E19. |
guitab_e19.safetensors |
E19 (24M, 91 MB): the strongest model trained on the labels alone, slightly better on clean studio audio. |
tablm.safetensors |
The tab language model behind --music_lm (fuller chords). |
beat_this_final0_int8.onnx |
The Beat This! beat tracker with int8 weights (21 MB), MIT licensed by its authors. |
guitab_e25.onnx, guitab_e24.onnx, guitab_e19.onnx |
The same models for the browser version. |
Architecture

- Input: a constant-Q spectrogram of the audio (36 bins per octave), one frame every 11.6 ms, turned into a harmonic stack: six shifted copies (harmonics ½ to 5) as channels, so the partials of a pitch line up.
- Model: a CNN (six convolution blocks, 144 → 12 frequency bins) followed by a transformer over time (E25: 4 layers, 256 wide), which gives each frame the context to decide chords, sustained notes and strings.
- Outputs: for every frame and string, the fret (silent or 0–19) and the onset probability, plus a pitch head used only in training.
- Tab: notes are extracted from these probabilities, optionally rescored by the tab language model, snapped to the beats found by Beat This! and written as a
.gp5file.
E25 and E24 are distilled: they learn from the labels and from the averaged predictions of two larger models, E18 (66M) and E19. The training data are GuitarSet, GAPS, a fingerstyle subset of SynthTab and a private set of real fingerstyle recordings with aligned tabs. Every experiment is documented in EXPERIMENTS.md.
Results
| Test set (note onset ±50 ms) | Metric | E19 | E25 | E24 |
|---|---|---|---|---|
| GuitarSet test, steel string | string+fret F1 | 0.843 | 0.838 | 0.833 |
| GuitarSet test, phone/room-degraded | string+fret F1 | 0.640 | 0.685 | 0.655 |
| GAPS test, classical guitar | pitch F1 | 0.813 | 0.830 | 0.825 |
| 19 held-out real fingerstyle recordings | string+fret F1 | 0.617 | 0.612 | 0.601 |
| EGDB electric guitar, clean (never seen in training) | string+fret F1 | 0.712 | 0.721 | 0.691 |
These numbers come from a personal project, not a benchmark study: each model was trained once, settings were chosen on validation sets only, and the GuitarSet protocol is the project's own, so they are not directly comparable with published results.
Limitations
The output is a first draft to correct by ear. Dense chords, quiet inner voices and reverberant phone recordings are the hardest cases, and the string choice is less reliable than the pitch. Only standard tuning is supported, with an optional capo.
License
The weights are released under CC BY-NC-SA 4.0 (non-commercial), because they are trained on GAPS (CC BY-NC-SA 4.0) and SynthTab (CC BY-NC 4.0). The code is MIT licensed. beat_this_final0_int8.onnx is a converted copy of Beat This! (Foscarin et al., ISMIR 2024) and keeps its MIT licence, in LICENSE-beat-this.txt. Credits for the datasets and the ideas Guitab builds on are in the GitHub README.
@misc{guitab,
author = {Morotti, Daniele},
title = {Guitab: guitar audio to Guitar Pro tab},
year = {2026},
url = {https://github.com/DanieleMorotti/guitab}
}