@stinkycomputing/sesame-api-client 1.4.1-beta.1 → 1.4.1-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/index.browser.mjs +1376 -1274
- package/dist/index.browser.mjs.map +2 -2
- package/dist/index.cjs +1376 -1274
- package/dist/index.cjs.map +2 -2
- package/dist/index.mjs +1376 -1274
- package/dist/index.mjs.map +2 -2
- package/dist/jobs-api.d.ts +5 -6
- package/dist/jobs-api.d.ts.map +1 -1
- package/dist/proto/api.d.ts +754 -1020
- package/dist/proto/api.js +3127 -3405
- package/dist/rpc-client.d.ts +7 -0
- package/dist/rpc-client.d.ts.map +1 -1
- package/dist/sesame-api-client.d.ts.map +1 -1
- package/dist/sesame-connection.d.ts.map +1 -1
- package/dist/sesame-wire-protocol.d.ts +1 -1
- package/dist/sesame-wire-protocol.d.ts.map +1 -1
- package/docs/protocol-reference.md +1218 -0
- package/package.json +2 -1
|
@@ -0,0 +1,1218 @@
|
|
|
1
|
+
# Sesame Protocol Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for all protobuf types available through `@stinkycomputing/sesame-api-client`.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import { sesame } from '@stinkycomputing/sesame-api-client';
|
|
7
|
+
// All types under sesame.v1.*
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Table of Contents
|
|
13
|
+
|
|
14
|
+
- [Wire Protocol](#wire-protocol) — `sesame.v1.wire`
|
|
15
|
+
- [Common Types](#common-types) — `sesame.v1.common`
|
|
16
|
+
- [RPC Envelope](#rpc-envelope) — `sesame.v1.rpc`
|
|
17
|
+
- [Commands](#commands) — `sesame.v1.commands`
|
|
18
|
+
- [Sources](#sources) — `sesame.v1.sources`
|
|
19
|
+
- [Outputs](#outputs) — `sesame.v1.outputs`
|
|
20
|
+
- [Compositor & Scene Graph](#compositor--scene-graph) — `sesame.v1.compositor`
|
|
21
|
+
- [Audio Mixer](#audio-mixer) — `sesame.v1.audio`
|
|
22
|
+
- [Recorder](#recorder) — `sesame.v1.recorder`
|
|
23
|
+
- [Jobs](#jobs) — `sesame.v1.jobs`
|
|
24
|
+
- [Status & Events](#status--events) — `sesame.v1.status`
|
|
25
|
+
- [Statistics](#statistics) — `sesame.v1.status` (statistics)
|
|
26
|
+
- [Service Methods](#service-methods)
|
|
27
|
+
- [Event Subscriptions](#event-subscriptions)
|
|
28
|
+
- [Scene Graph Properties](#scene-graph-properties)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Wire Protocol
|
|
33
|
+
|
|
34
|
+
`sesame.v1.wire`
|
|
35
|
+
|
|
36
|
+
Every WebSocket message is framed as:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
[4-byte LE header_size][FrameHeader protobuf][payload bytes]
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### FrameType
|
|
43
|
+
|
|
44
|
+
| Value | Name | Description |
|
|
45
|
+
|-------|------|-------------|
|
|
46
|
+
| 0 | `FRAME_TYPE_UNSPECIFIED` | Invalid |
|
|
47
|
+
| 1 | `FRAME_TYPE_RPC` | Request/response RPC and events |
|
|
48
|
+
| 2 | `FRAME_TYPE_VIDEO` | Live video frames |
|
|
49
|
+
| 3 | `FRAME_TYPE_AUDIO` | Live audio frames |
|
|
50
|
+
| 4 | `FRAME_TYPE_MUXED` | Muxed audio+video data |
|
|
51
|
+
| 5 | `FRAME_TYPE_DECODER_DATA` | Codec init data (SPS/PPS) |
|
|
52
|
+
| 6 | `FRAME_TYPE_DATA` | Live metadata streams |
|
|
53
|
+
|
|
54
|
+
### CodecType
|
|
55
|
+
|
|
56
|
+
| Value | Name |
|
|
57
|
+
|-------|------|
|
|
58
|
+
| 0 | `CODEC_TYPE_UNSPECIFIED` |
|
|
59
|
+
| 1 | `CODEC_TYPE_VIDEO_VP8` |
|
|
60
|
+
| 2 | `CODEC_TYPE_VIDEO_VP9` |
|
|
61
|
+
| 3 | `CODEC_TYPE_VIDEO_AVC` |
|
|
62
|
+
| 4 | `CODEC_TYPE_VIDEO_HEVC` |
|
|
63
|
+
| 5 | `CODEC_TYPE_VIDEO_AV1` |
|
|
64
|
+
| 64 | `CODEC_TYPE_AUDIO_OPUS` |
|
|
65
|
+
| 65 | `CODEC_TYPE_AUDIO_AAC` |
|
|
66
|
+
| 66 | `CODEC_TYPE_AUDIO_PCM` |
|
|
67
|
+
|
|
68
|
+
### MediaCodecData
|
|
69
|
+
|
|
70
|
+
| Field | Type | Description |
|
|
71
|
+
|-------|------|-------------|
|
|
72
|
+
| `codec_type` | CodecType | Codec identifier |
|
|
73
|
+
| `sample_rate` | uint32 | Audio sample rate |
|
|
74
|
+
| `timebase_num` | uint32 | Timebase numerator |
|
|
75
|
+
| `timebase_den` | uint32 | Timebase denominator |
|
|
76
|
+
| `codec_profile` | uint32 | Codec profile |
|
|
77
|
+
| `codec_level` | uint32 | Codec level |
|
|
78
|
+
| `width` | uint32 | Video width |
|
|
79
|
+
| `height` | uint32 | Video height |
|
|
80
|
+
| `channels` | uint32 | Audio channels |
|
|
81
|
+
| `bit_depth` | uint32 | Bit depth |
|
|
82
|
+
|
|
83
|
+
### FrameHeader
|
|
84
|
+
|
|
85
|
+
| Field | Type | Description |
|
|
86
|
+
|-------|------|-------------|
|
|
87
|
+
| `type` | FrameType | Frame type |
|
|
88
|
+
| `pts` | uint64 | Presentation timestamp |
|
|
89
|
+
| `id` | uint64 | Frame ID |
|
|
90
|
+
| `keyframe` | bool | Is keyframe |
|
|
91
|
+
| `codec_data` | MediaCodecData | Codec parameters |
|
|
92
|
+
| `routing_metadata` | string | Source routing (inbound only) |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Common Types
|
|
97
|
+
|
|
98
|
+
`sesame.v1.common`
|
|
99
|
+
|
|
100
|
+
### ConnectionState
|
|
101
|
+
|
|
102
|
+
| Value | Name | Description |
|
|
103
|
+
|-------|------|-------------|
|
|
104
|
+
| 0 | `CONNECTION_STATE_UNSPECIFIED` | Invalid |
|
|
105
|
+
| 1 | `CONNECTION_STATE_INITIALIZING` | Initializing resources |
|
|
106
|
+
| 2 | `CONNECTION_STATE_CONNECTING` | Connecting/opening |
|
|
107
|
+
| 3 | `CONNECTION_STATE_ONLINE` | Healthy and running |
|
|
108
|
+
| 4 | `CONNECTION_STATE_DEGRADED` | Running with reduced health |
|
|
109
|
+
| 5 | `CONNECTION_STATE_OFFLINE` | Stopped or unavailable |
|
|
110
|
+
| 6 | `CONNECTION_STATE_ERROR` | Failed with error |
|
|
111
|
+
|
|
112
|
+
### VideoFormat
|
|
113
|
+
|
|
114
|
+
| Value | Name | Description |
|
|
115
|
+
|-------|------|-------------|
|
|
116
|
+
| 0 | `VIDEO_FORMAT_UNSPECIFIED` | Invalid |
|
|
117
|
+
| 1 | `VIDEO_FORMAT_1080_50I` | 1080i50 |
|
|
118
|
+
| 2 | `VIDEO_FORMAT_1080_50P` | 1080p50 |
|
|
119
|
+
| 3 | `VIDEO_FORMAT_1080_60I` | 1080i60 |
|
|
120
|
+
| 4 | `VIDEO_FORMAT_1080_60P` | 1080p60 |
|
|
121
|
+
|
|
122
|
+
### CodecId
|
|
123
|
+
|
|
124
|
+
| Value | Name | Description |
|
|
125
|
+
|-------|------|-------------|
|
|
126
|
+
| 0 | `CODEC_ID_UNSPECIFIED` | Invalid |
|
|
127
|
+
| 1 | `CODEC_ID_H264` | H.264/AVC |
|
|
128
|
+
| 2 | `CODEC_ID_HEVC` | H.265/HEVC |
|
|
129
|
+
| 3 | `CODEC_ID_AV1` | AV1 |
|
|
130
|
+
| 4 | `CODEC_ID_VP8` | VP8 |
|
|
131
|
+
| 5 | `CODEC_ID_PRORES` | Apple ProRes |
|
|
132
|
+
| 6 | `CODEC_ID_DNXHR` | Avid DNxHR |
|
|
133
|
+
|
|
134
|
+
### EventTopic
|
|
135
|
+
|
|
136
|
+
| Value | Name | Description |
|
|
137
|
+
|-------|------|-------------|
|
|
138
|
+
| 0 | `EVENT_TOPIC_UNSPECIFIED` | Invalid |
|
|
139
|
+
| 1 | `EVENT_TOPIC_ERROR` | Error events |
|
|
140
|
+
| 2 | `EVENT_TOPIC_TRANSPORT` | Source transport state changes |
|
|
141
|
+
| 3 | `EVENT_TOPIC_CALLBACK` | Client callback events |
|
|
142
|
+
| 4 | `EVENT_TOPIC_JOB` | Job lifecycle and progress events |
|
|
143
|
+
| 6 | `EVENT_TOPIC_RECORDER` | Recorder events |
|
|
144
|
+
|
|
145
|
+
### Vec4
|
|
146
|
+
|
|
147
|
+
| Field | Type | Description |
|
|
148
|
+
|-------|------|-------------|
|
|
149
|
+
| `x` | float | Red / X |
|
|
150
|
+
| `y` | float | Green / Y |
|
|
151
|
+
| `z` | float | Blue / Z |
|
|
152
|
+
| `w` | float | Alpha / W |
|
|
153
|
+
|
|
154
|
+
### PropValue
|
|
155
|
+
|
|
156
|
+
Oneof `value`:
|
|
157
|
+
|
|
158
|
+
| Field | Type | Description |
|
|
159
|
+
|-------|------|-------------|
|
|
160
|
+
| `float_value` | float | Floating point value |
|
|
161
|
+
| `vec4_value` | Vec4 | Vector value |
|
|
162
|
+
| `string_value` | string | String value |
|
|
163
|
+
| `bool_value` | bool | Boolean value |
|
|
164
|
+
| `int_value` | int32 | Integer value |
|
|
165
|
+
|
|
166
|
+
### PropertyDomain
|
|
167
|
+
|
|
168
|
+
Identifies which engine object owns the property. Oneof `owner`:
|
|
169
|
+
|
|
170
|
+
| Field | Type | Description |
|
|
171
|
+
|-------|------|-------------|
|
|
172
|
+
| `compositor_id` | string | Scene graph node/effect |
|
|
173
|
+
| `audio_mixer_id` | string | Audio mixer channel/plugin |
|
|
174
|
+
| `source_id` | string | Source preprocessor |
|
|
175
|
+
| `replay_id` | string | Replay (reserved) |
|
|
176
|
+
|
|
177
|
+
### Callback
|
|
178
|
+
|
|
179
|
+
| Field | Type | Description |
|
|
180
|
+
|-------|------|-------------|
|
|
181
|
+
| `event` | string | Event name identifier |
|
|
182
|
+
| `data` | string | Event data (JSON or other) |
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## RPC Envelope
|
|
187
|
+
|
|
188
|
+
`sesame.v1.rpc`
|
|
189
|
+
|
|
190
|
+
### Message
|
|
191
|
+
|
|
192
|
+
Oneof `payload`:
|
|
193
|
+
|
|
194
|
+
| Field | Type | Description |
|
|
195
|
+
|-------|------|-------------|
|
|
196
|
+
| `request` | Request | Client → server request |
|
|
197
|
+
| `response` | Response | Server → client response |
|
|
198
|
+
| `event` | Event | Server → client push event |
|
|
199
|
+
|
|
200
|
+
### Request
|
|
201
|
+
|
|
202
|
+
| Field | Type | Description |
|
|
203
|
+
|-------|------|-------------|
|
|
204
|
+
| `method` | string | RPC method name (e.g. `"ExecuteCommandList"`) |
|
|
205
|
+
| `seq` | uint32 | Sequence number for response matching |
|
|
206
|
+
| `payload` | bytes | Serialized request protobuf |
|
|
207
|
+
|
|
208
|
+
### Response
|
|
209
|
+
|
|
210
|
+
| Field | Type | Description |
|
|
211
|
+
|-------|------|-------------|
|
|
212
|
+
| `seq` | uint32 | Sequence number matching request |
|
|
213
|
+
| `ok` | bool | Success flag |
|
|
214
|
+
| `payload` | bytes | Serialized response protobuf |
|
|
215
|
+
| `error` | string | Error message (when `ok` is false) |
|
|
216
|
+
|
|
217
|
+
### Event
|
|
218
|
+
|
|
219
|
+
| Field | Type | Description |
|
|
220
|
+
|-------|------|-------------|
|
|
221
|
+
| `topic` | EventTopic | Event topic |
|
|
222
|
+
| `payload` | bytes | Serialized `status.Event` protobuf |
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Commands
|
|
227
|
+
|
|
228
|
+
`sesame.v1.commands`
|
|
229
|
+
|
|
230
|
+
Commands are batched into a `CommandList` and executed atomically via `ExecuteCommandList`.
|
|
231
|
+
|
|
232
|
+
### CommandListItem
|
|
233
|
+
|
|
234
|
+
| Field | Type | Description |
|
|
235
|
+
|-------|------|-------------|
|
|
236
|
+
| `time_offset_us` | int64 | Schedule time offset (microseconds) |
|
|
237
|
+
| `transaction_id` | uint32? | Optional transaction group ID |
|
|
238
|
+
| `transaction_deps` | uint32[] | Transaction dependencies |
|
|
239
|
+
|
|
240
|
+
Oneof `item` — exactly one per command:
|
|
241
|
+
|
|
242
|
+
| Field | Type | Category |
|
|
243
|
+
|-------|------|----------|
|
|
244
|
+
| `add_source` | SourceAddRequest | Source |
|
|
245
|
+
| `update_source` | SourceUpdateRequest | Source |
|
|
246
|
+
| `remove_source` | SourceRemoveRequest | Source |
|
|
247
|
+
| `add_output` | OutputAddRequest | Output |
|
|
248
|
+
| `update_output` | OutputUpdateRequest | Output |
|
|
249
|
+
| `remove_output` | OutputRemoveRequest | Output |
|
|
250
|
+
| `add_compositor` | CompositorAddRequest | Compositor |
|
|
251
|
+
| `remove_compositor` | CompositorRemoveRequest | Compositor |
|
|
252
|
+
| `clear_compositor` | CompositorClearRequest | Compositor |
|
|
253
|
+
| `add_node` | NodeAddRequest | Scene graph |
|
|
254
|
+
| `remove_node` | NodeRemoveRequest | Scene graph |
|
|
255
|
+
| `set_property` | PropertySetRequest | Property |
|
|
256
|
+
| `animate_property` | PropertyAnimateRequest | Property |
|
|
257
|
+
| `add_audio_mixer` | AudioMixerAddRequest | Audio |
|
|
258
|
+
| `update_audio_mixer` | AudioMixerUpdateRequest | Audio |
|
|
259
|
+
| `remove_audio_mixer` | AudioMixerRemoveRequest | Audio |
|
|
260
|
+
| `add_audio_channel` | AudioChannelAddRequest | Audio |
|
|
261
|
+
| `remove_audio_channel` | AudioChannelRemoveRequest | Audio |
|
|
262
|
+
| `update_source_transport` | SourceTransportCommand | Transport |
|
|
263
|
+
| `load_playlist` | LoadPlaylistRequest | Playlist |
|
|
264
|
+
| `eject_playlist` | EjectPlaylistRequest | Playlist |
|
|
265
|
+
| `callback` | Callback | Callback |
|
|
266
|
+
| `set_source_metadata` | SourceMetadataSetRequest | Metadata |
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Sources
|
|
271
|
+
|
|
272
|
+
`sesame.v1.sources`
|
|
273
|
+
|
|
274
|
+
### SourceType
|
|
275
|
+
|
|
276
|
+
| Value | Name | Description |
|
|
277
|
+
|-------|------|-------------|
|
|
278
|
+
| 0 | `SOURCE_TYPE_UNSPECIFIED` | Invalid |
|
|
279
|
+
| 1 | `SOURCE_TYPE_FILE` | File playback |
|
|
280
|
+
| 2 | `SOURCE_TYPE_RECORDER` | Recorder playback |
|
|
281
|
+
| 3 | `SOURCE_TYPE_BROWSER` | CEF browser |
|
|
282
|
+
| 4 | `SOURCE_TYPE_RTT` | Render-to-texture |
|
|
283
|
+
| 5 | `SOURCE_TYPE_DECKLINK` | Blackmagic Decklink capture |
|
|
284
|
+
| 6 | `SOURCE_TYPE_SIGNAL_GENERATOR` | Test signal generator |
|
|
285
|
+
| 7 | `SOURCE_TYPE_SYSTEM_AUDIO` | System audio input |
|
|
286
|
+
| 8 | `SOURCE_TYPE_SRT_STREAM` | SRT stream |
|
|
287
|
+
| 9 | `SOURCE_TYPE_WEBSOCKET` | WebSocket stream |
|
|
288
|
+
| 10 | `SOURCE_TYPE_MOQ` | Media over QUIC |
|
|
289
|
+
|
|
290
|
+
### SourceTransportState
|
|
291
|
+
|
|
292
|
+
| Value | Name | Description |
|
|
293
|
+
|-------|------|-------------|
|
|
294
|
+
| 0 | `SOURCE_TRANSPORT_STATE_STOPPED` | Stopped |
|
|
295
|
+
| 1 | `SOURCE_TRANSPORT_STATE_PLAYING` | Playing |
|
|
296
|
+
| 2 | `SOURCE_TRANSPORT_STATE_CUEING` | Cueing to position |
|
|
297
|
+
| 3 | `SOURCE_TRANSPORT_STATE_ERROR` | Error state |
|
|
298
|
+
| 4 | `SOURCE_TRANSPORT_STATE_PLAYING_LIVE` | Playing live (no seeking) |
|
|
299
|
+
|
|
300
|
+
### SourceTransportCommandType
|
|
301
|
+
|
|
302
|
+
| Value | Name | Description |
|
|
303
|
+
|-------|------|-------------|
|
|
304
|
+
| 0 | `SOURCE_TRANSPORT_CMD_UNSPECIFIED` | Invalid |
|
|
305
|
+
| 1 | `SOURCE_TRANSPORT_CMD_STOP` | Stop playback |
|
|
306
|
+
| 2 | `SOURCE_TRANSPORT_CMD_PLAY` | Start playback |
|
|
307
|
+
| 3 | `SOURCE_TRANSPORT_CMD_SEEK` | Seek to position |
|
|
308
|
+
| 4 | `SOURCE_TRANSPORT_CMD_LOOP` | Set loop mode |
|
|
309
|
+
| 5 | `SOURCE_TRANSPORT_CMD_LIVE` | Switch to live |
|
|
310
|
+
| 6 | `SOURCE_TRANSPORT_CMD_JOG` | Jog forward/backward |
|
|
311
|
+
| 7 | `SOURCE_TRANSPORT_CMD_MONITOR` | Monitor mode |
|
|
312
|
+
| 8 | `SOURCE_TRANSPORT_CMD_SEEK_USER_TIME` | Seek to user timecode |
|
|
313
|
+
| 9 | `SOURCE_TRANSPORT_CMD_TAKE` | Take (cut to next) |
|
|
314
|
+
| 10 | `SOURCE_TRANSPORT_CMD_POST_ROLL` | Post-roll |
|
|
315
|
+
| 11 | `SOURCE_TRANSPORT_CMD_PRE_ROLL` | Pre-roll |
|
|
316
|
+
| 12 | `SOURCE_TRANSPORT_CMD_NEXT` | Next item |
|
|
317
|
+
| 13 | `SOURCE_TRANSPORT_CMD_SKIP_NEXT` | Skip to next |
|
|
318
|
+
| 14 | `SOURCE_TRANSPORT_CMD_TRANSITIONS_DISABLED` | Disable transitions |
|
|
319
|
+
| 15 | `SOURCE_TRANSPORT_CMD_SET_SCRUBBING` | Set scrubbing mode |
|
|
320
|
+
|
|
321
|
+
### DecoderType
|
|
322
|
+
|
|
323
|
+
| Value | Name |
|
|
324
|
+
|-------|------|
|
|
325
|
+
| 0 | `DECODER_TYPE_UNSPECIFIED` |
|
|
326
|
+
| 1 | `DECODER_TYPE_H264` |
|
|
327
|
+
| 2 | `DECODER_TYPE_HEVC` |
|
|
328
|
+
| 3 | `DECODER_TYPE_AV1` |
|
|
329
|
+
|
|
330
|
+
### DeinterlaceType
|
|
331
|
+
|
|
332
|
+
| Value | Name |
|
|
333
|
+
|-------|------|
|
|
334
|
+
| 0 | `DEINTERLACE_TYPE_PROGRESSIVE` |
|
|
335
|
+
| 1 | `DEINTERLACE_TYPE_UPPER_FIELD_FIRST` |
|
|
336
|
+
| 2 | `DEINTERLACE_TYPE_LOWER_FIELD_FIRST` |
|
|
337
|
+
| 3 | `DEINTERLACE_TYPE_AUTO` |
|
|
338
|
+
|
|
339
|
+
### SourceTextureSize
|
|
340
|
+
|
|
341
|
+
| Value | Name | Description |
|
|
342
|
+
|-------|------|-------------|
|
|
343
|
+
| 0 | `SOURCE_TEXTURE_SIZE_UNSPECIFIED` | Default |
|
|
344
|
+
| 1 | `SOURCE_TEXTURE_SIZE_HD` | 1920×1080 |
|
|
345
|
+
| 2 | `SOURCE_TEXTURE_SIZE_4K` | 3840×2160 |
|
|
346
|
+
|
|
347
|
+
### PreprocessStep
|
|
348
|
+
|
|
349
|
+
| Value | Name | Description |
|
|
350
|
+
|-------|------|-------------|
|
|
351
|
+
| 0 | `PREPROCESS_STEP_UNSPECIFIED` | Invalid |
|
|
352
|
+
| 1 | `PREPROCESS_STEP_VIDEO_SCOPES` | Video scopes/waveform |
|
|
353
|
+
| 2 | `PREPROCESS_STEP_CHROMA_KEY` | Chroma key |
|
|
354
|
+
| 3 | `PREPROCESS_STEP_BLUR` | Blur effect |
|
|
355
|
+
|
|
356
|
+
### SourceCommonConfig
|
|
357
|
+
|
|
358
|
+
Shared settings for all source types.
|
|
359
|
+
|
|
360
|
+
| Field | Type | Description |
|
|
361
|
+
|-------|------|-------------|
|
|
362
|
+
| `user_id` | string | User-defined ID |
|
|
363
|
+
| `use_as_clock` | bool | Use as master clock source |
|
|
364
|
+
| `audio_only` | bool | Audio-only mode |
|
|
365
|
+
| `audio_channels` | uint32 | Expected audio channel count |
|
|
366
|
+
| `loop` | bool | Loop playback |
|
|
367
|
+
| `play_state` | SourceTransportState | Initial playback state |
|
|
368
|
+
| `mip_map` | bool | Generate mipmaps |
|
|
369
|
+
| `texture_size` | SourceTextureSize | GPU texture size |
|
|
370
|
+
| `deinterlace` | DeinterlaceType | Deinterlace mode |
|
|
371
|
+
| `video_processors` | VideoProcessor[] | Video preprocessors |
|
|
372
|
+
|
|
373
|
+
### SourceConfig
|
|
374
|
+
|
|
375
|
+
| Field | Type | Description |
|
|
376
|
+
|-------|------|-------------|
|
|
377
|
+
| `common` | SourceCommonConfig | Shared settings |
|
|
378
|
+
|
|
379
|
+
Oneof `details` — exactly one required:
|
|
380
|
+
|
|
381
|
+
| Field | Type | Source type |
|
|
382
|
+
|-------|------|------------|
|
|
383
|
+
| `file` | FileSourceConfig | `SOURCE_TYPE_FILE` |
|
|
384
|
+
| `recorder` | RecorderSourceConfig | `SOURCE_TYPE_RECORDER` |
|
|
385
|
+
| `browser` | BrowserSourceConfig | `SOURCE_TYPE_BROWSER` |
|
|
386
|
+
| `rtt` | RTTSourceConfig | `SOURCE_TYPE_RTT` |
|
|
387
|
+
| `decklink` | DecklinkSourceConfig | `SOURCE_TYPE_DECKLINK` |
|
|
388
|
+
| `signal_generator` | SignalGeneratorSourceConfig | `SOURCE_TYPE_SIGNAL_GENERATOR` |
|
|
389
|
+
| `system_audio` | SystemAudioSourceConfig | `SOURCE_TYPE_SYSTEM_AUDIO` |
|
|
390
|
+
| `srt_stream` | SrtSourceConfig | `SOURCE_TYPE_SRT_STREAM` |
|
|
391
|
+
| `websocket` | WebsocketSourceConfig | `SOURCE_TYPE_WEBSOCKET` |
|
|
392
|
+
| `moq` | MoqSourceConfig | `SOURCE_TYPE_MOQ` |
|
|
393
|
+
|
|
394
|
+
### Source Type Configs
|
|
395
|
+
|
|
396
|
+
**FileSourceConfig** — `{ url: string }`
|
|
397
|
+
|
|
398
|
+
**RecorderSourceConfig** — `{ recorder_id: string, decoder_type: DecoderType }`
|
|
399
|
+
|
|
400
|
+
**BrowserSourceConfig** — `{ url: string, width?: uint32, height?: uint32 }`
|
|
401
|
+
|
|
402
|
+
**RTTSourceConfig** — `{ rtt_id: string, audio_mixes: string[], delay_frames: uint32 }`
|
|
403
|
+
|
|
404
|
+
**DecklinkSourceConfig** — `{ device_index: uint32, video_format: VideoFormat, sync_group?: uint32 }`
|
|
405
|
+
|
|
406
|
+
**SignalGeneratorSourceConfig** — `{}` (no fields)
|
|
407
|
+
|
|
408
|
+
**SystemAudioSourceConfig** — `{ device_name: string }` (empty = default device)
|
|
409
|
+
|
|
410
|
+
**SrtSourceConfig** — `{ url: string, decode_buffer_frames: uint32 }`
|
|
411
|
+
|
|
412
|
+
**WebsocketSourceConfig** — `{ channel: string, decode_buffer_frames: uint32 }`
|
|
413
|
+
|
|
414
|
+
**MoqSourceConfig** — `{ url: string, broadcast: string, key: string, decode_buffer_frames: uint32 }`
|
|
415
|
+
|
|
416
|
+
### SourceTransportCommand
|
|
417
|
+
|
|
418
|
+
| Field | Type | Description |
|
|
419
|
+
|-------|------|-------------|
|
|
420
|
+
| `source_id` | string | Source ID |
|
|
421
|
+
| `cmd_type` | SourceTransportCommandType | Command type |
|
|
422
|
+
| `value` | PropValue | Command value |
|
|
423
|
+
|
|
424
|
+
### LoadPlaylistRequest
|
|
425
|
+
|
|
426
|
+
| Field | Type | Description |
|
|
427
|
+
|-------|------|-------------|
|
|
428
|
+
| `source_id` | string | Recorder source ID |
|
|
429
|
+
| `user_playlist_id` | string | User playlist ID |
|
|
430
|
+
| `items` | PlaylistItem[] | Playlist items |
|
|
431
|
+
| `start_time_us` | int64? | Start time (μs) |
|
|
432
|
+
| `start_index` | int64? | Start item index |
|
|
433
|
+
| `material_pos_us` | int64? | Material position (μs) |
|
|
434
|
+
|
|
435
|
+
### SourceStatus
|
|
436
|
+
|
|
437
|
+
| Field | Type | Description |
|
|
438
|
+
|-------|------|-------------|
|
|
439
|
+
| `id` | string | Source ID |
|
|
440
|
+
| `type` | SourceType | Source type |
|
|
441
|
+
| `user_id` | string | User-defined ID |
|
|
442
|
+
| `state` | ConnectionState | Connection state |
|
|
443
|
+
| `transport_state` | SourceTransportState | Transport state |
|
|
444
|
+
| `msg` | string? | Error message |
|
|
445
|
+
| `url` | string | Current URL |
|
|
446
|
+
| `width` | uint32 | Video width |
|
|
447
|
+
| `height` | uint32 | Video height |
|
|
448
|
+
| `fps` | float | Video framerate |
|
|
449
|
+
| `duration_us` | int64 | Duration (μs) |
|
|
450
|
+
| `play_position_us` | int64 | Playback position (μs) |
|
|
451
|
+
| `video_buf` | int32 | Video buffer (frames) |
|
|
452
|
+
| `audio_buf` | int32 | Audio buffer (frames) |
|
|
453
|
+
| `gpu_buf` | int32 | GPU buffer (frames) |
|
|
454
|
+
| `audio_channels` | uint32 | Active audio channels |
|
|
455
|
+
| `audio_level` | float | Audio level (0–1) |
|
|
456
|
+
| `lip_sync_offset_us` | int64 | Lip sync offset (μs) |
|
|
457
|
+
| `decode_timing` | FrameTiming | Decode timing stats |
|
|
458
|
+
| `video_buf_avg` | double | Average video buffer level |
|
|
459
|
+
| `srt_stats` | SRTReceiveStatistics? | SRT stats (if SRT source) |
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## Outputs
|
|
464
|
+
|
|
465
|
+
`sesame.v1.outputs`
|
|
466
|
+
|
|
467
|
+
### OutputType
|
|
468
|
+
|
|
469
|
+
| Value | Name | Description |
|
|
470
|
+
|-------|------|-------------|
|
|
471
|
+
| 0 | `OUTPUT_TYPE_UNSPECIFIED` | Invalid |
|
|
472
|
+
| 1 | `OUTPUT_TYPE_ENCODED_WEBSOCKET` | Encoded WebSocket stream |
|
|
473
|
+
| 2 | `OUTPUT_TYPE_ENCODED_RECORDER` | Encoded recorder |
|
|
474
|
+
| 3 | `OUTPUT_TYPE_DECKLINK` | Blackmagic Decklink output |
|
|
475
|
+
| 4 | `OUTPUT_TYPE_SYSTEM_AUDIO` | System audio output |
|
|
476
|
+
| 5 | `OUTPUT_TYPE_ENCODED_SRT` | Encoded SRT stream |
|
|
477
|
+
| 6 | `OUTPUT_TYPE_ENCODED_MOQ` | Encoded MoQ stream |
|
|
478
|
+
| 7 | `OUTPUT_TYPE_ENCODED_SUPER_SLOWMO_RECORDER` | Super slow-mo recorder |
|
|
479
|
+
|
|
480
|
+
### RecorderType
|
|
481
|
+
|
|
482
|
+
| Value | Name | Description |
|
|
483
|
+
|-------|------|-------------|
|
|
484
|
+
| 0 | `RECORDER_TYPE_UNSPECIFIED` | Invalid |
|
|
485
|
+
| 1 | `RECORDER_TYPE_LIVE` | Live recorder (circular buffer) |
|
|
486
|
+
| 2 | `RECORDER_TYPE_CLIPS` | Clip recorder (ingested frames only) |
|
|
487
|
+
|
|
488
|
+
### EncoderPreset
|
|
489
|
+
|
|
490
|
+
| Value | Name | Description |
|
|
491
|
+
|-------|------|-------------|
|
|
492
|
+
| 0 | `ENCODER_PRESET_UNSPECIFIED` | Invalid |
|
|
493
|
+
| 1 | `ENCODER_PRESET_LOW_LATENCY` | Low-latency tune |
|
|
494
|
+
| 2 | `ENCODER_PRESET_LOW_LATENCY_IDR_ONLY` | Low-latency, IDR-only GOP |
|
|
495
|
+
| 3 | `ENCODER_PRESET_HIGH_QUALITY` | High-quality tune |
|
|
496
|
+
|
|
497
|
+
### EncoderConfig
|
|
498
|
+
|
|
499
|
+
| Field | Type | Description |
|
|
500
|
+
|-------|------|-------------|
|
|
501
|
+
| `codec_id` | CodecId | Encoder codec |
|
|
502
|
+
| `preset` | EncoderPreset | Encoder preset |
|
|
503
|
+
| `bitrate_kbps` | uint32 | Bitrate (kbps) |
|
|
504
|
+
| `keyframe_interval` | uint32 | GOP size in frames (0 = default) |
|
|
505
|
+
| `width` | uint32 | Video width |
|
|
506
|
+
| `height` | uint32 | Video height |
|
|
507
|
+
| `fps` | float | Video framerate |
|
|
508
|
+
|
|
509
|
+
### OutputAddRequest
|
|
510
|
+
|
|
511
|
+
| Field | Type | Description |
|
|
512
|
+
|-------|------|-------------|
|
|
513
|
+
| `id` | string | Unique output ID |
|
|
514
|
+
| `composition_id` | string | Compositor to output |
|
|
515
|
+
| `audio_mix_ids` | string[] | Audio mixer IDs |
|
|
516
|
+
| `use_as_clock` | bool | Use as master clock |
|
|
517
|
+
|
|
518
|
+
Oneof `output` — exactly one required:
|
|
519
|
+
|
|
520
|
+
| Field | Type |
|
|
521
|
+
|-------|------|
|
|
522
|
+
| `websocket` | EncodedWebSocketOutputConfig |
|
|
523
|
+
| `recorder` | EncodedRecorderOutputConfig |
|
|
524
|
+
| `super_slowmo_recorder` | EncodedSuperSlowMoRecorderOutputConfig |
|
|
525
|
+
| `srt` | EncodedSrtOutputConfig |
|
|
526
|
+
| `moq` | EncodedMoqOutputConfig |
|
|
527
|
+
| `decklink` | DecklinkOutputConfig |
|
|
528
|
+
| `system_audio` | SystemAudioOutputConfig |
|
|
529
|
+
|
|
530
|
+
### Output Type Configs
|
|
531
|
+
|
|
532
|
+
**EncodedWebSocketOutputConfig** — `{ channel: string, encoder: EncoderConfig }`
|
|
533
|
+
|
|
534
|
+
**EncodedRecorderOutputConfig** — `{ encoder: EncoderConfig, filename: string, size_gb: uint32, group_id: string, recorder_type: RecorderType }`
|
|
535
|
+
|
|
536
|
+
**EncodedSuperSlowMoRecorderOutputConfig** — Same as recorder + `{ composition_ids: string[], source_ids: string[] }`
|
|
537
|
+
|
|
538
|
+
**EncodedSrtOutputConfig** — `{ url: string, encoder: EncoderConfig }`
|
|
539
|
+
|
|
540
|
+
**EncodedMoqOutputConfig** — `{ encoder: EncoderConfig, url: string, broadcast: string, key: string }`
|
|
541
|
+
|
|
542
|
+
**DecklinkOutputConfig** — `{ device_index: uint32, video_format: VideoFormat, key_and_fill: bool }`
|
|
543
|
+
|
|
544
|
+
**SystemAudioOutputConfig** — `{ device_name: string }`
|
|
545
|
+
|
|
546
|
+
### OutputStatus
|
|
547
|
+
|
|
548
|
+
| Field | Type | Description |
|
|
549
|
+
|-------|------|-------------|
|
|
550
|
+
| `id` | string | Output ID |
|
|
551
|
+
| `type` | OutputType | Output type |
|
|
552
|
+
| `state` | ConnectionState | Connection state |
|
|
553
|
+
| `msg` | string? | Error message |
|
|
554
|
+
| `url` | string | Output URL |
|
|
555
|
+
| `buffer_size` | uint32 | Buffer size (frames) |
|
|
556
|
+
| `srt_stats` | SRTSendStatistics? | SRT stats (if SRT output) |
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
560
|
+
## Compositor & Scene Graph
|
|
561
|
+
|
|
562
|
+
`sesame.v1.compositor`
|
|
563
|
+
|
|
564
|
+
### NodeType
|
|
565
|
+
|
|
566
|
+
| Value | Name | Description |
|
|
567
|
+
|-------|------|-------------|
|
|
568
|
+
| 0 | `NODE_TYPE_UNSPECIFIED` | Invalid |
|
|
569
|
+
| 1 | `NODE_TYPE_GROUP` | Group container node |
|
|
570
|
+
| 2 | `NODE_TYPE_TEXT` | Text overlay |
|
|
571
|
+
| 3 | `NODE_TYPE_VIDEO_BOX` | Video source display |
|
|
572
|
+
| 4 | `NODE_TYPE_IMAGE` | Image/texture |
|
|
573
|
+
| 5 | `NODE_TYPE_EFFECT_RTT` | Render-to-texture effect |
|
|
574
|
+
| 6 | `NODE_TYPE_EFFECT_TIMECODE` | Timecode display effect |
|
|
575
|
+
| 7 | `NODE_TYPE_EFFECT_CLIP_PLANE` | Clip plane effect |
|
|
576
|
+
|
|
577
|
+
### AnimationChannelEvaluationMode
|
|
578
|
+
|
|
579
|
+
| Value | Name | Description |
|
|
580
|
+
|-------|------|-------------|
|
|
581
|
+
| 0 | `ANIM_MODE_CONSTANT` | Hold last value |
|
|
582
|
+
| 1 | `ANIM_MODE_STATE_FROM` | Use initial value |
|
|
583
|
+
| 2 | `ANIM_MODE_LOOP` | Loop animation |
|
|
584
|
+
| 3 | `ANIM_MODE_BOUNCE` | Ping-pong |
|
|
585
|
+
|
|
586
|
+
### CompositorAddRequest
|
|
587
|
+
|
|
588
|
+
| Field | Type | Description |
|
|
589
|
+
|-------|------|-------------|
|
|
590
|
+
| `id` | string | Unique compositor ID |
|
|
591
|
+
| `multisample` | bool | Enable MSAA |
|
|
592
|
+
| `width` | uint32 | Width |
|
|
593
|
+
| `height` | uint32 | Height |
|
|
594
|
+
|
|
595
|
+
### NodeAddRequest
|
|
596
|
+
|
|
597
|
+
| Field | Type | Description |
|
|
598
|
+
|-------|------|-------------|
|
|
599
|
+
| `compositor_id` | string | Compositor ID |
|
|
600
|
+
| `parent_address` | string | Parent node address |
|
|
601
|
+
| `node_id` | string | New node ID |
|
|
602
|
+
| `node_type` | NodeType | Node type |
|
|
603
|
+
|
|
604
|
+
### PropertySetRequest
|
|
605
|
+
|
|
606
|
+
| Field | Type | Description |
|
|
607
|
+
|-------|------|-------------|
|
|
608
|
+
| `domain` | PropertyDomain | Property domain (compositor, audio mixer, source) |
|
|
609
|
+
| `address` | string | Node/effect/channel address |
|
|
610
|
+
| `property` | string | Property name |
|
|
611
|
+
| `value` | PropValue | Value to set |
|
|
612
|
+
|
|
613
|
+
### PropertyAnimateRequest
|
|
614
|
+
|
|
615
|
+
| Field | Type | Description |
|
|
616
|
+
|-------|------|-------------|
|
|
617
|
+
| `domain` | PropertyDomain | Property domain |
|
|
618
|
+
| `address` | string | Node/effect address |
|
|
619
|
+
| `property` | string | Property name |
|
|
620
|
+
| `keyframes` | KeyFrame[] | Animation keyframes |
|
|
621
|
+
| `before` | AnimationChannelEvaluationMode | Mode before first keyframe |
|
|
622
|
+
| `after` | AnimationChannelEvaluationMode | Mode after last keyframe |
|
|
623
|
+
|
|
624
|
+
### KeyFrame
|
|
625
|
+
|
|
626
|
+
| Field | Type | Description |
|
|
627
|
+
|-------|------|-------------|
|
|
628
|
+
| `time_us` | int64 | Keyframe time (μs) |
|
|
629
|
+
| `value` | PropValue | Keyframe value |
|
|
630
|
+
| `easing_in` | string | Easing function in |
|
|
631
|
+
| `easing_out` | string | Easing function out |
|
|
632
|
+
|
|
633
|
+
---
|
|
634
|
+
|
|
635
|
+
## Audio Mixer
|
|
636
|
+
|
|
637
|
+
`sesame.v1.audio`
|
|
638
|
+
|
|
639
|
+
### AudioMixerChannelType
|
|
640
|
+
|
|
641
|
+
| Value | Name |
|
|
642
|
+
|-------|------|
|
|
643
|
+
| 0 | `AUDIO_MIXER_CHANNEL_TYPE_UNSPECIFIED` |
|
|
644
|
+
| 1 | `AUDIO_MIXER_CHANNEL_TYPE_MONO` |
|
|
645
|
+
| 2 | `AUDIO_MIXER_CHANNEL_TYPE_STEREO` |
|
|
646
|
+
|
|
647
|
+
### AudioMixerChannel
|
|
648
|
+
|
|
649
|
+
| Field | Type | Description |
|
|
650
|
+
|-------|------|-------------|
|
|
651
|
+
| `id` | string | Channel ID |
|
|
652
|
+
| `source_id` | string | Source ID |
|
|
653
|
+
| `channel_type` | AudioMixerChannelType | Channel type |
|
|
654
|
+
| `source_channels` | uint32[] | Source channel indices |
|
|
655
|
+
| `level` | float | Level (0–1) |
|
|
656
|
+
| `pan` | float | Pan (−1 to 1) |
|
|
657
|
+
| `plugins` | AudioPlugin[] | Audio plugins |
|
|
658
|
+
|
|
659
|
+
### AudioPlugin
|
|
660
|
+
|
|
661
|
+
| Field | Type | Description |
|
|
662
|
+
|-------|------|-------------|
|
|
663
|
+
| `id` | string | Plugin instance ID |
|
|
664
|
+
| `type` | string | Plugin type (CLAP plugin ID) |
|
|
665
|
+
| `params` | AudioPluginParam[] | Plugin parameters |
|
|
666
|
+
| `aux_input_mix_ids` | string[] | Auxiliary input mixer IDs |
|
|
667
|
+
|
|
668
|
+
### AudioMixerConfig
|
|
669
|
+
|
|
670
|
+
| Field | Type | Description |
|
|
671
|
+
|-------|------|-------------|
|
|
672
|
+
| `channels` | AudioMixerChannel[] | Mixer channels |
|
|
673
|
+
| `output_type` | AudioMixerChannelType | Output channel type |
|
|
674
|
+
| `order` | uint32 | Processing order |
|
|
675
|
+
|
|
676
|
+
### AudioMixerStatus
|
|
677
|
+
|
|
678
|
+
| Field | Type | Description |
|
|
679
|
+
|-------|------|-------------|
|
|
680
|
+
| `id` | string | Mixer ID |
|
|
681
|
+
| `output_type` | AudioMixerChannelType | Output type |
|
|
682
|
+
| `vu` | float[] | Master VU meter values |
|
|
683
|
+
| `channels` | AudioChannelStatus[] | Channel status |
|
|
684
|
+
|
|
685
|
+
### AudioChannelStatus
|
|
686
|
+
|
|
687
|
+
| Field | Type | Description |
|
|
688
|
+
|-------|------|-------------|
|
|
689
|
+
| `id` | string | Channel ID |
|
|
690
|
+
| `output_type` | AudioMixerChannelType | Output type |
|
|
691
|
+
| `level` | float | Level |
|
|
692
|
+
| `pan` | float | Pan |
|
|
693
|
+
| `vu` | float[] | VU meter values |
|
|
694
|
+
| `has_data` | bool | Has audio data |
|
|
695
|
+
| `read_errors` | uint32 | Read error count |
|
|
696
|
+
| `plugins` | AudioChannelPluginStatus[] | Plugin status |
|
|
697
|
+
|
|
698
|
+
---
|
|
699
|
+
|
|
700
|
+
## Recorder
|
|
701
|
+
|
|
702
|
+
`sesame.v1.recorder`
|
|
703
|
+
|
|
704
|
+
### TransitionType
|
|
705
|
+
|
|
706
|
+
| Value | Name | Description |
|
|
707
|
+
|-------|------|-------------|
|
|
708
|
+
| 0 | `TRANSITION_TYPE_MIX` | Mix/dissolve |
|
|
709
|
+
| 1 | `TRANSITION_TYPE_FADE_TO_COLOR` | Fade to color |
|
|
710
|
+
| 2 | `TRANSITION_TYPE_FADE_FROM_COLOR` | Fade from color |
|
|
711
|
+
| 3 | `TRANSITION_TYPE_FADE_TO_FROM_COLOR` | Fade to and from color |
|
|
712
|
+
|
|
713
|
+
### RecorderClip
|
|
714
|
+
|
|
715
|
+
| Field | Type | Description |
|
|
716
|
+
|-------|------|-------------|
|
|
717
|
+
| `id` | uint64 | Clip ID |
|
|
718
|
+
| `name` | string | Clip name |
|
|
719
|
+
| `user_data` | string | User-defined data |
|
|
720
|
+
| `flags` | uint64 | Clip flags (bitfield) |
|
|
721
|
+
| `start_time_us` | int64 | Start time (μs) |
|
|
722
|
+
| `end_time_us` | int64 | End time (μs) |
|
|
723
|
+
| `locked_start_us` | int64 | Locked start (μs) |
|
|
724
|
+
| `locked_end_us` | int64 | Locked end (μs) |
|
|
725
|
+
| `user_time_us` | int64 | User timecode (μs) |
|
|
726
|
+
|
|
727
|
+
### PlaylistItem
|
|
728
|
+
|
|
729
|
+
| Field | Type | Description |
|
|
730
|
+
|-------|------|-------------|
|
|
731
|
+
| `recorder_id` | string | Recorder ID |
|
|
732
|
+
| `id` | uint64 | Clip ID |
|
|
733
|
+
| `transition_time_us` | int64 | Transition duration (μs) |
|
|
734
|
+
| `transition_type` | TransitionType | Transition type |
|
|
735
|
+
| `transition_fade_color` | Vec4 | Fade color |
|
|
736
|
+
| `speed` | float | Playback speed |
|
|
737
|
+
| `audio_routing` | uint32[] | Audio channel routing |
|
|
738
|
+
| `start_time_us` | int64? | Start time (μs) |
|
|
739
|
+
| `end_time_us` | int64? | End time (μs) |
|
|
740
|
+
| `audio_levels` | float[] | Audio levels per channel (0–1) |
|
|
741
|
+
|
|
742
|
+
### RecorderRequest
|
|
743
|
+
|
|
744
|
+
| Field | Type | Description |
|
|
745
|
+
|-------|------|-------------|
|
|
746
|
+
| `recorder_id` | string | Recorder ID |
|
|
747
|
+
|
|
748
|
+
Oneof `request`:
|
|
749
|
+
|
|
750
|
+
| Field | Type |
|
|
751
|
+
|-------|------|
|
|
752
|
+
| `get_clips` | RecorderClipsGetRequest |
|
|
753
|
+
| `add_clip` | RecorderClipAddRequest |
|
|
754
|
+
| `remove_clip` | RecorderClipRemoveRequest |
|
|
755
|
+
| `clear_clips` | RecorderClipsClearRequest |
|
|
756
|
+
| `set_metadata` | RecorderMetadataSetRequest |
|
|
757
|
+
| `verify_clips` | RecorderClipsVerifyRequest |
|
|
758
|
+
| `set_clip_flag` | RecorderClipFlagSetRequest |
|
|
759
|
+
| `copy_clip` | RecorderClipCopyRequest |
|
|
760
|
+
| `set_locked_duration` | RecorderLockedDurationSetRequest |
|
|
761
|
+
|
|
762
|
+
### RecorderEvent
|
|
763
|
+
|
|
764
|
+
| Field | Type | Description |
|
|
765
|
+
|-------|------|-------------|
|
|
766
|
+
| `id` | string | Recorder ID |
|
|
767
|
+
| `online` | bool | Is recorder online |
|
|
768
|
+
| `message` | string? | Event message |
|
|
769
|
+
|
|
770
|
+
---
|
|
771
|
+
|
|
772
|
+
## Jobs
|
|
773
|
+
|
|
774
|
+
`sesame.v1.jobs`
|
|
775
|
+
|
|
776
|
+
### JobType
|
|
777
|
+
|
|
778
|
+
| Value | Name | Description |
|
|
779
|
+
|-------|------|-------------|
|
|
780
|
+
| 0 | `JOB_TYPE_UNSPECIFIED` | Invalid |
|
|
781
|
+
| 1 | `JOB_TYPE_EXPORT` | Playlist export |
|
|
782
|
+
| 2 | `JOB_TYPE_IMPORT` | Clip import |
|
|
783
|
+
|
|
784
|
+
### JobStatus
|
|
785
|
+
|
|
786
|
+
| Value | Name | Description |
|
|
787
|
+
|-------|------|-------------|
|
|
788
|
+
| 0 | `JOB_STATUS_UNSPECIFIED` | Invalid |
|
|
789
|
+
| 1 | `JOB_STATUS_PENDING` | Queued, not started |
|
|
790
|
+
| 2 | `JOB_STATUS_IN_PROGRESS` | Running (includes progress events) |
|
|
791
|
+
| 3 | `JOB_STATUS_COMPLETE` | Finished successfully |
|
|
792
|
+
| 4 | `JOB_STATUS_ABORTED` | Aborted by user |
|
|
793
|
+
| 5 | `JOB_STATUS_ERROR` | Failed with error |
|
|
794
|
+
|
|
795
|
+
### Job
|
|
796
|
+
|
|
797
|
+
| Field | Type | Description |
|
|
798
|
+
|-------|------|-------------|
|
|
799
|
+
| `id` | uint32 | Job ID |
|
|
800
|
+
| `type` | JobType | Job type |
|
|
801
|
+
| `status` | JobStatus | Current status |
|
|
802
|
+
| `name` | string | Job name |
|
|
803
|
+
| `description` | string | Job description (e.g. filename) |
|
|
804
|
+
| `error` | string? | Error message (when status = ERROR) |
|
|
805
|
+
| `progress` | int64 | Current progress (μs) |
|
|
806
|
+
| `total` | int64 | Total duration (μs) |
|
|
807
|
+
| `timing_info` | TimingInfo? | Timing info (set on import completion) |
|
|
808
|
+
|
|
809
|
+
### JobStartRequest
|
|
810
|
+
|
|
811
|
+
Oneof `config`:
|
|
812
|
+
|
|
813
|
+
| Field | Type |
|
|
814
|
+
|-------|------|
|
|
815
|
+
| `export_request` | ExportStartRequest |
|
|
816
|
+
| `import_request` | ImportStartRequest |
|
|
817
|
+
|
|
818
|
+
### JobAbortRequest
|
|
819
|
+
|
|
820
|
+
| Field | Type | Description |
|
|
821
|
+
|-------|------|-------------|
|
|
822
|
+
| `job_id` | uint32 | Job ID to abort |
|
|
823
|
+
|
|
824
|
+
### JobStatusRequest
|
|
825
|
+
|
|
826
|
+
| Field | Type | Description |
|
|
827
|
+
|-------|------|-------------|
|
|
828
|
+
| `job_id` | uint32 | Job ID |
|
|
829
|
+
|
|
830
|
+
### JobListRequest
|
|
831
|
+
|
|
832
|
+
Empty message — returns all jobs.
|
|
833
|
+
|
|
834
|
+
### ExportConfiguration
|
|
835
|
+
|
|
836
|
+
| Field | Type | Description |
|
|
837
|
+
|-------|------|-------------|
|
|
838
|
+
| `filename` | string | Output filename |
|
|
839
|
+
| `container` | ContainerFormat | Container format |
|
|
840
|
+
| `video_codec` | CodecId | Video codec |
|
|
841
|
+
| `width` | uint32 | Width |
|
|
842
|
+
| `height` | uint32 | Height |
|
|
843
|
+
| `fps_num` | uint32 | Frame rate numerator |
|
|
844
|
+
| `fps_den` | uint32 | Frame rate denominator |
|
|
845
|
+
| `rate_control` | RateControlMode | Rate control mode |
|
|
846
|
+
| `video_bitrate_kbps` | uint32 | Video bitrate (kbps) |
|
|
847
|
+
| `max_video_bitrate_kbps` | uint32 | Peak bitrate cap (kbps) |
|
|
848
|
+
| `gop_size` | uint32 | GOP size (frames) |
|
|
849
|
+
| `max_b_frames` | uint32 | Max B-frames |
|
|
850
|
+
| `profile` | string | Codec profile (e.g. main, high) |
|
|
851
|
+
| `level` | string | Codec level (e.g. 4.1) |
|
|
852
|
+
| `pixel_format` | string | Pixel format (e.g. yuv420p) |
|
|
853
|
+
| `color_primaries` | string | Color primaries (e.g. bt709) |
|
|
854
|
+
| `color_transfer` | string | Transfer characteristics |
|
|
855
|
+
| `color_matrix` | string | Matrix coefficients |
|
|
856
|
+
| `full_range` | bool | Full range vs limited |
|
|
857
|
+
| `audio_codec` | AudioCodecId | Audio codec |
|
|
858
|
+
| `audio_bitrate_kbps` | uint32 | Audio bitrate (kbps) |
|
|
859
|
+
| `audio_sample_rate_hz` | uint32 | Audio sample rate (Hz) |
|
|
860
|
+
| `audio_channels` | uint32 | Audio channels |
|
|
861
|
+
| `audio_routing` | uint32[] | Audio channel routing |
|
|
862
|
+
|
|
863
|
+
### ContainerFormat
|
|
864
|
+
|
|
865
|
+
| Value | Name |
|
|
866
|
+
|-------|------|
|
|
867
|
+
| 0 | `CONTAINER_FORMAT_UNSPECIFIED` |
|
|
868
|
+
| 1 | `CONTAINER_FORMAT_MP4` |
|
|
869
|
+
| 2 | `CONTAINER_FORMAT_MOV` |
|
|
870
|
+
| 3 | `CONTAINER_FORMAT_MKV` |
|
|
871
|
+
| 4 | `CONTAINER_FORMAT_MXF` |
|
|
872
|
+
|
|
873
|
+
### AudioCodecId
|
|
874
|
+
|
|
875
|
+
| Value | Name |
|
|
876
|
+
|-------|------|
|
|
877
|
+
| 0 | `AUDIO_CODEC_ID_UNSPECIFIED` |
|
|
878
|
+
| 1 | `AUDIO_CODEC_ID_AAC` |
|
|
879
|
+
| 2 | `AUDIO_CODEC_ID_OPUS` |
|
|
880
|
+
| 3 | `AUDIO_CODEC_ID_PCM_S16LE` |
|
|
881
|
+
| 4 | `AUDIO_CODEC_ID_PCM_S24LE` |
|
|
882
|
+
|
|
883
|
+
### RateControlMode
|
|
884
|
+
|
|
885
|
+
| Value | Name |
|
|
886
|
+
|-------|------|
|
|
887
|
+
| 0 | `RATE_CONTROL_MODE_UNSPECIFIED` |
|
|
888
|
+
| 1 | `RATE_CONTROL_MODE_CBR` |
|
|
889
|
+
| 2 | `RATE_CONTROL_MODE_VBR` |
|
|
890
|
+
| 3 | `RATE_CONTROL_MODE_CQ` |
|
|
891
|
+
|
|
892
|
+
### ImportConfiguration
|
|
893
|
+
|
|
894
|
+
| Field | Type | Description |
|
|
895
|
+
|-------|------|-------------|
|
|
896
|
+
| `src_filename` | string | Source filename |
|
|
897
|
+
| `audio_routing` | uint32[] | Audio channel routing |
|
|
898
|
+
| `dst_recorder_id` | string | Destination recorder ID |
|
|
899
|
+
| `dst_clip_id` | uint64 | Destination clip ID |
|
|
900
|
+
| `dst_clip_name` | string | Destination clip name |
|
|
901
|
+
| `dst_clip_user_data` | string | Destination clip user data |
|
|
902
|
+
|
|
903
|
+
---
|
|
904
|
+
|
|
905
|
+
## Status & Events
|
|
906
|
+
|
|
907
|
+
`sesame.v1.status`
|
|
908
|
+
|
|
909
|
+
### Status
|
|
910
|
+
|
|
911
|
+
Full system status returned by `RequestStatus`.
|
|
912
|
+
|
|
913
|
+
| Field | Type | Description |
|
|
914
|
+
|-------|------|-------------|
|
|
915
|
+
| `system_status` | SystemStatus | System stats |
|
|
916
|
+
| `render_status_gpu` | FrameTiming | GPU render timing |
|
|
917
|
+
| `render_status_cpu` | FrameTiming | CPU render timing |
|
|
918
|
+
| `sources` | SourceStatus[] | All source status |
|
|
919
|
+
| `compositions` | CompositorStatus[] | All compositor status |
|
|
920
|
+
| `audio_mixes` | AudioMixerStatus[] | All audio mixer status |
|
|
921
|
+
| `outputs` | OutputStatus[] | All output status |
|
|
922
|
+
| `recorders` | RecorderStatus[] | All recorder status |
|
|
923
|
+
|
|
924
|
+
### Event
|
|
925
|
+
|
|
926
|
+
Push event wrapper. Oneof `event`:
|
|
927
|
+
|
|
928
|
+
| Field | Type | Topic |
|
|
929
|
+
|-------|------|-------|
|
|
930
|
+
| `error_event` | ErrorEvent | `EVENT_TOPIC_ERROR` |
|
|
931
|
+
| `transport_event` | TransportEvent | `EVENT_TOPIC_TRANSPORT` |
|
|
932
|
+
| `callback_event` | Callback | `EVENT_TOPIC_CALLBACK` |
|
|
933
|
+
| `job_event` | Job | `EVENT_TOPIC_JOB` |
|
|
934
|
+
| `recorder_event` | RecorderEvent | `EVENT_TOPIC_RECORDER` |
|
|
935
|
+
|
|
936
|
+
### TransportEvent
|
|
937
|
+
|
|
938
|
+
| Field | Type | Description |
|
|
939
|
+
|-------|------|-------------|
|
|
940
|
+
| `source_id` | string | Source ID |
|
|
941
|
+
| `user_id` | string | User ID |
|
|
942
|
+
| `uri` | string | Source URI |
|
|
943
|
+
| `state` | SourceTransportState | Transport state |
|
|
944
|
+
| `duration_us` | int64 | Duration (μs) |
|
|
945
|
+
| `position_us` | int64 | Playback position (μs) |
|
|
946
|
+
| `material_position_us` | int64 | Material position (μs) |
|
|
947
|
+
| `user_time_us` | int64 | User time (μs) |
|
|
948
|
+
| `speed` | float | Playback speed |
|
|
949
|
+
| `user_playlist_id` | string | User playlist ID |
|
|
950
|
+
| `playlist_index` | uint32 | Playlist item index |
|
|
951
|
+
| `playlist_length` | uint32 | Playlist length |
|
|
952
|
+
| `clip_id` | uint64 | Clip ID |
|
|
953
|
+
| `clip_position_us` | int64 | Position within clip (μs) |
|
|
954
|
+
| `clip_duration_us` | int64 | Clip duration (μs) |
|
|
955
|
+
| `preroll` | uint32 | Pre-roll frames |
|
|
956
|
+
| `postroll` | uint32 | Post-roll frames |
|
|
957
|
+
| `metadata` | string | Transport metadata |
|
|
958
|
+
|
|
959
|
+
### SubscriptionRequest
|
|
960
|
+
|
|
961
|
+
| Field | Type | Description |
|
|
962
|
+
|-------|------|-------------|
|
|
963
|
+
| `event_topics` | EventTopic[] | Topics to subscribe to |
|
|
964
|
+
| `channels` | string[] | Dynamic channels (e.g. `media-stream/<id>`) |
|
|
965
|
+
|
|
966
|
+
### IODeviceItem
|
|
967
|
+
|
|
968
|
+
| Field | Type | Description |
|
|
969
|
+
|-------|------|-------------|
|
|
970
|
+
| `id` | string | Device ID |
|
|
971
|
+
| `name` | string | Device name |
|
|
972
|
+
| `type` | IODeviceType | Device type |
|
|
973
|
+
|
|
974
|
+
### IODeviceType
|
|
975
|
+
|
|
976
|
+
| Value | Name |
|
|
977
|
+
|-------|------|
|
|
978
|
+
| 0 | `IO_DEVICE_TYPE_UNSPECIFIED` |
|
|
979
|
+
| 1 | `IO_DEVICE_TYPE_VIDEO_INPUT` |
|
|
980
|
+
| 2 | `IO_DEVICE_TYPE_VIDEO_OUTPUT` |
|
|
981
|
+
| 3 | `IO_DEVICE_TYPE_AUDIO_INPUT` |
|
|
982
|
+
| 4 | `IO_DEVICE_TYPE_AUDIO_OUTPUT` |
|
|
983
|
+
|
|
984
|
+
---
|
|
985
|
+
|
|
986
|
+
## Statistics
|
|
987
|
+
|
|
988
|
+
`sesame.v1.status`
|
|
989
|
+
|
|
990
|
+
### FrameTiming
|
|
991
|
+
|
|
992
|
+
| Field | Type | Description |
|
|
993
|
+
|-------|------|-------------|
|
|
994
|
+
| `frame_time` | int32 | Current frame time (μs) |
|
|
995
|
+
| `frame_time_avg` | int32 | Average frame time (μs) |
|
|
996
|
+
| `frame_time_min` | int32 | Minimum frame time (μs) |
|
|
997
|
+
| `frame_time_max` | int32 | Maximum frame time (μs) |
|
|
998
|
+
|
|
999
|
+
### SystemStatus
|
|
1000
|
+
|
|
1001
|
+
| Field | Type | Description |
|
|
1002
|
+
|-------|------|-------------|
|
|
1003
|
+
| `uptime` | uint64 | Uptime (seconds) |
|
|
1004
|
+
| `framedrops` | uint32 | Total frames dropped |
|
|
1005
|
+
| `framerate` | float | Current framerate |
|
|
1006
|
+
| `gpu_mem` | uint64 | GPU memory used (deprecated) |
|
|
1007
|
+
| `cpu_mem` | uint64 | CPU memory used (bytes) |
|
|
1008
|
+
| `mem_gpu_pool` | MemoryDomainStats | GPU pool memory |
|
|
1009
|
+
| `mem_cpu_pool` | MemoryDomainStats | CPU pool memory |
|
|
1010
|
+
| `mem_gpu_adhoc` | MemoryDomainStats | GPU ad-hoc allocations |
|
|
1011
|
+
| `mem_gpu_pinned` | MemoryDomainStats | GPU pinned memory |
|
|
1012
|
+
| `gpu_mem_total` | uint64 | Total GPU memory (bytes) |
|
|
1013
|
+
| `gpu_mem_used` | uint64 | Used GPU memory (bytes) |
|
|
1014
|
+
| `gpu_utilization` | uint32 | SM compute utilization (0–100) |
|
|
1015
|
+
| `gpu_mem_utilization` | uint32 | Memory controller (0–100) |
|
|
1016
|
+
| `gpu_encoder_utilization` | uint32 | NVENC utilization (0–100) |
|
|
1017
|
+
| `gpu_decoder_utilization` | uint32 | NVDEC utilization (0–100) |
|
|
1018
|
+
| `gpu_name` | string | GPU model name |
|
|
1019
|
+
| `vma_bytes` | uint64 | Vulkan Memory Allocator bytes |
|
|
1020
|
+
|
|
1021
|
+
### MemoryDomainStats
|
|
1022
|
+
|
|
1023
|
+
| Field | Type | Description |
|
|
1024
|
+
|-------|------|-------------|
|
|
1025
|
+
| `current_bytes` | uint64 | Current allocated |
|
|
1026
|
+
| `peak_bytes` | uint64 | Peak allocated |
|
|
1027
|
+
| `budget_bytes` | uint64 | Budget limit |
|
|
1028
|
+
|
|
1029
|
+
### SRTReceiveStatistics
|
|
1030
|
+
|
|
1031
|
+
| Field | Type | Description |
|
|
1032
|
+
|-------|------|-------------|
|
|
1033
|
+
| `packets_received` | int64 | Total packets received |
|
|
1034
|
+
| `packets_received_lost` | int32 | Packets lost |
|
|
1035
|
+
| `packet_ack_sent` | int32 | ACK packets sent |
|
|
1036
|
+
| `packet_nack_sent` | int32 | NACK packets sent |
|
|
1037
|
+
| `bytes_received` | int64 | Total bytes received |
|
|
1038
|
+
| `bytes_received_lost` | int64 | Bytes lost |
|
|
1039
|
+
| `receive_rate_mbps` | double | Receive rate (Mbps) |
|
|
1040
|
+
| `tsbpd_delay` | int32 | TSBPD delay (ms) |
|
|
1041
|
+
| `bandwidth_mbps` | double | Available bandwidth (Mbps) |
|
|
1042
|
+
| `rtt_ms` | double | Round-trip time (ms) |
|
|
1043
|
+
|
|
1044
|
+
### SRTSendStatistics
|
|
1045
|
+
|
|
1046
|
+
| Field | Type | Description |
|
|
1047
|
+
|-------|------|-------------|
|
|
1048
|
+
| `packets_sent` | int64 | Total packets sent |
|
|
1049
|
+
| `packets_sent_lost` | int32 | Packets lost |
|
|
1050
|
+
| `packets_sent_dropped` | int32 | Packets dropped |
|
|
1051
|
+
| `packets_retransmitted` | int32 | Packets retransmitted |
|
|
1052
|
+
| `packet_ack_received` | int32 | ACK packets received |
|
|
1053
|
+
| `packet_nack_received` | int32 | NACK packets received |
|
|
1054
|
+
| `bytes_sent` | int64 | Total bytes sent |
|
|
1055
|
+
| `bytes_sent_dropped` | int64 | Bytes dropped |
|
|
1056
|
+
| `send_rate_mbps` | double | Send rate (Mbps) |
|
|
1057
|
+
| `bandwidth_mbps` | double | Available bandwidth (Mbps) |
|
|
1058
|
+
| `rtt_ms` | double | Round-trip time (ms) |
|
|
1059
|
+
|
|
1060
|
+
---
|
|
1061
|
+
|
|
1062
|
+
## Service Methods
|
|
1063
|
+
|
|
1064
|
+
`sesame.v1.rpc.SesameAPIService`
|
|
1065
|
+
|
|
1066
|
+
| Method | Request | Response | Description |
|
|
1067
|
+
|--------|---------|----------|-------------|
|
|
1068
|
+
| `ExecuteCommandList` | CommandList | CommandExecutionResponse | Execute batched commands |
|
|
1069
|
+
| `UpdateSubscriptions` | SubscriptionRequest | Empty | Update event subscriptions |
|
|
1070
|
+
| `RequestStatus` | Empty | Status | Get full system status |
|
|
1071
|
+
| `RequestEvents` | Empty | stream Event | Subscribe to events (server streaming) |
|
|
1072
|
+
| `StartJob` | JobStartRequest | Job | Start export/import job |
|
|
1073
|
+
| `AbortJob` | JobAbortRequest | Job | Abort a running job |
|
|
1074
|
+
| `GetJobStatus` | JobStatusRequest | Job | Get job status by ID |
|
|
1075
|
+
| `ListJobs` | JobListRequest | JobList | List all jobs |
|
|
1076
|
+
| `RequestRecorderOperation` | RecorderRequest | RecorderResponse | Recorder operations |
|
|
1077
|
+
| `RequestKeyframe` | KeyframeRequest | Empty | Request keyframe from encoder |
|
|
1078
|
+
| `RequestIODeviceList` | Empty | IODeviceListResponse | List I/O devices |
|
|
1079
|
+
|
|
1080
|
+
---
|
|
1081
|
+
|
|
1082
|
+
## Event Subscriptions
|
|
1083
|
+
|
|
1084
|
+
Clients must subscribe to receive push events. Call `UpdateSubscriptions` with desired `EventTopic` values:
|
|
1085
|
+
|
|
1086
|
+
```typescript
|
|
1087
|
+
client.addSubscription(sesame.v1.common.EventTopic.EVENT_TOPIC_TRANSPORT, callback);
|
|
1088
|
+
client.addSubscription(sesame.v1.common.EventTopic.EVENT_TOPIC_JOB, callback);
|
|
1089
|
+
```
|
|
1090
|
+
|
|
1091
|
+
| Topic | Event type | When fired |
|
|
1092
|
+
|-------|-----------|------------|
|
|
1093
|
+
| `EVENT_TOPIC_ERROR` | ErrorEvent | Engine error |
|
|
1094
|
+
| `EVENT_TOPIC_TRANSPORT` | TransportEvent | Source playback state change |
|
|
1095
|
+
| `EVENT_TOPIC_CALLBACK` | Callback | Client callback command echoed |
|
|
1096
|
+
| `EVENT_TOPIC_JOB` | Job | Job lifecycle change + progress (~2 Hz) |
|
|
1097
|
+
| `EVENT_TOPIC_RECORDER` | RecorderEvent | Recorder online/offline |
|
|
1098
|
+
|
|
1099
|
+
---
|
|
1100
|
+
|
|
1101
|
+
## Scene Graph Properties
|
|
1102
|
+
|
|
1103
|
+
Properties are set via `PropertySetRequest` or animated via `PropertyAnimateRequest`. The `domain` field identifies the owning engine object.
|
|
1104
|
+
|
|
1105
|
+
### Compositor Domain (`domain.compositor_id`)
|
|
1106
|
+
|
|
1107
|
+
#### Base Node Properties (all node types)
|
|
1108
|
+
|
|
1109
|
+
| Property | Type | Description |
|
|
1110
|
+
|----------|------|-------------|
|
|
1111
|
+
| `position.x` | float | X position |
|
|
1112
|
+
| `position.y` | float | Y position |
|
|
1113
|
+
| `position.z` | float | Z position |
|
|
1114
|
+
| `position` | vec4 | XYZ position |
|
|
1115
|
+
| `scale.x` | float | X scale |
|
|
1116
|
+
| `scale.y` | float | Y scale |
|
|
1117
|
+
| `scale.z` | float | Z scale |
|
|
1118
|
+
| `scale` | vec4 | XYZ scale |
|
|
1119
|
+
| `rotation.x` | float | X rotation |
|
|
1120
|
+
| `rotation.y` | float | Y rotation |
|
|
1121
|
+
| `rotation.z` | float | Z rotation |
|
|
1122
|
+
| `rotation` | vec4 | XYZ rotation |
|
|
1123
|
+
| `opacity` | float | Opacity (0–1) |
|
|
1124
|
+
| `priority` | float | Render priority (z-order) |
|
|
1125
|
+
| `visible` | bool | Visibility |
|
|
1126
|
+
| `alpha_map` | string | Alpha map source ID |
|
|
1127
|
+
|
|
1128
|
+
#### Mesh Node (Video Box, Image, Group)
|
|
1129
|
+
|
|
1130
|
+
| Property | Type | Description |
|
|
1131
|
+
|----------|------|-------------|
|
|
1132
|
+
| `size` | vec4 | Width/height |
|
|
1133
|
+
| `size.x` | float | Width |
|
|
1134
|
+
| `size.y` | float | Height |
|
|
1135
|
+
| `origin` | vec4 | Origin point |
|
|
1136
|
+
| `origin.x` | float | Origin X |
|
|
1137
|
+
| `origin.y` | float | Origin Y |
|
|
1138
|
+
| `color` | vec4 | Color RGBA |
|
|
1139
|
+
| `color.r` | float | Red |
|
|
1140
|
+
| `color.g` | float | Green |
|
|
1141
|
+
| `color.b` | float | Blue |
|
|
1142
|
+
| `color.a` | float | Alpha |
|
|
1143
|
+
|
|
1144
|
+
#### Text Node
|
|
1145
|
+
|
|
1146
|
+
| Property | Type | Description |
|
|
1147
|
+
|----------|------|-------------|
|
|
1148
|
+
| `text` | string | Text content |
|
|
1149
|
+
| `justify` | string | Alignment: `left`, `center`, `right` |
|
|
1150
|
+
| `font_size` | float | Font size |
|
|
1151
|
+
| `outline_color` | vec4 | Outline color |
|
|
1152
|
+
| `outline_size` | float | Outline size |
|
|
1153
|
+
| `spacing` | float | Letter spacing |
|
|
1154
|
+
|
|
1155
|
+
#### Video Box Node
|
|
1156
|
+
|
|
1157
|
+
| Property | Type | Description |
|
|
1158
|
+
|----------|------|-------------|
|
|
1159
|
+
| `source` | string | Source ID to display |
|
|
1160
|
+
| `audio_meter_source` | string | Pipe-delimited mixer IDs for audio meters |
|
|
1161
|
+
| `show_audio_meter` | bool | Show audio meters |
|
|
1162
|
+
| `show_border` | bool | Show border |
|
|
1163
|
+
| `show_label_bg` | bool | Show label background |
|
|
1164
|
+
| `tex_filter` | bool | Texture filtering |
|
|
1165
|
+
|
|
1166
|
+
#### Image Node
|
|
1167
|
+
|
|
1168
|
+
| Property | Type | Description |
|
|
1169
|
+
|----------|------|-------------|
|
|
1170
|
+
| `filename` | string | Image filename (supports `rtt:` prefix) |
|
|
1171
|
+
| `tex_filter` | bool | Texture filtering |
|
|
1172
|
+
| `premultiply` | bool | Premultiply alpha |
|
|
1173
|
+
|
|
1174
|
+
#### Effects
|
|
1175
|
+
|
|
1176
|
+
**All effects:** `enabled` (bool)
|
|
1177
|
+
|
|
1178
|
+
**RTT Effect:** `rtt-id` (string)
|
|
1179
|
+
|
|
1180
|
+
**Timecode Effect:**
|
|
1181
|
+
|
|
1182
|
+
| Property | Type | Values |
|
|
1183
|
+
|----------|------|--------|
|
|
1184
|
+
| `timecode_type` | string | `internal`, `time_of_day`, `recorder`, `recorder_internal`, `recorder_clip_countdown`, `recorder_playlist_countdown`, `recorder_internal_offset`, `recorder_free_space`, `recorder_playback_speed` |
|
|
1185
|
+
| `timecode_src` | string | Source ID for timecode |
|
|
1186
|
+
|
|
1187
|
+
**Clip Plane Effect:**
|
|
1188
|
+
|
|
1189
|
+
| Property | Type | Description |
|
|
1190
|
+
|----------|------|-------------|
|
|
1191
|
+
| `clip-plane` | vec4 | Clip plane XYZW |
|
|
1192
|
+
| `clip-plane.r` / `.x` | float | Clip plane X |
|
|
1193
|
+
| `clip-plane.g` / `.y` | float | Clip plane Y |
|
|
1194
|
+
| `clip-plane.b` / `.z` | float | Clip plane Z |
|
|
1195
|
+
| `clip-plane.a` / `.w` | float | Clip plane W |
|
|
1196
|
+
| `feather` | float | Feather amount |
|
|
1197
|
+
|
|
1198
|
+
### Audio Mixer Domain (`domain.audio_mixer_id`)
|
|
1199
|
+
|
|
1200
|
+
Address format: `channel_id` for channel properties, `channel_id/plugin_id` for plugin parameters.
|
|
1201
|
+
|
|
1202
|
+
| Property | Type | Description |
|
|
1203
|
+
|----------|------|-------------|
|
|
1204
|
+
| `level` | float | Channel level (0–1) |
|
|
1205
|
+
| `pan` | float | Pan position (−1 to 1) |
|
|
1206
|
+
| `mute` | bool | Mute channel |
|
|
1207
|
+
| `source_channels` | vec4 | Source channel routing |
|
|
1208
|
+
| `source_id` | string | Source ID |
|
|
1209
|
+
| `<param_id>` | float | Plugin parameter (numeric ID as string) |
|
|
1210
|
+
|
|
1211
|
+
### Source Domain (`domain.source_id`)
|
|
1212
|
+
|
|
1213
|
+
Address format: `processor_id` for preprocessor parameters.
|
|
1214
|
+
|
|
1215
|
+
| Property | Type | Description |
|
|
1216
|
+
|----------|------|-------------|
|
|
1217
|
+
| `audio_level` | float | Source audio level |
|
|
1218
|
+
| `<param_id>` | float | Preprocessor parameter (numeric ID as string) |
|