{"id":39032943,"url":"https://github.com/ljufa/rsplayer","last_synced_at":"2026-04-25T20:02:30.505Z","repository":{"id":58878960,"uuid":"287202765","full_name":"ljufa/rsplayer","owner":"ljufa","description":"RSPlayer - Diy-friendly Music Player","archived":false,"fork":false,"pushed_at":"2026-04-21T15:23:05.000Z","size":95993,"stargazers_count":22,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-21T17:33:38.870Z","etag":null,"topics":["alsa","audio-server","headless","linux","music-player","music-server","nas","raspberry-pi","rust","self-hosted"],"latest_commit_sha":null,"homepage":"https://ljufa.github.io/rsplayer/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ljufa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2020-08-13T06:46:14.000Z","updated_at":"2026-04-21T15:23:10.000Z","dependencies_parsed_at":"2023-12-30T22:30:23.789Z","dependency_job_id":"1139f723-5f4a-448f-aa99-4baa836e5941","html_url":"https://github.com/ljufa/rsplayer","commit_stats":null,"previous_names":[],"tags_count":81,"template":false,"template_full_name":null,"purl":"pkg:github/ljufa/rsplayer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljufa%2Frsplayer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljufa%2Frsplayer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljufa%2Frsplayer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljufa%2Frsplayer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ljufa","download_url":"https://codeload.github.com/ljufa/rsplayer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ljufa%2Frsplayer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32274987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alsa","audio-server","headless","linux","music-player","music-server","nas","raspberry-pi","rust","self-hosted"],"created_at":"2026-01-17T17:41:57.503Z","updated_at":"2026-04-25T20:02:30.494Z","avatar_url":"https://github.com/ljufa.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://github.com/ljufa/rsplayer/actions/workflows/ci.yml/badge.svg)\n![](https://github.com/ljufa/rsplayer/actions/workflows/cd.yml/badge.svg)\n![](https://github.com/ljufa/rsplayer/actions/workflows/docker.yml/badge.svg)\n![](https://img.shields.io/github/v/release/ljufa/rsplayer)\n![](https://img.shields.io/github/license/ljufa/rsplayer?style=flat-square)\n![](https://img.shields.io/badge/PRs-Welcome-brightgreen.svg?style=flat-square)\n# RSPlayer\nRSPlayer is an open-source, headless music server for Linux — run it on your NAS, home server, Raspberry Pi, or any x86_64/ARM machine and control it from any browser.\n\nIt runs as a systemd service and exposes a responsive web UI, making it a great fit for machines without a monitor or keyboard — but equally at home on a dedicated desktop audio PC. Hardware and DIY integrations (GPIO DAC control, custom firmware) are fully optional.\n\nUnder the hood RSPlayer uses [Symphonia](https://github.com/pdeljanov/Symphonia) for audio decoding and [Cpal](https://github.com/rustaudio/cpal) for output, with a Rust-native audio pipeline for low-latency, high-performance playback.\n\n### Online demo -\u003e https://rsplayer.dlj.freemyip.com/\n\n## How does RSPlayer compare?\n\n\u003e Approximate comparison as of early 2026. Features change frequently.\n\n| Feature | RSPlayer | Volumio | Moode Audio | MPD |\n|---|---|---|---|---|\n| Language | Rust | Node.js | PHP/Bash | C |\n| Runs on x86_64 / NAS / server | ✓ | ✓ | Pi-only | ✓ |\n| Parametric EQ / DSP | ✓ built-in | paid tier | ✓ (CamillaDSP) | via plugins |\n| Multi-room | planned | paid tier | ✓ | via plugins |\n| DSD playback | ✓ | ✓ | ✓ | ✓ |\n| Web UI | ✓ | ✓ | ✓ | 3rd party |\n| Local browser playback | ✓ | — | — | — |\n| Loudness normalization (EBU R128) | ✓ | — | — | — |\n| Synchronized lyrics | ✓ | — | — | — |\n| Docker | ✓ | ✓ | — | ✓ |\n| RISC-V 64 | ✓ | — | — | — |\n| Home Assistant integration | ✓ | ✓ | — | ✓ |\n| DIY hardware integration | optional | — | — | — |\n| License | MIT | GPL | GPL | GPL |\n\n## Features\n- **Low Latency Output**: Direct output to ALSA or PipeWire minimizes latency.\n- **Local Browser Playback**: Stream audio directly to your web browser for local playback.\n- **Automatic Resampling**: High-quality FFT-based resampling (via rubato) when the output device doesn't support the source sample rate — no configuration needed. Automatically probes fallback rates for ALSA drivers that misreport their supported range.\n- **Fixed Output Sample Rate**: Optionally lock the output to a specific sample rate, overriding automatic detection.\n- **Multiple Music Sources**: Configure multiple local directories and network mounts as music sources, all scanned together.\n- **Network Storage Management**: Discover, mount, and manage SMB/CIFS and NFS shares directly from the settings page.\n- **Adjustable Playback Thread Priority**: Customize the priority of the playback thread up to a real-time rating of 99 via the settings page.\n- **Dedicated CPU Core for Playback**: By default, the playback thread is pinned to a single CPU core for optimized performance.\n- **Web UI Remote Control**: Manage your playback remotely with an intuitive web interface.\n- **Flexible Volume Control**: Control the volume using software (alsa mixer) or hardware control (Dac chip instructions via GPIO).\n- **Written in Rust**: Enjoy the benefits of minimal dependencies and high performance, thanks to the Rust native implementation.\n- **Comprehensive Music Library Management**: Scan, search, and browse your music library and online radio stations with ease.\n- **Dynamic Playlists**: Automatically create dynamic playlists for personalized listening experiences.\n- **DSP Integration**: Advanced Digital Signal Processing with parametric EQ, filters, and presets.\n- **Web UI VU Meter**: Real-time audio visualization in the web interface.\n- **Extended Hardware Control**: Support for seek and power management via firmware interactions.\n- **Web UI Themes**: Support for customizable themes and dark/light modes (10+ built-in themes).\n- **Synchronized Lyrics**: Real-time synchronized lyrics support via LRCLIB integration.\n- **Playlists by genre, year**: Browse and create playlists based on genre or year.\n- **Loudness Normalization**: Per-song EBU R128 loudness normalization, toggleable from the settings page. Analysis runs automatically in the background while playback is stopped and results are stored permanently.\n- **Library Statistics**: Dedicated statistics page showing song/album/artist counts, total duration, play history, top genres, albums by decade, and loudness analysis progress.\n- **Priority Queue**: Add songs, albums, artists, or directories to play next without disrupting the queue order.\n- **Drag-and-Drop Queue Reordering**: Reorder queue items by dragging them directly in the queue view.\n- **Automatic Cache Busting**: Browser caches are automatically invalidated on every release — no stale UI after upgrading.\n- **Volume Persistence**: Volume level is saved on change and restored on restart, defaulting to 0 on first use to prevent hardware-max shock.\n- **Global Keyboard Shortcuts**: Full keyboard control for playback, navigation, and search (Space, arrows, M, L, Y, S, /, ?, 1-4, F/A/P/R/T).\n- **Monkey's Audio (APE) Support**: Play lossless APE files with full metadata support.\n- **Breadcrumb Navigation**: Clear navigation context on all library pages.\n- **Skeleton Loading \u0026 Empty States**: Visual feedback during loading and helpful empty state screens.\n\n## Known Limitations\n\n- **DSD passthrough bypass**: DSP (parametric EQ, filters), loudness normalization, and resampling are all bypassed for DSD files (`.dsf`, `.dff`). DSD bitstreams are passed directly to the DAC without any signal processing.\n- **Radio streams**: Loudness normalization is not applied to internet radio streams — it requires pre-scanned file metadata. Seeking is not supported for streams.\n- **Supported formats**: Supported formats include FLAC, MP3, AAC, OGG Vorbis, WAV, AIFF, CAF, DSD (DSF/DFF), and APE (Monkey's Audio).\n- **Local Browser Playback**: In this mode the browser's native audio engine plays files directly. DSP, loudness normalization, resampling, VU metering, and DSD playback are all unavailable — format support is limited to what the browser itself can decode.\n\n### Planned features\n- **Expanded Audio Codec Support**: Compatibility with a wider range of audio codecs.\n- **Intelligent Dynamic Playlists**: Advanced dynamic playlists that adapt based on user likes or playback counts for a personalized listening experience.\n- **Windows Compatibility**: Development of a Windows build to extend platform support.\n- **MacOS Compatibility**: Development of a MacOS build to extend platform support.\n- **Music Recommendations**: Suggest similar tracks or artists based on listening history or current playback.\n- **Generate missing album cover image**: Auto-generate album art using album name.\n- **MPD protocol support**: Compatibility with MPD clients.\n- **Subsonic protocol support**: Compatibility with Subsonic clients.\n- **Multi-room playback**: Synchronized playback across multiple devices.\n- **MPRIS D-Bus integration**: Native Linux desktop media key and player integration.\n- **Community plugin framework**: Extensible architecture for third-party plugins.\n- **Improve playlists management create/modify/delete items and playlists**: Items can be added/removed to/from playlist from everywhere.\n- **New version detection and upgrade from the app**: Detect a new version and provide upgrade button\n- **Problem(bug) report with diagnostic**: Report problem by user\n- **Scheduled music library scans**: Enable user to define automatic library scan interval (or cron)\n\n### Planned code improvements\n- Replace Bulma CSS with a modern, maintained alternative.\n- Replace seed-rs with a newer, maintained framework.\n- Replace `warp` with `axum` or `actix`.\n\n## Supported Platforms\n\nRSPlayer runs on Linux. The Deb, RPM, and Arch packages include a systemd service for automatic startup.\n\n| Architecture | Rust Target | Binary | Deb | RPM | Arch | Docker |\n|---|---|---|---|---|---|---|\n| ARMv6 (Pi Zero/1) | `arm-unknown-linux-gnueabihf` | Yes | Yes | Yes | Yes | - |\n| ARMv7 (Pi 2-4) | `armv7-unknown-linux-gnueabihf` | Yes | Yes | Yes | Yes | - |\n| ARM64 (Pi 4 64-bit) | `aarch64-unknown-linux-gnu` | Yes | Yes | Yes | Yes | - |\n| x86_64 | `x86_64-unknown-linux-gnu` | Yes | Yes | Yes | Yes | Yes |\n| RISC-V 64 | `riscv64gc-unknown-linux-gnu` | Yes | Yes | Yes | Yes | - |\n\n## Installation\nTo install RSPlayer, execute the following script (requires curl):\n```bash\nbash \u003c(curl -s https://raw.githubusercontent.com/ljufa/rsplayer/master/install.sh)\n```\nThe installation script detects your Linux distribution (Debian/Ubuntu, Fedora/RHEL/CentOS, Arch/Manjaro) and architecture, then installs the appropriate package. It will install all necessary files, configure and start the systemd service.\n\nTo stop RSPlayer, run the following command:\n```bash\nsudo systemctl stop rsplayer\n```\nTo start RSPlayer service again, run the following command:\n```bash\nsudo systemctl start rsplayer\n```\n## Run as docker container\n```bash\ndocker run -p 8000:80 -v ${MUSIC_DIR}:/music -v rsplayer_data:/opt/rsplayer --device /dev/snd -it --rm ljufa/rsplayer:latest\n```\nor [docker compose](docker-compose.yaml)\n```yaml\nservices:\n  rsplayer:\n    image: ljufa/rsplayer:latest\n    devices:\n      - /dev/snd\n    ports:\n      - 8000:80\n    volumes:\n      - ${MUSIC_DIR}:/music:ro\n      - 'rsplayer_volume:/opt/rsplayer'\n    restart: unless-stopped\nvolumes:\n  rsplayer_volume:\n    driver: local\n```\n\n## Usage\nOnce RSPlayer is installed, you can access the web user interface by navigating to http://localhost or the IP address of the machine on which it is installed.\n\nFor detailed configuration instructions, please refer to the [documentation](https://ljufa.github.io/rsplayer/#/?id=basic-configuration).\n\n## Home Assistant Integration\nRSPlayer can be controlled from [Home Assistant](https://www.home-assistant.io/) via the [rsplayer_hacs_plugin](https://github.com/ljufa/rsplayer_hacs_plugin).\n\nFeatures include media player control (play, pause, stop, next/prev, volume) and real-time sync with `rsplayer_firmware` power state.\n\nInstall via HACS by adding `https://github.com/ljufa/rsplayer_hacs_plugin` as a custom repository.\n\n## DIY Hardware\nFor DIY enthusiasts, `rsplayer` offers the flexibility to integrate with custom hardware components.\n\n- **Hardware Designs**: [rsplayer_hardware](https://github.com/ljufa/rsplayer_hardware)\n- **Firmware**: [rsplayer_firmware](https://github.com/ljufa/rsplayer_firmware)\n\nSee the [Hardware Integration documentation](https://ljufa.github.io/rsplayer/#/?id=hardware-integration) for more details.\n\n## Contributing\nIf you would like to contribute to RSPlayer, please submit a pull request or open an issue on the GitHub repository.\n\nFor instructions on how to build the project from source, please see the [Building from Source](https://ljufa.github.io/rsplayer/#/BUILD) documentation.\n\n## License\nRSPlayer is licensed under the MIT license. See the LICENSE file for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fljufa%2Frsplayer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fljufa%2Frsplayer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fljufa%2Frsplayer/lists"}