riff-player 2.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sapnoneel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,244 @@
1
+ Metadata-Version: 2.4
2
+ Name: riff-player
3
+ Version: 2.0.0
4
+ Summary: Terminal media player - play music and video from your terminal
5
+ Author: Sapnoneel Barik
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Sapnoneel/Riff
8
+ Project-URL: Repository, https://github.com/Sapnoneel/Riff
9
+ Requires-Python: >=3.11
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: mutagen>=1.47.0
13
+ Requires-Dist: yt-dlp>=2024.1.0
14
+ Requires-Dist: textual>=0.47.0
15
+ Requires-Dist: rich>=13.0.0
16
+ Requires-Dist: spotipy>=2.23.0
17
+ Requires-Dist: ytmusicapi>=1.3.0
18
+ Provides-Extra: dev
19
+ Requires-Dist: build; extra == "dev"
20
+ Requires-Dist: twine; extra == "dev"
21
+ Requires-Dist: pytest; extra == "dev"
22
+ Dynamic: license-file
23
+ Dynamic: requires-python
24
+
25
+ # 🎵 Riff — Terminal Media Player
26
+
27
+ <div align="center">
28
+
29
+ ![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white)
30
+ ![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-informational?style=flat-square)
31
+ ![License](https://img.shields.io/badge/License-MIT-green?style=flat-square)
32
+ ![Status](https://img.shields.io/badge/Status-Active-brightgreen?style=flat-square)
33
+
34
+ **Play music and video from your terminal. Local files or the entire internet.**
35
+
36
+ </div>
37
+
38
+ ---
39
+
40
+ Riff is a cross-platform terminal media player built in Python. Search your local storage with fuzzy-find, stream from YouTube and 1000+ sites, and control everything without ever leaving the terminal.
41
+
42
+ ---
43
+
44
+ ## ✨ Features
45
+
46
+ | Feature | Description |
47
+ |---|---|
48
+ | 🎵 **Local Playback** | Searches your Music, Videos, and Downloads folders automatically |
49
+ | 🌐 **Internet Streaming** | Powered by yt-dlp — YouTube, SoundCloud, and 1000+ sites |
50
+ | 📺 **Video Support** | Stream or play video files from the terminal |
51
+ | 🔍 **Fuzzy Search** | Interactive file picker via fzf |
52
+ | 🖥️ **TUI Interface** | Beautiful full-screen terminal UI via Textual |
53
+ | 💿 **Metadata Display** | Shows title, artist, album from ID3 tags |
54
+ | 🪟 **Cross-Platform** | Windows, Linux, and macOS |
55
+
56
+ ---
57
+
58
+ ## 📦 Installation
59
+
60
+ ### Step 1 — Install mpv and fzf
61
+
62
+ **Windows (PowerShell):**
63
+ ```powershell
64
+ winget install shinchiro.mpv
65
+ winget install fzf
66
+ ```
67
+
68
+ **Linux (Ubuntu / Debian):**
69
+ ```bash
70
+ sudo apt install mpv fzf
71
+ ```
72
+
73
+ **macOS:**
74
+ ```bash
75
+ brew install mpv fzf
76
+ ```
77
+
78
+ ### Step 2 — Clone the repo
79
+
80
+ ```bash
81
+ git clone https://github.com/Sapnoneel/Riff.git
82
+ cd Riff
83
+ ```
84
+
85
+ ### Step 3 — Install Python dependencies
86
+
87
+ ```bash
88
+ pip install -r requirements.txt
89
+ ```
90
+
91
+ ### Step 4 — Verify everything is set up
92
+
93
+ ```bash
94
+ python riff.py info
95
+ ```
96
+
97
+ You should see green checkmarks next to `mpv`, `yt-dlp`, and `fzf`.
98
+
99
+ ---
100
+
101
+ ## 🚀 Usage
102
+
103
+ ```bash
104
+ # Show help
105
+ python riff.py
106
+
107
+ # Check dependency status
108
+ python riff.py info
109
+
110
+ # Play a local file directly
111
+ python riff.py play "C:/Music/song.mp3"
112
+
113
+ # Search your local library (interactive fuzzy picker)
114
+ python riff.py search "bohemian rhapsody"
115
+
116
+ # Search for audio files only
117
+ python riff.py search "adele" --audio
118
+
119
+ # Browse your entire media library
120
+ python riff.py browse
121
+
122
+ # Stream audio from YouTube / internet
123
+ python riff.py stream "lofi hip hop"
124
+ python riff.py stream "https://youtu.be/dQw4w9WgXcQ"
125
+
126
+ # Stream video
127
+ python riff.py video "big buck bunny"
128
+
129
+ # Queue and shuffle all search results
130
+ python riff.py search "pink floyd" --queue --shuffle
131
+
132
+ # Launch the full TUI interface
133
+ python riff.py tui
134
+ ```
135
+
136
+ ---
137
+
138
+ ## ⌨️ Playback Controls
139
+
140
+ These controls work inside mpv during playback:
141
+
142
+ | Key | Action |
143
+ |-----|--------|
144
+ | `Space` | Pause / Resume |
145
+ | `←` / `→` | Seek 5 seconds |
146
+ | `↑` / `↓` | Seek 1 minute |
147
+ | `9` / `0` | Volume down / up |
148
+ | `m` | Mute |
149
+ | `f` | Toggle fullscreen (video) |
150
+ | `q` | Quit |
151
+
152
+ ### TUI Controls
153
+
154
+ | Key | Action |
155
+ |-----|--------|
156
+ | `L` | Browse local library |
157
+ | `S` | Focus search bar |
158
+ | `I` | Stream audio from internet |
159
+ | `V` | Stream video from internet |
160
+ | `Enter` | Play selected file |
161
+ | `Q` | Quit |
162
+
163
+ ---
164
+
165
+ ## 🗂️ Project Structure
166
+
167
+ ```
168
+ Riff/
169
+ ├── riff.py # Entry point
170
+ ├── riff/
171
+ │ ├── __init__.py # Package metadata
172
+ │ ├── cli.py # Argument parsing & command dispatch
173
+ │ ├── player.py # mpv wrapper for local playback
174
+ │ ├── search.py # Local file search + fzf picker
175
+ │ ├── stream.py # Internet streaming via yt-dlp
176
+ │ ├── meta.py # Metadata reader (mutagen)
177
+ │ ├── tui.py # Textual TUI interface
178
+ │ └── utils.py # Cross-platform helpers
179
+ ├── tests/
180
+ │ └── __init__.py
181
+ ├── requirements.txt
182
+ ├── setup.py
183
+ ├── .gitignore
184
+ └── README.md
185
+ ```
186
+
187
+ ---
188
+
189
+ ## 🔧 Dependencies
190
+
191
+ | Package | Version | Purpose |
192
+ |---------|---------|---------|
193
+ | [mpv](https://mpv.io) | latest | Media engine for audio and video |
194
+ | [yt-dlp](https://github.com/yt-dlp/yt-dlp) | ≥ 2024.1.0 | Internet streaming from 1000+ sites |
195
+ | [fzf](https://github.com/junegunn/fzf) | latest | Interactive fuzzy file picker |
196
+ | [mutagen](https://mutagen.readthedocs.io) | ≥ 1.47.0 | Audio metadata / ID3 tag reading |
197
+ | [textual](https://textual.textualize.io) | ≥ 0.47.0 | Full-screen TUI framework |
198
+ | [rich](https://rich.readthedocs.io) | ≥ 13.0.0 | Terminal text formatting |
199
+
200
+ > **Note:** `mpv` and `fzf` are system binaries installed separately (see Installation above).
201
+ > All Python packages are installed via `pip install -r requirements.txt`.
202
+
203
+ ---
204
+
205
+ ## 🖥️ Platform Notes
206
+
207
+ ### Windows
208
+ - Use **Windows Terminal** (from Microsoft Store) for the best TUI experience
209
+ - `mpv` must be installed via `winget install shinchiro.mpv`
210
+ - Video plays in a floating mpv window launched from the terminal
211
+
212
+ ### Linux
213
+ - Video-in-terminal works best with the **kitty** terminal (`mpv --vo=kitty`)
214
+ - All other terminals fall back to a floating mpv window
215
+
216
+ ### macOS
217
+ - Video-in-terminal works with **iTerm2**
218
+ - Install dependencies via Homebrew
219
+
220
+ ---
221
+
222
+ ## 🤝 Contributing
223
+
224
+ Contributions are welcome! Here's how:
225
+
226
+ 1. Fork the repository
227
+ 2. Create a feature branch: `git checkout -b feature/my-feature`
228
+ 3. Commit your changes: `git commit -m "Add my feature"`
229
+ 4. Push to your branch: `git push origin feature/my-feature`
230
+ 5. Open a Pull Request
231
+
232
+ Please open an issue first for major changes so we can discuss the direction.
233
+
234
+ ---
235
+
236
+ ## 📄 License
237
+
238
+ MIT © [Sapnoneel Barik](https://github.com/Sapnoneel)
239
+
240
+ ---
241
+
242
+ <div align="center">
243
+ Made with ♪ and Python
244
+ </div>
@@ -0,0 +1,220 @@
1
+ # 🎵 Riff — Terminal Media Player
2
+
3
+ <div align="center">
4
+
5
+ ![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white)
6
+ ![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-informational?style=flat-square)
7
+ ![License](https://img.shields.io/badge/License-MIT-green?style=flat-square)
8
+ ![Status](https://img.shields.io/badge/Status-Active-brightgreen?style=flat-square)
9
+
10
+ **Play music and video from your terminal. Local files or the entire internet.**
11
+
12
+ </div>
13
+
14
+ ---
15
+
16
+ Riff is a cross-platform terminal media player built in Python. Search your local storage with fuzzy-find, stream from YouTube and 1000+ sites, and control everything without ever leaving the terminal.
17
+
18
+ ---
19
+
20
+ ## ✨ Features
21
+
22
+ | Feature | Description |
23
+ |---|---|
24
+ | 🎵 **Local Playback** | Searches your Music, Videos, and Downloads folders automatically |
25
+ | 🌐 **Internet Streaming** | Powered by yt-dlp — YouTube, SoundCloud, and 1000+ sites |
26
+ | 📺 **Video Support** | Stream or play video files from the terminal |
27
+ | 🔍 **Fuzzy Search** | Interactive file picker via fzf |
28
+ | 🖥️ **TUI Interface** | Beautiful full-screen terminal UI via Textual |
29
+ | 💿 **Metadata Display** | Shows title, artist, album from ID3 tags |
30
+ | 🪟 **Cross-Platform** | Windows, Linux, and macOS |
31
+
32
+ ---
33
+
34
+ ## 📦 Installation
35
+
36
+ ### Step 1 — Install mpv and fzf
37
+
38
+ **Windows (PowerShell):**
39
+ ```powershell
40
+ winget install shinchiro.mpv
41
+ winget install fzf
42
+ ```
43
+
44
+ **Linux (Ubuntu / Debian):**
45
+ ```bash
46
+ sudo apt install mpv fzf
47
+ ```
48
+
49
+ **macOS:**
50
+ ```bash
51
+ brew install mpv fzf
52
+ ```
53
+
54
+ ### Step 2 — Clone the repo
55
+
56
+ ```bash
57
+ git clone https://github.com/Sapnoneel/Riff.git
58
+ cd Riff
59
+ ```
60
+
61
+ ### Step 3 — Install Python dependencies
62
+
63
+ ```bash
64
+ pip install -r requirements.txt
65
+ ```
66
+
67
+ ### Step 4 — Verify everything is set up
68
+
69
+ ```bash
70
+ python riff.py info
71
+ ```
72
+
73
+ You should see green checkmarks next to `mpv`, `yt-dlp`, and `fzf`.
74
+
75
+ ---
76
+
77
+ ## 🚀 Usage
78
+
79
+ ```bash
80
+ # Show help
81
+ python riff.py
82
+
83
+ # Check dependency status
84
+ python riff.py info
85
+
86
+ # Play a local file directly
87
+ python riff.py play "C:/Music/song.mp3"
88
+
89
+ # Search your local library (interactive fuzzy picker)
90
+ python riff.py search "bohemian rhapsody"
91
+
92
+ # Search for audio files only
93
+ python riff.py search "adele" --audio
94
+
95
+ # Browse your entire media library
96
+ python riff.py browse
97
+
98
+ # Stream audio from YouTube / internet
99
+ python riff.py stream "lofi hip hop"
100
+ python riff.py stream "https://youtu.be/dQw4w9WgXcQ"
101
+
102
+ # Stream video
103
+ python riff.py video "big buck bunny"
104
+
105
+ # Queue and shuffle all search results
106
+ python riff.py search "pink floyd" --queue --shuffle
107
+
108
+ # Launch the full TUI interface
109
+ python riff.py tui
110
+ ```
111
+
112
+ ---
113
+
114
+ ## ⌨️ Playback Controls
115
+
116
+ These controls work inside mpv during playback:
117
+
118
+ | Key | Action |
119
+ |-----|--------|
120
+ | `Space` | Pause / Resume |
121
+ | `←` / `→` | Seek 5 seconds |
122
+ | `↑` / `↓` | Seek 1 minute |
123
+ | `9` / `0` | Volume down / up |
124
+ | `m` | Mute |
125
+ | `f` | Toggle fullscreen (video) |
126
+ | `q` | Quit |
127
+
128
+ ### TUI Controls
129
+
130
+ | Key | Action |
131
+ |-----|--------|
132
+ | `L` | Browse local library |
133
+ | `S` | Focus search bar |
134
+ | `I` | Stream audio from internet |
135
+ | `V` | Stream video from internet |
136
+ | `Enter` | Play selected file |
137
+ | `Q` | Quit |
138
+
139
+ ---
140
+
141
+ ## 🗂️ Project Structure
142
+
143
+ ```
144
+ Riff/
145
+ ├── riff.py # Entry point
146
+ ├── riff/
147
+ │ ├── __init__.py # Package metadata
148
+ │ ├── cli.py # Argument parsing & command dispatch
149
+ │ ├── player.py # mpv wrapper for local playback
150
+ │ ├── search.py # Local file search + fzf picker
151
+ │ ├── stream.py # Internet streaming via yt-dlp
152
+ │ ├── meta.py # Metadata reader (mutagen)
153
+ │ ├── tui.py # Textual TUI interface
154
+ │ └── utils.py # Cross-platform helpers
155
+ ├── tests/
156
+ │ └── __init__.py
157
+ ├── requirements.txt
158
+ ├── setup.py
159
+ ├── .gitignore
160
+ └── README.md
161
+ ```
162
+
163
+ ---
164
+
165
+ ## 🔧 Dependencies
166
+
167
+ | Package | Version | Purpose |
168
+ |---------|---------|---------|
169
+ | [mpv](https://mpv.io) | latest | Media engine for audio and video |
170
+ | [yt-dlp](https://github.com/yt-dlp/yt-dlp) | ≥ 2024.1.0 | Internet streaming from 1000+ sites |
171
+ | [fzf](https://github.com/junegunn/fzf) | latest | Interactive fuzzy file picker |
172
+ | [mutagen](https://mutagen.readthedocs.io) | ≥ 1.47.0 | Audio metadata / ID3 tag reading |
173
+ | [textual](https://textual.textualize.io) | ≥ 0.47.0 | Full-screen TUI framework |
174
+ | [rich](https://rich.readthedocs.io) | ≥ 13.0.0 | Terminal text formatting |
175
+
176
+ > **Note:** `mpv` and `fzf` are system binaries installed separately (see Installation above).
177
+ > All Python packages are installed via `pip install -r requirements.txt`.
178
+
179
+ ---
180
+
181
+ ## 🖥️ Platform Notes
182
+
183
+ ### Windows
184
+ - Use **Windows Terminal** (from Microsoft Store) for the best TUI experience
185
+ - `mpv` must be installed via `winget install shinchiro.mpv`
186
+ - Video plays in a floating mpv window launched from the terminal
187
+
188
+ ### Linux
189
+ - Video-in-terminal works best with the **kitty** terminal (`mpv --vo=kitty`)
190
+ - All other terminals fall back to a floating mpv window
191
+
192
+ ### macOS
193
+ - Video-in-terminal works with **iTerm2**
194
+ - Install dependencies via Homebrew
195
+
196
+ ---
197
+
198
+ ## 🤝 Contributing
199
+
200
+ Contributions are welcome! Here's how:
201
+
202
+ 1. Fork the repository
203
+ 2. Create a feature branch: `git checkout -b feature/my-feature`
204
+ 3. Commit your changes: `git commit -m "Add my feature"`
205
+ 4. Push to your branch: `git push origin feature/my-feature`
206
+ 5. Open a Pull Request
207
+
208
+ Please open an issue first for major changes so we can discuss the direction.
209
+
210
+ ---
211
+
212
+ ## 📄 License
213
+
214
+ MIT © [Sapnoneel Barik](https://github.com/Sapnoneel)
215
+
216
+ ---
217
+
218
+ <div align="center">
219
+ Made with ♪ and Python
220
+ </div>
@@ -0,0 +1,33 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "riff-player"
7
+ version = "2.0.0"
8
+ description = "Terminal media player - play music and video from your terminal"
9
+ readme = "README.md"
10
+ license = {text = "MIT"}
11
+ authors = [{name = "Sapnoneel Barik"}]
12
+ requires-python = ">3.11"
13
+ dependencies = [
14
+ "mutagen>=1.47.0",
15
+ "yt-dlp>=2024.1.0",
16
+ "textual>=0.47.0",
17
+ "rich>=13.0.0",
18
+ "spotipy>=2.23.0",
19
+ "ytmusicapi>=1.3.0",
20
+ ]
21
+
22
+ [project.optional-dependencies]
23
+ dev = ["build", "twine", "pytest"]
24
+
25
+ [project.scripts]
26
+ riff = "riff.cli:main"
27
+
28
+ [project.urls]
29
+ Homepage = "https://github.com/Sapnoneel/Riff"
30
+ Repository = "https://github.com/Sapnoneel/Riff"
31
+
32
+ [tool.setuptools.packages.find]
33
+ where = ["."]
@@ -0,0 +1,8 @@
1
+ """
2
+ Riff - Terminal Media Player
3
+ Play music and video from your terminal. Local or internet.
4
+ """
5
+
6
+ __version__ = "2.0.0"
7
+ __author__ = "Sapnoneel Barik"
8
+ __license__ = "MIT"