Terminal music player — stream YouTube audio from your CLI
Project description
PX7 Terminal Music
Stream music from YouTube directly in your terminal. No browser, no GUI, no nonsense.
PX7 is a lightweight CLI music player that searches YouTube via yt-dlp and streams audio through mpv or vlc — no downloads, no accounts, no ads. Just type a song name and play.
>> search radiohead
>> play 2
Features
- Search and stream directly, no ads
- Persistent favorites saved across sessions
- Queue shuffling and hands-free autoplay mode
- MPV and VLC support
Preview
Requirements
- Python 3.10+
- MPV (recommended) or VLC
Installation
Install via pip (Recommended)
pip install px7-music
Start the application:
px7-music
You will see a prompt:
>>
Usage
command [arguments] [--flags]
Search & Play
| Command | Args | Description |
|---|---|---|
search / /s |
<query> |
Search YouTube and fill the results |
play |
<index> |
Stream a track and load results into queue |
Search flags:
| Flag | Default | Description |
|---|---|---|
--limit=<n> |
6 |
Number of results to fetch |
--no-postfix |
off | Disable the auto-appended "song" keyword |
>> search hotel california --limit=1
>> search my dear melancholy
>> play 2
Playback Controls
| Command | Description |
|---|---|
pause |
Pause the current track |
resume |
Resume a paused track |
next |
Skip to the next track in queue |
prev |
Go back to the previous track |
Queue & Info
| Command | Description |
|---|---|
queue |
List all tracks in the current queue |
current / now |
Show info about the currently playing track |
load |
Load last results into queue and reset playback |
shuffle |
Shuffle the queue (current track stays at top) |
>> search tame impala
>> load
>> shuffle
>> play 1
Favorites
Save tracks across sessions. Favorites persist to ~/.px7_favorites.json.
| Command | Args | Description |
|---|---|---|
fav add |
Add the currently playing track | |
fav add |
<index> |
Add a track from the queue by index |
fav add |
all |
Add all queued tracks |
fav remove |
<index> |
Remove a favorite by index |
fav remove |
all |
Clear all favorites (asks for confirmation) |
favs |
List all saved favorites |
>> fav add
>> fav add 3
>> fav add all
>> fav remove 2
>> favs
Tip:
favsloads your favorites as results, so you canload→playthem directly.
Volume
>> volume # print current volume
>> volume 70 # set volume to 70
Auto-Play Mode
Hands-free mode that plays through the queue automatically.
>> autoplay
| Key | Action |
|---|---|
N |
Next track |
P |
Previous track |
ENTER |
Pause/Resume track |
Q |
Quit autoplay |
Utility
| Command | Description |
|---|---|
latency |
Check network latency |
clear / cls |
Clear the screen and redraw the banner |
help |
Show the help screen |
exit |
Quit PX7 Music |
How It Works
searchqueries YouTube viayt-dlpin metadata-only mode (fast, no download)- Results are stored as "last results";
play <index>loads them into the queue and starts streaming play <index>fetches the direct audio stream URL and pipes it to mpv or vlc- Auto-play uses a thread-safe event queue to advance tracks without blocking the input loop
- Favorites are saved to
~/.px7_favorites.jsonand persist between sessions
Project Structure
px7_music/
├── config.py # yt-dlp options, defaults, file paths
├── main.py # entry point, command registration, main loop
├── core/
│ ├── handler.py # command handlers (search, play, volume, fav)
│ ├── parser.py # command parser and flag parser
│ ├── latency.py # network latency check
│ └── youtube.py # yt-dlp search and stream URL extraction
├── library/
│ └── favorites.py # favorites persistence (load, save, add, remove)
├── player/
│ ├── player_base.py # abstract Player interface
│ ├── player.py # MPV and VLC backend implementations
│ ├── playback.py # queue state, playback control, autoplay events
│ └── auto_play_mode.py # autoplay UI and input listener thread
└── utility/
├── docs.py # help text and installation guide
└── utils.py # ANSI codes, spinner, screen utilities
Dependencies
| Package | Purpose |
|---|---|
yt-dlp |
YouTube search and stream URL extraction |
python-mpv |
MPV player bindings (optional) |
python-vlc |
VLC player bindings (optional) |
At least one of
python-mpvorpython-vlcmust be installed and its corresponding player binary must be present on your system.
Known Limitations
- Streams directly from YouTube; subject to rate limiting or regional restrictions
License
MIT — do whatever you want, just don't remove the header.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file px7_music-0.3.0.tar.gz.
File metadata
- Download URL: px7_music-0.3.0.tar.gz
- Upload date:
- Size: 18.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f8635aa99b12cc9cbfe7d2bcad5b8a3a61fb1dff70463401b4c942affa0ef55
|
|
| MD5 |
c7e17f3bb964d166b20144dec37a1c2b
|
|
| BLAKE2b-256 |
3b1036932330292d76e6accc65a06913091ba743d45372bf82f5bc6a38e38f97
|
File details
Details for the file px7_music-0.3.0-py3-none-any.whl.
File metadata
- Download URL: px7_music-0.3.0-py3-none-any.whl
- Upload date:
- Size: 19.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c80ea4b4eb96b07b2cec951f91cf7090b35d1d47fb3b3741c06b41b9cc20dddc
|
|
| MD5 |
9861481deb84b0ac2c5cd0815cfa4242
|
|
| BLAKE2b-256 |
c99a008567bca46c5fc3428659aa73ab9f313132409cacc3a774e20bf1d7a9e2
|