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.
- riff_player-2.0.0/LICENSE +21 -0
- riff_player-2.0.0/PKG-INFO +244 -0
- riff_player-2.0.0/README.md +220 -0
- riff_player-2.0.0/pyproject.toml +33 -0
- riff_player-2.0.0/riff/__init__.py +8 -0
- riff_player-2.0.0/riff/cache.py +236 -0
- riff_player-2.0.0/riff/cli.py +454 -0
- riff_player-2.0.0/riff/config.py +158 -0
- riff_player-2.0.0/riff/meta.py +52 -0
- riff_player-2.0.0/riff/player.py +117 -0
- riff_player-2.0.0/riff/playlist.py +106 -0
- riff_player-2.0.0/riff/search.py +115 -0
- riff_player-2.0.0/riff/soundcloud.py +129 -0
- riff_player-2.0.0/riff/spotify.py +175 -0
- riff_player-2.0.0/riff/stream.py +87 -0
- riff_player-2.0.0/riff/sync.py +146 -0
- riff_player-2.0.0/riff/tui.py +229 -0
- riff_player-2.0.0/riff/utils.py +128 -0
- riff_player-2.0.0/riff/ytmusic.py +148 -0
- riff_player-2.0.0/riff_player.egg-info/PKG-INFO +244 -0
- riff_player-2.0.0/riff_player.egg-info/SOURCES.txt +26 -0
- riff_player-2.0.0/riff_player.egg-info/dependency_links.txt +1 -0
- riff_player-2.0.0/riff_player.egg-info/entry_points.txt +2 -0
- riff_player-2.0.0/riff_player.egg-info/requires.txt +11 -0
- riff_player-2.0.0/riff_player.egg-info/top_level.txt +3 -0
- riff_player-2.0.0/setup.cfg +4 -0
- riff_player-2.0.0/setup.py +35 -0
- riff_player-2.0.0/tests/__init__.py +1 -0
|
@@ -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
|
+

|
|
30
|
+

|
|
31
|
+

|
|
32
|
+

|
|
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
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
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 = ["."]
|