Netbox Plugin for Sonance Amp Input and Output Parameters
This plugin models SonAmp input and output parameters as an extension to an "Other" Interface.
Data Model
Configuration parameters for inputs and outputs are stored in two models: AmpInputSettings and AmpOutputSettings, which are tied to an Interface through a one-to-one foreign key relationship.
For AmpInputSettings, the following fields are managed:
- Level Trim dB: value of -6.0 to 6.0 in 0.5 steps
The Interface Label field is applied to the Input Name parameter. This name is also what is offered when choosing an Output Source below; if an input interface has no label set, its name is used instead.
For AmpOutputSettings, the following fields are managed:
- Output Setup
- Stereo/Mono: "stereo" or "mono"
- DSP Preset: preset name (freeform string)
- Output Group: choice of "A" to "H"
- Bridge Mode: "on" or "off"
- Output Source
- Output Source 1: choice of any other interface on the same device configured with input amp parameters, offered by that interface's label (or name, if it has no label)
- Output Source 2: as above
- Mode Source 2: choice of "mute", "mix", or "off"
- Output Volume
- Output Volume: value between -70 and 12
- Turn On Volume: as above
- Maximum Volume: as above
- Gain Offset: value of -6.0 to 6.0 in 0.5 steps
- Mute: "on" or "off"
The Interface Label field is applied to the Output Name parameter.
User Interface
The plugin ties the custom model editing into the Interface detail form. The editing form allows choosing "No amp parameters", "Input amp parameters", or "Output amp parameters" for each interface. Changing the type will add or remove the respective model entry, and show the correct form for the type.
REST API
Both models are fully exposed through NetBox's REST API, under the plugin's base path:
| Endpoint | Methods | Description |
|---|---|---|
/api/plugins/sonance-amp/input-settings/ |
GET, POST | List / create AmpInputSettings |
/api/plugins/sonance-amp/input-settings/<id>/ |
GET, PUT, PATCH, DELETE | Retrieve / update / delete a single AmpInputSettings |
/api/plugins/sonance-amp/output-settings/ |
GET, POST | List / create AmpOutputSettings |
/api/plugins/sonance-amp/output-settings/<id>/ |
GET, PUT, PATCH, DELETE | Retrieve / update / delete a single AmpOutputSettings |
These follow standard NetBox REST API conventions: authenticate with Authorization: Token <your-api-token> (or an authenticated browser session), page results with ?limit=/?offset=, request compact nested objects with ?brief=1, and free-text search with ?q= (matching interface/device name, and output group for outputs). Both endpoints also support filtering by interface_id; output settings additionally filter on stereo_mono, dsp_preset, output_group, bridge_mode, mode_source_2, and mute.
Related objects -- interface, and for output settings output_source_1/output_source_2 -- are represented as nested objects on read, and accept either a primary key or a set of attributes uniquely identifying the interface on write. Choice fields (stereo_mono, output_group, mode_source_2) are represented as {"value": ..., "label": ...} objects on read, but take just the raw value on write.
Example: fetch the output settings for a specific interface
GET /api/plugins/sonance-amp/output-settings/?interface_id=9
Authorization: Token <your-api-token>
Nested interface objects are trimmed below to the relevant fields; the actual response also includes each interface's device, cable, description, etc.
{
"count": 1,
"results": [
{
"id": 1,
"url": "https://netbox.example.com/api/plugins/sonance-amp/output-settings/1/",
"display": "Output amp parameters for Speaker 1L (Library E L)",
"interface": {
"id": 9,
"url": "https://netbox.example.com/api/dcim/interfaces/9/",
"display": "Speaker 1L (Library E L)",
"name": "Speaker 1L"
},
"stereo_mono": {"value": "stereo", "label": "Stereo"},
"dsp_preset": "Main",
"output_group": {"value": "A", "label": "A"},
"bridge_mode": false,
"output_source_1": {
"id": 1,
"url": "https://netbox.example.com/api/dcim/interfaces/1/",
"display": "In 1L (1 Library)",
"name": "In 1L"
},
"output_source_2": {
"id": 2,
"url": "https://netbox.example.com/api/dcim/interfaces/2/",
"display": "In 1R (1 Library)",
"name": "In 1R"
},
"mode_source_2": {"value": "mix", "label": "Mix"},
"output_volume": 0.0,
"turn_on_volume": -40.0,
"maximum_volume": 6.0,
"gain_offset": 0.0,
"mute": false,
"tags": [],
"custom_fields": {},
"created": "2026-09-07T10:00:00Z",
"last_updated": "2026-09-07T10:00:00Z"
}
]
}
Example: create output settings for an interface, routed from two input interfaces by their primary keys
POST /api/plugins/sonance-amp/output-settings/
Authorization: Token <your-api-token>
Content-Type: application/json
{
"interface": 9,
"stereo_mono": "stereo",
"output_source_1": 1,
"output_source_2": 2,
"mode_source_2": "mix"
}
The full interactive API schema is also available from any running instance at /api/docs/, and every endpoint is browsable directly (with a form for authenticated write access) by visiting its URL in a browser.
Compatibility
| NetBox Version | Plugin Version |
|---|---|
| 4.1 - 4.99 | 0.1.0 |
Installation
Install the plugin into your NetBox virtual environment:
pip install netbox-plugin-sonance-amp
Enable it in your NetBox configuration.py (or plugins.py, if using netbox-docker):
PLUGINS = [
"netbox_plugin_sonance_amp",
]
Then run migrations and restart NetBox:
python manage.py migrate
python manage.py collectstatic --no-input
Development / Testing
A self-contained Docker Compose setup is included for trying the plugin out against a real NetBox instance. It builds a NetBox image with the plugin installed from this repository's source, so no packaging or PyPI publish is required.
docker compose up -d --build
Once the netbox service reports healthy, log in at http://localhost:8000/ with admin / admin. A demo device, sonamp-1, is created automatically with 8 input interfaces (In 1L through In 4R, each already configured with input amp parameters) and 8 output interfaces (Speaker 1L through Speaker 4R, all type "Other") so you can open any interface's detail page and add amp parameters right away -- including picking an Output Source from the labeled inputs.
To stop and remove the stack (including its database volume):
docker compose down -v
Release files for netbox-plugin-sonance-amp 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| netbox_plugin_sonance_amp-1.1.0.tar.gz | 18.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| netbox_plugin_sonance_amp-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.4 kB
Release files / netbox_plugin_sonance_amp-1.1.0.tar.gz
| Download URL | netbox_plugin_sonance_amp-1.1.0.tar.gz |
|---|---|
| Size | 18.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6a1e143c44e5f6879618ca9e10e19cc434a6aabb7b57ed50ed606b8644a4bff2
|
|
BLAKE2b-256 checksum How to use checksums |
50755615bba6f030442f2e0f1b5377b9d91c80c814af52cdc99771327c6ee8af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / netbox_plugin_sonance_amp-1.1.0-py3-none-any.whl
| Download URL | netbox_plugin_sonance_amp-1.1.0-py3-none-any.whl |
|---|---|
| Size | 23.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
696d19c0182fb989761363e0be3d2c2930ae393aa05bdc57c43e222f66b45403
|
|
BLAKE2b-256 checksum How to use checksums |
93a90391d07affa08b2f62a70df3a1896489d2592d69f650374d49c8959c92b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency log