@stinkycomputing/sesame-api-client 1.4.1-beta.10 → 1.4.1-beta.12

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.
@@ -1,3 +1,6 @@
1
+ <!-- Generated from .proto files — do not edit manually. -->
2
+ <!-- Regenerate: cmake --build build --target proto-docs -->
3
+
1
4
  # Sesame Protocol Reference
2
5
 
3
6
  Complete reference for all protobuf types available through `@stinkycomputing/sesame-api-client`.
@@ -11,97 +14,307 @@ import { sesame } from '@stinkycomputing/sesame-api-client';
11
14
 
12
15
  ## Table of Contents
13
16
 
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)
17
+ - [sesame/v1/audio/audio_mixer.proto](#sesame_v1_audio_audio_mixer-proto)
18
+ - [sesame/v1/commands/commands.proto](#sesame_v1_commands_commands-proto)
19
+ - [sesame/v1/common/common.proto](#sesame_v1_common_common-proto)
20
+ - [sesame/v1/compositor/compositor.proto](#sesame_v1_compositor_compositor-proto)
21
+ - [sesame/v1/jobs/jobs.proto](#sesame_v1_jobs_jobs-proto)
22
+ - [sesame/v1/outputs/output.proto](#sesame_v1_outputs_output-proto)
23
+ - [sesame/v1/recorder/recorder.proto](#sesame_v1_recorder_recorder-proto)
24
+ - [sesame/v1/rpc/rpc.proto](#sesame_v1_rpc_rpc-proto)
25
+ - [sesame/v1/rpc/service.proto](#sesame_v1_rpc_service-proto)
26
+ - [sesame/v1/sources/source.proto](#sesame_v1_sources_source-proto)
27
+ - [sesame/v1/status/statistics.proto](#sesame_v1_status_statistics-proto)
28
+ - [sesame/v1/status/status.proto](#sesame_v1_status_status-proto)
29
+ - [sesame/v1/wire/wire.proto](#sesame_v1_wire_wire-proto)
27
30
  - [Event Subscriptions](#event-subscriptions)
28
31
  - [Scene Graph Properties](#scene-graph-properties)
29
32
 
30
33
  ---
31
34
 
32
- ## Wire Protocol
33
35
 
34
- `sesame.v1.wire`
36
+ ## sesame/v1/audio/audio_mixer.proto
35
37
 
36
- Every WebSocket message is framed as:
38
+ `sesame.v1.audio`
37
39
 
38
- ```
39
- [4-byte LE header_size][FrameHeader protobuf][payload bytes]
40
- ```
41
40
 
42
- ### FrameType
41
+
42
+
43
+ ### AudioMixerChannelType
44
+
45
+ Audio mixer channel type.
43
46
 
44
47
  | Value | Name | Description |
45
48
  |-------|------|-------------|
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 |
49
+ | 0 | `AUDIO_MIXER_CHANNEL_TYPE_UNSPECIFIED` | Unspecified (invalid) |
50
+ | 1 | `AUDIO_MIXER_CHANNEL_TYPE_MONO` | Mono channel |
51
+ | 2 | `AUDIO_MIXER_CHANNEL_TYPE_STEREO` | Stereo channel |
53
52
 
54
- ### CodecType
55
53
 
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` |
54
+ ### AudioChannelAddRequest
55
+
56
+ Request to add a channel to an audio mixer.
67
57
 
68
- ### MediaCodecData
69
58
 
70
59
  | Field | Type | Description |
71
60
  |-------|------|-------------|
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 |
61
+ | `mixer_id` | string | Mixer ID |
62
+ | `channel_config` | AudioMixerChannel | Channel configuration |
63
+
64
+
65
+ ### AudioChannelPluginStatus
66
+
67
+ Audio channel plugin status.
68
+
69
+
70
+ | Field | Type | Description |
71
+ |-------|------|-------------|
72
+ | `id` | string | Plugin ID |
73
+ | `type` | string | Plugin type |
74
+ | `params` | repeated AudioPluginParamStatus | Plugin parameter status |
75
+
76
+
77
+ ### AudioChannelRemoveRequest
78
+
79
+ Request to remove a channel from an audio mixer.
80
+
81
+
82
+ | Field | Type | Description |
83
+ |-------|------|-------------|
84
+ | `mixer_id` | string | Mixer ID |
85
+ | `channel_id` | string | Channel ID to remove |
86
+
87
+
88
+ ### AudioChannelStatus
89
+
90
+ Audio channel status.
91
+
92
+
93
+ | Field | Type | Description |
94
+ |-------|------|-------------|
95
+ | `id` | string | Channel ID |
96
+ | `output_type` | AudioMixerChannelType | Output type |
97
+ | `level` | float | Channel level (0.0-1.0) |
98
+ | `pan` | float | Pan position |
99
+ | `vu` | repeated float | VU meter values |
100
+ | `has_data` | bool | Has audio data |
101
+ | `read_errors` | uint32 | Read error count |
102
+ | `plugins` | repeated AudioChannelPluginStatus | Plugin status |
103
+
104
+
105
+ ### AudioMixerAddRequest
106
+
107
+ Request to add a new audio mixer.
108
+
109
+
110
+ | Field | Type | Description |
111
+ |-------|------|-------------|
112
+ | `id` | string | Unique mixer ID |
113
+ | `config` | AudioMixerConfig | Mixer configuration |
114
+
115
+
116
+ ### AudioMixerChannel
117
+
118
+ Audio mixer channel configuration.
119
+
120
+
121
+ | Field | Type | Description |
122
+ |-------|------|-------------|
123
+ | `id` | string | Channel ID |
124
+ | `source_id` | string | Source ID |
125
+ | `channel_type` | AudioMixerChannelType | Channel type |
126
+ | `source_channels` | repeated uint32 | Source channel indices |
127
+ | `level` | float | Channel level (0.0-1.0) |
128
+ | `pan` | float | Pan position (-1.0 to 1.0) |
129
+ | `plugins` | repeated AudioPlugin | Audio plugins |
130
+
131
+
132
+ ### AudioMixerConfig
133
+
134
+ Audio mixer configuration.
135
+
136
+
137
+ | Field | Type | Description |
138
+ |-------|------|-------------|
139
+ | `channels` | repeated AudioMixerChannel | Mixer channels |
140
+ | `output_type` | AudioMixerChannelType | Output channel type |
141
+ | `order` | uint32 | Processing order |
142
+
143
+
144
+ ### AudioMixerRemoveRequest
145
+
146
+ Request to remove an audio mixer.
147
+
148
+
149
+ | Field | Type | Description |
150
+ |-------|------|-------------|
151
+ | `id` | string | Mixer ID to remove |
152
+
153
+
154
+ ### AudioMixerStatus
155
+
156
+ Audio mixer status.
157
+
158
+
159
+ | Field | Type | Description |
160
+ |-------|------|-------------|
161
+ | `id` | string | Mixer ID |
162
+ | `output_type` | AudioMixerChannelType | Output type |
163
+ | `vu` | repeated float | Master VU meter values |
164
+ | `channels` | repeated AudioChannelStatus | Channel status |
165
+
166
+
167
+ ### AudioMixerUpdateRequest
168
+
169
+ Request to update an existing audio mixer.
170
+
171
+
172
+ | Field | Type | Description |
173
+ |-------|------|-------------|
174
+ | `id` | string | Mixer ID to update |
175
+ | `config` | AudioMixerConfig | New configuration |
176
+
177
+
178
+ ### AudioPlugin
179
+
180
+ Audio plugin instance.
181
+
182
+
183
+ | Field | Type | Description |
184
+ |-------|------|-------------|
185
+ | `id` | string | Plugin instance ID |
186
+ | `type` | string | Plugin type |
187
+ | `params` | repeated AudioPluginParam | Plugin parameters |
188
+ | `aux_input_mix_ids` | repeated string | Auxiliary input mixer IDs |
189
+
190
+
191
+ ### AudioPluginParam
192
+
193
+ Audio plugin parameter.
194
+
195
+
196
+ | Field | Type | Description |
197
+ |-------|------|-------------|
198
+ | `id` | uint32 | Parameter ID |
199
+ | `float_value` | float | Parameter value |
200
+
201
+
202
+ ### AudioPluginParamStatus
203
+
204
+ Audio plugin parameter status (with display info).
205
+
206
+
207
+ | Field | Type | Description |
208
+ |-------|------|-------------|
209
+ | `id` | uint32 | Parameter ID |
210
+ | `float_value` | float | Parameter value |
211
+ | `label` | string | Parameter label |
212
+ | `display_value` | string | Formatted display value |
213
+
214
+
215
+ ---
216
+
217
+
218
+ ## sesame/v1/commands/commands.proto
219
+
220
+ `sesame.v1.commands`
221
+
222
+
223
+
224
+
225
+ ### CommandExecutionResponse
226
+
227
+ Command execution response.
228
+
229
+ Reserved for future per-command results.
230
+
231
+
232
+ ### CommandList
233
+
234
+ Command list.
235
+ A list of commands to execute in sequence.
236
+
237
+
238
+ | Field | Type | Description |
239
+ |-------|------|-------------|
240
+ | `command_list` | repeated CommandListItem | List of commands |
241
+
242
+
243
+ ### CommandListItem
244
+
245
+ Command list item.
246
+ Each item represents a single command to execute at a specific time offset.
82
247
 
83
- ### FrameHeader
84
248
 
85
249
  | Field | Type | Description |
86
250
  |-------|------|-------------|
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) |
251
+ | `time_offset_us` | int64 | Time offset in microseconds |
252
+ | `add_source` | sesame.v1.sources.SourceAddRequest | Source commands |
253
+ | `update_source` | sesame.v1.sources.SourceUpdateRequest | |
254
+ | `remove_source` | sesame.v1.sources.SourceRemoveRequest | |
255
+ | `add_output` | sesame.v1.outputs.OutputAddRequest | Output commands |
256
+ | `update_output` | sesame.v1.outputs.OutputUpdateRequest | |
257
+ | `remove_output` | sesame.v1.outputs.OutputRemoveRequest | |
258
+ | `add_compositor` | sesame.v1.compositor.CompositorAddRequest | Compositor commands |
259
+ | `remove_compositor` | sesame.v1.compositor.CompositorRemoveRequest | |
260
+ | `clear_compositor` | sesame.v1.compositor.CompositorClearRequest | |
261
+ | `add_node` | sesame.v1.compositor.NodeAddRequest | Node commands |
262
+ | `remove_node` | sesame.v1.compositor.NodeRemoveRequest | |
263
+ | `set_property` | sesame.v1.compositor.PropertySetRequest | Property commands |
264
+ | `animate_property` | sesame.v1.compositor.PropertyAnimateRequest | |
265
+ | `add_audio_mixer` | sesame.v1.audio.AudioMixerAddRequest | Audio mixer commands |
266
+ | `update_audio_mixer` | sesame.v1.audio.AudioMixerUpdateRequest | |
267
+ | `remove_audio_mixer` | sesame.v1.audio.AudioMixerRemoveRequest | |
268
+ | `add_audio_channel` | sesame.v1.audio.AudioChannelAddRequest | |
269
+ | `remove_audio_channel` | sesame.v1.audio.AudioChannelRemoveRequest | |
270
+ | `update_source_transport` | sesame.v1.sources.SourceTransportCommand | Source transport commands |
271
+ | `load_playlist` | sesame.v1.sources.LoadPlaylistRequest | Recorder playlist commands |
272
+ | `eject_playlist` | sesame.v1.sources.EjectPlaylistRequest | |
273
+ | `callback` | sesame.v1.common.Callback | Callback command |
274
+ | `set_source_metadata` | sesame.v1.sources.SourceMetadataSetRequest | Source metadata command |
275
+ | `transaction_id` | optional uint32 | Transaction ID for grouping |
276
+ | `transaction_deps` | repeated uint32 | Transaction dependencies |
277
+
93
278
 
94
279
  ---
95
280
 
96
- ## Common Types
281
+
282
+ ## sesame/v1/common/common.proto
97
283
 
98
284
  `sesame.v1.common`
99
285
 
286
+
287
+
288
+
289
+ ### CodecType
290
+
291
+ Shared codec identifier for video and audio.
292
+ Video codecs occupy numbers 1–63; audio codecs start at 64.
293
+
294
+ | Value | Name | Description |
295
+ |-------|------|-------------|
296
+ | 0 | `CODEC_TYPE_UNSPECIFIED` | Unspecified (invalid) |
297
+ | 1 | `CODEC_TYPE_VIDEO_VP8` | VP8 codec |
298
+ | 2 | `CODEC_TYPE_VIDEO_VP9` | VP9 codec |
299
+ | 3 | `CODEC_TYPE_VIDEO_AVC` | H.264/AVC codec |
300
+ | 4 | `CODEC_TYPE_VIDEO_HEVC` | H.265/HEVC codec |
301
+ | 5 | `CODEC_TYPE_VIDEO_AV1` | AV1 codec |
302
+ | 6 | `CODEC_TYPE_VIDEO_PRORES` | Apple ProRes codec family |
303
+ | 7 | `CODEC_TYPE_VIDEO_DNXHR` | Avid DNxHR codec family |
304
+ | 64 | `CODEC_TYPE_AUDIO_OPUS` | Opus audio codec |
305
+ | 65 | `CODEC_TYPE_AUDIO_AAC` | AAC audio codec |
306
+ | 66 | `CODEC_TYPE_AUDIO_PCM` | PCM 16-bit little-endian audio |
307
+ | 67 | `CODEC_TYPE_AUDIO_PCM_S24LE` | PCM 24-bit little-endian audio |
308
+
309
+
100
310
  ### ConnectionState
101
311
 
312
+ Connection/lifecycle state for runtime entities (sources, outputs, etc.).
313
+ Used by source/output status models across the API.
314
+
102
315
  | Value | Name | Description |
103
316
  |-------|------|-------------|
104
- | 0 | `CONNECTION_STATE_UNSPECIFIED` | Invalid |
317
+ | 0 | `CONNECTION_STATE_UNSPECIFIED` | Unspecified |
105
318
  | 1 | `CONNECTION_STATE_INITIALIZING` | Initializing resources |
106
319
  | 2 | `CONNECTION_STATE_CONNECTING` | Connecting/opening |
107
320
  | 3 | `CONNECTION_STATE_ONLINE` | Healthy and running |
@@ -109,208 +322,1089 @@ Every WebSocket message is framed as:
109
322
  | 5 | `CONNECTION_STATE_OFFLINE` | Stopped or unavailable |
110
323
  | 6 | `CONNECTION_STATE_ERROR` | Failed with error |
111
324
 
325
+
326
+ ### EventTopic
327
+
328
+ Typed event topics for subscriptions and event delivery.
329
+ Replaces stringly-typed topic names with compile-time checked values.
330
+
331
+ | Value | Name | Description |
332
+ |-------|------|-------------|
333
+ | 0 | `EVENT_TOPIC_UNSPECIFIED` | Unspecified (invalid) |
334
+ | 1 | `EVENT_TOPIC_ERROR` | Error events |
335
+ | 2 | `EVENT_TOPIC_TRANSPORT` | Source transport/playback state changes |
336
+ | 3 | `EVENT_TOPIC_CALLBACK` | Client callback events |
337
+ | 4 | `EVENT_TOPIC_JOB` | Job events (export, import, etc.) |
338
+ | 6 | `EVENT_TOPIC_RECORDER` | Recorder events |
339
+
340
+
112
341
  ### VideoFormat
113
342
 
343
+ Video format for Decklink and other hardware devices.
344
+
114
345
  | Value | Name | Description |
115
346
  |-------|------|-------------|
116
- | 0 | `VIDEO_FORMAT_UNSPECIFIED` | Invalid |
347
+ | 0 | `VIDEO_FORMAT_UNSPECIFIED` | Unspecified (invalid) |
117
348
  | 1 | `VIDEO_FORMAT_1080_50I` | 1080i50 |
118
349
  | 2 | `VIDEO_FORMAT_1080_50P` | 1080p50 |
119
350
  | 3 | `VIDEO_FORMAT_1080_60I` | 1080i60 |
120
351
  | 4 | `VIDEO_FORMAT_1080_60P` | 1080p60 |
121
352
 
122
- ### CodecId
123
353
 
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 |
354
+ ### Callback
133
355
 
134
- ### EventTopic
356
+ Callback message for event notifications.
357
+ Used to trigger client-side callbacks when specific events occur.
135
358
 
136
- | Value | Name | Description |
359
+
360
+ | Field | Type | Description |
137
361
  |-------|------|-------------|
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 |
362
+ | `event` | string | Event name/identifier |
363
+ | `data` | string | Event data (JSON or other format) |
364
+
365
+
366
+ ### Empty
367
+
368
+ Empty message for RPCs that don't need request/response data.
369
+ This is the standard protobuf convention for "void" operations.
370
+
371
+
372
+ ### NameValue
373
+
374
+ Key-value pair for metadata and generic data.
375
+ Used for transport metadata, custom properties, etc.
144
376
 
145
- ### Vec4
146
377
 
147
378
  | Field | Type | Description |
148
379
  |-------|------|-------------|
149
- | `x` | float | Red / X |
150
- | `y` | float | Green / Y |
151
- | `z` | float | Blue / Z |
152
- | `w` | float | Alpha / W |
380
+ | `name` | string | Key name |
381
+ | `value` | PropValue | Value as string |
382
+
153
383
 
154
384
  ### PropValue
155
385
 
156
- Oneof `value`:
386
+ Property value union type.
387
+ Used for setting compositor properties, audio parameters, etc.
388
+ Only one field should be set at a time.
389
+
157
390
 
158
391
  | Field | Type | Description |
159
392
  |-------|------|-------------|
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 |
393
+ | `float_value` | float | Floating point value (opacity, volume, etc.) |
394
+ | `vec4_value` | Vec4 | Vector value (color, position, etc.) |
395
+ | `string_value` | string | String value (text content, URLs, etc.) |
396
+ | `bool_value` | bool | Boolean value (enabled/disabled flags) |
397
+ | `int_value` | int32 | Integer value (indices, counts, etc.) |
398
+
165
399
 
166
400
  ### PropertyDomain
167
401
 
168
- Identifies which engine object owns the property. Oneof `owner`:
402
+ Property domain (compositor, audio mixer, etc.).
403
+ Used for property set/animate operations across different domains.
404
+
169
405
 
170
406
  | Field | Type | Description |
171
407
  |-------|------|-------------|
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) |
408
+ | `compositor_id` | string | Compositor ID |
409
+ | `audio_mixer_id` | string | Audio mixer ID |
410
+ | `replay_id` | string | Replay ID |
411
+ | `source_id` | string | Source ID |
412
+
413
+
414
+ ### TransportMetadata
415
+
416
+ Transport metadata (timecode, etc.).
417
+ Used for source and recorder metadata operations.
418
+
419
+
420
+ | Field | Type | Description |
421
+ |-------|------|-------------|
422
+ | `items` | repeated NameValue | Metadata items |
423
+
424
+
425
+ ### Vec4
426
+
427
+ 4-component vector used for colors (RGBA), positions, rectangles, etc.
428
+ Components are typically in the range [0.0, 1.0] for colors,
429
+ but can be arbitrary for positions and sizes.
176
430
 
177
- ### Callback
178
431
 
179
432
  | Field | Type | Description |
180
433
  |-------|------|-------------|
181
- | `event` | string | Event name identifier |
182
- | `data` | string | Event data (JSON or other) |
434
+ | `x` | float | Red component for colors, X position for coordinates |
435
+ | `y` | float | Green component for colors, Y position for coordinates |
436
+ | `z` | float | Blue component for colors, Z position for coordinates |
437
+ | `w` | float | Alpha component for colors, W component for coordinates |
438
+
183
439
 
184
440
  ---
185
441
 
186
- ## RPC Envelope
187
442
 
188
- `sesame.v1.rpc`
443
+ ## sesame/v1/compositor/compositor.proto
189
444
 
190
- ### Message
445
+ `sesame.v1.compositor`
191
446
 
192
- Oneof `payload`:
193
447
 
194
- | Field | Type | Description |
448
+
449
+
450
+ ### AnimationChannelEvaluationMode
451
+
452
+ Animation channel evaluation mode.
453
+
454
+ | Value | Name | Description |
195
455
  |-------|------|-------------|
196
- | `request` | Request | Client server request |
197
- | `response` | Response | Server client response |
198
- | `event` | Event | Server client push event |
456
+ | 0 | `ANIM_MODE_CONSTANT` | Constant (hold last value) |
457
+ | 1 | `ANIM_MODE_STATE_FROM` | State from (use initial value) |
458
+ | 2 | `ANIM_MODE_LOOP` | Loop animation |
459
+ | 3 | `ANIM_MODE_BOUNCE` | Bounce animation (ping-pong) |
199
460
 
200
- ### Request
201
461
 
202
- | Field | Type | Description |
462
+ ### NodeType
463
+
464
+ Node type in the scene graph.
465
+
466
+ | Value | Name | Description |
203
467
  |-------|------|-------------|
204
- | `method` | string | RPC method name (e.g. `"ExecuteCommandList"`) |
205
- | `seq` | uint32 | Sequence number for response matching |
206
- | `payload` | bytes | Serialized request protobuf |
468
+ | 0 | `NODE_TYPE_UNSPECIFIED` | Unspecified (invalid) |
469
+ | 1 | `NODE_TYPE_GROUP` | Group node (container) |
470
+ | 2 | `NODE_TYPE_TEXT` | Text node |
471
+ | 3 | `NODE_TYPE_VIDEO_BOX` | Video box node |
472
+ | 4 | `NODE_TYPE_IMAGE` | Image node |
473
+ | 5 | `NODE_TYPE_EFFECT_RTT` | Render-to-texture effect |
474
+ | 6 | `NODE_TYPE_EFFECT_TIMECODE` | Timecode display effect |
475
+ | 7 | `NODE_TYPE_EFFECT_CLIP_PLANE` | Clip plane effect |
476
+
477
+
478
+ ### CompositorAddRequest
479
+
480
+ Request to add a new compositor.
207
481
 
208
- ### Response
209
482
 
210
483
  | Field | Type | Description |
211
484
  |-------|------|-------------|
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) |
485
+ | `id` | string | Unique compositor ID |
486
+ | `multisample` | bool | Enable multisampling (anti-aliasing) |
487
+ | `width` | uint32 | Compositor width |
488
+ | `height` | uint32 | Compositor height |
489
+
490
+
491
+ ### CompositorClearRequest
492
+
493
+ Request to clear a compositor (remove all nodes).
216
494
 
217
- ### Event
218
495
 
219
496
  | Field | Type | Description |
220
497
  |-------|------|-------------|
221
- | `topic` | EventTopic | Event topic |
222
- | `payload` | bytes | Serialized `status.Event` protobuf |
498
+ | `id` | string | Compositor ID to clear |
223
499
 
224
- ---
225
500
 
226
- ## Commands
501
+ ### CompositorRemoveRequest
227
502
 
228
- `sesame.v1.commands`
503
+ Request to remove a compositor.
229
504
 
230
- Commands are batched into a `CommandList` and executed atomically via `ExecuteCommandList`.
231
505
 
232
- ### CommandListItem
506
+ | Field | Type | Description |
507
+ |-------|------|-------------|
508
+ | `id` | string | Compositor ID to remove |
509
+
510
+
511
+ ### KeyFrame
512
+
513
+ Animation keyframe.
514
+
233
515
 
234
516
  | Field | Type | Description |
235
517
  |-------|------|-------------|
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 |
518
+ | `time_us` | int64 | Keyframe time in microseconds |
519
+ | `value` | sesame.v1.common.PropValue | Keyframe value |
520
+ | `easing_in` | string | Easing function for incoming interpolation |
521
+ | `easing_out` | string | Easing function for outgoing interpolation |
267
522
 
268
- ---
269
523
 
270
- ## Sources
524
+ ### NodeAddRequest
271
525
 
272
- `sesame.v1.sources`
526
+ Request to add a node to the scene graph.
273
527
 
274
- ### SourceType
275
528
 
276
- | Value | Name | Description |
529
+ | Field | Type | Description |
277
530
  |-------|------|-------------|
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 |
531
+ | `compositor_id` | string | Compositor ID |
532
+ | `parent_address` | string | Parent node address (e.g., "root/layer1") |
533
+ | `node_id` | string | New node ID |
534
+ | `node_type` | NodeType | Node type |
289
535
 
290
- ### SourceTransportState
291
536
 
292
- | Value | Name | Description |
537
+ ### NodeRemoveRequest
538
+
539
+ Request to remove a node from the scene graph.
540
+
541
+
542
+ | Field | Type | Description |
293
543
  |-------|------|-------------|
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) |
544
+ | `compositor_id` | string | Compositor ID |
545
+ | `address` | string | Node address to remove |
299
546
 
300
- ### SourceTransportCommandType
301
547
 
302
- | Value | Name | Description |
548
+ ### PropertyAnimateRequest
549
+
550
+ Request to animate a property.
551
+
552
+
553
+ | Field | Type | Description |
303
554
  |-------|------|-------------|
304
- | 0 | `SOURCE_TRANSPORT_CMD_UNSPECIFIED` | Invalid |
305
- | 1 | `SOURCE_TRANSPORT_CMD_STOP` | Stop playback |
306
- | 2 | `SOURCE_TRANSPORT_CMD_PLAY` | Start playback |
555
+ | `domain` | sesame.v1.common.PropertyDomain | Property domain |
556
+ | `address` | string | Node address |
557
+ | `property` | string | Property name |
558
+ | `keyframes` | repeated KeyFrame | Animation keyframes |
559
+ | `before` | AnimationChannelEvaluationMode | Evaluation mode before first keyframe |
560
+ | `after` | AnimationChannelEvaluationMode | Evaluation mode after last keyframe |
561
+
562
+
563
+ ### PropertySetRequest
564
+
565
+ Request to set a property value.
566
+
567
+
568
+ | Field | Type | Description |
569
+ |-------|------|-------------|
570
+ | `domain` | sesame.v1.common.PropertyDomain | Property domain |
571
+ | `address` | string | Node address |
572
+ | `property` | string | Property name |
573
+ | `value` | sesame.v1.common.PropValue | Property value |
574
+
575
+
576
+ ---
577
+
578
+
579
+ ## sesame/v1/jobs/jobs.proto
580
+
581
+ `sesame.v1.jobs`
582
+
583
+
584
+
585
+
586
+ ### ContainerFormat
587
+
588
+ Container format for exported files.
589
+
590
+ | Value | Name | Description |
591
+ |-------|------|-------------|
592
+ | 0 | `CONTAINER_FORMAT_UNSPECIFIED` | Unspecified (invalid) |
593
+ | 1 | `CONTAINER_FORMAT_MP4` | MP4 container |
594
+ | 2 | `CONTAINER_FORMAT_MOV` | QuickTime MOV container |
595
+ | 3 | `CONTAINER_FORMAT_MKV` | Matroska container |
596
+ | 4 | `CONTAINER_FORMAT_MXF` | Material eXchange Format |
597
+
598
+
599
+ ### JobStatus
600
+
601
+ Job status.
602
+
603
+ | Value | Name | Description |
604
+ |-------|------|-------------|
605
+ | 0 | `JOB_STATUS_UNSPECIFIED` | Unspecified (invalid) |
606
+ | 1 | `JOB_STATUS_PENDING` | Pending (not started) |
607
+ | 2 | `JOB_STATUS_IN_PROGRESS` | In progress |
608
+ | 3 | `JOB_STATUS_COMPLETE` | Complete |
609
+ | 4 | `JOB_STATUS_ABORTED` | Aborted by user |
610
+ | 5 | `JOB_STATUS_ERROR` | Error occurred |
611
+
612
+
613
+ ### JobType
614
+
615
+ Job type.
616
+
617
+ | Value | Name | Description |
618
+ |-------|------|-------------|
619
+ | 0 | `JOB_TYPE_UNSPECIFIED` | Unspecified (invalid) |
620
+ | 1 | `JOB_TYPE_EXPORT` | Playlist export |
621
+ | 2 | `JOB_TYPE_IMPORT` | Clip import |
622
+
623
+
624
+ ### RateControlMode
625
+
626
+ Rate control mode for video encoding.
627
+
628
+ | Value | Name | Description |
629
+ |-------|------|-------------|
630
+ | 0 | `RATE_CONTROL_MODE_UNSPECIFIED` | Unspecified (invalid) |
631
+ | 1 | `RATE_CONTROL_MODE_CBR` | Constant bitrate |
632
+ | 2 | `RATE_CONTROL_MODE_VBR` | Variable bitrate |
633
+ | 3 | `RATE_CONTROL_MODE_CQ` | Constant quality |
634
+
635
+
636
+ ### ExportConfiguration
637
+
638
+ Playlist export configuration.
639
+
640
+
641
+ | Field | Type | Description |
642
+ |-------|------|-------------|
643
+ | `filename` | string | Output filename |
644
+ | `container` | ContainerFormat | Output container format |
645
+ | `video_codec` | sesame.v1.common.CodecType | Video codec |
646
+ | `width` | uint32 | Output width |
647
+ | `height` | uint32 | Output height |
648
+ | `fps_num` | uint32 | Frame rate numerator |
649
+ | `fps_den` | uint32 | Frame rate denominator |
650
+ | `rate_control` | RateControlMode | Video rate control mode |
651
+ | `video_bitrate_kbps` | uint32 | Target video bitrate (kbps) |
652
+ | `max_video_bitrate_kbps` | uint32 | Peak video bitrate cap (kbps) |
653
+ | `gop_size` | uint32 | GOP size in frames |
654
+ | `max_b_frames` | uint32 | Maximum B-frames |
655
+ | `profile` | string | Codec profile (e.g. main, high) |
656
+ | `level` | string | Codec level (e.g. 4.1, 5.1) |
657
+ | `pixel_format` | string | Pixel format (e.g. yuv420p) |
658
+ | `color_primaries` | string | Color primaries (e.g. bt709) |
659
+ | `color_transfer` | string | Transfer characteristics (e.g. bt709) |
660
+ | `color_matrix` | string | Matrix coefficients (e.g. bt709) |
661
+ | `full_range` | bool | Full range if true, limited if false |
662
+ | `audio_codec` | sesame.v1.common.CodecType | Audio codec |
663
+ | `audio_bitrate_kbps` | uint32 | Audio bitrate (kbps) |
664
+ | `audio_sample_rate_hz` | uint32 | Audio sample rate (Hz) |
665
+ | `audio_channels` | uint32 | Number of audio channels |
666
+ | `audio_routing` | repeated uint32 | Audio channel routing |
667
+
668
+
669
+ ### ExportStartRequest
670
+
671
+ Request to start playlist export.
672
+
673
+
674
+ | Field | Type | Description |
675
+ |-------|------|-------------|
676
+ | `config` | ExportConfiguration | Export configuration |
677
+ | `items` | repeated sesame.v1.recorder.PlaylistItem | Playlist items |
678
+
679
+
680
+ ### ImportConfiguration
681
+
682
+ Clip import configuration.
683
+
684
+
685
+ | Field | Type | Description |
686
+ |-------|------|-------------|
687
+ | `src_filename` | string | Source filename |
688
+ | `audio_routing` | repeated uint32 | Audio channel routing |
689
+ | `dst_recorder_id` | string | Destination recorder ID |
690
+ | `dst_clip_id` | uint64 | Destination clip ID |
691
+ | `dst_clip_name` | string | Destination clip name |
692
+ | `dst_clip_user_data` | string | Destination clip user data |
693
+
694
+
695
+ ### ImportStartRequest
696
+
697
+ Request to start clip import.
698
+
699
+
700
+ | Field | Type | Description |
701
+ |-------|------|-------------|
702
+ | `config` | ImportConfiguration | Import configuration |
703
+
704
+
705
+ ### Job
706
+
707
+ A job. Used as RPC response, list item, and event payload.
708
+
709
+
710
+ | Field | Type | Description |
711
+ |-------|------|-------------|
712
+ | `id` | uint32 | Job ID |
713
+ | `type` | JobType | Job type |
714
+ | `status` | JobStatus | Current status |
715
+ | `name` | string | Job name (e.g. "Export playlist") |
716
+ | `description` | string | Job description (e.g. filename) |
717
+ | `error` | optional string | Error message (if status == ERROR) |
718
+ | `progress` | int64 | Current progress (us) |
719
+ | `total` | int64 | Total duration (us) |
720
+ | `timing_info` | optional TimingInfo | Timing info (set on completion for imports) |
721
+
722
+
723
+ ### JobAbortRequest
724
+
725
+ Request to abort a job.
726
+
727
+
728
+ | Field | Type | Description |
729
+ |-------|------|-------------|
730
+ | `job_id` | uint32 | Job ID to abort |
731
+
732
+
733
+ ### JobList
734
+
735
+ List of jobs.
736
+
737
+
738
+ | Field | Type | Description |
739
+ |-------|------|-------------|
740
+ | `jobs` | repeated Job | |
741
+
742
+
743
+ ### JobListRequest
744
+
745
+ Request to list all jobs.
746
+
747
+
748
+ ### JobStartRequest
749
+
750
+ Request to start a job.
751
+
752
+
753
+ | Field | Type | Description |
754
+ |-------|------|-------------|
755
+ | `export_request` | ExportStartRequest | Playlist export |
756
+ | `import_request` | ImportStartRequest | Clip import |
757
+
758
+
759
+ ### JobStatusRequest
760
+
761
+ Request to get job status.
762
+
763
+
764
+ | Field | Type | Description |
765
+ |-------|------|-------------|
766
+ | `job_id` | uint32 | Job ID |
767
+
768
+
769
+ ### TimingInfo
770
+
771
+ Timing information for clips.
772
+
773
+
774
+ | Field | Type | Description |
775
+ |-------|------|-------------|
776
+ | `tc_in` | int64 | In timecode (us) |
777
+ | `tc_out` | int64 | Out timecode (us) |
778
+
779
+
780
+ ---
781
+
782
+
783
+ ## sesame/v1/outputs/output.proto
784
+
785
+ `sesame.v1.outputs`
786
+
787
+
788
+
789
+
790
+ ### EncoderPreset
791
+
792
+ Encoder preset.
793
+
794
+ | Value | Name | Description |
795
+ |-------|------|-------------|
796
+ | 0 | `ENCODER_PRESET_UNSPECIFIED` | Unspecified (invalid) |
797
+ | 1 | `ENCODER_PRESET_LOW_LATENCY` | Low-latency tune |
798
+ | 2 | `ENCODER_PRESET_LOW_LATENCY_IDR_ONLY` | Low-latency with IDR-only GOP |
799
+ | 3 | `ENCODER_PRESET_HIGH_QUALITY` | High-quality tune |
800
+
801
+
802
+ ### OutputType
803
+
804
+ Type of output.
805
+
806
+ | Value | Name | Description |
807
+ |-------|------|-------------|
808
+ | 0 | `OUTPUT_TYPE_UNSPECIFIED` | Unspecified (invalid) |
809
+ | 1 | `OUTPUT_TYPE_ENCODED_WEBSOCKET` | Encoded WebSocket stream |
810
+ | 2 | `OUTPUT_TYPE_ENCODED_RECORDER` | Encoded recorder |
811
+ | 3 | `OUTPUT_TYPE_DECKLINK` | Blackmagic Decklink output |
812
+ | 4 | `OUTPUT_TYPE_SYSTEM_AUDIO` | System audio output |
813
+ | 5 | `OUTPUT_TYPE_ENCODED_SRT` | Encoded SRT stream |
814
+ | 6 | `OUTPUT_TYPE_ENCODED_MOQ` | Encoded MoQ stream |
815
+ | 7 | `OUTPUT_TYPE_ENCODED_SUPER_SLOWMO_RECORDER` | Super slow-mo recorder |
816
+
817
+
818
+ ### RecorderType
819
+
820
+ Recorder type.
821
+
822
+ | Value | Name | Description |
823
+ |-------|------|-------------|
824
+ | 0 | `RECORDER_TYPE_UNSPECIFIED` | Unspecified (invalid) |
825
+ | 1 | `RECORDER_TYPE_LIVE` | Live recorder (circular buffer) |
826
+ | 2 | `RECORDER_TYPE_CLIPS` | Clip recorder; not continuously recording, only ingested frames are persisted |
827
+
828
+
829
+ ### DecklinkOutputConfig
830
+
831
+ Decklink output configuration.
832
+
833
+
834
+ | Field | Type | Description |
835
+ |-------|------|-------------|
836
+ | `device_index` | uint32 | Decklink device index |
837
+ | `video_format` | sesame.v1.common.VideoFormat | Video format |
838
+ | `key_and_fill` | bool | Key and fill mode |
839
+
840
+
841
+ ### EncodedMoqOutputConfig
842
+
843
+
844
+
845
+
846
+ | Field | Type | Description |
847
+ |-------|------|-------------|
848
+ | `encoder` | EncoderConfig | Encoded transport settings |
849
+ | `url` | string | MoQ URL |
850
+ | `broadcast` | string | Broadcast namespace |
851
+ | `key` | string | Authentication key |
852
+
853
+
854
+ ### EncodedRecorderOutputConfig
855
+
856
+
857
+
858
+
859
+ | Field | Type | Description |
860
+ |-------|------|-------------|
861
+ | `encoder` | EncoderConfig | Encoded transport settings |
862
+ | `filename` | string | Base filename |
863
+ | `size_gb` | uint32 | Maximum size in GB |
864
+ | `group_id` | string | Group ID for organization |
865
+ | `recorder_type` | RecorderType | Recorder type |
866
+
867
+
868
+ ### EncodedSrtOutputConfig
869
+
870
+
871
+
872
+
873
+ | Field | Type | Description |
874
+ |-------|------|-------------|
875
+ | `url` | string | SRT URL |
876
+ | `encoder` | EncoderConfig | Encoded transport settings |
877
+
878
+
879
+ ### EncodedSuperSlowMoRecorderOutputConfig
880
+
881
+
882
+
883
+
884
+ | Field | Type | Description |
885
+ |-------|------|-------------|
886
+ | `encoder` | EncoderConfig | Encoded transport settings |
887
+ | `filename` | string | Base filename |
888
+ | `size_gb` | uint32 | Maximum size in GB |
889
+ | `group_id` | string | Group ID |
890
+ | `recorder_type` | RecorderType | Recorder type |
891
+ | `composition_ids` | repeated string | Compositor IDs to record |
892
+ | `source_ids` | repeated string | Source IDs to record |
893
+
894
+
895
+ ### EncodedWebSocketOutputConfig
896
+
897
+ -----------------------------------------------------------------------------
898
+ Type-specific output payloads
899
+ -----------------------------------------------------------------------------
900
+
901
+
902
+ | Field | Type | Description |
903
+ |-------|------|-------------|
904
+ | `channel` | string | WebSocket channel/topic |
905
+ | `encoder` | EncoderConfig | Encoded transport settings |
906
+
907
+
908
+ ### EncoderConfig
909
+
910
+ Encoded output configuration (WebSocket, SRT, MoQ).
911
+
912
+
913
+ | Field | Type | Description |
914
+ |-------|------|-------------|
915
+ | `codec` | sesame.v1.common.CodecType | Encoder codec |
916
+ | `preset` | EncoderPreset | Encoder preset |
917
+ | `bitrate_kbps` | uint32 | Bitrate in kbps |
918
+ | `keyframe_interval` | uint32 | GOP length in frames (0 = codec/preset default) |
919
+ | `width` | uint32 | Video width |
920
+ | `height` | uint32 | Video height |
921
+ | `fps` | float | Video framerate |
922
+
923
+
924
+ ### KeyframeRequest
925
+
926
+ Keyframe request for encoder.
927
+ Requests an immediate keyframe (IDR frame) from an encoder output.
928
+
929
+
930
+ | Field | Type | Description |
931
+ |-------|------|-------------|
932
+ | `id` | string | ID of the output to request keyframe from |
933
+
934
+
935
+ ### OutputAddRequest
936
+
937
+ Request to add a new output.
938
+
939
+
940
+ | Field | Type | Description |
941
+ |-------|------|-------------|
942
+ | `id` | string | Unique output ID |
943
+ | `composition_id` | string | Compositor ID to output |
944
+ | `audio_mix_ids` | repeated string | Audio mixer IDs |
945
+ | `use_as_clock` | bool | Use as master clock |
946
+ | `websocket` | EncodedWebSocketOutputConfig | |
947
+ | `recorder` | EncodedRecorderOutputConfig | |
948
+ | `super_slowmo_recorder` | EncodedSuperSlowMoRecorderOutputConfig | |
949
+ | `srt` | EncodedSrtOutputConfig | |
950
+ | `moq` | EncodedMoqOutputConfig | |
951
+ | `decklink` | DecklinkOutputConfig | |
952
+ | `system_audio` | SystemAudioOutputConfig | |
953
+
954
+
955
+ ### OutputRemoveRequest
956
+
957
+ Request to remove an output.
958
+
959
+
960
+ | Field | Type | Description |
961
+ |-------|------|-------------|
962
+ | `id` | string | Output ID to remove |
963
+
964
+
965
+ ### OutputStatus
966
+
967
+ Output status information.
968
+
969
+
970
+ | Field | Type | Description |
971
+ |-------|------|-------------|
972
+ | `id` | string | Output ID |
973
+ | `type` | OutputType | Output type |
974
+ | `state` | sesame.v1.common.ConnectionState | Connection/lifecycle state |
975
+ | `msg` | optional string | Error message (typically when state == ERROR) |
976
+ | `url` | string | Output URL |
977
+ | `buffer_size` | uint32 | Buffer size (frames) |
978
+ | `srt_stats` | optional sesame.v1.status.SRTSendStatistics | SRT stats (if SRT output) |
979
+
980
+
981
+ ### OutputUpdateRequest
982
+
983
+ Request to update an existing output.
984
+
985
+
986
+ | Field | Type | Description |
987
+ |-------|------|-------------|
988
+ | `id` | string | Output ID to update |
989
+ | `composition_id` | string | Compositor ID |
990
+ | `audio_mix_ids` | repeated string | Audio mixer IDs |
991
+ | `use_as_clock` | bool | Use as master clock |
992
+ | `websocket` | EncodedWebSocketOutputConfig | |
993
+ | `recorder` | EncodedRecorderOutputConfig | |
994
+ | `super_slowmo_recorder` | EncodedSuperSlowMoRecorderOutputConfig | |
995
+ | `srt` | EncodedSrtOutputConfig | |
996
+ | `moq` | EncodedMoqOutputConfig | |
997
+ | `decklink` | DecklinkOutputConfig | |
998
+ | `system_audio` | SystemAudioOutputConfig | |
999
+
1000
+
1001
+ ### SystemAudioOutputConfig
1002
+
1003
+
1004
+
1005
+
1006
+ | Field | Type | Description |
1007
+ |-------|------|-------------|
1008
+ | `device_name` | string | System audio device settings |
1009
+
1010
+
1011
+ ---
1012
+
1013
+
1014
+ ## sesame/v1/recorder/recorder.proto
1015
+
1016
+ `sesame.v1.recorder`
1017
+
1018
+
1019
+
1020
+
1021
+ ### TransitionType
1022
+
1023
+ Transition type for playlist items.
1024
+
1025
+ | Value | Name | Description |
1026
+ |-------|------|-------------|
1027
+ | 0 | `TRANSITION_TYPE_MIX` | Mix/dissolve transition |
1028
+ | 1 | `TRANSITION_TYPE_FADE_TO_COLOR` | Fade to color |
1029
+ | 2 | `TRANSITION_TYPE_FADE_FROM_COLOR` | Fade from color |
1030
+ | 3 | `TRANSITION_TYPE_FADE_TO_FROM_COLOR` | Fade to and from color |
1031
+
1032
+
1033
+ ### PlaylistItem
1034
+
1035
+ Playlist item for recorder source playback.
1036
+
1037
+
1038
+ | Field | Type | Description |
1039
+ |-------|------|-------------|
1040
+ | `recorder_id` | string | Recorder ID |
1041
+ | `id` | uint64 | Clip ID |
1042
+ | `transition_time_us` | int64 | Transition duration (us) |
1043
+ | `transition_type` | TransitionType | Transition type |
1044
+ | `transition_fade_color` | sesame.v1.common.Vec4 | Fade color |
1045
+ | `speed` | float | Playback speed |
1046
+ | `audio_routing` | repeated uint32 | Audio routing |
1047
+ | `start_time_us` | optional int64 | Start time (us) |
1048
+ | `end_time_us` | optional int64 | End time (us) |
1049
+ | `audio_levels` | repeated float | Audio levels per channel (0.0-1.0) |
1050
+
1051
+
1052
+ ### RecorderClip
1053
+
1054
+ Recorder clip information.
1055
+
1056
+
1057
+ | Field | Type | Description |
1058
+ |-------|------|-------------|
1059
+ | `id` | uint64 | Clip ID |
1060
+ | `name` | string | Clip name |
1061
+ | `user_data` | string | User-defined data |
1062
+ | `flags` | uint64 | Clip flags (bitfield) |
1063
+ | `start_time_us` | int64 | Start time (us) |
1064
+ | `end_time_us` | int64 | End time (us) |
1065
+ | `locked_start_us` | int64 | Locked start time (us) |
1066
+ | `locked_end_us` | int64 | Locked end time (us) |
1067
+ | `user_time_us` | int64 | User-defined timecode (us) |
1068
+
1069
+
1070
+ ### RecorderClipAddRequest
1071
+
1072
+ Request to add a clip to a recorder.
1073
+
1074
+
1075
+ | Field | Type | Description |
1076
+ |-------|------|-------------|
1077
+ | `clip` | RecorderClip | Clip to add |
1078
+
1079
+
1080
+ ### RecorderClipCopyRequest
1081
+
1082
+ Request to copy a clip.
1083
+
1084
+
1085
+ | Field | Type | Description |
1086
+ |-------|------|-------------|
1087
+ | `clip_id` | uint64 | Source clip ID |
1088
+ | `new_clip_id` | uint64 | Destination clip ID |
1089
+
1090
+
1091
+ ### RecorderClipFlagSetRequest
1092
+
1093
+ Request to set a clip flag.
1094
+
1095
+
1096
+ | Field | Type | Description |
1097
+ |-------|------|-------------|
1098
+ | `clip_id` | uint64 | Clip ID |
1099
+ | `flag` | uint64 | Flag to set/clear |
1100
+ | `value` | bool | Flag value |
1101
+
1102
+
1103
+ ### RecorderClipRange
1104
+
1105
+ Clip id range.
1106
+
1107
+
1108
+ | Field | Type | Description |
1109
+ |-------|------|-------------|
1110
+ | `low` | uint64 | Low clip ID |
1111
+ | `high` | uint64 | High clip ID |
1112
+
1113
+
1114
+ ### RecorderClipRemoveRequest
1115
+
1116
+ Request to remove a clip.
1117
+
1118
+
1119
+ | Field | Type | Description |
1120
+ |-------|------|-------------|
1121
+ | `clip_id` | uint64 | Clip ID to remove |
1122
+
1123
+
1124
+ ### RecorderClipsClearRequest
1125
+
1126
+ Request to clear clips with filters.
1127
+
1128
+
1129
+ | Field | Type | Description |
1130
+ |-------|------|-------------|
1131
+ | `protected_ranges` | repeated RecorderClipRange | Protected time ranges |
1132
+ | `must_have_flags` | uint64 | Clips must have these flags |
1133
+ | `must_not_have_flags` | uint64 | Clips must not have these flags |
1134
+
1135
+
1136
+ ### RecorderClipsGetRequest
1137
+
1138
+ Request to get all clips from a recorder.
1139
+
1140
+ Empty - returns all clips
1141
+
1142
+
1143
+ ### RecorderClipsGetResponse
1144
+
1145
+ Response with recorder clips.
1146
+
1147
+
1148
+ | Field | Type | Description |
1149
+ |-------|------|-------------|
1150
+ | `clips` | repeated RecorderClip | List of clips |
1151
+
1152
+
1153
+ ### RecorderClipsVerifyRequest
1154
+
1155
+ Request to verify clip integrity.
1156
+
1157
+ Empty - verifies all clips
1158
+
1159
+
1160
+ ### RecorderClipsVerifyResponse
1161
+
1162
+ Response with verification errors.
1163
+
1164
+
1165
+ | Field | Type | Description |
1166
+ |-------|------|-------------|
1167
+ | `errors` | repeated string | List of errors |
1168
+
1169
+
1170
+ ### RecorderEvent
1171
+
1172
+ Recorder event notification.
1173
+
1174
+
1175
+ | Field | Type | Description |
1176
+ |-------|------|-------------|
1177
+ | `id` | string | Recorder ID |
1178
+ | `online` | bool | Is recorder online |
1179
+ | `message` | optional string | Event message |
1180
+
1181
+
1182
+ ### RecorderLockedDurationSetRequest
1183
+
1184
+ Request to set locked duration.
1185
+
1186
+
1187
+ | Field | Type | Description |
1188
+ |-------|------|-------------|
1189
+ | `frames` | uint32 | Locked duration in frames |
1190
+
1191
+
1192
+ ### RecorderMetadataSetRequest
1193
+
1194
+ Request to set recorder metadata.
1195
+
1196
+
1197
+ | Field | Type | Description |
1198
+ |-------|------|-------------|
1199
+ | `metadata` | sesame.v1.common.TransportMetadata | Metadata to set |
1200
+
1201
+
1202
+ ### RecorderOkResponse
1203
+
1204
+ Generic OK response.
1205
+
1206
+ Empty - indicates success
1207
+
1208
+
1209
+ ### RecorderRequest
1210
+
1211
+ Recorder request wrapper.
1212
+
1213
+
1214
+ | Field | Type | Description |
1215
+ |-------|------|-------------|
1216
+ | `recorder_id` | string | Recorder ID |
1217
+ | `get_clips` | RecorderClipsGetRequest | |
1218
+ | `add_clip` | RecorderClipAddRequest | |
1219
+ | `remove_clip` | RecorderClipRemoveRequest | |
1220
+ | `clear_clips` | RecorderClipsClearRequest | |
1221
+ | `set_metadata` | RecorderMetadataSetRequest | |
1222
+ | `verify_clips` | RecorderClipsVerifyRequest | |
1223
+ | `set_clip_flag` | RecorderClipFlagSetRequest | |
1224
+ | `copy_clip` | RecorderClipCopyRequest | |
1225
+ | `set_locked_duration` | RecorderLockedDurationSetRequest | |
1226
+
1227
+
1228
+ ### RecorderResponse
1229
+
1230
+ Recorder response wrapper.
1231
+
1232
+
1233
+ | Field | Type | Description |
1234
+ |-------|------|-------------|
1235
+ | `get_clips_response` | RecorderClipsGetResponse | |
1236
+ | `ok_response` | RecorderOkResponse | |
1237
+ | `verify_clips_response` | RecorderClipsVerifyResponse | |
1238
+
1239
+
1240
+ ### RecorderStatus
1241
+
1242
+ Recorder status.
1243
+
1244
+
1245
+ | Field | Type | Description |
1246
+ |-------|------|-------------|
1247
+ | `id` | string | Recorder ID |
1248
+
1249
+
1250
+ ---
1251
+
1252
+
1253
+ ## sesame/v1/rpc/rpc.proto
1254
+
1255
+ `sesame.v1.rpc`
1256
+
1257
+
1258
+
1259
+
1260
+ ### Event
1261
+
1262
+ Server event notification.
1263
+
1264
+
1265
+ | Field | Type | Description |
1266
+ |-------|------|-------------|
1267
+ | `topic` | sesame.v1.common.EventTopic | Event topic (typed) |
1268
+ | `payload` | bytes | Serialized event payload |
1269
+
1270
+
1271
+ ### Message
1272
+
1273
+ Top-level message wrapper.
1274
+ All RPC communication uses this message type.
1275
+ Exactly one payload field will be set, determining the message type.
1276
+
1277
+
1278
+ | Field | Type | Description |
1279
+ |-------|------|-------------|
1280
+ | `request` | Request | Client request |
1281
+ | `response` | Response | Server response |
1282
+ | `event` | Event | Server event |
1283
+
1284
+
1285
+ ### Request
1286
+
1287
+ RPC request from client to server.
1288
+
1289
+
1290
+ | Field | Type | Description |
1291
+ |-------|------|-------------|
1292
+ | `method` | string | RPC method name |
1293
+ | `seq` | uint32 | Sequence number for matching responses |
1294
+ | `payload` | bytes | Serialized request payload |
1295
+
1296
+
1297
+ ### Response
1298
+
1299
+ RPC response from server to client.
1300
+ Error handling:
1301
+ - If `ok` is true, `payload` contains the serialized success response and
1302
+ `error` should be empty.
1303
+ - If `ok` is false, `error` contains a human-readable message and `payload`
1304
+ may be empty or contain a partial diagnostic payload.
1305
+ - Transport-level failures (disconnect/timeouts) are not represented here and
1306
+ must be handled by the framing/transport layer.
1307
+
1308
+
1309
+ | Field | Type | Description |
1310
+ |-------|------|-------------|
1311
+ | `seq` | uint32 | Sequence number matching request |
1312
+ | `ok` | bool | Success flag |
1313
+ | `payload` | bytes | Serialized response payload |
1314
+ | `error` | string | Error message (if ok == false) |
1315
+
1316
+
1317
+ ---
1318
+
1319
+
1320
+ ## sesame/v1/rpc/service.proto
1321
+
1322
+ `sesame.v1.rpc`
1323
+
1324
+
1325
+
1326
+
1327
+ ### SesameAPIService
1328
+
1329
+ Main Sesame API service.
1330
+
1331
+ | Method | Request | Response | Description |
1332
+ |--------|---------|----------|-------------|
1333
+ | `ExecuteCommandList` | .sesame.v1.commands.CommandList | .sesame.v1.commands.CommandExecutionResponse | Execute a list of commands. |
1334
+ | `UpdateSubscriptions` | .sesame.v1.status.SubscriptionRequest | .sesame.v1.common.Empty | Update event subscriptions. |
1335
+ | `NotImplemented` | .sesame.v1.common.Empty | .sesame.v1.common.Empty | Not implemented (placeholder). |
1336
+ | `RequestEvents` | .sesame.v1.common.Empty | stream .sesame.v1.status.Event | Subscribe to events (server streaming). |
1337
+ | `RequestStatus` | .sesame.v1.common.Empty | .sesame.v1.status.Status | Get current system status. |
1338
+ | `RequestRecorderOperation` | .sesame.v1.recorder.RecorderRequest | .sesame.v1.recorder.RecorderResponse | Recorder operations. |
1339
+ | `StartJob` | .sesame.v1.jobs.JobStartRequest | .sesame.v1.jobs.Job | Job operations. |
1340
+ | `AbortJob` | .sesame.v1.jobs.JobAbortRequest | .sesame.v1.jobs.Job | Abort a running job. |
1341
+ | `GetJobStatus` | .sesame.v1.jobs.JobStatusRequest | .sesame.v1.jobs.Job | Fetch status for a job. |
1342
+ | `ListJobs` | .sesame.v1.jobs.JobListRequest | .sesame.v1.jobs.JobList | List jobs. |
1343
+ | `RequestKeyframe` | .sesame.v1.outputs.KeyframeRequest | .sesame.v1.common.Empty | Request keyframe from encoder. |
1344
+ | `RequestIODeviceList` | .sesame.v1.common.Empty | .sesame.v1.status.IODeviceListResponse | Get list of I/O devices. |
1345
+
1346
+
1347
+ ---
1348
+
1349
+
1350
+ ## sesame/v1/sources/source.proto
1351
+
1352
+ `sesame.v1.sources`
1353
+
1354
+
1355
+
1356
+
1357
+ ### DeinterlaceType
1358
+
1359
+ Deinterlacing mode for interlaced sources.
1360
+
1361
+ | Value | Name | Description |
1362
+ |-------|------|-------------|
1363
+ | 0 | `DEINTERLACE_TYPE_PROGRESSIVE` | Progressive (no deinterlacing) |
1364
+ | 1 | `DEINTERLACE_TYPE_UPPER_FIELD_FIRST` | Upper field first |
1365
+ | 2 | `DEINTERLACE_TYPE_LOWER_FIELD_FIRST` | Lower field first |
1366
+ | 3 | `DEINTERLACE_TYPE_AUTO` | Auto-detect field order |
1367
+
1368
+
1369
+ ### PreprocessStep
1370
+
1371
+ Video preprocessing step type.
1372
+
1373
+ | Value | Name | Description |
1374
+ |-------|------|-------------|
1375
+ | 0 | `PREPROCESS_STEP_UNSPECIFIED` | Unspecified (invalid) |
1376
+ | 1 | `PREPROCESS_STEP_VIDEO_SCOPES` | Video scopes/waveform |
1377
+ | 2 | `PREPROCESS_STEP_CHROMA_KEY` | Chroma key |
1378
+ | 3 | `PREPROCESS_STEP_BLUR` | Blur effect |
1379
+
1380
+
1381
+ ### SourceTextureSize
1382
+
1383
+ Source texture size for GPU upload.
1384
+
1385
+ | Value | Name | Description |
1386
+ |-------|------|-------------|
1387
+ | 0 | `SOURCE_TEXTURE_SIZE_UNSPECIFIED` | Unspecified (invalid) |
1388
+ | 1 | `SOURCE_TEXTURE_SIZE_HD` | HD resolution (1920x1080) |
1389
+ | 2 | `SOURCE_TEXTURE_SIZE_4K` | 4K resolution (3840x2160) |
1390
+
1391
+
1392
+ ### SourceTransportCommandType
1393
+
1394
+ Source transport command type.
1395
+
1396
+ | Value | Name | Description |
1397
+ |-------|------|-------------|
1398
+ | 0 | `SOURCE_TRANSPORT_CMD_UNSPECIFIED` | Unspecified (invalid) |
1399
+ | 1 | `SOURCE_TRANSPORT_CMD_STOP` | Stop playback |
1400
+ | 2 | `SOURCE_TRANSPORT_CMD_PLAY` | Start playback |
307
1401
  | 3 | `SOURCE_TRANSPORT_CMD_SEEK` | Seek to position |
308
1402
  | 4 | `SOURCE_TRANSPORT_CMD_LOOP` | Set loop mode |
309
- | 5 | `SOURCE_TRANSPORT_CMD_LIVE` | Switch to live |
1403
+ | 5 | `SOURCE_TRANSPORT_CMD_LIVE` | Switch to live mode |
310
1404
  | 6 | `SOURCE_TRANSPORT_CMD_JOG` | Jog forward/backward |
311
1405
  | 7 | `SOURCE_TRANSPORT_CMD_MONITOR` | Monitor mode |
312
1406
  | 8 | `SOURCE_TRANSPORT_CMD_SEEK_USER_TIME` | Seek to user timecode |
313
- | 9 | `SOURCE_TRANSPORT_CMD_TAKE` | Take (cut to next) |
1407
+ | 9 | `SOURCE_TRANSPORT_CMD_TAKE` | Take/cut to next |
314
1408
  | 10 | `SOURCE_TRANSPORT_CMD_POST_ROLL` | Post-roll |
315
1409
  | 11 | `SOURCE_TRANSPORT_CMD_PRE_ROLL` | Pre-roll |
316
1410
  | 12 | `SOURCE_TRANSPORT_CMD_NEXT` | Next item |
@@ -318,786 +1412,645 @@ Oneof `item` — exactly one per command:
318
1412
  | 14 | `SOURCE_TRANSPORT_CMD_TRANSITIONS_DISABLED` | Disable transitions |
319
1413
  | 15 | `SOURCE_TRANSPORT_CMD_SET_SCRUBBING` | Set scrubbing mode |
320
1414
 
321
- ### DecoderType
322
1415
 
323
- | Value | Name |
324
- |-------|------|
325
- | 0 | `DECODER_TYPE_UNSPECIFIED` |
326
- | 1 | `DECODER_TYPE_H264` |
327
- | 2 | `DECODER_TYPE_HEVC` |
328
- | 3 | `DECODER_TYPE_AV1` |
1416
+ ### SourceTransportState
1417
+
1418
+ Source transport/playback state.
1419
+
1420
+ | Value | Name | Description |
1421
+ |-------|------|-------------|
1422
+ | 0 | `SOURCE_TRANSPORT_STATE_STOPPED` | Stopped |
1423
+ | 1 | `SOURCE_TRANSPORT_STATE_PLAYING` | Playing |
1424
+ | 2 | `SOURCE_TRANSPORT_STATE_CUEING` | Cueing to position |
1425
+ | 3 | `SOURCE_TRANSPORT_STATE_ERROR` | Error state |
1426
+ | 4 | `SOURCE_TRANSPORT_STATE_PLAYING_LIVE` | Playing live (no seeking) |
1427
+
1428
+
1429
+ ### SourceType
1430
+
1431
+ Type of video/audio source.
1432
+
1433
+ | Value | Name | Description |
1434
+ |-------|------|-------------|
1435
+ | 0 | `SOURCE_TYPE_UNSPECIFIED` | Unspecified (invalid) |
1436
+ | 1 | `SOURCE_TYPE_FILE` | File source (video/audio file) |
1437
+ | 2 | `SOURCE_TYPE_RECORDER` | Recorder playback source |
1438
+ | 3 | `SOURCE_TYPE_BROWSER` | Browser/CEF source |
1439
+ | 4 | `SOURCE_TYPE_RTT` | Render-to-texture source |
1440
+ | 5 | `SOURCE_TYPE_DECKLINK` | Blackmagic Decklink capture |
1441
+ | 6 | `SOURCE_TYPE_SIGNAL_GENERATOR` | Test signal generator |
1442
+ | 7 | `SOURCE_TYPE_SYSTEM_AUDIO` | System audio input |
1443
+ | 8 | `SOURCE_TYPE_SRT_STREAM` | SRT stream |
1444
+ | 9 | `SOURCE_TYPE_WEBSOCKET` | WebSocket stream |
1445
+ | 10 | `SOURCE_TYPE_MOQ` | Media over QUIC stream |
1446
+
1447
+
1448
+ ### BrowserSourceConfig
1449
+
1450
+
1451
+
1452
+
1453
+ | Field | Type | Description |
1454
+ |-------|------|-------------|
1455
+ | `url` | string | Initial page URL |
1456
+ | `width` | uint32 | Optional browser width hint |
1457
+ | `height` | uint32 | Optional browser height hint |
1458
+
1459
+
1460
+ ### DecklinkSourceConfig
1461
+
1462
+ Decklink source configuration.
1463
+
1464
+
1465
+ | Field | Type | Description |
1466
+ |-------|------|-------------|
1467
+ | `device_index` | uint32 | Decklink device index |
1468
+ | `video_format` | sesame.v1.common.VideoFormat | Video format |
1469
+ | `sync_group` | optional uint32 | Sync group for genlock |
1470
+
1471
+
1472
+ ### EjectPlaylistRequest
1473
+
1474
+ Request to eject playlist from recorder source.
1475
+
1476
+
1477
+ | Field | Type | Description |
1478
+ |-------|------|-------------|
1479
+ | `source_id` | string | Source ID |
1480
+
1481
+
1482
+ ### FileSourceConfig
1483
+
1484
+ Type-specific source payloads.
1485
+
1486
+
1487
+ | Field | Type | Description |
1488
+ |-------|------|-------------|
1489
+ | `url` | string | File URL/path |
1490
+
1491
+
1492
+ ### LoadPlaylistRequest
1493
+
1494
+ Request to load a playlist into a recorder source.
1495
+
1496
+
1497
+ | Field | Type | Description |
1498
+ |-------|------|-------------|
1499
+ | `source_id` | string | Source ID |
1500
+ | `user_playlist_id` | string | User playlist ID |
1501
+ | `items` | repeated sesame.v1.recorder.PlaylistItem | Playlist items |
1502
+ | `start_time_us` | optional int64 | Start time (us) |
1503
+ | `start_index` | optional int64 | Start item index |
1504
+ | `material_pos_us` | optional int64 | Material position (us) |
1505
+
1506
+
1507
+ ### MoqSourceConfig
1508
+
1509
+
1510
+
1511
+
1512
+ | Field | Type | Description |
1513
+ |-------|------|-------------|
1514
+ | `url` | string | MoQ relay URL |
1515
+ | `broadcast` | string | Broadcast namespace |
1516
+ | `key` | string | Authentication key |
1517
+ | `decode_buffer_frames` | uint32 | Live buffer size in frames (0 = use default) |
1518
+
1519
+
1520
+ ### RTTSourceConfig
1521
+
1522
+ RTT (Render-to-Texture) source configuration.
1523
+
1524
+
1525
+ | Field | Type | Description |
1526
+ |-------|------|-------------|
1527
+ | `rtt_id` | string | ID of the RTT render target to display |
1528
+ | `audio_mixes` | repeated string | Audio mixer IDs to include |
1529
+ | `delay_frames` | uint32 | Delay in frames |
1530
+
1531
+
1532
+ ### RecorderSourceConfig
1533
+
1534
+
1535
+
329
1536
 
330
- ### DeinterlaceType
1537
+ | Field | Type | Description |
1538
+ |-------|------|-------------|
1539
+ | `recorder_id` | string | Recorder ID |
1540
+ | `codec` | sesame.v1.common.CodecType | Preferred hardware decoder codec |
331
1541
 
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
1542
 
339
- ### SourceTextureSize
1543
+ ### SignalGeneratorSourceConfig
340
1544
 
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
1545
 
347
- ### PreprocessStep
348
1546
 
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
1547
 
356
- ### SourceCommonConfig
1548
+ ### SourceAddRequest
1549
+
1550
+ Request to add a new source.
357
1551
 
358
- Shared settings for all source types.
359
1552
 
360
1553
  | Field | Type | Description |
361
1554
  |-------|------|-------------|
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 |
1555
+ | `id` | string | Unique source ID |
1556
+ | `config` | SourceConfig | Source configuration |
1557
+
1558
+
1559
+ ### SourceCommonConfig
1560
+
1561
+ Shared fields for all source kinds.
372
1562
 
373
- ### SourceConfig
374
1563
 
375
1564
  | Field | Type | Description |
376
1565
  |-------|------|-------------|
377
- | `common` | SourceCommonConfig | Shared settings |
1566
+ | `user_id` | string | User-defined ID |
1567
+ | `use_as_clock` | bool | Use as master clock |
1568
+ | `audio_only` | bool | Audio-only mode |
1569
+ | `audio_channels` | uint32 | Requested/expected audio channel count |
1570
+ | `loop` | bool | Loop playback (if applicable) |
1571
+ | `play_state` | SourceTransportState | Initial playback state |
1572
+ | `mip_map` | bool | Generate mipmaps |
1573
+ | `texture_size` | SourceTextureSize | Texture size for GPU upload |
1574
+ | `deinterlace` | DeinterlaceType | Deinterlace mode |
1575
+ | `video_processors` | repeated VideoProcessor | Video processors |
378
1576
 
379
- Oneof `details` — exactly one required:
380
1577
 
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` |
1578
+ ### SourceConfig
393
1579
 
394
- ### Source Type Configs
1580
+ Source configuration.
1581
+ Defines how a source is created and configured.
395
1582
 
396
- **FileSourceConfig** — `{ url: string }`
397
1583
 
398
- **RecorderSourceConfig** `{ recorder_id: string, decoder_type: DecoderType }`
1584
+ | Field | Type | Description |
1585
+ |-------|------|-------------|
1586
+ | `common` | SourceCommonConfig | Shared source settings |
1587
+ | `file` | FileSourceConfig | SOURCE_TYPE_FILE |
1588
+ | `recorder` | RecorderSourceConfig | SOURCE_TYPE_RECORDER |
1589
+ | `browser` | BrowserSourceConfig | SOURCE_TYPE_BROWSER |
1590
+ | `rtt` | RTTSourceConfig | SOURCE_TYPE_RTT |
1591
+ | `decklink` | DecklinkSourceConfig | SOURCE_TYPE_DECKLINK |
1592
+ | `signal_generator` | SignalGeneratorSourceConfig | SOURCE_TYPE_SIGNAL_GENERATOR |
1593
+ | `system_audio` | SystemAudioSourceConfig | SOURCE_TYPE_SYSTEM_AUDIO |
1594
+ | `srt_stream` | SrtSourceConfig | SOURCE_TYPE_SRT_STREAM |
1595
+ | `websocket` | WebsocketSourceConfig | SOURCE_TYPE_WEBSOCKET |
1596
+ | `moq` | MoqSourceConfig | SOURCE_TYPE_MOQ |
399
1597
 
400
- **BrowserSourceConfig** — `{ url: string, width?: uint32, height?: uint32 }`
401
1598
 
402
- **RTTSourceConfig** — `{ rtt_id: string, audio_mixes: string[], delay_frames: uint32 }`
1599
+ ### SourceMetadataEvent
403
1600
 
404
- **DecklinkSourceConfig** `{ device_index: uint32, video_format: VideoFormat, sync_group?: uint32 }`
1601
+ Source metadata transport event notification.
405
1602
 
406
- **SignalGeneratorSourceConfig** — `{}` (no fields)
407
1603
 
408
- **SystemAudioSourceConfig** `{ device_name: string }` (empty = default device)
1604
+ | Field | Type | Description |
1605
+ |-------|------|-------------|
1606
+ | `source_id` | string | Source ID |
1607
+ | `metadata` | sesame.v1.common.TransportMetadata | Event metadata |
409
1608
 
410
- **SrtSourceConfig** — `{ url: string, decode_buffer_frames: uint32 }`
411
1609
 
412
- **WebsocketSourceConfig** — `{ channel: string, decode_buffer_frames: uint32 }`
1610
+ ### SourceMetadataSetRequest
413
1611
 
414
- **MoqSourceConfig** `{ url: string, broadcast: string, key: string, decode_buffer_frames: uint32 }`
1612
+ Request to set source metadata.
415
1613
 
416
- ### SourceTransportCommand
417
1614
 
418
1615
  | Field | Type | Description |
419
1616
  |-------|------|-------------|
420
- | `source_id` | string | Source ID |
421
- | `cmd_type` | SourceTransportCommandType | Command type |
422
- | `value` | PropValue | Command value |
1617
+ | `source_id` | string | Source ID |
1618
+ | `metadata` | sesame.v1.common.TransportMetadata | Metadata to set |
423
1619
 
424
- ### LoadPlaylistRequest
425
1620
 
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) |
1621
+ ### SourceRemoveRequest
1622
+
1623
+ Request to remove a source.
434
1624
 
435
- ### SourceStatus
436
1625
 
437
1626
  | Field | Type | Description |
438
1627
  |-------|------|-------------|
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) |
1628
+ | `id` | string | Source ID to remove |
460
1629
 
461
- ---
462
1630
 
463
- ## Outputs
1631
+ ### SourceStatus
464
1632
 
465
- `sesame.v1.outputs`
1633
+ Source status information.
466
1634
 
467
- ### OutputType
468
1635
 
469
- | Value | Name | Description |
1636
+ | Field | Type | Description |
470
1637
  |-------|------|-------------|
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 |
1638
+ | `id` | string | Source ID |
1639
+ | `type` | SourceType | Source type |
1640
+ | `user_id` | string | User-defined ID |
1641
+ | `state` | sesame.v1.common.ConnectionState | Connection/lifecycle state |
1642
+ | `transport_state` | SourceTransportState | Transport state |
1643
+ | `msg` | optional string | Error message (typically when state == ERROR) |
1644
+ | `url` | string | Current URL |
1645
+ | `width` | uint32 | Video width |
1646
+ | `height` | uint32 | Video height |
1647
+ | `fps` | float | Video framerate |
1648
+ | `duration_us` | int64 | Duration (us) |
1649
+ | `play_position_us` | int64 | Playback position (us) |
1650
+ | `video_buf` | int32 | Video buffer level (frames) |
1651
+ | `audio_buf` | int32 | Audio buffer level (frames) |
1652
+ | `gpu_buf` | int32 | GPU buffer level (frames) |
1653
+ | `audio_channels` | uint32 | Active audio channels |
1654
+ | `audio_level` | float | Audio level (0.0-1.0) |
1655
+ | `lip_sync_offset_us` | int64 | Lip sync offset (us) |
1656
+ | `decode_timing` | sesame.v1.status.FrameTiming | Decode timing stats |
1657
+ | `video_buf_avg` | double | Average video buffer level |
1658
+ | `srt_stats` | optional sesame.v1.status.SRTReceiveStatistics | SRT stats (if SRT source) |
479
1659
 
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
1660
 
488
- ### EncoderPreset
1661
+ ### SourceTransportCommand
489
1662
 
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 |
1663
+ Source transport command.
496
1664
 
497
- ### EncoderConfig
498
1665
 
499
1666
  | Field | Type | Description |
500
1667
  |-------|------|-------------|
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 |
1668
+ | `source_id` | string | Source ID |
1669
+ | `cmd_type` | SourceTransportCommandType | Command type |
1670
+ | `value` | sesame.v1.common.PropValue | Command value |
1671
+
1672
+
1673
+ ### SourceUpdateRequest
1674
+
1675
+ Request to update an existing source.
508
1676
 
509
- ### OutputAddRequest
510
1677
 
511
1678
  | Field | Type | Description |
512
1679
  |-------|------|-------------|
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 |
1680
+ | `id` | string | Source ID to update |
1681
+ | `config` | SourceConfig | New configuration |
517
1682
 
518
- Oneof `output` — exactly one required:
519
1683
 
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 |
1684
+ ### SrtSourceConfig
529
1685
 
530
- ### Output Type Configs
531
1686
 
532
- **EncodedWebSocketOutputConfig** — `{ channel: string, encoder: EncoderConfig }`
533
1687
 
534
- **EncodedRecorderOutputConfig** — `{ encoder: EncoderConfig, filename: string, size_gb: uint32, group_id: string, recorder_type: RecorderType }`
535
1688
 
536
- **EncodedSuperSlowMoRecorderOutputConfig** Same as recorder + `{ composition_ids: string[], source_ids: string[] }`
1689
+ | Field | Type | Description |
1690
+ |-------|------|-------------|
1691
+ | `url` | string | SRT URL |
1692
+ | `decode_buffer_frames` | uint32 | Live buffer size in frames (0 = use default) |
537
1693
 
538
- **EncodedSrtOutputConfig** — `{ url: string, encoder: EncoderConfig }`
539
1694
 
540
- **EncodedMoqOutputConfig** — `{ encoder: EncoderConfig, url: string, broadcast: string, key: string }`
1695
+ ### SystemAudioSourceConfig
541
1696
 
542
- **DecklinkOutputConfig** — `{ device_index: uint32, video_format: VideoFormat, key_and_fill: bool }`
543
1697
 
544
- **SystemAudioOutputConfig** — `{ device_name: string }`
545
1698
 
546
- ### OutputStatus
547
1699
 
548
1700
  | Field | Type | Description |
549
1701
  |-------|------|-------------|
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) |
1702
+ | `device_name` | string | System input/output device name, empty for default |
557
1703
 
558
- ---
559
1704
 
560
- ## Compositor & Scene Graph
1705
+ ### VideoProcessor
561
1706
 
562
- `sesame.v1.compositor`
1707
+ Video processor instance configuration.
563
1708
 
564
- ### NodeType
565
1709
 
566
- | Value | Name | Description |
1710
+ | Field | Type | Description |
567
1711
  |-------|------|-------------|
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
1712
+ | `id` | string | Unique instance ID |
1713
+ | `type` | PreprocessStep | Processor type |
1714
+ | `params` | repeated VideoProcessorParam | Processor parameters |
578
1715
 
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
1716
 
586
- ### CompositorAddRequest
1717
+ ### VideoProcessorParam
587
1718
 
588
- | Field | Type | Description |
589
- |-------|------|-------------|
590
- | `id` | string | Unique compositor ID |
591
- | `multisample` | bool | Enable MSAA |
592
- | `width` | uint32 | Width |
593
- | `height` | uint32 | Height |
1719
+ Video processor parameter (mirrors AudioPluginParam).
594
1720
 
595
- ### NodeAddRequest
596
1721
 
597
1722
  | Field | Type | Description |
598
1723
  |-------|------|-------------|
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 |
1724
+ | `id` | uint32 | Parameter ID |
1725
+ | `float_value` | float | Parameter value |
603
1726
 
604
- ### PropertySetRequest
605
1727
 
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 |
1728
+ ### WebsocketSourceConfig
612
1729
 
613
- ### PropertyAnimateRequest
614
1730
 
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
1731
 
624
- ### KeyFrame
625
1732
 
626
1733
  | Field | Type | Description |
627
1734
  |-------|------|-------------|
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 |
1735
+ | `channel` | string | WebSocket channel/topic |
1736
+ | `decode_buffer_frames` | uint32 | Live buffer size in frames (0 = use default) |
1737
+
632
1738
 
633
1739
  ---
634
1740
 
635
- ## Audio Mixer
636
1741
 
637
- `sesame.v1.audio`
1742
+ ## sesame/v1/status/statistics.proto
638
1743
 
639
- ### AudioMixerChannelType
1744
+ `sesame.v1.status`
640
1745
 
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
1746
 
647
- ### AudioMixerChannel
648
1747
 
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
1748
 
659
- ### AudioPlugin
1749
+ ### FrameTiming
660
1750
 
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 |
1751
+ Frame timing statistics.
1752
+ Used to monitor decode/encode/render performance.
1753
+ All times are in microseconds (us).
667
1754
 
668
- ### AudioMixerConfig
669
1755
 
670
1756
  | Field | Type | Description |
671
1757
  |-------|------|-------------|
672
- | `channels` | AudioMixerChannel[] | Mixer channels |
673
- | `output_type` | AudioMixerChannelType | Output channel type |
674
- | `order` | uint32 | Processing order |
1758
+ | `frame_time` | int32 | Current frame time (us) |
1759
+ | `frame_time_avg` | int32 | Average frame time (us) |
1760
+ | `frame_time_min` | int32 | Minimum frame time (us) |
1761
+ | `frame_time_max` | int32 | Maximum frame time (us) |
675
1762
 
676
- ### AudioMixerStatus
677
1763
 
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 |
1764
+ ### MemoryDomainStats
1765
+
1766
+ Memory domain statistics.
1767
+ Tracks memory usage for different allocation domains.
684
1768
 
685
- ### AudioChannelStatus
686
1769
 
687
1770
  | Field | Type | Description |
688
1771
  |-------|------|-------------|
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
- ---
1772
+ | `current_bytes` | uint64 | Current allocated bytes |
1773
+ | `peak_bytes` | uint64 | Peak allocated bytes |
1774
+ | `budget_bytes` | uint64 | Budget/limit in bytes |
699
1775
 
700
- ## Recorder
701
1776
 
702
- `sesame.v1.recorder`
703
-
704
- ### TransitionType
1777
+ ### SRTReceiveStatistics
705
1778
 
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 |
1779
+ SRT receive statistics.
1780
+ Provides detailed metrics for SRT stream reception.
1781
+ Used for monitoring stream health and diagnosing issues.
712
1782
 
713
- ### RecorderClip
714
1783
 
715
1784
  | Field | Type | Description |
716
1785
  |-------|------|-------------|
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) |
1786
+ | `packets_received` | int64 | Total packets received |
1787
+ | `packets_received_lost` | int32 | Packets lost during reception |
1788
+ | `packet_ack_sent` | int32 | ACK packets sent |
1789
+ | `packet_nack_sent` | int32 | NACK packets sent (retransmission requests) |
1790
+ | `bytes_received` | int64 | Total bytes received |
1791
+ | `bytes_received_lost` | int64 | Bytes lost during reception |
1792
+ | `receive_rate_mbps` | double | Current receive rate (Mbps) |
1793
+ | `tsbpd_delay` | int32 | Timestamp-based packet delivery delay (ms) |
1794
+ | `bandwidth_mbps` | double | Available bandwidth (Mbps) |
1795
+ | `rtt_ms` | double | Round-trip time (ms) |
726
1796
 
727
- ### PlaylistItem
728
1797
 
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) |
1798
+ ### SRTSendStatistics
1799
+
1800
+ SRT send statistics.
1801
+ Provides detailed metrics for SRT stream transmission.
741
1802
 
742
- ### RecorderRequest
743
1803
 
744
1804
  | Field | Type | Description |
745
1805
  |-------|------|-------------|
746
- | `recorder_id` | string | Recorder ID |
1806
+ | `packets_sent` | int64 | Total packets sent |
1807
+ | `packets_sent_lost` | int32 | Packets lost during transmission |
1808
+ | `packets_sent_dropped` | int32 | Packets dropped (buffer full, etc.) |
1809
+ | `packets_retransmitted` | int32 | Packets retransmitted |
1810
+ | `packet_ack_received` | int32 | ACK packets received |
1811
+ | `packet_nack_received` | int32 | NACK packets received |
1812
+ | `bytes_sent` | int64 | Total bytes sent |
1813
+ | `bytes_sent_dropped` | int64 | Bytes dropped |
1814
+ | `send_rate_mbps` | double | Current send rate (Mbps) |
1815
+ | `bandwidth_mbps` | double | Available bandwidth (Mbps) |
1816
+ | `rtt_ms` | double | Round-trip time (ms) |
747
1817
 
748
- Oneof `request`:
749
1818
 
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 |
1819
+ ### SystemStatus
1820
+
1821
+ System status information.
1822
+ Provides overall system health and performance metrics.
761
1823
 
762
- ### RecorderEvent
763
1824
 
764
1825
  | Field | Type | Description |
765
1826
  |-------|------|-------------|
766
- | `id` | string | Recorder ID |
767
- | `online` | bool | Is recorder online |
768
- | `message` | string? | Event message |
1827
+ | `uptime` | uint64 | System uptime in seconds |
1828
+ | `framedrops` | uint32 | Total frames dropped |
1829
+ | `framerate` | float | Current framerate (fps) |
1830
+ | `gpu_mem` | uint64 | GPU memory used (bytes) - deprecated, use gpu_mem_used |
1831
+ | `cpu_mem` | uint64 | CPU memory used (bytes) |
1832
+ | `mem_gpu_pool` | MemoryDomainStats | GPU pool memory stats |
1833
+ | `mem_cpu_pool` | MemoryDomainStats | CPU pool memory stats |
1834
+ | `mem_gpu_adhoc` | MemoryDomainStats | GPU ad-hoc allocation stats |
1835
+ | `mem_gpu_pinned` | MemoryDomainStats | GPU pinned memory stats |
1836
+ | `gpu_mem_total` | uint64 | GPU hardware metrics (via NVML)
1837
+
1838
+ Total GPU memory (bytes) |
1839
+ | `gpu_mem_used` | uint64 | Used GPU memory (bytes) |
1840
+ | `gpu_utilization` | uint32 | SM/compute utilization (0-100%) |
1841
+ | `gpu_mem_utilization` | uint32 | Memory controller utilization (0-100%) |
1842
+ | `gpu_encoder_utilization` | uint32 | NVENC utilization (0-100%) |
1843
+ | `gpu_decoder_utilization` | uint32 | NVDEC utilization (0-100%) |
1844
+ | `gpu_name` | string | GPU model name |
1845
+ | `vma_bytes` | uint64 | Vulkan Memory Allocator total bytes |
1846
+
769
1847
 
770
1848
  ---
771
1849
 
772
- ## Jobs
773
1850
 
774
- `sesame.v1.jobs`
1851
+ ## sesame/v1/status/status.proto
775
1852
 
776
- ### JobType
1853
+ `sesame.v1.status`
777
1854
 
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
1855
 
784
- ### JobStatus
785
1856
 
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
1857
 
795
- ### Job
1858
+ ### IODeviceType
796
1859
 
797
- | Field | Type | Description |
1860
+ I/O device type.
1861
+
1862
+ | Value | Name | Description |
798
1863
  |-------|------|-------------|
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) |
1864
+ | 0 | `IO_DEVICE_TYPE_UNSPECIFIED` | Unspecified (invalid) |
1865
+ | 1 | `IO_DEVICE_TYPE_VIDEO_INPUT` | Video input device |
1866
+ | 2 | `IO_DEVICE_TYPE_VIDEO_OUTPUT` | Video output device |
1867
+ | 3 | `IO_DEVICE_TYPE_AUDIO_INPUT` | Audio input device |
1868
+ | 4 | `IO_DEVICE_TYPE_AUDIO_OUTPUT` | Audio output device |
808
1869
 
809
- ### JobStartRequest
810
1870
 
811
- Oneof `config`:
1871
+ ### CompositorStatus
812
1872
 
813
- | Field | Type |
814
- |-------|------|
815
- | `export_request` | ExportStartRequest |
816
- | `import_request` | ImportStartRequest |
1873
+ Compositor status.
817
1874
 
818
- ### JobAbortRequest
819
1875
 
820
1876
  | Field | Type | Description |
821
1877
  |-------|------|-------------|
822
- | `job_id` | uint32 | Job ID to abort |
823
-
824
- ### JobStatusRequest
1878
+ | `id` | string | Compositor ID |
825
1879
 
826
- | Field | Type | Description |
827
- |-------|------|-------------|
828
- | `job_id` | uint32 | Job ID |
829
1880
 
830
- ### JobListRequest
1881
+ ### ErrorEvent
831
1882
 
832
- Empty message — returns all jobs.
1883
+ Error event.
833
1884
 
834
- ### ExportConfiguration
835
1885
 
836
1886
  | Field | Type | Description |
837
1887
  |-------|------|-------------|
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 |
1888
+ | `msg` | string | Error message |
862
1889
 
863
- ### ContainerFormat
864
1890
 
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` |
1891
+ ### Event
872
1892
 
873
- ### AudioCodecId
1893
+ Event message wrapper.
874
1894
 
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
1895
 
883
- ### RateControlMode
1896
+ | Field | Type | Description |
1897
+ |-------|------|-------------|
1898
+ | `error_event` | ErrorEvent | Error event |
1899
+ | `transport_event` | TransportEvent | Transport event |
1900
+ | `callback_event` | sesame.v1.common.Callback | Callback event |
1901
+ | `job_event` | sesame.v1.jobs.Job | Job event (per-job state change) |
1902
+ | `recorder_event` | sesame.v1.recorder.RecorderEvent | Recorder event |
884
1903
 
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
1904
 
892
- ### ImportConfiguration
1905
+ ### IODeviceItem
1906
+
1907
+ I/O device item.
1908
+
893
1909
 
894
1910
  | Field | Type | Description |
895
1911
  |-------|------|-------------|
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
- ---
1912
+ | `id` | string | Device ID |
1913
+ | `name` | string | Device name |
1914
+ | `type` | IODeviceType | Device type |
904
1915
 
905
- ## Status & Events
906
1916
 
907
- `sesame.v1.status`
1917
+ ### IODeviceListResponse
908
1918
 
909
- ### Status
1919
+ I/O device list response.
910
1920
 
911
- Full system status returned by `RequestStatus`.
912
1921
 
913
1922
  | Field | Type | Description |
914
1923
  |-------|------|-------------|
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 |
1924
+ | `devices` | repeated IODeviceItem | List of devices |
923
1925
 
924
- ### Event
925
1926
 
926
- Push event wrapper. Oneof `event`:
1927
+ ### Status
927
1928
 
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` |
1929
+ Overall system status.
935
1930
 
936
- ### TransportEvent
937
1931
 
938
1932
  | Field | Type | Description |
939
1933
  |-------|------|-------------|
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 |
1934
+ | `system_status` | SystemStatus | System status |
1935
+ | `render_status_gpu` | FrameTiming | GPU render timing |
1936
+ | `render_status_cpu` | FrameTiming | CPU render timing |
1937
+ | `sources` | repeated sesame.v1.sources.SourceStatus | Source status |
1938
+ | `compositions` | repeated CompositorStatus | Compositor status |
1939
+ | `audio_mixes` | repeated sesame.v1.audio.AudioMixerStatus | Audio mixer status |
1940
+ | `outputs` | repeated sesame.v1.outputs.OutputStatus | Output status |
1941
+ | `recorders` | repeated sesame.v1.recorder.RecorderStatus | Recorder status |
1942
+
958
1943
 
959
1944
  ### SubscriptionRequest
960
1945
 
1946
+ Subscription request.
1947
+
1948
+
961
1949
  | Field | Type | Description |
962
1950
  |-------|------|-------------|
963
- | `event_topics` | EventTopic[] | Topics to subscribe to |
964
- | `channels` | string[] | Dynamic channels (e.g. `media-stream/<id>`) |
1951
+ | `event_topics` | repeated sesame.v1.common.EventTopic | Typed event topics to subscribe to |
1952
+ | `channels` | repeated string | Dynamic channel subscriptions (e.g. video/audio channels) |
1953
+
1954
+
1955
+ ### TransportEvent
1956
+
1957
+ Transport event (source playback state change).
965
1958
 
966
- ### IODeviceItem
967
1959
 
968
1960
  | Field | Type | Description |
969
1961
  |-------|------|-------------|
970
- | `id` | string | Device ID |
971
- | `name` | string | Device name |
972
- | `type` | IODeviceType | Device type |
973
-
974
- ### IODeviceType
1962
+ | `source_id` | string | Source ID |
1963
+ | `user_id` | string | User ID |
1964
+ | `uri` | string | Source URI |
1965
+ | `state` | sesame.v1.sources.SourceTransportState | Transport state |
1966
+ | `duration_us` | int64 | Duration (us) |
1967
+ | `position_us` | int64 | Playback position (us) |
1968
+ | `material_position_us` | int64 | Material position (us) |
1969
+ | `user_time_us` | int64 | User time (us) |
1970
+ | `speed` | float | Playback speed |
1971
+ | `user_playlist_id` | string | User playlist ID |
1972
+ | `playlist_index` | uint32 | Playlist item index |
1973
+ | `playlist_length` | uint32 | Playlist length |
1974
+ | `clip_id` | uint64 | Clip ID (if playing from recorder) |
1975
+ | `clip_position_us` | int64 | Position within clip (us) |
1976
+ | `clip_duration_us` | int64 | Duration of clip (us) |
1977
+ | `preroll` | uint32 | |
1978
+ | `postroll` | uint32 | |
1979
+ | `metadata` | sesame.v1.common.TransportMetadata | Transport metadata |
975
1980
 
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
1981
 
984
1982
  ---
985
1983
 
986
- ## Statistics
987
1984
 
988
- `sesame.v1.status`
1985
+ ## sesame/v1/wire/wire.proto
989
1986
 
990
- ### FrameTiming
1987
+ `sesame.v1.wire`
991
1988
 
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
1989
 
999
- ### SystemStatus
1000
1990
 
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
1991
 
1021
- ### MemoryDomainStats
1992
+ ### FrameType
1022
1993
 
1023
- | Field | Type | Description |
1994
+ Type of frame carried on the wire.
1995
+
1996
+ | Value | Name | Description |
1024
1997
  |-------|------|-------------|
1025
- | `current_bytes` | uint64 | Current allocated |
1026
- | `peak_bytes` | uint64 | Peak allocated |
1027
- | `budget_bytes` | uint64 | Budget limit |
1998
+ | 0 | `FRAME_TYPE_UNSPECIFIED` | |
1999
+ | 1 | `FRAME_TYPE_RPC` | |
2000
+ | 2 | `FRAME_TYPE_VIDEO` | |
2001
+ | 3 | `FRAME_TYPE_AUDIO` | |
2002
+ | 4 | `FRAME_TYPE_MUXED` | |
2003
+ | 5 | `FRAME_TYPE_DECODER_DATA` | |
2004
+ | 6 | `FRAME_TYPE_DATA` | |
1028
2005
 
1029
- ### SRTReceiveStatistics
1030
2006
 
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) |
2007
+ ### FrameHeader
2008
+
2009
+ Header for every websocket / MoQ frame.
2010
+ Serialized with a 4-byte little-endian size prefix on the wire.
1043
2011
 
1044
- ### SRTSendStatistics
1045
2012
 
1046
2013
  | Field | Type | Description |
1047
2014
  |-------|------|-------------|
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) |
2015
+ | `type` | FrameType | |
2016
+ | `routing_metadata` | string | Source routing (inbound only) |
2017
+ | `media` | MediaFrameData | Present for VIDEO, AUDIO, MUXED, DECODER_DATA |
1059
2018
 
1060
- ---
1061
2019
 
1062
- ## Service Methods
2020
+ ### MediaCodecData
1063
2021
 
1064
- `sesame.v1.rpc.SesameAPIService`
2022
+ Codec parameters for a media stream.
1065
2023
 
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
2024
 
1080
- ---
2025
+ | Field | Type | Description |
2026
+ |-------|------|-------------|
2027
+ | `codec_type` | sesame.v1.common.CodecType | |
2028
+ | `sample_rate` | uint32 | |
2029
+ | `timebase_num` | uint32 | |
2030
+ | `timebase_den` | uint32 | |
2031
+ | `codec_profile` | uint32 | |
2032
+ | `codec_level` | uint32 | |
2033
+ | `width` | uint32 | |
2034
+ | `height` | uint32 | |
2035
+ | `channels` | uint32 | |
2036
+ | `bit_depth` | uint32 | |
1081
2037
 
1082
- ## Event Subscriptions
1083
2038
 
1084
- Clients must subscribe to receive push events. Call `UpdateSubscriptions` with desired `EventTopic` values:
2039
+ ### MediaFrameData
1085
2040
 
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
- ```
2041
+ Media-specific fields for VIDEO, AUDIO, MUXED, and DECODER_DATA frames.
2042
+
2043
+
2044
+ | Field | Type | Description |
2045
+ |-------|------|-------------|
2046
+ | `pts` | uint64 | Presentation timestamp in codec_data timebase units |
2047
+ | `keyframe` | bool | True for video key frames |
2048
+ | `codec_data` | MediaCodecData | Codec parameters (may be present on first frame or key frames) |
1090
2049
 
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
2050
 
1099
2051
  ---
1100
2052
 
2053
+
1101
2054
  ## Scene Graph Properties
1102
2055
 
1103
2056
  Properties are set via `PropertySetRequest` or animated via `PropertyAnimateRequest`. The `domain` field identifies the owning engine object.
@@ -1108,19 +2061,19 @@ Properties are set via `PropertySetRequest` or animated via `PropertyAnimateRequ
1108
2061
 
1109
2062
  | Property | Type | Description |
1110
2063
  |----------|------|-------------|
2064
+ | `position` | vec4 | XYZ position |
1111
2065
  | `position.x` | float | X position |
1112
2066
  | `position.y` | float | Y position |
1113
- | `position.z` | float | Z position |
1114
- | `position` | vec4 | XYZ position |
2067
+ | `position.z` | float | Z position / depth |
2068
+ | `scale` | vec4 | XYZ scale |
1115
2069
  | `scale.x` | float | X scale |
1116
2070
  | `scale.y` | float | Y scale |
1117
2071
  | `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) |
2072
+ | `rotation` | vec4 | XYZ rotation (degrees) |
2073
+ | `rotation.x` | float | X rotation (degrees) |
2074
+ | `rotation.y` | float | Y rotation (degrees) |
2075
+ | `rotation.z` | float | Z rotation (degrees) |
2076
+ | `opacity` | float | Opacity (0-1) |
1124
2077
  | `priority` | float | Render priority (z-order) |
1125
2078
  | `visible` | bool | Visibility |
1126
2079
  | `alpha_map` | string | Alpha map source ID |
@@ -1129,7 +2082,7 @@ Properties are set via `PropertySetRequest` or animated via `PropertyAnimateRequ
1129
2082
 
1130
2083
  | Property | Type | Description |
1131
2084
  |----------|------|-------------|
1132
- | `size` | vec4 | Width/height |
2085
+ | `size` | vec4 | Width and height |
1133
2086
  | `size.x` | float | Width |
1134
2087
  | `size.y` | float | Height |
1135
2088
  | `origin` | vec4 | Origin point |
@@ -1173,14 +2126,22 @@ Properties are set via `PropertySetRequest` or animated via `PropertyAnimateRequ
1173
2126
 
1174
2127
  #### Effects
1175
2128
 
1176
- **All effects:** `enabled` (bool)
2129
+ **All effects:**
2130
+
2131
+ | Property | Type | Description |
2132
+ |----------|------|-------------|
2133
+ | `enabled` | bool | Enable/disable the effect |
1177
2134
 
1178
- **RTT Effect:** `rtt-id` (string)
2135
+ **RTT Effect:**
2136
+
2137
+ | Property | Type | Description |
2138
+ |----------|------|-------------|
2139
+ | `rtt-id` | string | Render-to-texture target ID |
1179
2140
 
1180
2141
  **Timecode Effect:**
1181
2142
 
1182
- | Property | Type | Values |
1183
- |----------|------|--------|
2143
+ | Property | Type | Description |
2144
+ |----------|------|-------------|
1184
2145
  | `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
2146
  | `timecode_src` | string | Source ID for timecode |
1186
2147
 
@@ -1189,10 +2150,10 @@ Properties are set via `PropertySetRequest` or animated via `PropertyAnimateRequ
1189
2150
  | Property | Type | Description |
1190
2151
  |----------|------|-------------|
1191
2152
  | `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 |
2153
+ | `clip-plane.r / clip-plane.x` | float | Clip plane X |
2154
+ | `clip-plane.g / clip-plane.y` | float | Clip plane Y |
2155
+ | `clip-plane.b / clip-plane.z` | float | Clip plane Z |
2156
+ | `clip-plane.a / clip-plane.w` | float | Clip plane W |
1196
2157
  | `feather` | float | Feather amount |
1197
2158
 
1198
2159
  ### Audio Mixer Domain (`domain.audio_mixer_id`)
@@ -1201,8 +2162,8 @@ Address format: `channel_id` for channel properties, `channel_id/plugin_id` for
1201
2162
 
1202
2163
  | Property | Type | Description |
1203
2164
  |----------|------|-------------|
1204
- | `level` | float | Channel level (01) |
1205
- | `pan` | float | Pan position (1 to 1) |
2165
+ | `level` | float | Channel level (0-1) |
2166
+ | `pan` | float | Pan position (-1 to 1) |
1206
2167
  | `mute` | bool | Mute channel |
1207
2168
  | `source_channels` | vec4 | Source channel routing |
1208
2169
  | `source_id` | string | Source ID |
@@ -1216,3 +2177,26 @@ Address format: `processor_id` for preprocessor parameters.
1216
2177
  |----------|------|-------------|
1217
2178
  | `audio_level` | float | Source audio level |
1218
2179
  | `<param_id>` | float | Preprocessor parameter (numeric ID as string) |
2180
+
2181
+
2182
+ <!-- Hand-maintained sections — appended to generated protocol-reference.md -->
2183
+ <!-- Scene Graph Properties are now auto-generated from property-registry.h -->
2184
+
2185
+ ## Event Subscriptions
2186
+
2187
+ Clients must subscribe to receive push events. Call `UpdateSubscriptions` with desired `EventTopic` values:
2188
+
2189
+ ```typescript
2190
+ client.addSubscription(sesame.v1.common.EventTopic.EVENT_TOPIC_TRANSPORT, callback);
2191
+ client.addSubscription(sesame.v1.common.EventTopic.EVENT_TOPIC_JOB, callback);
2192
+ ```
2193
+
2194
+ | Topic | Event type | When fired |
2195
+ |-------|-----------|------------|
2196
+ | `EVENT_TOPIC_ERROR` | ErrorEvent | Engine error |
2197
+ | `EVENT_TOPIC_TRANSPORT` | TransportEvent | Source playback state change |
2198
+ | `EVENT_TOPIC_CALLBACK` | Callback | Client callback command echoed |
2199
+ | `EVENT_TOPIC_JOB` | Job | Job lifecycle change + progress (~2 Hz) |
2200
+ | `EVENT_TOPIC_RECORDER` | RecorderEvent | Recorder online/offline |
2201
+
2202
+