A fast, offline desktop music player for your local music library.
Built with Electron, React, Vite, and TypeScript.
No accounts. No subscriptions. No cloud uploads. Just your music, and ton of fun and useful features.
- Play local MP3, FLAC, WAV, M4A, OGG, AAC, and more
- Instant playback and seeking
- Shuffle, repeat, queue, and playback speed controls
- Crossfade between songs
- Sleep timer with optional fade-out
- Media key and OS media control support
- 10-band graphic equalizer
- Built-in EQ presets
- Live audio visualizers
- Waveform, frequency bars, radial modes, and more
- Smooth volume controls and mute
- Synchronized LRC lyrics
- Automatic lyric lookup with LRCLIB
- Click lyrics to seek through a song
- Manual lyric search and editing
- Adjustable lyric timing offset
- Import individual files or entire folders
- Drag and drop music directly into omus
- List, grid, and album views
- Search by title, artist, or album
- Custom track ordering
- Create and manage playlists
- Reorder tracks with drag and drop
- Import and export M3U / M3U8 playlists
- Custom playlist covers
- Automatic collage and gradient covers
- Edit song title, artist, and album
- Change cover artwork
- Edit lyrics
- Reveal tracks in your system file explorer
- Multiple built-in themes
- Animated ambient backgrounds
- Custom fonts
- Animation presets
- Node.js 20+
- npm
npm installnpm run devnpm run buildPlatform-specific builds:
npm run build:win
npm run build:mac
npm run build:linuxCreate an unpacked build:
npm run build:unpackStart a built version:
npm run start| Key | Action |
|---|---|
Space |
Play / Pause |
← / → |
Seek 5 seconds |
Shift + ← |
Previous track |
Shift + → |
Next track |
L |
Toggle lyrics |
Q |
Toggle queue |
M |
Mute |
F |
Toggle fullscreen player |
E |
Open equalizer |
Esc |
Close modals / fullscreen |
Media keys from keyboards, headphones, and your operating system are also supported.
- Electron
- React
- TypeScript
- Vite
- SQLite
- Web Audio API
omus uses a custom omus-media:// protocol to stream local audio files directly from disk with range request support.
The audio pipeline uses the Web Audio API:
Audio File
↓
Media Element
↓
Equalizer
↓
Analyser
↓
Volume
↓
Speakers
SQLite stores the music library and playlists, while application settings are stored locally.
src/
├── main/ # Electron main process
├── preload/ # Secure IPC bridge
└── renderer/ # React application
└── src/
├── components/
├── hooks/
├── constants/
└── types/
npm run typecheck
npm run lint
npm run buildContributions are welcome.
- Fork the repository
- Create a feature branch
- Make your changes
- Run the development checks
- Open a pull request
Distributed under a non-commercial, source-available license.
See LICENSE for details.