Flow
A terminal-based music player with online streaming and offline library modes.
Features
- Dual-mode operation — It will automatically detect internet and switch between online streaming and offline playback.
- Online mode — Search and stream audio from YouTube via
yt-dlpandpython-vlc - Offline mode — Play local audio files with album support, search, and a liked-songs collection
- Download — Save tracks from YouTube to your local library with the
-dflag - Repeat & shuffle — Loop tracks n times or play in random order
- Like/unlike — Save favorites to a dedicated playlist
- Tab completion — Auto-complete commands and song names in offline mode
- Colored TUI — Cyan theme for online, magenta for offline, with borders and banners
- Background play — Play music in background and return to your shell
- Audio-reactive bars — Real-time spectrum analyzer with configurable width, height, and spacing
- Synced lyrics — Display color-coded lyrics that scroll with the song
- Gui for GUI lovers - Get a gui in web using flask for you to enjoy
Requirements
- Python 3
- VLC media player (for
python-vlcbindings)
Installation
git clone https://github.com/Philast-015/Flow.git
cd flow
uv run flow_twinx/main.py
Or through pip:
pip install flow-twinx
flow
Note: Make sure you vlc installed or it will not play music.
Usage
flow
OR if you cloned the repo:
cd flow_twinx
uv run main.py
Flags
| Flag | Description |
|---|---|
-bg |
Play in background and exit to shell |
-kill |
Kill all background VLC processes |
-i |
Use it in help command to show detailed help |
-s |
Use it shuffle or play random songs |
-r |
Use it to repeat songs no of time [ -r n ] [ -r ] ( n = no of times ) |
-d |
Use it to download songs |
Shell Mode
Run commands directly from your shell without entering interactive mode.
Play-like commands (-pl, -rd) automatically run in background.
flow -pl never gonna give you up # play (auto-bg)
flow -rd daft punk # radio (auto-bg)
flow -sh daft punk # search (show results, exit)
flow -kill # kill VLC
Also works with positional commands:
flow play never gonna give you up
flow radio daft punk
flow search daft punk
Shell shortcuts use your user-defined shortcuts with - prefix:
flow -svn hello # svn → savan
flow -dl never gonna give you up # dl → download
Gui Mode:
To launch gui mode just type :
flow --web
Commands
| Command | Description |
|---|---|
play <name or #> |
Play a song by name or search result number |
search <query> |
Search YouTube (online) or library (offline) |
list |
Show all songs, albums, or liked tracks |
like <name or #> |
Add a song to your liked collection |
download <name or #> |
Save a streamed song to the local library |
radio <name> [#] |
Generate a radio mix, or play specific track |
switch |
Toggle between online and offline mode |
help |
Show available commands |
help -i |
Show available commands with detailed explanation |
Config Options
| Target | Description | Range |
|---|---|---|
primary |
Color for online songs | Any color |
secondary |
Color for offline songs | Any color |
tertiary |
Color for labels | Any color |
display |
Playback display mode | none, bars, lyrics |
barwidth |
Number of bars in visualizer | 4-80 |
barheight |
Height of bars | 2-16 |
barspacing |
Space between bars | 0-4 |
Usage: config <target> <value>
Configuration
- Downloads and library are stored in
~/.flow/downloads/ - Liked songs (online) are saved to
~/.flow/liked.txt - Liked songs (offline) are copied to
~/.flow/downloads/liked songs/ - User shortcuts are stored in
~/.flow/shortcuts.json - Config file:
~/.flow/config.json
Project Structure
flow/
├── flow_twinx/
│ ├── __init__.py
│ ├── config.py
│ ├── imports.py
│ ├── main.py
│ ├── ping.py
│ ├── tui.py
│ ├── lyrics.py # Synced lyrics fetching
│ ├── visualizer.py # Audio-reactive bars
│ ├── Online/
│ │ ├── __init__.py
│ │ ├── commands.py
│ │ ├── player.py
│ │ └── youtube.py
│ └── Offline/
│ ├── __init__.py
│ ├── commands.py
│ ├── file.py
│ ├── player.py
│ └── youtube.py
├── pyproject.toml
└── README.md
License
Use however you want just mention me for inspiration.
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 flow_twinx-0.4.7.tar.gz.
File metadata
- Download URL: flow_twinx-0.4.7.tar.gz
- Upload date:
- Size: 69.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8e62762d48aeaeac2a291a33cabc347b55f662208193bb7a9f2df53599d095a
|
|
| MD5 |
bbe0278dff498e547c6663ce2b1ae918
|
|
| BLAKE2b-256 |
f8dc29f3b02277f422c789579987a3cfb6d3fdd04a42887a747c7afec263cdd8
|
File details
Details for the file flow_twinx-0.4.7-py3-none-any.whl.
File metadata
- Download URL: flow_twinx-0.4.7-py3-none-any.whl
- Upload date:
- Size: 74.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
029d665dc910a7c76b5e550589d7c3e08c7e2c277ca9e0cd545529d44506aef9
|
|
| MD5 |
f95f3946ccc38a7ad825fe9f431e324f
|
|
| BLAKE2b-256 |
5a038ba5d156bc2880e088ccd36043bc66bcb42029302f00c14a6cffd958a548
|