Metadata-Version: 2.4
Name: raphson_mp
Version: 2.7.0
Summary: Raphson music player
Project-URL: Homepage, https://codeberg.org/raphson/music-server
Project-URL: Issues, https://codeberg.org/raphson/music-server/issues
Author-email: Robin Slot <robin@rslot.nl>
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Framework :: Flask
Classifier: Intended Audience :: End Users/Desktop
Classifier: Natural Language :: Dutch
Classifier: Natural Language :: English
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Sound/Audio :: Players
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: aiohttp
Requires-Dist: typing-extensions
Provides-Extra: dev
Requires-Dist: black; extra == 'dev'
Requires-Dist: build; extra == 'dev'
Requires-Dist: coverage; extra == 'dev'
Requires-Dist: isort; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-asyncio<2.0,>=0.26; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: twine; extra == 'dev'
Requires-Dist: yappi; extra == 'dev'
Provides-Extra: full
Requires-Dist: aiohttp~=3.9; extra == 'full'
Requires-Dist: babel~=2.9; extra == 'full'
Requires-Dist: cryptography>=35.0; extra == 'full'
Requires-Dist: jinja2~=3.0; extra == 'full'
Requires-Dist: prometheus-client>=0.15.0; extra == 'full'
Requires-Dist: yt-dlp; extra == 'full'
Provides-Extra: offline
Requires-Dist: aiohttp~=3.9; extra == 'offline'
Requires-Dist: babel~=2.9; extra == 'offline'
Requires-Dist: jinja2~=3.0; extra == 'offline'
Provides-Extra: online
Requires-Dist: aiohttp~=3.9; extra == 'online'
Requires-Dist: babel~=2.9; extra == 'online'
Requires-Dist: cryptography>=35.0; extra == 'online'
Requires-Dist: jinja2~=3.0; extra == 'online'
Requires-Dist: yt-dlp; extra == 'online'
Provides-Extra: prometheus
Requires-Dist: prometheus-client>=0.15.0; extra == 'prometheus'
Provides-Extra: web
Requires-Dist: aiohttp~=3.9; extra == 'web'
Requires-Dist: babel~=2.9; extra == 'web'
Requires-Dist: jinja2~=3.0; extra == 'web'
Description-Content-Type: text/markdown

# Raphson Music Player

Web-based social music player for communities (hacker spaces, maker spaces).

What makes this different from other music players? It is designed around listening with groups. Instead of playing a single playlist, this music player allows enabling many playlists from different people. Tracks are shuffled from multiple playlists into a single queue. No more arguing about which music to play, everyone's music get played.

An additional benefit of this is music discovery, even when you're listening solo you might like to mix up your own music with someone else's.

![Screenshot of music player](https://downloads.rkslot.nl/music-player-screenshots/player5.png)

## Features

- Shuffle
    - Shuffle algorithm ensures the least recently played songs are picked first.
    - Of course, you can also manually browse or search the music collection and queue specific songs.
- Gets out of your way
    - We try to minimize the number of clicks required to perform any action. Buttons should be large and not hidden behind submenus.
    - Hotkeys are available to speed up common actions
- Responsive and mobile compatible
    - Touch-friendly interface
    - Low quality audio/image option is available to save data
    - Implements the Subsonic protocol, allowing you to use native apps
- Metadata management
    - Large, high quality album covers are fetched from MusicBrainz
    - Time synced lyrics are automatically fetched from various sources
    - Metadata editor to easily correct metadata while listening
    - Audio is loudness-normalized ensuring consistent volume for all genres.
- File management
    - Built-in web file browser to download, upload, rename and delete files
    - WebDAV protocol support allows you to connect with an external file manager application
    - Built-in music downloader using `yt-dlp`
    - Also keyboard-friendly interface; hotkeys are available for common actions, allowing you to skip a track while wearing welding gloves.
- Statistics
    - See what others are playing now or in the past
    - Statistics page with graphs based on historical data
    - Last.fm scrobbling (each user can connect their own last.fm account)
- News
    - Optionally, play hourly news just like real radio.
- Fun
    - Enable 'Album cover meme mode' to replace album covers by (sometimes) funny memes related to the song title.
    - Play games with your music collections, like a music guessing game.
- Minimal: fast and secure
    - Written in pure HTML, CSS and JavaScript with only one third party library (eCharts). The frontend should be fast, even on an old laptop or cheap single board computer.
    - Queued songs are stored as blobs in the browser's storage. Temporary network connection issues are no problem.
    - Python dependencies are kept to a minimum (aiohttp, jinja2, babel, yt-dlp, cryptography)
    - Very strict Content-Security-Policy allows no communication from clients to the internet.

## Screenshots

See [docs/screenshots.md](docs/screenshots.md).

## Usage

See [docs/installation.md](docs/installation.md).

## Development and translation

See [docs/development.md](docs/development.md).
