Flow
A modern terminal based music player with TUI and web support also.
Overview
Flow is a terminal music player with online streaming and offline library modes.
Flow detects your connection and picks automatically: online mode
streams from YouTube (via yt-dlp and python-vlc) and JioSaavn, offline
mode. All state —
downloads, likes, playlists, settings — lives in one folder and is shared
between the CLI shell, the Textual TUI, and the web GUI.
Features
- Dual-mode — automatic offline/online detection with manual
switch - Online mode — YouTube search/stream, radio mixes, JioSaavn (
savan) - Offline mode — local library with search, liked songs, and tab completion
- Downloads — save tracks from YouTube (
-d), formats: webm/opus/m4a/mp3 - Repeat & shuffle —
-r [n]loops,-srandomizes - Playlists — create, edit, merge, dedupe, reorder, export/import
.m3u - Like/unlike — favorites in
~/.flow/library.db, auto-download on like - Play history — per-song play counts in both modes, an online play log,
flow summaryon the CLI and a History panel in the web GUI - Background play — play in the background and go back to your shell
- Visualizer — audio-reactive spectrum bars (or synced lyrics) while playing
- Lyrics — synced lines from LRCLIB (YouTube Music as fallback): the
lyricsdisplay mode prints them in the terminal, the web GUI's lyrics button (l) scrolls them with the track - Rename — correct a misspelt title once (
renamein the CLI,Rin the TUI, the ⋮ menu in the web GUI) and every surface, including lyrics search, shows the new name - Play by tag — every download stores a one-word language and the credited artist, trimmed out of the video's metadata:
lang punjabiplays your punjabi songs,artist karanevery Karan Aujla one (tagsto see what you have,tags scan/tags applyto tag the back catalogue) - Three interfaces — interactive CLI shell, full-screen TUI, and a web GUI on port 5000
- Scriptable —
flow-minruns the same commands with no colour, spinner or prompt: one plain line (or one--jsondocument) per command, documented exit codes, safe in pipes, over ssh and for agents - Plugins — community plugins run in isolated processes
Requirements
- Python 3.14+
- VLC (for
python-vlcaudio playback) - ffmpeg (optional, only for non-webm download formats)
Installation
git clone https://github.com/Twinx015/Flow.git
cd Flow
uv sync # or: pip install .
uv run flow
Or from PyPI:
pip install flow-twinx
flow
Verify with flow --check. See Installation
for details.
Quick start
flow -pl "never gonna give you up" # stream from YouTube (foreground)
flow -pl "never gonna give you up" -bg # ...in the background
flow -sh "daft punk" # search, show results
flow --play-off "my song" # play from the local library (auto-bg)
flow --radio-off # shuffle-loop the whole library (auto-bg)
flow # interactive shell (type `help`)
flow-tui # full-screen TUI
flow-web # web GUI → http://127.0.0.1:5000
flow-min status --json # plain non-interactive: one JSON document
Playback control works across interfaces from any terminal:
flow --status # show the current track
flow --pause # play/pause the running player
flow --next # skip
flow --seek 30 # seek 30s forward
Documentation
- User guide — docs/user/: commands and flags, TUI/web usage, configuration and storage, plugins
- Developer guide — docs/dev/: architecture, mode internals, storage schemas, control protocol, interfaces
License
Use however you want, just mention me for inspiration.
Metadata
Release files for flow-twinx 0.8.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flow_twinx-0.8.4.tar.gz | 202.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flow_twinx-0.8.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 391.4 kB
Release files / flow_twinx-0.8.4.tar.gz
| Download URL | flow_twinx-0.8.4.tar.gz |
|---|---|
| Size | 202.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7f62e2f5c109b584d387ae041f3b9abba28bbb635854588514787a0328fcde39
|
|
BLAKE2b-256 checksum How to use checksums |
7c7a124e11b34b76e0f49f0bf53ac69f74e85135c35d0eae78f9e8fc186e138f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / flow_twinx-0.8.4-py3-none-any.whl
| Download URL | flow_twinx-0.8.4-py3-none-any.whl |
|---|---|
| Size | 188.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ba8a8efa81b0b8d670bddfede6f666508bb5ca3ce89a2ee17b7e16acc3ad084
|
|
BLAKE2b-256 checksum How to use checksums |
62bd9e72121f67c14b830bfec2d7bfd47bad0504fa31beb6e5b5a5e2b8354b9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|