A modern web remote control for NAD amplifiers (M10, M50, C700, T778) and any BluOS-powered device.
Built with Flask + Vue.js 3, it proxies the BluOS XML API into a clean JSON interface with a responsive PWA frontend.
- Now Playing with album artwork, transport controls (play/pause/skip/back), shuffle, repeat, seek bar, and dynamic accent color extracted from artwork
- Qobuz integration: browse playlists, favourite albums, search, play tracks
- Radio: TuneIn search + Radio Paradise channels
- Physical inputs: switch between Bluetooth, HDMI ARC, Optical, Coaxial, Phono, Line
- Settings: system info, sleep timer, audio settings (bass, treble, balance, EQ, subwoofer), player settings (LED, LCD, standby)
- Queue management: view, reorder, jump to track
- Volume control with mute toggle
- Keyboard shortcuts: Space (play/pause), arrows (skip/volume), M (mute)
- Media Session API: lock screen controls on mobile and desktop
- PWA: installable, offline-capable with service worker
- 6 languages: French, English, German, Italian, Spanish, Portuguese (auto-detected from browser)
- 5 themes: Dark, Light, OLED, Neon, Ember
Coming soon
Browser <--> Flask proxy <--> BluOS API (port 11000/11001)
(JSON) (XML)
Flask translates BluOS XML responses into JSON. The frontend polls /api/status every 2 seconds for real-time updates.
git clone https://github.com/great-horn/amp.git
cd amp
cp .env.example .env
# Edit .env with your amplifier's IP address
docker compose up -dOpen http://localhost:5039 in your browser.
git clone https://github.com/great-horn/amp.git
cd amp
pip install -r requirements.txt
NAD_HOST=192.168.0.100 gunicorn --bind 0.0.0.0:5039 --workers 2 app:app| Variable | Default | Description |
|---|---|---|
NAD_HOST |
192.168.0.100 |
IP address of your BluOS amplifier |
TZ |
Europe/Zurich |
Timezone |
Your BluOS device IP can be found in:
- The BluOS app (Settings > Player > Network)
- Your router's DHCP client list
avahi-browse -rt _musc._tcpon Linux
If running behind a reverse proxy (Traefik, Nginx, Caddy), the CSP headers should allow:
img-src 'self' data: blob: http: https:(for artwork from BluOS and streaming services)script-src 'self' 'unsafe-inline' 'unsafe-eval' https://unpkg.com(for Vue.js CDN)
| Route | Method | Description |
|---|---|---|
/api/status |
GET | Current playback status |
/api/play |
POST | Resume playback |
/api/pause |
POST | Pause playback |
/api/skip |
POST | Next track |
/api/back |
POST | Previous track |
/api/seek/<seconds> |
POST | Seek to position |
/api/shuffle |
POST | Toggle shuffle |
/api/repeat |
POST | Cycle repeat mode |
/api/volume/set/<level> |
POST | Set volume (0-100) |
/api/volume/mute |
POST | Toggle mute |
/api/queue |
GET | Get playback queue |
/api/inputs |
GET | List physical inputs |
/api/qobuz/playlists |
GET | Qobuz playlists |
/api/qobuz/albums |
GET | Qobuz favourite albums |
/api/qobuz/search?q= |
GET | Search Qobuz |
/api/radio/paradise |
GET | Radio Paradise channels |
/api/radio/tunein/search?q= |
GET | Search TuneIn |
/api/system/info |
GET | Amplifier system info |
/api/audio/settings |
GET | Audio settings (bass, treble...) |
/api/player/settings |
GET | Player settings (LED, LCD...) |
/api/sleep |
GET | Sleep timer status |
/api/services |
GET | Available streaming services |
amp/
├── app.py # Flask API (BluOS XML → JSON proxy)
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── shared/ # Shared CSS/JS (themes, layout, components)
│ ├── css/
│ │ ├── tailwind.css
│ │ ├── themes.css # 5 themes
│ │ ├── layout.css
│ │ ├── components.css
│ │ └── animations.css
│ └── js/
│ ├── common.js # Theme management
│ ├── animations.js # Entry animations, toast override
│ └── BaseSidebar.js # Sidebar Vue component
└── static/
├── index.html # SPA shell
├── manifest.json # PWA manifest
├── sw.js # Service worker
├── icons/
└── js/
├── app.js # Vue.js 3 app
├── i18n.js # 6 languages
└── components/
├── Sidebar.js
├── NowPlaying.js
├── QobuzView.js
├── RadioView.js
└── SettingsView.js
Tested with:
- NAD M10 V3 (BluOS 4.x)
Should work with any BluOS-powered device:
- NAD M10, M50, C700, C658, T778
- Bluesound Node, Powernode, Pulse
- Dali Sound Hub
- Any device running BluOS firmware