Object Management

Requires: the read endpoints (/api/objects/list, /api/objects/getproperties, /api/getproperty) need read (viewer+); the mutating endpoints (/api/setproperty, /api/invokecommand) need control (operator+). See each endpoint's note.

GET /api/objects/list

Requires: read (viewer+)

Lists all named objects (inputs, operators, targets, etc.) in the project.

Parameters:

Parameter Required Description
type No Filter by object type name (e.g. MediaFileInput, SrtTarget). Also matches base type names.

Response: 200 OK — JSON array:

[
  { "Id": "guid", "Name": "Media File 1", "Type": "MediaFileInput" },
  { "Id": "guid", "Name": "SRT Output", "Type": "SrtTarget" }
]

GET /api/objects/getproperties

Requires: read (viewer+)

Returns the properties of a named object as a flat JSON object: {"PropName": value, ...}. Includes every public-getter property that is not marked [InternalProperty] (so public get / private set runtime status fields and computed read-only properties are part of the response). Property values that reference a NamedModel-derived object are rendered as a compact identity stub { "Id": ..., "Name": ..., "Type": ... } to keep the response bounded.

Meta fields (prefixed with _ to avoid collision with real property names):

  • _lockedProperties — array of property names currently locked at runtime via LockProperty(). Distinct from the static [EditorLocked] attribute reported by /api/types/schema (which is fixed per type); runtime locks change over the project's lifetime. Clients should OR this list with isEditorLocked from the schema when deciding whether to enable editing for a property. Always emitted (empty array when nothing's locked).

Parameters:

Parameter Required Description
targetname Yes Name of the object

Response:

  • 200 OK — JSON object with all public properties
  • 400 Bad Request — Missing parameter, multiple matches, or object not found

GET /api/setproperty

Requires: control (operator+)

Sets a property value on a component.

Selecting the target object (exactly one of these is required):

Parameter Description
target Object GUID
targetname Object name (must be unique)
targettype Object type name (must be unique)

Additional parameters:

Parameter Required Description
property Yes Property name (case-sensitive)
value Yes New property value

Example:

/api/setproperty?target=00000000-0000-0000-0000-000000000001&property=Volume&value=0.8
/api/setproperty?targetname=Media File 1&property=Volume&value=0.5

Collection properties: most properties take a scalar value (number, string, enum name, true/false). A few hold a collection that has no scalar text form — currently PreFaderSendConfigurations (an input's pre-fader audio sends). For these, pass value as the JSON array returned by /api/getproperty?...&format=json (URL-encode it). Each element carries Active, TargetAudioStripId, InputAudioSendType (0 = pre-fader, 1 = post-fader) and the per-channel routing TargetCh01..TargetCh08 (0 = none, 1..8 = target channel). The four send slots are fixed per input; to clear the sends, send four slots with "Active":false rather than an empty array.

/api/setproperty?target={inputId}&property=PreFaderSendConfigurations&value=[{"Active":true,"TargetAudioStripId":"b2e5afc4-d29f-4f72-b87b-c42045e73054","InputAudioSendType":0,"TargetCh01":1,"TargetCh02":2,"TargetCh03":0,"TargetCh04":0,"TargetCh05":0,"TargetCh06":0,"TargetCh07":0,"TargetCh08":0},{"Active":false,"TargetAudioStripId":"00000000-0000-0000-0000-000000000000","InputAudioSendType":0,"TargetCh01":0,"TargetCh02":0,"TargetCh03":0,"TargetCh04":0,"TargetCh05":0,"TargetCh06":0,"TargetCh07":0,"TargetCh08":0},...]

Dropdown properties: a property Composer Desktop shows as a runtime-populated dropdown (type stringCollectionEnum, e.g. an input's ducking DuckingSidechainSource) takes the entry to select as value — for the sidechain source, the source input's name without any file extension, or None to clear it. getproperty returns selected:opt1/opt2/opt3 (the selection, then every choice), and that text is accepted back unchanged for names without a : of their own. An entry that is one of the property's choices is applied as a selection, exactly as a pick in Composer Desktop is. For the sidechain source a value that names no input is rejected with 400 and leaves the property as it was, and a name shared by two inputs selects the one already chosen, otherwise the first — pass the GUID to be unambiguous. Other dropdown properties currently accept an unknown entry and replace their list with it.

/api/setproperty?targetname=Music bed&property=DuckingSidechainSource&value=Presenter mic
/api/setproperty?targetname=Music bed&property=DuckingSidechainSource&value=None
/api/setproperty?targetname=Music bed&property=DuckingSidechainSource&value=3f2a9c1e-8b4d-4e6f-9a0b-1c2d3e4f5a6b

DuckingSidechainSource also accepts the source input's GUID (third example; all zeros clears it) — the unambiguous handle when two inputs share a name, and the same value the property is exposed as under DuckingSidechainSourceId, which the project file stores. Over the WebSocket audio-mixer stream the source travels as DuckingSidechainSource with that GUID as its value, pushed on every change whatever made it.

Layer-reference properties: some operators expose a property that references another layer (type LayerRenderInfo) — for example Light Wrap's BackgroundSourceLayer. Pass value as the referenced layer's GUID (the id returned by /api/entity/create when the layer was created, or listed by /api/scene/layers); the referenced layer must be in the same scene as the target operator. Pass an empty/zero GUID to clear the reference. getproperty returns the referenced layer's GUID, so a value round-trips.

/api/setproperty?targetname=Op0&property=BackgroundSourceLayer&value=074be2ac-ae3c-4e6c-bfb3-19bb97ed16f9

Response:

  • 200 OK — Set property {name} on {type} with id {id} to: {value} successfully
  • 400 Bad Request — Missing/invalid parameters, target not found, property not found, or conversion error

GET /api/getproperty

Requires: read (viewer+)

Gets a property value from a component.

Selecting the target object (exactly one of these is required):

Parameter Description
target Object GUID
targetname Object name (must be unique)
targettype Object type name (must be unique)

Additional parameters:

Parameter Required Description
property Yes Property name (case-sensitive)
format No Set to json to receive a structured JSON response

Structured properties round-trip. A property whose type persists through a type converter — such as an operator's model list — is reported as the same JSON /api/setproperty accepts, so a value read here can be written back verbatim. Numbers, strings and enums are unaffected and keep their existing formatting.

Example:

/api/getproperty?targetname=Media File 1&property=Volume
/api/getproperty?targetname=Media File 1&property=Volume&format=json

Response (plain):

  • 200 OK — Get property {name} for {type} with id {id} returned: {value}

Response (format=json):

{
  "property": "Volume",
  "value": "0.8",
  "objectId": "guid",
  "objectType": "MediaFileInput"
}

The value field is always a string. For dictionary-type properties (e.g. VideoTrackInfo, AudioTrackInfo) and collection-type properties (e.g. PreFaderSendConfigurations), the value is a JSON-serialized string:

{
  "property": "VideoTrackInfo",
  "value": "{\"VideoCodecId\":99,\"VideoWidth\":1920,\"VideoHeight\":1080,...}",
  "objectId": "guid",
  "objectType": "MediaFileInput"
}
{
  "property": "PreFaderSendConfigurations",
  "value": "[{\"Active\":true,\"TargetAudioStripId\":\"b2e5afc4-...\",\"InputAudioSendType\":0,\"TargetCh01\":1,\"TargetCh02\":2,\"TargetCh03\":0,\"TargetCh04\":0,\"TargetCh05\":0,\"TargetCh06\":0,\"TargetCh07\":0,\"TargetCh08\":0},...]",
  "objectId": "guid",
  "objectType": "TestSignalGeneratorInput"
}

This is the exact shape /api/setproperty accepts back for the same property, so a get → edit → set round-trip is lossless.


GET /api/invokecommand

Requires: control (operator+)

Invokes a command on a component.

Selecting the target object (exactly one of these is required):

Parameter Description
target Object GUID
targetname Object name (must be unique)
targettype Object type name (must be unique)

Additional parameters:

Parameter Required Description
command Yes Command property name (case-sensitive), e.g. PlayCommand, StopCommand

Example:

/api/invokecommand?targetname=Media File 1&command=PlayCommand

Response:

  • 200 OK — Invoke {command} on target with id {id} invoked successfully
  • 400 Bad Request — Missing parameters, target/command not found, command disabled, or execution error