Offline single-file HTML music player generator
Project description
phuker-music
Demo | GitHub | PyPI | Readme (English, 简体中文)
Yet another HTML music player generator. Scan a directory of audio files and generate an offline, all-in-one single HTML player file. Also generates player pages for multiple albums plus an index page via a JSON config. You can open the generated HTML files directly in a browser, sync them along with your audio files across devices, or upload them to a web server.
You can try the demo to see what the generated index page and players look like.
Features
The crap you won't find
- No account sign-up or paid subscription required
- No 15-second preview limit
- No splash screen ads
- No loan ads popups
- No AI
- No tracking, analytics, statistics, or telemetry
- No user data uploads
- No extra assets — No JS/CSS dependencies, no web fonts, no CDN
- Only a fucking single HTML file
What it does have
- System media controls and now playing information
- System notification on track start (requires permission)
- Installable as a Progressive Web App (PWA)
- Follow system dark mode
- Background playback persistence
What's not yet supported
- Gapless playback
Install and run
Run with uvx (without installation)
uvx phuker-music --help
Run with pipx (without installation)
pipx run phuker-music --help
Install with uv and run
uv tool install phuker-music
phuker-music --help
Install with pipx and run
pipx install phuker-music
phuker-music --help
Install with pip and run
pip install phuker-music
phuker-music --help
Quick start
Generate music player HTML for a single album
First, cd to a directory that contains audio files, for example one cover image and three audio files:
.
|-- Cafe ambience.m4a
|-- Cover.jpg
|-- Crowd Talking Quietly Stadium.mp3
`-- Distant train with cicadas.m4a
Then run:
phuker-music player --force --cover Cover.jpg .
You will get:
.
|-- Cafe ambience.m4a
|-- Cover.jpg
|-- Crowd Talking Quietly Stadium.mp3
|-- Distant train with cicadas.m4a
`-- player.html <-- player HTML file
Open player.html in a browser to use the player.
Generate player and index page for multiple albums
cd to a directory containing multiple album directories, for example two album directories:
.
|-- Ambience
| |-- Cafe ambience.m4a
| |-- Cover.jpg
| |-- Crowd Talking Quietly Stadium.mp3
| `-- Distant train with cicadas.m4a
`-- Nature
|-- Cover.jpg
|-- FL Mocking birds.mp3
|-- Frogs and nature in Southern Brasil in August.m4a
|-- Morning birds.m4a
|-- Nature.m4a
|-- Rain.ogg
`-- Thunder.mp3
Then run:
phuker-music albums-webui ./albums.json .
Visit http://127.0.0.1:8000/ in a browser, drag albums from the Available column to the Albums column, click the Save & Generate button at the top, and you will get:
.
|-- albums.json <-- config file
|-- Ambience
| |-- Cafe ambience.m4a
| |-- Cover.jpg
| |-- Crowd Talking Quietly Stadium.mp3
| |-- Distant train with cicadas.m4a
| `-- player.html <-- player HTML file
|-- index.html <-- index HTML file
`-- Nature
|-- Cover.jpg
|-- FL Mocking birds.mp3
|-- Frogs and nature in Southern Brasil in August.m4a
|-- Morning birds.m4a
|-- Nature.m4a
|-- player.html <-- player HTML file
|-- Rain.ogg
`-- Thunder.mp3
Open index.html in a browser to view the index page.
Usage
$ phuker-music --help
usage: phuker-music [-h] [-v] [-V] command ...
Music player HTML generator
positional arguments:
command
player Generate music player HTML for a single album
albums Generate player and index HTML for multiple albums
albums-webui Launch a web UI to edit the albums config and generate player and index HTML for multiple albums
options:
-h, --help show this help message and exit
-v, --verbose Increase verbosity level
-V, --version Show version and exit
$ phuker-music player --help
usage: phuker-music player [-h] [-t title] [-c file] [--player-filename filename] [-r] [--sort-type type] [-f] [-v] dir_path
Generate music player HTML for a single album
positional arguments:
dir_path Path to the album directory
options:
-h, --help show this help message and exit
-t, --title title Album title, default: directory name
-c, --cover file Album cover file path, relative to dir_path
--player-filename filename Player filename, default: player.html
-r, --recursively Recursively scan subdirectories for audio files
--sort-type type Sort type, choices: filename, mtime_desc, default: filename
-f, --force Overwrite player file if it exists
-v, --verbose Increase verbosity level
$ phuker-music albums --help
usage: phuker-music albums [-h] [-f] [-v] config_file
Generate player and index HTML for multiple albums
positional arguments:
config_file Albums config file path
options:
-h, --help show this help message and exit
-f, --force Overwrite index page and player files if they exist
-v, --verbose Increase verbosity level
$ phuker-music albums-webui --help
usage: phuker-music albums-webui [-h] [--host host] [--port port] [--trusted-host host] [-v] config_file dir_path
Launch a web UI to edit the albums config and generate player and index HTML for multiple albums
positional arguments:
config_file Albums config file path
dir_path Albums directory path
options:
-h, --help show this help message and exit
--host host Host to bind to, default: 127.0.0.1
--port port Port to bind to, default: 8000
--trusted-host host Add a trusted request hostname, can be specified multiple times, default: ['127.0.0.1', 'localhost']
-v, --verbose Increase verbosity level
Disclaimer
- This project is an open-source tool for personal learning and technical research only. It does not provide copyrighted music, pirated content, or cracking services.
- Users must comply with local laws and regulations when using this project. This software does not encourage, support, or participate in any form of intellectual property or copyright infringement.
- Any legal disputes, losses, or damages arising from the use of this project shall be borne solely by the user. The developer assumes no direct, indirect, or incidental legal liability.
- If any content in this project, including features, source code, or asset files, infringes upon your legal rights, please contact the developer promptly. We will remove or modify it upon verification.
License
MIT
Project details
Release history Release notifications | RSS feed
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 phuker_music-1.6.1.tar.gz.
File metadata
- Download URL: phuker_music-1.6.1.tar.gz
- Upload date:
- Size: 196.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bcb014697138d2adb00ce8c11bb1f8d62f3bd7f3315c09818345a51196d3ba9
|
|
| MD5 |
530468c420f528936e1f89111061f2ab
|
|
| BLAKE2b-256 |
406ef832923a299e77608d14f015f346d56a97ae43fbb685ea6bd787f46ee6c6
|
File details
Details for the file phuker_music-1.6.1-py3-none-any.whl.
File metadata
- Download URL: phuker_music-1.6.1-py3-none-any.whl
- Upload date:
- Size: 196.6 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 |
7aae2561359d17588d288b3df542cf4e2d5b7e0b177b16d6747564b5f76f633a
|
|
| MD5 |
04f65c01499efa26bf92efd2dfc9afc0
|
|
| BLAKE2b-256 |
6617809f7fcc7ce12f293760cdb0fc82e6fc86971c8018abbbbfd095190612e3
|