Skip to content

great-horn/amp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Amp

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.

Features

  • 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

Screenshots

Coming soon

How It Works

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.

Quick Start

Docker (recommended)

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 -d

Open http://localhost:5039 in your browser.

Python (direct)

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

Configuration

Environment Variables

Variable Default Description
NAD_HOST 192.168.0.100 IP address of your BluOS amplifier
TZ Europe/Zurich Timezone

Finding Your Amplifier's IP

Your BluOS device IP can be found in:

  • The BluOS app (Settings > Player > Network)
  • Your router's DHCP client list
  • avahi-browse -rt _musc._tcp on Linux

Reverse Proxy

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)

API Endpoints

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

Project Structure

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

Compatibility

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

License

GPL-3.0

About

Web remote control for NAD and BluOS amplifiers

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors