@stinkycomputing/sesame-api-client 1.5.1 → 1.5.4

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