https://github.com/lukeredpath/tabsync
A local web app for practising with YouTube tab videos
https://github.com/lukeredpath/tabsync
Last synced: 2 months ago
JSON representation
A local web app for practising with YouTube tab videos
- Host: GitHub
- URL: https://github.com/lukeredpath/tabsync
- Owner: lukeredpath
- License: mit
- Created: 2026-03-26T18:04:10.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-30T19:05:24.000Z (2 months ago)
- Last Synced: 2026-04-04T04:59:55.061Z (2 months ago)
- Language: JavaScript
- Size: 8.01 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TabSync
[](https://github.com/lukeredpath/tabsync/actions/workflows/playwright.yml)
A local web app for musicians who practise with YouTube tab videos. Load a tab video alongside the original song audio, keep them in sync, and build a persistent library of tracks so you can jump straight into practising.
Works for any tab-based practice — bass, guitar, or otherwise.

## Features
### Library
- Add tracks with a title, artist, tab video URL, and optional audio track URL
- Set independent start offsets for each video to the nearest 0.1 second, so both begin at exactly the right moment
- Organise tracks into folders
- Mark tracks as favourites for quick access
- Set a difficulty rating (1–5)
- Search across titles and artists; sort by title, artist, difficulty, or recently added
- Track metadata (title and artist) is auto-fetched from YouTube when you paste a URL
### Player
- Tab video fills the main area; if you've added an audio track, it plays in a small draggable overlay (drag with mouse or touch) with the tab video muted
- Play, pause, restart, and skip ±5 seconds with on-screen controls or keyboard shortcuts
- Playback speed control — 0.5×, 0.75×, 1×, or 1.25×; persisted across sessions
- Count-in mode — optional 3-second countdown before playback starts; can be overridden per track
- Both videos start together from their configured offsets
- If you seek in the tab video using the player's native controls, the audio track resyncs automatically
### Keyboard shortcuts
| Key | Action |
|---|---|
| `Space` | Play / Pause |
| `R` | Restart from beginning |
| `←` | Skip back 5 seconds |
| `→` | Skip forward 5 seconds |
### Library management
- Export your library as a dated JSON file for backup or migration
- Import a JSON file to restore a library (replaces current data with confirmation)
### Other
- Light and dark themes, following your system preference by default with a manual override
- All data stored locally in your browser — nothing is sent to any server
- Works in Chrome; Safari support depends on your version and YouTube's embed policy
## Requirements
- Python 3 (for the local server — included with macOS)
- A modern browser (Chrome recommended)
## Getting started
```bash
git clone https://github.com/lukeredpath/tabsync.git
cd tabsync
make start
```
This starts a local server on port 8080 and opens the app in Safari. To use a different port:
```bash
make start PORT=9000
```
To stop the server:
```bash
make stop
```
## How it works
TabSync is a fully client-side web app — there is no backend. Your track library is stored in your browser's `localStorage`. The YouTube IFrame API handles video playback.
Because data lives in `localStorage`, it is tied to the browser profile you use. If you clear your browser data, your library will be lost. Use the export feature to keep a backup.
## Planned features
- Auto-detect the correct sync offset by scanning the start of each video
## License
MIT — see [LICENSE](LICENSE).