Skip to content

Latest commit

 

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mousiki 🎵

OSI   Apache

[!NOTE] Developer note: Mousiki is released under the Apache License 2.0. You are free to use, modify, fork, re-distribute, and sell the software, subject to the terms of the license.

License Language Platform

Mousiki is a terminal music player built from the ground up for people who prefer control, simplicity, and a keyboard. It's a fast, focused TUI (Terminal User Interface) without unnecessary interface layers — fully keyboard-driven and configurable, with spectrum visualizers, synced lyrics, and online streaming, all without leaving your terminal.

Personal preference is not a compromise—it's the design goal.

Preview

Mousiki Preview

## ✨ Features
  • Local Music Playback: Instantly browse and play your local music files.
  • Online Search & Streaming: Search and stream tracks directly from online sources.
  • Synced Lyrics: Real-time, word-by-word active lyrics highlighting as the song plays.
  • Visualizers: Real-time FFT spectrum, waveform rendering, and spinning disk art.
  • Queue Management: Effortless queueing, shuffling, and repeating.
  • Highly Configurable: Tweak colors, visualizer fluidity, animations, and hotkeys to match your exact workflow.

🚀 Supported Platforms

  • Native Support: Linux, macOS, and Android (Termux).
  • Unverified Support: Windows. (Support for Windows is currently not verified because I don't have the hardware access needed to test and debug on that operating system. If you try it out and get it working, feel free to contribute!)

🛠️ Getting Started

Default Keybindings

Configurable in $HOME/.config/mousiki/config.txt.

Search & Playback

Action Keybinding Description
Local Search / Filter and search local library
Online Stream Search /s: <query> Search and stream music online
Download Stream y Download currently streaming track
Play / Pause p (or ENTER) Toggle playback
Next / Previous Track n / b Skip between songs
Seek ARROW_LEFT / ARROW_RIGHT Seek backward / forward
Volume 1 / 2 Decrease / Increase volume
Shuffle / Repeat m / r Toggle shuffle or repeat mode

Navigation & Queue

Action Keybinding Description
Navigate ARROW_UP / ARROW_DOWN Move selection
Switch Tabs/Cards TAB Cycle between UI panels
Add to Queue a Enqueue selected track
Remove from Queue d Dequeue selected track
Filter by Folder f Apply folder filter
Clear Filter c Reset active search/filters
Quit q Exit application

Prerequisites & Installation

Mousiki relies on a few external tools for audio fetching, decoding, and lyrics. The easiest way to get started is by running the setup script on macOS (requires Homebrew), Debian-based Linux, or Termux:

# Clone the repository
git clone https://github.com/itzender5820/mousiki.git
cd mousiki

# Run the setup script (installs dependencies, sets up config, and builds the app)
bash setup.sh

If you're building manually, ensure you have cmake, a C++17 compiler, ffmpeg, yt-dlp, and the Python requests package installed.

Running the App

After a successful build, you can start the player with:

./build/mousiki

⚙️ Configuration

Your configuration file will be automatically generated at $HOME/.config/mousiki/config.txt. From there, you have complete freedom to customize Mousiki.

Adding Custom Music Paths

You can easily tell Mousiki where to look for your music. Simply add multiple LocalMusicPath entries in your config.txt:

# Add as many custom paths as you need:
LocalMusicPath=/custom/path
LocalMusicPath=/home/user/Music

🙏 Attribution & Dependencies

Mousiki stands on the shoulders of giants. A huge thank you to the developers behind these awesome open-source projects that make Mousiki tick:

  • miniaudio: An incredible single-file audio playback and capture library.
  • kissfft: A wonderfully simple and lightweight real-input FFT library (powering the spectrum visualizer).
  • yt-dlp: The backend magic for our online search and streaming capabilities.
  • requests: Python package used by scripts/lrc.py to fetch synced lyrics from Better Lyrics (primary) and LRCLIB (fallback).
  • FFmpeg: The Swiss army knife of multimedia handling.

📜 License

This project is open-sourced under the Apache License 2.0.

Star History

Star History Chart

Crafted with ❤️ for the terminal by itzender5820

Trust me

About

Highly customizable TUI music player designed to be fast and lightweight

Topics

Resources

Stars

203 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages