Skip to content

About

Unofficial Dante Controller alternative for iOS/iPadOS, Linux, macOS, Windows, and the web. Discover, route, configure, meter, and monitor Dante audio devices with a native iPhone/iPad app, CLI, browser interface, daemon, and API.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

NetAudio — unofficial Dante Controller alternative

NetAudio is an unofficial Dante Controller alternative for discovering, routing, configuring, and monitoring Dante network audio devices. The project provides open-source command-line tools, a web interface, a persistent daemon, and a protocol library for Linux, macOS, and Windows.

NetAudio is a native Dante Controller alternative for iOS and iPadOS, available now for iPhone and iPad through TestFlight. The app communicates directly with Dante devices for live discovery, audio subscription routing, device and channel configuration, live device metering, clock and status monitoring, and diagnostics. Local direct-device control runs on the phone or tablet without a separate computer, remote desktop session, or NetAudio daemon. The app also supports Dante Domain Manager (DDM) networks and connections to a NetAudio daemon.

Website and iOS app · Install the CLI and web interface · Quick start

Interfaces and architecture

NetAudio serves both interactive device control and software automation. A shared Rust protocol core implements Dante packet encoding and parsing for the Python application and native iOS client.

Interface Use
Native iOS/iPadOS app Discover, route, configure, and monitor devices from an iPhone or iPad using direct control or a NetAudio daemon. Available as a TestFlight beta.
Command-line interface (CLI) Inspect devices, manage subscriptions and settings, apply presets, and integrate with scripts using structured JSON output. Supports direct device access and daemon integration.
Web interface Control and monitor the network in a browser, served by the NetAudio daemon.
Background daemon Maintain network discovery, device inventory, monitoring, event history, and control services across client sessions.
HTTP API and live events Integrate network state and device control into other applications, with server-sent events (SSE) for live updates.
Protocol library Use the Rust core directly or through its C interface; see the C and Swift examples.

The CLI and daemon run on Linux, macOS, and Windows. Automated checks cover all three platforms, including native libraries and installed Python packages.

Capabilities

  • Discovery and routing: discover Dante devices and their receive/transmit channels, inspect subscription status, and add or remove audio subscriptions.
  • Device configuration: device and channel names, sample rate, encoding, latency, analog gain, device locking, preferred clock leader, AES67 settings, and primary/secondary network configuration on supported devices.
  • Audio flows: inspect receive and transmit flows, plan and manage supported native Dante multicast transmit flows, discover advertised AES67 audio streams, and subscribe compatible receivers to them.
  • Device metering and monitoring: live signal levels, clock status, interface statistics and errors, device diagnostics, monitoring issues, and event history through the CLI, API, and browser.
  • Dante Domain Manager: discover managed inventory and control supported settings on DDM-enrolled devices using configured credentials and operation permissions.
  • Presets and automation: save and apply device/routing presets, map device identities, inspect application results, and consume structured output from scripts and other control systems.

Device capabilities and the selected control transport determine which operations are available.

Installation

iOS and iPadOS (iPhone and iPad)

Install the native NetAudio iOS/iPadOS app through TestFlight. See netaudio.app for app information and support.

Linux, macOS, and Windows

Install the CLI, daemon, and web interface from PyPI:

uv tool install netaudio

Or with pip:

pip install netaudio

Arch Linux

Install the netaudio AUR package.

From source

A source checkout requires Python 3.9 or newer, uv, and a Rust toolchain:

uv sync
uv run netaudio --help

Quick start

Start the daemon and open the web interface:

netaudio daemon start
netaudio daemon web --open

Use netaudio --help for the command list and netaudio COMMAND --help for individual commands. From a source checkout, use uv run netaudio.

For example, inspect a device by name and request JSON output:

netaudio -n avio-usb-1 device show
netaudio --json -n avio-usb-1 device show

Use your device's name in place of avio-usb-1. Put device filters before the command: -n matches names (including quoted patterns such as 'avio-*'), -s matches server names, -m matches MAC addresses, and --host selects an IP address.

Channels and routing

Channels use tx:NUMBER or rx:NUMBER; a channel name can replace the number. For example, rename input 1 and connect output 1 of stagebox to it:

netaudio -n avio-usb-1 channel name rx:1 vocal-in
netaudio subscription add --tx tx:1@stagebox --rx rx:1@avio-usb-1

Remove that subscription with:

netaudio subscription remove --rx rx:1@avio-usb-1

Presets

Save selected devices, then preview the saved settings before applying them:

netaudio -n 'avio-*' preset save stage
netaudio preset show stage
netaudio preset load stage

preset show reads current device state but makes no changes. Presets are XML files in presets/ beside the configuration file; use preset list to see them, or supply an explicit .xml path. Saving over an existing file requires --force.

Configuration and troubleshooting

netaudio config path shows which configuration file is used. For a DDM network, netaudio ddm login --default guides you through connecting to a server and choosing a domain.

Use netaudio daemon status to check the daemon and netaudio daemon logs -f to follow its logs. Logs default to warnings and errors. To run in the foreground with detailed logging, stop the background daemon first:

netaudio daemon stop
netaudio --log-level DEBUG daemon run

The browser's Events page keeps recent events and issues in memory. Restarting the daemon clears them. Use netaudio events export --file events.json to save the current event history before restarting.

Development

The project develops an independent implementation and understanding of Dante control protocols. Protocol work is recorded in reviewed source, focused tests, and evidence records identifying observed behavior and remaining unknowns. Research tooling is separate from normal application use.

Run the offline Python and Rust tests:

uv run pytest -q
cargo test --manifest-path packages/netaudio-core/Cargo.toml

Run Python lint checks or the broader source-quality checks:

uv run ruff check .
make quality

The CI workflow also runs browser tests and checks package installation across supported platforms.

Project background

NetAudio is an independent interoperability project and is not affiliated with or endorsed by Audinate.

The project grew out of packet capture replay and modification experiments first written up in a Gearspace discussion.

About

Unofficial Dante Controller alternative for iOS/iPadOS, Linux, macOS, Windows, and the web. Discover, route, configure, meter, and monitor Dante audio devices with a native iPhone/iPad app, CLI, browser interface, daemon, and API.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages