Repository navigation
SSC Paths
Every SSC path that was probed on real hardware, with type, range, unit and whether it can be read and written. Hardware results come from two models only: KH 120 II (firmware 1_7_3) and KH 750 DSP (firmware 2_1_2, reports its product as KH 750), two units of each. KH 80 DSP and KH 150 are not tested on hardware.
Source marks [measured], [in use], [khtool], [manual] are defined on Home. On this page:
| Mark / cell | Meaning |
|---|---|
| [measured] | "write yes / write no" cells are write tests; "read yes" is a get probe. Types, ranges, units, options and const come from the device's own osc/schema and osc/limits answers plus the type of the actual reply |
| [khtool] (source code / issue tracker) | taken from the khtool repository; used only where no own measurement exists |
| yes / no | result of a measurement [measured] |
| write [in use] | written in normal operation by a client, without a separate recorded write test |
| not tested | not tested on hardware |
| – | does not apply to this model (not in that model's own schema) |
Every typed leaf in the device's own schema answers a get: 52 on the KH 120 II, 131 on the KH 750. The 12 untyped osc/* protocol nodes are excluded; see the protocol table. Both units of a model answer identically in status, type and length, every reply type matches the schema type, and no number lies outside the device's own min/max [measured].
The writeable flag in osc/limits is not reliable: all 17 fields measured as not writable (7 on the KH 120 II, 10 on the KH 750) are flagged writeable there [measured]. Only a write test decides.
"write yes" applies with the CONTROL / CONTROL MODE switch on NETWORK; on LOCAL every write to such a field answers 401, while a read-only field keeps answering 405 (see Device-Behaviour) [measured]. Error replies and their codes: SSC-Protocol.
Probed on one unit of each model, with the same answer on both models [measured].
| Path | KH 120 II | KH 750 | Source |
|---|---|---|---|
osc/error |
present in error replies, pair nested in the address tree | same | [measured] |
osc/schema |
answered: one level as a list, containers {}, leaves null
|
answered, same form | [measured] |
osc/limits |
answered: a list with one dict (always type; depending on the leaf desc, units, min, max, inc, option, count, length, const, subscr, writeable) |
answered, same form | [measured] |
osc/version |
"1.1" |
"1.1" |
[measured] |
osc/ping |
null |
null |
[measured] |
osc/xid |
echoed in the same reply line as the answer (numbers and strings), error replies included (401, 404, 405, 406) | same | [measured] |
osc/feature/pattern |
"*?" |
"*?" |
[measured] |
osc/feature/subscription |
true |
true |
[measured] |
osc/state/subscribe |
subscriptions work (see SSC-Protocol) | same | [measured] |
osc/state/auth/access |
read yes (String) | read yes (String) | [measured] |
osc/state/subscribe_reserve |
read yes (Number) | read yes (Number) | [measured] |
osc/feature/timetag, osc/feature/baseaddr, osc/state/prettyprint
|
false each |
false each |
[measured] |
Malformed introspection requests ([null], [{}], osc/limits without a list) answer 454 "parameter address not found"; {} instead of null answers 406; the pair sits under osc/schema or osc/limits [measured].
| Path | Type | Values | KH 120 II | KH 750 | Source |
|---|---|---|---|---|---|
device/identity/product |
String, const |
KH 120 II / KH 750
|
read yes | read yes | [measured] |
device/identity/vendor |
String, const | Georg Neumann GmbH |
read yes | read yes | [measured] |
device/identity/serial |
String, const | – | read yes | read yes | [measured] |
device/identity/version |
String, const |
major_minor_patch, e.g. 1_7_3, 2_1_2
|
read yes | read yes | [measured] |
device/identity/hw_version |
Number (integer), read-only, not const | – | read yes | read yes | [measured] |
| Path | Type | Range / values | Unit | KH 120 II | KH 750 | Source |
|---|---|---|---|---|---|---|
device/standby/enabled |
Boolean | – | – | read yes, write yes | read yes (follows the AUTO STANDBY switch), write no (osc/limits flags it writeable) |
[measured] |
device/standby/auto_standby_time |
Number (integer) | 1–240 | min | read yes, write yes | read yes, write yes | [measured] |
device/standby/level |
Number (integer) | −80 to −55 | dBu | read yes, write yes | read yes, write yes | [measured] |
device/standby/countdown |
Number (integer) | 0–240 | min | read yes | read yes | [measured] |
On the KH 750, auto_standby_time and level were each written to a neighbouring value, read back and restored (2026-10-19) [measured]. With a KH 750 on LOCAL, writes are refused with 401 and auto_standby_time read 19 instead of the 60 set over the network (see Device-Behaviour) [measured].
A speaker in standby does not answer SSC at all (both models) [measured]. See Device-Behaviour.
On the KH 750, audio/out drives its own woofer and audio/out1 / audio/out2 are the output sockets A and B (see EQ) [measured]. On the KH 120 II, audio/out is the speaker itself.
| Path | Type | Range / values | Unit | KH 120 II | KH 750 | Source |
|---|---|---|---|---|---|---|
audio/out/level |
Number (float) | 0–120 | dB SPL | read yes, write [in use] | read yes, write [in use] | [measured], [in use] |
audio/out/delay |
Number (integer) | 0–5760 (KH 120 II), 0–1000 (KH 750) | samples at 1/48 kHz | read yes, write yes | read yes, write yes | [measured] |
audio/out/mute |
Boolean | – | – | read yes, write yes | read yes, write yes | [measured] |
audio/out/phaseinversion |
Boolean | – | – | read yes, write yes | 404 | [measured] |
audio/out/label |
String, const | e.g. SUBWOOFER
|
– | – | read yes | [measured] |
audio/out5/level, audio/out5/mute
|
Number / Boolean | as audio/out
|
– | 404 |
404 on 2_1_2; firmware 1.2.x not tested (see below) |
[measured], [khtool] (source code) |
audio/out1/level, audio/out2/level
|
Number (float) | 0–120 | dB SPL | – | read yes, write [in use] | [measured], [in use] |
audio/out1/delay, audio/out2/delay
|
Number (integer) | 0–1000 | samples at 1/48 kHz | – | read yes, write [in use] | [measured], [in use] |
audio/out1/mute, audio/out2/mute
|
Boolean | – | – | – | read yes, write [in use] | [measured], [in use] |
audio/out1/label, audio/out2/label
|
String, const |
OUT1, OUT2
|
– | – | read yes | [measured] |
audio/out1/loudspeaker, audio/out2/loudspeaker
|
String |
UNKNOWN, NEUMANN KH-80, NEUMANN KH-120, NEUMANN KH-310, NEUMANN KH-420
|
– | – | read yes (UNKNOWN = no loudspeaker assigned) |
[measured] |
audio/in/interface |
String |
ANALOG ONLY, DIGITAL ONLY, DIGITAL DISCARDS ANALOG
|
– | read yes, write yes | read yes, write yes | [measured] |
audio/in/current_input |
String, read-only | e.g. ANALOG INPUT
|
– | read yes | read yes | [measured] |
audio/digital_bypass |
Boolean | – | – | – | read yes | [measured] |
The audio/out/delay and audio/out/mute write tests wrote back the value just read; the device echoed it [measured]. Out of range, the KH 750 clamps a delay set to its limit: 2000 was echoed and read back as 1000, -5 as 0 [measured]. The KH 120 II delay was not tested out of range. Measured acoustically on a KH 120 II with REW's acoustic timing reference: 48, 480 and 960 samples delayed the speaker by 1.000, 10.000 and 19.999 ms, so the unit is exactly samples at 48 kHz [measured]. audio/out/level works in exact dB: 6 and 12 dB lower changed the response by 5.94 and 11.94 dB (KH 120 II), 6 dB by 5.94 dB on the KH 750's woofer [measured].
On firmware 2_1_2 the KH 750 keeps level and mute in audio/out; audio/out5/level and audio/out5/mute answer 404 [measured]. According to khtool's source code, KH 750 firmware 1.2.x (the only version named is 1.2.4) keeps them in audio/out5 ([khtool] (source code), not tested on hardware). A client can tell the layouts apart: audio/out/level answers 404 and audio/out5/level a number on the old layout.
| Path | Type | Range / values | Unit | KH 120 II | KH 750 | Source |
|---|---|---|---|---|---|---|
ui/logo/brightness |
Number (integer) | 0–125 | % | read yes, write [in use]; out of range (200, -10) refused with 406, value unchanged [measured] |
– | [measured], [in use] |
ui/input_gain |
Number (float) | −15 to 0 | dB | read yes, write no | – | [measured] |
ui/input_select |
String |
MONO, AES3 R, AES3 L, ANALOG
|
– | read yes, write no | – | [measured] |
ui/bass_gain |
String of digits |
-6, -4, -2, 0
|
dB | read yes, write no | – | [measured] |
ui/mid_gain |
String of digits |
-6, -4, -2, 0
|
dB | read yes, write no | – | [measured] |
ui/treble_gain |
String of digits |
-2, -1, 0, 1
|
dB | read yes, write no | – | [measured] |
ui/output_level |
String of digits |
94, 100, 108, 114
|
dB SPL at 1 m for 0 dBu | read yes, write no | – | [measured] |
ui/control_mode |
String |
NETWORK, LOCAL
|
– | read yes, write no (405) |
read yes, write no (405) |
[measured] |
ui/bass_management |
String |
DISABLED, ACTIVE
|
– | – | read yes, write no | [measured] |
ui/channel_b_input_mode |
String |
LFE-Mode II (>80Hz -> Output B), LFE-Mode I (<120Hz), Ext.BM LFE (fullrange), STEREO (right)
|
– | – | read yes, write no | [measured] |
ui/subwoofer_input_gain |
Number (float) | −12 to 2 | dB | – | read yes, write no | [measured] |
ui/subwoofer_low_cut |
Number (float) | −12 to 0 | dB | – | read yes, write no | [measured] |
ui/subwoofer_output_level |
String of digits |
94, 100, 108, 114
|
dB SPL at 1 m for 0 dBu | – | read yes, write no | [measured] |
ui/subwoofer_phase |
String of digits |
0, -45, -90, -135
|
degree | – | read yes, write no | [measured] |
ui/subwoofer_phase_inversion |
String of digits |
0, -180
|
degree | – | read yes, write no | [measured] |
ui/auto_standby |
String |
OFF, ON
|
– | – | read yes, write no (405); follows the AUTO STANDBY switch |
[measured] |
Every ui/* field measured as not writable is flagged writeable in the device's own osc/limits, yet a set is refused; where the reply was recorded it was 405: ui/input_gain on the KH 120 II, ui/bass_management and ui/auto_standby on the KH 750, ui/control_mode on both [measured]. The values carry no unit suffix on the wire [measured]. These fields mirror the rear-panel switches.
ui/control_mode: writing its current value NETWORK answered 405 "method not allowed" on both models, so the field is read-only over SSC [measured]. On the KH 750 it reads LOCAL or NETWORK according to the switch position; in LOCAL the device still answers reads but refuses writes with 401 (see Device-Behaviour) [measured]. Both manuals describe a switch on the back (CONTROL on the KH 120 II, CONTROL MODE on the KH 750) that selects Local or Network [manual]. ui/logo/brightness is not in the KH 750's own schema [measured].
| Path | Type | Range / values | Unit | KH 120 II | KH 750 | Source |
|---|---|---|---|---|---|---|
device/name |
String | max. 52 characters | – | read yes, write [in use] | read yes, write [in use] | [measured], [in use] |
device/identification/visual |
Boolean | – | – | read yes, write [in use] | read yes, write [in use] | [measured], [in use] |
device/restore |
String |
"", FACTORY_DEFAULTS
|
– | read returns an empty string | read returns an empty string | [measured] |
device/save_settings |
Boolean | true |
– | 404 | 404 | [measured] |
device/temperature |
Number (integer) | 0–500 | K | – | read yes | [measured] |
-
device/identification/visual: after a set the device keeps flashing for several minutes [measured]. -
device/save_settings: according to a statement by the khtool maintainer in the khtool issue tracker, only the KH 80 needs an explicit save for changes to survive a power cycle ([khtool] (issue tracker); not tested on hardware).
| Path | Type | Range / values | Unit | KH 120 II | KH 750 | Source |
|---|---|---|---|---|---|---|
m/in/level |
Number list, 2 values (input channels A, B) | −160 to 6 | dB | read yes | read yes | [measured] |
m/in/clip |
Boolean list, 2 values | – | – | read yes | read yes | [measured] |
m/out/level |
Number list, 3 values: output A, output B, subwoofer | −160 to 6 | dB | – | read yes | [measured] |
m/out/clip |
Boolean list, 3 values | – | – | – | read yes | [measured] |
warnings |
list with 1 string (the schema says String) |
["NO_WARNING"] when fine |
– | read yes | read yes | [measured] |
The meters refresh about every 200 ms (5 Hz) on both models. The KH 750's output meters sit after the EQ; silence reads about −115 to −122 dB [measured].
Each EQ container has six leaves. Each leaf is an array with one entry per band. What gain and boost do and how one band is written: EQ.
| Leaf | Type | Range / values | Unit | Source |
|---|---|---|---|---|
enabled |
Boolean | – | – | [measured] |
gain |
Number (float) | −99 to 24 | dB | [measured] |
boost |
Number (float) | −99 to 24 | dB | [measured] |
frequency |
Number (float) | 10–24000 | Hz | [measured] |
q |
Number (float) | 0.1–16 | – | [measured] |
type |
String |
PARAMETRIC, LOSHELF, HISHELF, LOWPASS, HIGHPASS, BANDPASS, NOTCH, ALLPASS, HI6DB, LO6DB, INVERSION
|
– | [measured] |
| Model | Containers | Bands | Source |
|---|---|---|---|
| KH 120 II | audio/out/eq2 |
10 | [measured] |
| KH 120 II | audio/out/eq3 |
20 | [measured] |
| KH 750 |
audio/out/eq2, audio/out/eq3, audio/out1/eq2, audio/out1/eq3, audio/out2/eq2, audio/out2/eq3
|
10 each | [measured] |
| KH 750 |
eq1/in1, eq1/in2 under audio/out, audio/out1, audio/out2 (crossover of input A and input B) |
2 each | [measured] |
All six leaves answer in every container on both models, and a one-band write was tested on every container [measured]. A query on the container itself (audio/out/eq2) answers 404 at the container [measured].
Every path below was rejected on all four units (two per model) in the 2026-10-17 probe [measured]. The 404 code itself is recorded where a raw reply or an earlier probe holds it.
| Path | Answers 404 on | In the device's own schema? | Source |
|---|---|---|---|
audio/out/eq1/<leaf>, audio/out1/eq1/<leaf>, audio/out2/eq1/<leaf>
|
KH 750 (2_1_2); KH 120 II has no eq1
|
KH 750: yes, but one level deeper: eq1/in1 and eq1/in2 with 2 bands each, which do answer |
[measured] |
audio/out5/level, audio/out5/mute
|
KH 120 II and KH 750 (the 404 sits at out5, the first missing node) |
no | [measured] |
audio/out/dimm |
KH 120 II and KH 750 | no | [measured] |
device/save_settings |
KH 120 II and KH 750 | no | [measured] |
audio/out/phaseinversion |
KH 750 | no (the KH 120 II has it and answers) | [measured] |
device/identity/hw_revision, device/identity/manufacturer
|
KH 120 II and KH 750 | no | [measured] |
audio/out/eq2/bypass, audio/out/eq2/order
|
KH 120 II and KH 750 | no | [measured] |
No typed leaf the device's own schema lists answers 404 [measured].
Both are in the device's own schema on every output (out1, out2 on the KH 750 only) and were write-tested on 2026-10-20: written, read back and restored, on the KH 120 II (out) and the KH 750 (out, out1, out2), with CONTROL / CONTROL MODE on NETWORK [measured].
| Path | Type | Range / values | KH 120 II | KH 750 | Source |
|---|---|---|---|---|---|
audio/out*/mute_persist |
Boolean | – | read yes, write yes | read yes, write yes | [measured] |
audio/out*/mixer/levels |
list of 2 floats | −100 to 0 dB each | read yes, write yes | read yes, write yes | [measured] |
-
mute_persist: what it does was not measured; the test only toggled it and set it back, with mute itself untouched. -
mixer/levelsis the share of each input in that output: entry 0 is input A, entry 1 input B. With a tone at input B of a KH 750, −6 dB on an entry moved that output's meter by −6.0 dB (outentry 1 → Sub,out1entry 0 → A,out2entry 1 → B), the other meters by at most 0.1 dB [measured]. - Values read: KH 120 II
out[0, -100]; KH 750out[0, 0],out1[0, -100],out2[-100, 0], so by default the output sockets A and B carry input A and B, and the subwoofer both [measured]. - Only whole lists were written; whether
nullkeeps an entry is not tested on hardware.
These leaves are in the device's own schema and answer a get on both units of each model [measured]. Writes are not tested on hardware.
| Path | Model | Measured reply and osc/limits details |
|---|---|---|
device/update/enable, device/update/startover
|
both | Boolean |
device/auth/exclusive, device/system
|
both | String, max. 64 characters, flagged writeable; device/system read an empty string on all four units (2026-10-23) |
device/time, device/timeprecision
|
both | Number (integer), const; both read 0 on both models, also 2 s later |
device/network/ether/macs |
both | a single String (not a list), const; carries the MAC address – never publish its value |
See also: SSC-Protocol · EQ · Device-Behaviour · Limits-and-Untested
Neumann KH SSC Reference