docs/README.md
Rama main · réplica de lectura del repositorio original.
# RSPlayer - Rust-native music server
RSPlayer is an open-source, headless music server primarily for Linux. Run it on your NAS, home server, Raspberry Pi, or any x86_64/ARM machine and control it from any browser. A native desktop app (Linux x86_64/ARM64, macOS, Windows) is also available, and on Android.
It 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.
Under 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.
**Website → https://rsplayer.de** · **Online demo → https://demo.rsplayer.de**
## Getting Started
- [Installation](installation.md) — supported platforms, install methods, and verification
- [Configuration](configuration.md) — audio settings, volume control, and hardware integration
- [Usage Guide](usage.md) — web interface, queue, library, keyboard shortcuts
- [Troubleshooting](troubleshooting.md) — common issues and fixes
## Features
- **Low Latency Output**: Direct output to ALSA or PipeWire minimizes latency.
- **Multiroom Playback**: Native synchronized playback across multiple RSPlayer devices — automatic discovery on the LAN, encrypted QUIC streaming, millisecond-level sync, per-room volume and EQ. See [Multiroom Playback](multiroom.md).
- **Local Browser Playback**: Stream audio directly to your web browser for local playback.
- **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.
- **Fixed Output Sample Rate**: Optionally lock the output to a specific sample rate, overriding automatic detection.
- **Multiple Music Sources**: Configure multiple local directories and network mounts as music sources, all scanned together.
- **Network Storage Management**: Discover, mount, and manage SMB/CIFS and NFS shares directly from the settings page.
- **Remote Libraries (S3)**: Play a library stored on S3-compatible storage (Amazon S3, Backblaze B2, Cloudflare R2, MinIO, Garage, or a NAS folder published with `rclone serve s3`) without mounting anything: enter its URL and access key, songs are scanned and streamed over the network. Works in the Android app too, which cannot mount network shares, so a home library is playable from anywhere. See [Remote Library](remote_library.md).
- **Adjustable Playback Thread Priority**: Customize the priority of the playback thread up to a real-time rating of 99 via the settings page.
- **Dedicated CPU Core for Playback**: By default, the playback thread is pinned to a single CPU core for optimized performance.
- **Web UI Remote Control**: Manage your playback remotely with an intuitive web interface.
- **Flexible Volume Control**: Choose ALSA mixer, PipeWire, or software gain volume control, with hardware control also supported via RSPlayer firmware integration.
- **Volume Persistence**: Volume level is saved on change and restored on restart, defaulting to 0 on first use to prevent hardware-max shock.
- **Comprehensive Music Library Management**: Scan, search, and browse your music library and online radio stations with ease.
- **Podcasts**: Find shows in the Apple Podcasts directory (or Podcast Index with a free API key), or paste an RSS feed URL, then subscribe and play episodes through the regular queue. Feeds refresh in the background, playback resumes where you stopped, and episodes are marked played automatically. See [Podcasts View](usage.md?id=podcasts-view).
- **Dynamic Playlists**: Automatically create dynamic playlists for personalized listening experiences.
- **Playlists by Genre, Year**: Browse and create playlists based on genre or year.
- **Drag-and-Drop Queue Reordering**: Reorder queue items by dragging them directly in the queue view.
- **DSP Integration**: Advanced Digital Signal Processing with parametric EQ, filters, and presets.
- **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.
- **Music Visualizer**: Real-time audio visualization in the web interface, with 13 visualizer styles, including an analog VU meter.
- **Synchronized Lyrics**: Real-time synchronized lyrics support via LRCLIB integration.
- **Library Statistics**: Dedicated statistics page showing song/album/artist counts, total duration, play history, top genres, albums by decade, and loudness analysis progress.
- **Web UI Themes**: Support for customizable themes and dark/light modes (10+ built-in themes).
- **Global Keyboard Shortcuts**: Full keyboard control for playback, navigation, and search (Space, arrows, M, L, Y, S, /, ?, 1-4, F/A/P/R/O/T).
- **Breadcrumb Navigation**: Clear navigation context on all library pages.
- **Skeleton Loading & Empty States**: Visual feedback during loading and helpful empty state screens.
- **Written in Rust**: Enjoy the benefits of minimal dependencies and high performance, thanks to the Rust-native implementation.
- **Extended Hardware Control**: Support for seek and power management via firmware interactions.
### Supported Formats
FLAC, MP3, AAC, OGG Vorbis, WAV, AIFF, CAF, DSD (DSF/DFF), APE (Monkey's Audio), and SACD ISO disc images.
## Known Limitations
- **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.
- **Radio streams**: Loudness normalization is not applied to internet radio streams — it requires pre-scanned file metadata. Seeking is not supported for streams.
- **Unsupported formats**: Opus, WMA, WavPack, and TTA are not supported.
- **Local Browser Playback**: In this mode the browser's native audio engine plays files directly. DSP, loudness normalization, resampling, visualization, and DSD playback are all unavailable — format support is limited to what the browser itself can decode. Podcast resume positions are not saved in this mode.
- **Remote libraries (S3)**: APE files and SACD ISO images on remote storage are skipped, and loudness normalization does not analyse remote songs (it would download them in full). The first scan reads the beginning of every file over the network, so a large library takes a while.
- **Non-Linux builds**: On macOS and Windows, network share mounting, ALSA/PipeWire volume, IR remote, system poweroff/reboot, and firmware USB integration are unavailable.
## How does RSPlayer compare?
> Approximate comparison as of November 2026. Features change frequently. See [Feature Parity](feature_parity.md) for a detailed comparison against Volumio, Roon, MPD, Navidrome, Lyrion (LMS), moOde, Daphile, and piCorePlayer.
| Feature | RSPlayer | Volumio | Moode Audio | MPD |
|---|---|---|---|---|
| Language | Rust | Node.js | PHP/Bash | C |
| Playback engine | Symphonia + cpal (pure rust) | MPD (plugin-based) | MPD (plugin-based) | plugin-based (FFmpeg, libFLAC, …) |
| OS support | Linux, macOS, Windows, Android | Linux | Linux (Pi) | Linux, macOS, Windows |
| Native desktop app variant | Linux, macOS, Windows, Android | — | — | — |
| Web UI | ✓ | ✓ | ✓ | 3rd party |
| Local browser playback | ✓ | — | — | — |
| Library on S3 storage (no mount) | ✓ | No | No | No |
| Parametric EQ / DSP | ✓ built-in | plugin (FusionDSP) | ✓ (CamillaDSP) | via plugins |
| Multi-room | ✓ | paid tier | ✓ | via plugins |
| DSD playback | ✓ | ✓ | ✓ | ✓ |
| Loudness normalization | ✓ EBU R128 (built-in analysis, no tags needed) | ReplayGain (manual MPD config) | ReplayGain | ReplayGain |
| Synchronized lyrics | ✓ | plugin (beta) | — | client dependent |
| Docker | ✓ | ✓ | — | ✓ |
| RISC-V 64 | ✓ | — | — | — |
| Home Assistant integration | ✓ | ✓ | ✓ (via MPD) | ✓ |
| DIY hardware integration | optional | — | — | — |
| License | MIT | GPL | GPL | GPL |
<sub>Based on publicly available information as of November 2026; other products change often and may have added features since. Product names are trademarks of their respective owners. Spotted an error? [Open an issue](https://github.com/ljufa/rsplayer/issues) and it will be corrected.</sub>
## Home Assistant Integration
RSPlayer can be controlled from [Home Assistant](https://www.home-assistant.io/) via the [rsplayer_hacs_plugin](https://github.com/ljufa/rsplayer_hacs_plugin).
Features include media player control (play, pause, stop, next/prev, volume) and real-time sync with `rsplayer_firmware` power state.
Install via HACS by adding `https://github.com/ljufa/rsplayer_hacs_plugin` as a custom repository.
## DIY Hardware
For DIY enthusiasts, RSPlayer offers the flexibility to integrate with custom hardware components.
- **Hardware Designs**: [rsplayer_hardware](https://github.com/ljufa/rsplayer_hardware)
- **Firmware**: [rsplayer_firmware](https://github.com/ljufa/rsplayer_firmware)
See the [Configuration](configuration.md) page for hardware integration details.
## Planned Features
- **Expanded Audio Codec Support**: Compatibility with a wider range of audio codecs.
- **Intelligent Dynamic Playlists**: Advanced dynamic playlists that adapt based on user likes or playback counts.
- **Music Recommendations**: Suggest similar tracks or artists based on listening history or current playback.
- **Generate Missing Album Cover Image**: Auto-generate album art using the album name.
- **MPD protocol support**: Compatibility with MPD clients.
- **Subsonic protocol support**: Compatibility with Subsonic clients.
- **Community plugin framework**: Extensible architecture for third-party plugins.
- **Improved playlist management**: Create/modify/delete items and playlists from everywhere.
- **Scheduled music library scans**: Define an automatic library scan interval (or cron).
- **Built-in NFS, SMB and S3 clients**: Scan and play a music library straight from network shares or S3-compatible storage, without mounting them in the OS — so remote libraries also work on Android, macOS, Windows, Snap and Flatpak.
- **Problem (bug) report with diagnostics**: Report problems directly from the app.
- **Desktop App File Logging**: Rolling log files for the desktop app, so users can capture and share diagnostics without running from a terminal.
- **Homebrew Distribution**: Install and update RSPlayer on macOS through a Homebrew formula/cask.
- **Android App on Google Play**: publish the Android app (shipped as an APK since v4.9.0) to the Play Store, and add an optional kiosk mode for dedicated players.
## Contributing
Contributions are welcome — submit a pull request or open an issue on the [GitHub repository](https://github.com/ljufa/rsplayer). To build from source, see [Building from Source](build.md).
## License
RSPlayer is licensed under the MIT license. See the [LICENSE](https://github.com/ljufa/rsplayer/blob/master/LICENSE) file for more information. See also the [Disclaimer](disclaimer.md) and [Privacy Policy](https://rsplayer.de/privacy.html).