mfe-player 0.3.6__py3-none-win_amd64.whl
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.
|
Binary file
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mfe-player
|
|
3
|
+
Version: 0.3.6
|
|
4
|
+
Classifier: Development Status :: 4 - Beta
|
|
5
|
+
Classifier: Environment :: Console
|
|
6
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
9
|
+
Classifier: Operating System :: MacOS
|
|
10
|
+
Classifier: Programming Language :: Rust
|
|
11
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Players
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Summary: A plugin-driven terminal music player: mpv, ratatui, no subscription, no account.
|
|
14
|
+
Keywords: music,tui,terminal,player,mpv
|
|
15
|
+
Home-Page: https://github.com/omkargs/mfe-player
|
|
16
|
+
Author: Omkar
|
|
17
|
+
License: MIT
|
|
18
|
+
Requires-Python: >=3.8
|
|
19
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
20
|
+
Project-URL: Homepage, https://github.com/omkargs/mfe-player
|
|
21
|
+
Project-URL: Issues, https://github.com/omkargs/mfe-player/issues
|
|
22
|
+
Project-URL: Repository, https://github.com/omkargs/mfe-player
|
|
23
|
+
|
|
24
|
+
<div align="center">
|
|
25
|
+
|
|
26
|
+
<img src="assets/banner.svg" alt="MFE Player — Music For Everyone" width="100%">
|
|
27
|
+
|
|
28
|
+
<img src="docs/demo.gif?v=3" alt="MFE Player in action — search, queue, spectrum, lyrics, detach to daemon" width="100%">
|
|
29
|
+
|
|
30
|
+
### Music For Everyone.
|
|
31
|
+
|
|
32
|
+
**A terminal music player that streams, queues, downloads and visualises — with no subscription, no account, and no Electron tab eating your RAM.**
|
|
33
|
+
|
|
34
|
+
[](https://github.com/omkargs/mfe-player/actions/workflows/ci.yml)
|
|
35
|
+
[](https://github.com/omkargs/mfe-player/releases)
|
|
36
|
+
[](https://github.com/omkargs/mfe-player/stargazers)
|
|
37
|
+
[](LICENSE)
|
|
38
|
+
[](https://www.rust-lang.org)
|
|
39
|
+
[](https://crates.io/crates/mfe-player)
|
|
40
|
+
[](https://www.npmjs.com/package/mfe-player)
|
|
41
|
+
|
|
42
|
+
[The rant](#-the-rant) · [Features](#-what-you-actually-get) · [Install](docs/INSTALL.md) · [Keys](docs/KEYS.md) · [Daemon](docs/DAEMON.md) · [Themes](docs/THEMES.md)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
curl -fsSL https://raw.githubusercontent.com/omkargs/mfe-player/master/install.sh | bash
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Not a `curl | bash` person? Every channel installs the same binary:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
cargo install mfe-player # Rust package registry, prebuilt via cargo-binstall too
|
|
52
|
+
npm install -g mfe-player # esbuild-style per-platform packages, no postinstall script
|
|
53
|
+
pipx install mfe-player # PyPI wheels via maturin (uv tool install mfe-player)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Binary tarballs for Linux/macOS/Windows live on the [releases page](https://github.com/omkargs/mfe-player/releases). The complete list is in [docs/INSTALL.md](docs/INSTALL.md).
|
|
57
|
+
|
|
58
|
+
**Platforms:** Linux is the tested, everything-works target · macOS builds in CI and is solid · **Windows is experimental** — the native build exists but nobody has certified it on real hardware, so on Windows the reliable path is Docker (`docker compose run --rm mfe`).
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## The reason why i build this :
|
|
65
|
+
|
|
66
|
+
I'm going to be honest with you: I built this because I got tired of being farmed.
|
|
67
|
+
|
|
68
|
+
I was paying for a music subscription. Then a "lossless" add-on. Then a family plan I didn't need. And after all that, the app still had ads — for the same service — and one song required three taps, two spinners and a page reload. The desktop client sat there using more RAM than my editor, my browser and my whole dev environment combined, to play a 4 MB MP3.
|
|
69
|
+
|
|
70
|
+
At some point I looked at my terminal, where I already live, and thought: **why is my music not here?**
|
|
71
|
+
|
|
72
|
+
Not "why isn't there a web player I can embed". Not "why isn't there a plugin for VS Code". Why is the one place I spend ten hours a day the *only* place I can't hit space and hear a song?
|
|
73
|
+
|
|
74
|
+
So I built it. Rust + `ratatui` + `mpv` + Python plugins. It started as "can I search and play a song without opening a browser". Then the queue showed up. Then favourites, playlists, lyrics, radio, downloads, MPRIS, a cava panel that actually moves to the audio, and a background daemon that keeps playing when your SSH session drops.
|
|
75
|
+
|
|
76
|
+
Some things I got tired of, specifically:
|
|
77
|
+
|
|
78
|
+
- **"Your music, anywhere."** Except on the one device I use.
|
|
79
|
+
- **Region locks** on songs that are, somehow, available for free elsewhere.
|
|
80
|
+
- **Hi-Fi tiers** so I can hear the ads in higher fidelity.
|
|
81
|
+
- **"Sign in to continue listening"** — to music I already paid for.
|
|
82
|
+
- **$11.99 a month**, forever, for a library I could have ripped in 2006 and owned.
|
|
83
|
+
- **4 GB of RAM** for a UI that needs one text box and a play button.
|
|
84
|
+
|
|
85
|
+
No account. No telemetry. No "recommended for you" — I know what I want to listen to, that's why I searched for it. No dark patterns. Just a search box, your music, and every key you need.
|
|
86
|
+
|
|
87
|
+
This is **MFE Player** — **M**usic **F**or **E**veryone. It's MIT-licensed, it's a terminal app, and it does not give a single shit about your engagement metrics.
|
|
88
|
+
|
|
89
|
+
> If this saves you one subscription, one laggy tab, or one "sorry, this content is not available in your region", that's the whole point.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 🩹 Recently fixed
|
|
94
|
+
|
|
95
|
+
The annoying stuff, killed in 0.3.4 / 0.3.5:
|
|
96
|
+
|
|
97
|
+
- **Autoplay used to queue the news.** A music search that missed in the song catalogs fell through to the radio directory, and autoplay also searched random title words like `"life mix"`. Autoplay now only queues real songs (15 s–20 min, no news/talk/podcast titles), skips any live/radio provider, and searches only genre tags. Radio is still there when you ask for it — it just can't sneak into your queue.
|
|
98
|
+
- **Replaying a song started halfway through.** The player remembered your last position and per-track bookmarks, so every "play again" picked up mid-song. Replays now always start at 0:00 — Enter, the queue, next/previous and search results alike. (`Ctrl+B` background playback keeps playing untouched; pressing Enter on a paused player restarts it from the beginning.)
|
|
99
|
+
- **`radio = false` in config could be silently overridden** by a toggle left over from a previous session. The config now wins on every launch.
|
|
100
|
+
- **npm install on Windows was broken.** The platform packages (`mfe-player-win32-*`) were rejected by npm's spam detection and never existed. They are now `mfe-player-windows-x64` / `mfe-player-windows-arm64`.
|
|
101
|
+
|
|
102
|
+
Full history lives in [CHANGELOG.md](CHANGELOG.md).
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 🚀 What you actually get
|
|
107
|
+
|
|
108
|
+
The short list — the complete one lives in [docs/FEATURES.md](docs/FEATURES.md).
|
|
109
|
+
|
|
110
|
+
| | |
|
|
111
|
+
|---|---|
|
|
112
|
+
| **fzf-style search** | Songs, artists and albums in one fuzzy list. `Enter` opens an artist/album page or starts playback. |
|
|
113
|
+
| **Spotify-ish queue** | Queue next, bulk-queue a whole view, reorder with `J`/`K`, jump to now playing, clear upcoming, undo mistakes. |
|
|
114
|
+
| **Plugins, not lock-in** | Metadata, streaming and lyrics are separate Python 3 plugins. Provider breaks? The player walks down the list and keeps going. |
|
|
115
|
+
| **Real background playback** | `Ctrl+B` detaches into a headless daemon. The queue, repeat, shuffle and radio keep running after the TUI is gone. |
|
|
116
|
+
| **Drive it from any terminal** | `mfe play`, `pause`, `toggle`, `next`, `prev`, `mute`, `seek +10`, `shuffle`, `repeat`, `volume` — bind them to anything, script anything. The queue and repeat state stay correct because the daemon, not mpv, applies them. |
|
|
117
|
+
| **Offline downloads** | `d` rips a track to disk and prefers the local copy next time. Planes and bad Wi-Fi are supported. |
|
|
118
|
+
| **Link importing** | `Ctrl+L` accepts a YouTube/SoundCloud track or playlist, or a remote `.m3u`. Paste and go. |
|
|
119
|
+
| **Radio autoplay** | `Ctrl+T` seeds a never-ending station from the current track so the silence never wins. |
|
|
120
|
+
|
|
121
|
+
→ **The other 20+**, screenshots of the layout and the fine print: [docs/FEATURES.md](docs/FEATURES.md)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 📺 What it looks like
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
┌ library ──────┐ ┌ ⌕ search · iTunes Search ────────────────────┐ ┌ inspect ───────┐
|
|
129
|
+
│ 1 ⌕ search 30 │ │ ⌕ daft punk▌ Enter search/play │ │ Get Lucky │
|
|
130
|
+
│ 2 ≡ queue 4 │ │ ─────────────────────────────────────────── │ │ Daft Punk │
|
|
131
|
+
│ 3 ★ favorites │ │ ▶ Get Lucky — Daft Punk 4:08 │ │ Random Access… │
|
|
132
|
+
│ 4 ▤ playlists │ │ Instant Crush — Daft Punk 5:37 │ │ ★ favorite │
|
|
133
|
+
│ 5 ⤓ downloads │ │ Lose Yourself to Dance 5:53 │ │ y lyrics │
|
|
134
|
+
│ 6 ⚙ plugins │ │ One More Time — Daft Punk 5:20 │ │ d download │
|
|
135
|
+
└───────────────┘ └─────────────────────────────────────────────┘ └────────────────┘
|
|
136
|
+
│ ▶ Get Lucky Daft Punk 2:13 / 4:08 vol 70% repeat all │
|
|
137
|
+
└ / search · Enter play · a queue · F favorite · P playlist · ? help · Ctrl+P palette ┘
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Terminal font does the rest. It looks even better with a real cava panel on the right.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 📚 The rest of the manual
|
|
145
|
+
|
|
146
|
+
Everything longer than a tweet lives in [docs/](docs/):
|
|
147
|
+
|
|
148
|
+
| Doc | What's in it |
|
|
149
|
+
|---|---|
|
|
150
|
+
| [Install](docs/INSTALL.md) | every install channel, platforms, Docker, first steps |
|
|
151
|
+
| [Keys](docs/KEYS.md) | every hotkey, the full map |
|
|
152
|
+
| [Daemon](docs/DAEMON.md) | background playback and the CLI verbs that drive it |
|
|
153
|
+
| [Scripting](docs/SCRIPTING.md) | waybar/polybar/tmux JSON, one-liners |
|
|
154
|
+
| [Themes](docs/THEMES.md) | 14 built-ins, wallpaper palettes, transparency |
|
|
155
|
+
| [Plugins](docs/PLUGINS.md) | the Python JSON contract, bundled providers |
|
|
156
|
+
| [Architecture](docs/ARCHITECTURE.md) | how the pieces talk to each other |
|
|
157
|
+
| [Features](docs/FEATURES.md) | the complete feature table |
|
|
158
|
+
| [Config](docs/CONFIG.md) | every `config.toml` key and where files live |
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 📄 License
|
|
163
|
+
|
|
164
|
+
MIT. Do what you want with it — the license text is in [LICENSE](LICENSE). No
|
|
165
|
+
pressure either way, honestly.
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 🤝 Contributing
|
|
170
|
+
|
|
171
|
+
1. Fork it.
|
|
172
|
+
2. `cargo build --release`
|
|
173
|
+
3. Break something.
|
|
174
|
+
4. Fix it better than I would have.
|
|
175
|
+
5. Open a PR with a screenshot and a one-line reason.
|
|
176
|
+
|
|
177
|
+
Read [CONTRIBUTING.md](CONTRIBUTING.md) for the boring-but-useful details. Bug reports with the output of `mfe status`, your distro and `mpv --version` get fixed about 10× faster.
|
|
178
|
+
|
|
179
|
+
If MFE saves you money, time or one browser tab: **drop a star**. Stars are how other devs find the thing, and how I know someone besides me is using it.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
<div align="center">
|
|
184
|
+
|
|
185
|
+
**Built because renting music is a weird business model.**
|
|
186
|
+
|
|
187
|
+
MIT licensed. No ads. No trackers. No "upgrade to continue".
|
|
188
|
+
|
|
189
|
+
⭐ [Star the repo](https://github.com/omkargs/mfe-player) · 🐛 [Report a bug](https://github.com/omkargs/mfe-player/issues) · 💡 [Request a feature](https://github.com/omkargs/mfe-player/issues)
|
|
190
|
+
|
|
191
|
+
</div>
|
|
192
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
mfe_player-0.3.6.data/scripts/mfe-player.exe,sha256=G8QP85xv9NnpBHW02iIiwz1aEzAk-Wm0kISUI3Cme9w,4794368
|
|
2
|
+
mfe_player-0.3.6.dist-info/METADATA,sha256=bKwd0P5-xp7QuCtHbtbYpyTrv4wNEdmx_Myl0F2wH7g,11434
|
|
3
|
+
mfe_player-0.3.6.dist-info/WHEEL,sha256=Uvw7WSmy7Kj2FBk8Va4L_dq4MDW8X5Ynby-pOX3ZNS0,94
|
|
4
|
+
mfe_player-0.3.6.dist-info/licenses/LICENSE,sha256=88JnNY4oZVFv6Sj9CFGDv9yIJSL_U6gTRKAl-adhvhw,1083
|
|
5
|
+
mfe_player-0.3.6.dist-info/sboms/mfe-player.cyclonedx.json,sha256=drZDLO05L4e5xozwHHhbzSq_GYwRPrVR84RcIe6Ywpo,134780
|
|
6
|
+
mfe_player-0.3.6.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Omkar
|
|
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.
|