Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

minidsp-dash

A phone-friendly web remote for miniDSP devices — presets, master gain, mute, source switching, and live input/output meters — in a single dependency-free Python file on top of the minidsp CLI (minidsp-rs).

miniDSP's own config tools are desktop apps; this gives you the day-to-day controls on your phone. Add it to your home screen and it behaves like an app (dark UI, safe-area aware, auto-reloads itself when the server is updated).

  • Presets — 4 buttons, labels you choose
  • Master gain — big slider with live dB readout (cut-only, floor configurable)
  • Mute — one thumb-sized toggle
  • Source — analog / toslink / usb (configurable)
  • Meters — live input/output levels at 8 Hz with proper ballistics (instant attack, ~1.5 s decay, peak-hold markers) when minidspd is running; graceful ~1.5 s fallback via the CLI when it isn't
  • Zero dependencies — Python 3.8+ stdlib; the only requirement is a working minidsp CLI

Setup

  1. Install minidsp-rs and check minidsp prints your device's status.
  2. Run the dashboard:
python3 server.py
# open http://<host>:5390 from your phone

Configuration is all environment variables:

PRESET_NAMES="Flat,EDM,Movies,Late Night" \
SOURCES="analog,toslink,usb" \
GAIN_MIN=-60 \
DASH_TOKEN=some-secret \
DASH_PORT=5380 \
python3 server.py
Variable Default Meaning
MINIDSP_BIN minidsp (PATH) Path to the CLI; point it at a wrapper script to use minidsp --url against a remote minidspd
DSPD_URL http://127.0.0.1:5380/devices/0 minidspd's HTTP API — the fast meter path (~7 ms/poll vs a CLI spawn). Meters run at 8 Hz through it and fall back to CLI status automatically when unreachable
DASH_PORT 5390 (5380 is minidspd's own HTTP API — avoid it) Listen port
DASH_TOKEN (off) If set, requests need ?t=<token> (open the page as http://host:5390/?t=<token>)
PRESET_NAMES Preset 1..4 Comma-separated labels for the preset buttons
SOURCES analog,toslink,usb Which sources to offer
GAIN_MIN -60 Bottom of the gain slider (dB)

Auth note: the token gates control of your DSP but travels in plain HTTP on your LAN. Fine for a home network; don't port-forward it to the internet.

Run at login (macOS)

Save as ~/Library/LaunchAgents/com.minidsp.dash.plist, then launchctl load it:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
  <key>Label</key><string>com.minidsp.dash</string>
  <key>ProgramArguments</key><array>
    <string>/usr/bin/python3</string>
    <string>/PATH/TO/minidsp-dash/server.py</string>
  </array>
  <key>EnvironmentVariables</key><dict>
    <key>PRESET_NAMES</key><string>Flat,EDM,Movies,Late Night</string>
  </dict>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
</dict></plist>

On Linux, an equivalent systemd user unit works the same way.

How it works

The server shells out to the minidsp CLI for everything — status is parsed from the CLI's MasterStatus { ... } line plus the input/output level lines, writes are minidsp config N, minidsp gain -- -X.X, minidsp mute on|off, minidsp source <name>. No USB/HID code here, so anything minidsp-rs supports (2x4HD, Flex, SHD, DDRC-24, remote minidspd, ...) should work; presets/gain/mute/source are the common denominator.

The page polls /api/status every ~1.5 s; controls are optimistic (they render instantly and reconcile against device truth). Meters have their own fast path: /api/meters proxies minidspd's HTTP API (DSPD_URL) at 8 Hz, and the client applies meter ballistics — instant attack, ~1.5 s full-scale decay, a peak-hold marker that holds 1.5 s then falls. When minidspd isn't reachable the bars quietly revert to the ~1.5 s CLI numbers. APP_VERSION is stamped into the page and the status JSON — a stale cached client notices the mismatch and reloads itself once, which matters for iOS home-screen apps that cache aggressively.

Troubleshooting

  • Meters sluggish? You're on the CLI fallback — check minidspd is running and DSPD_URL points at it.
  • Device healthy but silent, inputs stuck at noise floor (~−86 dB)? A USB DAC feeding your analog inputs can wedge in a way that's invisible to the OS (streaming happily, nothing coming out). Two resets that fix it in practice: toggle the DSP's source away and back (minidsp source usb && sleep 1 && minidsp source analog), and/or switch your computer's output device away and back to rebuild the USB stream. Check the DAC's front panel before blaming cables.
  • Meters legitimately read the noise floor when nothing is playing — silence at the inputs is not a fault. Verify against a playing source before concluding anything is broken.

Related projects

Development

python3 -m unittest discover -s tests -v

The tests cover status parsing against canned CLI output; no hardware needed.

License

MIT.

About

Phone-friendly web remote for miniDSP devices — presets, master gain, mute, sources, live meters. Single-file Python on minidsp-rs.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages