| --- |
| title: Spotify Dancer |
| emoji: π΅ |
| colorFrom: green |
| colorTo: gray |
| sdk: static |
| pinned: false |
| license: mit |
| short_description: Reachy Mini dances to your Spotify music! |
| tags: |
| - reachy_mini |
| - reachy_mini_python_app |
| - robot |
| - spotify |
| - dance |
| - music |
| --- |
| |
| # Spotify Dancer for Reachy Mini |
|
|
| Make your Reachy Mini dance to Spotify music! This app analyzes audio in real-time and generates expressive robot movements synchronized to the beat. |
|
|
| **Based on [DJ Reactor](https://huggingface.co/spaces/RyeCatcher/dj_reactor)** by RyeCatcher, enhanced with Spotify Connect integration and ALSA loopback for best audio detection quality. |
|
|
| ## Features |
|
|
| - **Spotify Connect** - Reachy Mini appears as a speaker in your Spotify app |
| - **Real-time Beat Detection** - BPM estimation and beat tracking |
| - **Dance Styles** - Energetic, Groovy, Chill, and Hip-Hop modes |
| - **Stream Analysis** - Direct audio capture via ALSA loopback (best quality) |
| - **Web Control Panel** - Live visualizer with adjustable settings |
| - **Auto-Configuration** - Automatically detects and fixes ALSA audio settings |
|
|
| ## Requirements |
|
|
| - **Reachy Mini WiFi version** (wireless connectivity required for Spotify Connect) |
| - Python 3.10+ |
| - Spotify account (Free or Premium) |
|
|
| ## Installation |
|
|
| ### From Reachy Mini Dashboard |
|
|
| 1. Go to `http://reachy-mini.local:8000` |
| 2. Navigate to Apps |
| 3. Search for "Spotify Dancer" |
| 4. Click Install |
|
|
| ### Manual Installation |
|
|
| ```bash |
| pip install spotify_dancer |
| ``` |
|
|
| ## Setup |
|
|
| ### 1. Install Spotify Connect (raspotify) |
|
|
| ```bash |
| curl -sL https://dtcooper.github.io/raspotify/install.sh | sh |
| |
| # Configure |
| sudo nano /etc/raspotify/conf |
| # Set: LIBRESPOT_NAME="Reachy Mini" |
| # Set: LIBRESPOT_DEVICE=spotify |
| ``` |
|
|
| ### 2. Enable ALSA Loopback (Recommended) |
|
|
| For best audio detection, use ALSA loopback: |
|
|
| ```bash |
| sudo modprobe snd-aloop pcm_substreams=1 |
| echo 'snd-aloop' | sudo tee /etc/modules-load.d/loopback.conf |
| ``` |
|
|
| See the [full ALSA setup guide](docs/spotify_setup.md) for multi-output configuration. |
|
|
| ### 3. Fix Service Permissions |
|
|
| Create `/etc/systemd/system/raspotify.service.d/override.conf`: |
|
|
| ```ini |
| [Service] |
| PrivateUsers=false |
| PrivateTmp=false |
| ProtectSystem=false |
| RemoveIPC=false |
| User=pollen |
| Group=audio |
| ``` |
|
|
| Then: `sudo systemctl daemon-reload && sudo systemctl restart raspotify` |
|
|
| ## Usage |
|
|
| 1. Start the app from Reachy Mini dashboard |
| 2. Open control panel: `http://reachy-mini.local:7860` |
| 3. Select **loopback_in** as Audio Input |
| 4. Choose a dance style |
| 5. Click **Start Dancing** |
| 6. Play music on Spotify β Select "Reachy Mini" as speaker |
| |
| ## Dance Styles |
| |
| | Style | Best For | Movement | |
| |-------|----------|----------| |
| | Energetic | Rock, EDM | Strong head bobs, wide sway | |
| | Groovy | Pop, Funk | Classic nods, balanced movement | |
| | Chill | Jazz, Lo-Fi | Smooth tilts, gentle sway | |
| | Hip-Hop | Rap, R&B | Rhythmic nods, bass-driven | |
| |
| ## Audio Input Options |
| |
| | Device | Quality | Notes | |
| |--------|---------|-------| |
| | `loopback_in` | β Best | Direct stream capture | |
| | `reachymini_audio_src` | Poor | Microphone with echo cancellation issues | |
| |
| ## Architecture |
| |
| ``` |
| Spotify App β raspotify β ALSA multi-output |
| ββββ Speaker |
| ββββ Loopback β Spotify Dancer β Robot |
| ``` |
| |
| ## Troubleshooting |
| |
| - **No loopback_in device**: Run `sudo modprobe snd-aloop` and restart the app |
| - **Poor detection**: Use loopback_in, increase sensitivity, turn up volume |
| - **Tracks skip**: Check ALSA config and IPC permissions (see setup guide) |
| - **ALSA errors after reboot**: The app auto-detects and fixes card numbers on startup. If issues persist, see the [setup guide](docs/spotify_setup.md) |
| |
| ## License |
| |
| MIT License |
| |
| ## Credits |
| |
| - **DJ Reactor** by [RyeCatcher](https://huggingface.co/spaces/RyeCatcher/dj_reactor) - Original dance movement system |
| - **Spotify Connect** via [raspotify](https://github.com/dtcooper/raspotify) (librespot wrapper) |
| - Built for the Reachy Mini community |
| |