A terminal-based music player with Spotify-inspired UI, audio visualization, and multi-platform support.
English · Türkçe
- 🎨 Spotify-Inspired UI — Clean, modern terminal interface with album art, song list, and player bar
- 📊 Audio Visualization — Real-time volume bars using CP437 characters (░▒▓█) — works in every terminal
- 📋 Playlist Management — Create, edit, delete playlists; reorder songs
- 🎵 Multiple Sources — Add music from Spotify, YouTube Music, or local files
- 🖼️ Album Art — ANSI half-block rendering of cover images
- 🌐 Bilingual — Full English and Turkish interface support
- 🎨 Themes — Light, Dark, and custom color themes
- ⚡ Blazing Fast — Written in Go, launches in milliseconds
- 🔊 Audio Engine — Powered by Python (mutagen + ffmpeg), auto-advances on completion
- 🔄 Auto-Advance — Automatic next track with configurable delay
- 🔍 Search — Quick filtering across your library
- 🎛️ Equalizer-like Bars — Real-time audio spectrum visualization in the player bar
| Archive (zip) | Install Steps | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
Prerequisites: Python 3.12+ with |
| Archive (tar.gz) | Install Steps | ||||||
|---|---|---|---|---|---|---|---|
|
Prerequisites: Python 3.12+ with |
| Format | Install Steps |
|---|---|
|
tar.gz deb (Debian/Ubuntu) rpm (Fedora/RHEL) |
tar.gz: tar xzf muscle-cli_Linux_x86_64.tar.gz
cd muscle-cli_Linux_x86_64
sudo apt install python3 python3-pip # Debian/Ubuntu
pip install -r requirements.txt
./musicle-clideb: sudo dpkg -i muscle-cli_Linux_x86_64.deb
sudo apt install -f # install dependencies
musicle-clirpm: sudo rpm -ivh muscle-cli_Linux_x86_64.rpm
musicle-cliPrerequisites: Python 3.12+, |
git clone https://github.com/alperencolgecen/musicle-cli.git
cd muscle-cli
# Build (CGO required on Linux/macOS for file dialogs)
go build -o muscle-cli .
# Or cross-platform:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o muscle-cli.exe . # Windows
CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -o muscle-cli . # macOS Intel
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o muscle-cli . # LinuxPython dependencies:
pip install -r requirements.txt- Launch:
./musicle-cli(or double-click the binary) - First Run Wizard: Choose music directory, language, create a profile and playlist
- Add Music:
- Paste a Spotify or YouTube Music URL in the sidebar
- Or use
+ Add Local Musicto browse local files
- Play: Select a song and press
Spaceor click▶ Play
| Key | Action | Description |
|---|---|---|
Space |
⏯ Play/Pause | Toggle playback |
→ / ← |
⏩⏪ Seek | 5 seconds forward/back |
↑ / ↓ |
🔊🔉 Volume | Increase/decrease volume |
Tab |
🔄 Cycle Focus | Switch between sidebar, songs, editor, console |
F1 |
🔁 Cycle Sections | Cycle focus through all sections including console |
Ctrl+U |
📋 Update Playlist | Save the current playlist |
n |
⏭ Next Song | Skip to next track |
Ctrl+C / Esc |
❌ Quit | Exit the application |
Enter |
✏️ Edit Song | Open edit modal for selected song |
┌─────────────────────────────────────────────────────────────────┐
│ MusicLe [Home] [Settings] │ ← Header
├──────────────┬──────────────────────────────────────────────────┤
│ │ [Playlist ▼] │
│ MUSIC │ ┌──────┐ Playlist Name │
│ DOWNLOAD │ │ Art │ Description / Bio │
│ │ └──────┘ │
│ [Spotify…] │ [🔒 Lock] [🔀 Shuffle] [▶ Play] [⬇ Download] │
│ [YouTube…] │ ──────────────────────────────────────────── │
│ [+Local] │ # Title Artist Album Dur │
│ [Playlist▼] │ ──────────────────────────────────────────── │
│ │ 1 Bohemian Rhapsody Queen A Night 05:55 │
│ (~25%) │ 2 Stairway to Heaven Led Zepp IV 08:02 │
│ │ 3 … │
├──────────────┴──────────────────────────────────────────────────┤
│ ░▒▓███████ Bohemian Rhapsody — Queen ░▒▓███░ 01:23/05:55 │ ← Player Bar
└─────────────────────────────────────────────────────────────────┘
| Section | Description |
|---|---|
| Sidebar | Music download (Spotify/YouTube/local) + playlist selector |
| Playlist Info | Album art, name, description, action buttons |
| Songs Table | Song list with title, artist, album, duration columns |
| Player Bar | Volume visualization, now-playing info, progress, metadata |
| Console | Log output and debug information |
| Edit Modal | Inline editing of song title, artist, album, and date |
Config file: %APPDATA%/musicle/config.json (Windows) or ~/.config/musicle/config.json (Linux/macOS)
{
"language": "en",
"theme": "dark",
"musicDir": "~/Music",
"player": {
"volume": 80,
"autoAdvance": true,
"autoAdvanceDelay": 2
}
}- dark — Dark background with vibrant accents (default)
- light — Light background
- custom — User-defined color scheme
musicle-cli/
├── main.go # Application entry point
├── model.go # Main TUI model
├── home.go # Home screen logic (player, songs, sidebar)
├── settings.go # Settings screen
├── bridge/
│ └── bridge.go # Go ↔ Python bridge (daemon communication)
├── state/
│ ├── state.go # Global application state
│ ├── config.go # Configuration management
│ └── profile.go # Profile data structures
├── ui/
│ ├── styles.go # Lipgloss styles, theme system
│ ├── keys.go # Keybinding definitions
│ └── help.go # Help view
├── engine/ # Python audio engine
│ ├── main.py # Daemon entry point
│ ├── play.py # Audio playback + spectrum
│ ├── metadata.py # Metadata extraction (mutagen)
│ ├── download.py # YouTube/Spotify download
│ ├── playlist.py # Song list management
│ └── spotify.py # Spotify API integration
├── maximize_windows.go # Terminal maximize (Windows)
├── maximize_unix.go # Terminal maximize (Linux/macOS)
├── .goreleaser.yaml # Release build config
└── requirements.txt # Python dependencies
- Go powers the TUI (Bubble Tea framework, Lipgloss styling)
- Python runs as a persistent daemon for audio playback (mutagen for metadata, ffmpeg for decoding)
- Communication via JSON-over-stdin/stdout bridge
- Real-time FFT-based volume spectrum rendered as CP437 block characters
░▒▓█characters guaranteed in every terminal (Windows since 1985, all Unix terminals)- 40-character bar width for consistent rendering
| Platform | Arch | Format | Build |
|---|---|---|---|
| Windows | x86_64 | zip | CGO_ENABLED=0 |
| Windows | x86 | zip | CGO_ENABLED=0 |
| Windows | arm64 | zip | CGO_ENABLED=0 |
| Linux | x86_64 | tar.gz, deb, rpm | CGO_ENABLED=1 |
| macOS | x86_64 | tar.gz | CGO_ENABLED=1 (Intel runner) |
| macOS | arm64 | tar.gz | CGO_ENABLED=1 (ARM runner) |
- ✨ Windows 386 and arm64 support
- 📦 Linux deb and rpm packages (nfpm)
- 🍎 macOS Intel + Apple Silicon builds
- 📊 Enhanced audio visualization in player bar
- 🖼️ Album art rendering with ANSI half-blocks
- 🔄 Auto-advance to next track on completion
- 🎨 Improved theme system (Light/Dark/Custom)
- 🌐 Full Turkish/English localization
- 🎵 Initial release
- Spotify and YouTube Music integration
- Playlist management
- Modern terminal UI
- Windows, macOS, Linux support
Contributions are welcome! Please see our contributing guidelines.
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes
- Push and open a Pull Request
- Developer: Alperen Çölgeçen — alperencolgecen@gmail.com
- GitHub: @alperencolgecen
- Issues: github.com/alperencolgecen/musicle-cli/issues
This project is licensed under the Apache License 2.0. See LICENSE for details.
🎵 The most elegant way to enjoy music from your terminal.