propresenter7-php-lib/proto/proCore.proto
Thorsten Bus 8e80a8af88 Upgrade proto schema to ProPresenter Proto 19beta
Sync the bundled .proto definitions with greyshirtguy/ProPresenter7-Proto
"Proto 19beta" (dumped from ProPresenter v19 beta build 318767123,
2025-06-05). This pulls in the schema for ProPresenter 19 features
including new advertisement groups, custom options, media metadata,
prop API v1, transport API, feature flags, PSB workspace, and zone
definitions, plus refactored analytics tracked events.

Strategy: merge rather than wholesale replace. All Proto 19beta files
overwrite our existing copies so we pick up the field/message updates
upstream made between 7.16.2 and 19beta. Eleven new .proto files are
added: advertisementGroup, analyticsEdit, analyticsMediaManagement,
analyticsPowerPoint, analyticsTrackedEvents, analyticsTriggerCue,
customOptions, mediaMetadata, proCoreFeatureFlags, psbWorkspace, zone.
Three google/protobuf well-known types (any, source_context, type) are
added for completeness; only descriptor.proto is actually imported.

Five proto files are kept that are not part of Proto 19beta upstream:
calendar.proto and keyMappings.proto were extracted from PP binaries
to support our parse-calendar and parse-key-mappings tools, while
analyticsCapture/Update/WHMStore.proto are retained from the prior
7.16.2 set so existing generated descriptors keep loading.

generated/ is regenerated from scratch with `protoc --php_out=generated
--proto_path=proto *.proto` (protoc 29.3, google/protobuf PHP 4.33.5).
The full PHPUnit suite (369 tests, 1298 assertions) still passes
without any source changes - the new schema is wire-compatible with our
reference files and high-level wrappers.

Documentation references to "v7.16.2" are updated to "Proto 19beta" in
LICENSE, doc/formats/pp_song_spec.md, pp_playlist_spec.md,
pp_bundle_spec.md, and doc/internal/decisions.md.
2026-05-04 07:19:24 +02:00

637 lines
16 KiB
Protocol Buffer
Executable file

syntax = "proto3";
package rv.data;
option cc_enable_arenas = true;
option csharp_namespace = "Pro.SerializationInterop.RVProtoData";
option swift_prefix = "RVData_";
import "action.proto";
import "alphaType.proto";
import "ccli.proto";
import "cue.proto";
import "effects.proto";
import "graphicsData.proto";
import "input.proto";
import "macros.proto";
import "messages.proto";
import "playlist.proto";
import "preferences.proto";
import "presentation.proto";
import "proCoreTestPatterns.proto";
import "propDocument.proto";
import "propresenter.proto";
import "slide.proto";
import "recording.proto";
import "stage.proto";
import "timers.proto";
import "url.proto";
import "uuid.proto";
import "proworkspace.proto";
import "psbWorkspace.proto";
import "digitalAudio.proto";
import "proAudienceLook.proto";
import "proMask.proto";
import "timedPlayback.proto";
message NetworkIdentifier {
message IndexOrName {
oneof Component {
int32 index = 1;
string name = 2;
}
}
repeated .rv.data.NetworkIdentifier.IndexOrName identifiers = 1;
}
message TriggerOptions {
.rv.data.Action.ContentDestination content_destination = 1;
bool suppress_auto_start_video = 2;
bool suppress_media_background = 3;
bool force_retrigger = 4;
bool reset_chord_chart = 5;
bool from_playlist_library = 6;
bool from_timeline = 7;
bool ignore_analytics = 8;
double start_position = 9;
.rv.data.TriggerSource trigger_source = 10;
.rv.data.NetworkIdentifier network_identifier = 11;
bool request_client_context = 12;
}
message ControlTransport {
message PlayControlType {
}
message PauseControlType {
}
message RewindControlType {
}
message FastForwardControlType {
}
message SkipBackControlType {
double offset = 1;
}
message SkipForwardControlType {
double offset = 1;
}
message StepBackControlType {
}
message StepForwardControlType {
}
message GoToStartControlType {
double offset = 1;
}
message GoToEndControlType {
double offset = 1;
}
message JumpToTimeControlType {
double time = 1;
}
message JumpToPercentControlType {
double percent = 1;
}
message MarkInPointControlType {
double time = 1;
}
message MarkOutPointControlType {
double time = 1;
}
message SetScaleModeControlType {
.rv.data.Media.ScaleBehavior mode = 1;
bool is_blurred = 3;
.rv.data.Media.ScaleAlignment alignment = 2;
}
message SetFlippedModeControlType {
bool horizontal = 1;
bool vertical = 2;
}
message SetPlayRateControlType {
double play_rate = 1;
}
message SetNativeRotationControlType {
.rv.data.Media.DrawingProperties.NativeRotationType rotation = 1;
}
message SetAlphaTypeControlType {
.rv.data.AlphaType alpha_type = 1;
}
message TogglePlaybackControlType {
}
message SetEffectsControlType {
repeated .rv.data.Effect effects = 1;
}
message UpdateEffectControlType {
.rv.data.Effect effect = 1;
}
message BeginScrubControlType {
double time = 1;
}
message EndScrubControlType {
double time = 1;
}
message ScrubToTimeControlType {
double time = 1;
}
message ScrubToPercentControlType {
double percent = 1;
}
message SetAudioFadeType {
double fade_in_duration = 1;
double fade_out_duration = 2;
bool should_fade_in = 3;
bool should_fade_out = 4;
}
message SetAudioPropertiesType {
.rv.data.Media.AudioProperties audio_properties = 1;
repeated bool solo = 2;
}
oneof ControlType {
.rv.data.ControlTransport.PlayControlType play = 1;
.rv.data.ControlTransport.PauseControlType pause = 2;
.rv.data.ControlTransport.RewindControlType rewind = 3;
.rv.data.ControlTransport.FastForwardControlType fastforward = 4;
.rv.data.ControlTransport.SkipBackControlType skip_back = 5;
.rv.data.ControlTransport.SkipForwardControlType skip_forward = 6;
.rv.data.ControlTransport.StepBackControlType step_back = 7;
.rv.data.ControlTransport.StepForwardControlType step_forward = 8;
.rv.data.ControlTransport.GoToStartControlType go_to_start = 9;
.rv.data.ControlTransport.GoToEndControlType go_to_end = 10;
.rv.data.ControlTransport.JumpToTimeControlType jump_to_time = 11;
.rv.data.ControlTransport.JumpToPercentControlType jump_to_percent = 12;
.rv.data.ControlTransport.MarkInPointControlType mark_in = 13;
.rv.data.ControlTransport.MarkOutPointControlType mark_out = 14;
.rv.data.ControlTransport.SetScaleModeControlType set_scale_mode = 15;
.rv.data.ControlTransport.SetFlippedModeControlType set_flipped_mode = 16;
.rv.data.ControlTransport.SetPlayRateControlType set_play_rate = 17;
.rv.data.ControlTransport.SetNativeRotationControlType set_rotation = 18;
.rv.data.ControlTransport.TogglePlaybackControlType toggle_playback = 19;
.rv.data.ControlTransport.SetEffectsControlType set_effects = 20;
.rv.data.ControlTransport.UpdateEffectControlType update_effect = 21;
.rv.data.ControlTransport.BeginScrubControlType begin_scrub = 22;
.rv.data.ControlTransport.EndScrubControlType end_scrub = 23;
.rv.data.ControlTransport.ScrubToTimeControlType scrub_to_time = 24;
.rv.data.ControlTransport.ScrubToPercentControlType scrub_to_percent = 25;
.rv.data.ControlTransport.SetAudioFadeType set_audio_fade = 26;
.rv.data.ControlTransport.SetAudioPropertiesType set_audio_properties = 27;
.rv.data.ControlTransport.SetAlphaTypeControlType set_alpha_type = 28;
}
}
message AudioInputSettings {
repeated .rv.data.AudioInput inputs = 1;
double transitionTime = 2;
}
message VideoInputSettings {
repeated .rv.data.VideoInput inputs = 1;
}
message RecordRequest {
message Resi {
uint32 gop = 1;
double segmentSize = 2;
string destinationGroupId = 3;
uint32 bufSize = 4;
uint32 minRate = 5;
uint32 maxRate = 6;
string eventName = 7;
string social_description = 8;
}
.rv.data.Recording.Stream stream = 1;
.rv.data.URL working_directory = 2;
.rv.data.RecordRequest.Resi resi = 3;
}
message TextSegmentRequest {
message Segment {
uint32 index = 1;
double size = 2;
}
repeated .rv.data.TextSegmentRequest.Segment segments = 1;
double start_position = 2;
}
message TriggerCue {
message PresentationCue {
.rv.data.Presentation presentation = 1;
.rv.data.UUID arrangement_id = 2;
int32 cue_index = 3;
}
uint64 trigger_handle = 1;
.rv.data.TriggerOptions trigger_options = 2;
.rv.data.Cue cue = 3;
.rv.data.TriggerCue.PresentationCue presentation = 4;
.rv.data.Playlist playlist = 5;
uint64 client_data = 6;
}
message NetworkTriggerDataItem {
.rv.data.TriggerOptions trigger_options = 3;
.rv.data.TriggerCue trigger_cue = 4;
oneof Type {
.rv.data.Action action = 1;
.rv.data.Cue cue = 2;
}
}
message SlideElementTextRenderInfo {
message Layer {
.rv.data.SlideElementTextRenderInfo.LayerType layer_type = 1;
int32 text_build_index = 5;
oneof AdvancedFill {
.rv.data.Graphics.Text.CutOutFill cut_out_fill = 2;
.rv.data.Graphics.Text.MediaFill media_fill = 3;
.rv.data.Graphics.BackgroundEffect background_effect = 4;
}
}
enum LayerType {
LAYER_TYPE_COMPOSITE = 0;
LAYER_TYPE_MASK = 1;
LAYER_TYPE_OVER = 2;
LAYER_TYPE_UNDER = 3;
}
repeated .rv.data.SlideElementTextRenderInfo.Layer layers = 1;
}
message ValidateEncoderRequest {
.rv.data.Recording.Stream.Encoder encoder = 1;
}
message ValidateEncoderResponse {
bool is_valid = 1;
}
message CaptureActionRequest {
message StartResi {
}
message StopCapture {
}
message Error {
int32 error_code = 1;
.rv.data.Action.CaptureType capture_action = 2;
}
oneof RequestType {
.rv.data.CaptureActionRequest.StartResi start_resi = 1;
.rv.data.CaptureActionRequest.StopCapture stop_capture = 2;
.rv.data.CaptureActionRequest.Error error = 3;
}
}
message CaptureActionResponse {
message CancelCaptureAction {
}
message StartResi {
string event_name = 1;
string event_description = 2;
}
message StopCapture {
bool stop_capture = 1;
}
oneof ResponseType {
.rv.data.CaptureActionResponse.StartResi start_resi = 1;
.rv.data.CaptureActionResponse.StopCapture stop_capture = 2;
.rv.data.CaptureActionResponse.CancelCaptureAction cancel_capture_action = 3;
}
}
message MacroIcons {
message MacroIcon {
.rv.data.MacrosDocument.Macro.ImageType image_type = 1;
bytes image_data = 2;
}
repeated .rv.data.MacroIcons.MacroIcon icons = 1;
}
message PropPauseRequest {
message Pause {
}
message Resume {
}
message Status {
}
.rv.data.UUID prop_id = 1;
oneof RequestType {
.rv.data.PropPauseRequest.Pause pause = 2;
.rv.data.PropPauseRequest.Resume resume = 3;
.rv.data.PropPauseRequest.Status status = 4;
}
}
message GenericEvent {
}
message MediaThumbnail {
int32 width = 1;
int32 height = 2;
bytes data = 3;
uint64 stride = 4;
}
message PCOData {
string service_type_id = 2;
string plan_id = 3;
}
message WebFillTokenAndCookies {
message Cookie {
string name = 1;
string value = 2;
string domain = 3;
uint64 expiry = 4;
}
repeated .rv.data.WebFillTokenAndCookies.Cookie cookies = 1;
string token = 2;
}
message InputStatusCallback {
bool enable = 1;
}
message SendData {
int32 message_id = 1;
oneof MessageType {
.rv.data.ProPresenterWorkspace workspace = 2;
.rv.data.Stage.Document stage_document = 3;
.rv.data.TimersDocument timers_document = 4;
.rv.data.ValidateEncoderRequest validate_encoder_request = 5;
.rv.data.TriggerCue trigger_cue = 6;
.rv.data.DigitalAudio.Setup digital_audio_setup = 7;
.rv.data.MacrosDocument macros_document = 8;
.rv.data.MessageDocument message_document = 9;
.rv.data.PropDocument prop_document = 10;
.rv.data.CCLIDocument ccli_document = 11;
.rv.data.AudienceLookCollection audience_looks = 12;
.rv.data.ProAudienceLook live_audience_look = 13;
.rv.data.MaskCollection masks = 14;
.rv.data.Recording.SettingsDocument recording_settings_document = 15;
.rv.data.CaptureActionResponse capture_action_response = 16;
.rv.data.CopyrightLayout copyright_layout = 17;
.rv.data.Transition global_background_transition = 18;
.rv.data.Transition global_messages_transition = 19;
.rv.data.Transition global_foreground_transition = 20;
.rv.data.Transition global_props_transition = 21;
.rv.data.Transition global_audio_transition = 22;
.rv.data.Preferences preferences = 23;
.rv.data.TestPatternRequest test_pattern = 24;
.rv.data.GenericEvent startup_complete = 25;
.rv.data.PlaylistDocument visual_playlist_doc = 26;
.rv.data.PlaylistDocument audio_playlist_doc = 27;
.rv.data.GenericEvent kill_watchdog = 28;
.rv.data.MacroIcons macro_icons = 29;
.rv.data.GenericEvent debug_trigger_data_dump = 30;
.rv.data.PlaylistDocument library_playlist_doc = 31;
.rv.data.UUID audio_playlist_focus_uuid = 32;
.rv.data.UUID media_playlist_focus_uuid = 33;
.rv.data.UUID library_playlist_focus_uuid = 34;
.rv.data.UUID library_playlist_item_focus_uuid = 35;
.rv.data.PropPauseRequest prop_pause = 36;
.rv.data.MediaThumbnail media_thumbnail = 37;
.rv.data.PCOData pco_data = 38;
.rv.data.WebFillTokenAndCookies webfill_token_and_cookies = 39;
.rv.data.ProScoreboardWorkspace psb_workspace = 40;
.rv.data.InputStatusCallback input_status_callback = 41;
}
}
message TimerRuntimeState {
enum ResourceState {
PREROLLING = 0;
ACTIVATED = 1;
UPDATED = 2;
DEACTIVATED = 3;
RELEASED = 4;
}
.rv.data.UUID timer_uuid = 1;
string timer_name = 2;
.rv.data.Action.TimerType action_type = 3;
bool is_running = 4;
bool has_overrun = 5;
.rv.data.TimerRuntimeState.ResourceState state = 6;
double current_time = 7;
bool has_started = 8;
}
message TimerStateUpdate {
.rv.data.Timer timer = 1;
.rv.data.TimerRuntimeState state = 2;
}
message HandledException {
string description = 1;
}
message LeaveBreadcrumb {
message MetadataEntry {
string key = 1;
string value = 2;
}
enum Type {
Navigation = 0;
Request = 1;
Process = 2;
Log = 3;
User = 4;
State = 5;
Error = 6;
Manual = 7;
}
.rv.data.LeaveBreadcrumb.Type type = 1;
string description = 2;
repeated .rv.data.LeaveBreadcrumb.MetadataEntry metadata = 3;
}
message PropPauseResponse {
message Status {
bool paused = 1;
double time_remaining = 2;
double percentage_complete = 3;
double total_time = 4;
}
.rv.data.UUID prop_id = 1;
oneof ResponseType {
.rv.data.PropPauseResponse.Status status = 2;
}
}
message ShowMessage {
string message = 1;
}
message GetMediaThumbnail {
int32 width_hint = 3;
int32 height_hint = 4;
oneof MediaType {
.rv.data.Media media = 1;
.rv.data.Action action = 2;
}
}
message RequestWebFillTokenAndCookies {
bool refresh_first = 1;
string link = 2;
}
message MediaAssetTriggered {
.rv.data.UUID media_uuid = 1;
}
message SendDataResponse {
reserved 7;
int32 message_id = 1;
oneof MessageType {
.rv.data.ValidateEncoderResponse validate_encoder_response = 2;
.rv.data.TimerStateUpdate timer_state = 3;
.rv.data.CaptureActionRequest capture_action_request = 4;
.rv.data.TestPatternResponse test_pattern = 5;
.rv.data.HandledException handled_exception = 6;
.rv.data.UUID audio_playlist_focus_uuid = 8;
.rv.data.UUID media_playlist_focus_uuid = 9;
.rv.data.UUID library_playlist_focus_uuid = 10;
.rv.data.UUID library_playlist_item_focus_uuid = 11;
.rv.data.PropPauseResponse prop_pause = 12;
.rv.data.ShowMessage show_message = 13;
.rv.data.GenericEvent hide_message = 14;
.rv.data.GetMediaThumbnail get_media_thumbnail = 15;
.rv.data.RequestWebFillTokenAndCookies request_webfill_token_and_cookies = 16;
.rv.data.MediaAssetTriggered media_asset_triggered = 17;
.rv.data.LeaveBreadcrumb leave_breadcrumb = 18;
}
}
message TriggerTransferRenderState {
message TimerState {
.rv.data.Timer timer = 1;
bool is_running = 2;
bool has_overrun = 3;
float value = 4;
}
message MediaState {
.rv.data.Media current_media = 1;
bool is_playing = 2;
bool is_looping = 3;
float current_time = 4;
float time_remaining = 5;
.rv.data.UUID playlist_uuid = 6;
string playlist_name = 7;
repeated .rv.data.Action.MediaType.PlaybackMarker markers = 8;
}
message CaptureState {
enum Status {
Stopped = 0;
Active = 1;
Caution = 2;
Error = 3;
}
.rv.data.TriggerTransferRenderState.CaptureState.Status status = 1;
float time = 2;
}
message AutoAdvanceState {
bool active = 1;
float remaining_time = 2;
}
message TimelineState {
bool active = 1;
float current_time = 2;
int32 last_slide_index = 3;
}
message SlideState {
enum TriggerSource {
Normal = 0;
Timeline = 1;
Editor = 2;
}
.rv.data.Presentation presentation = 1;
.rv.data.Playlist playlist = 2;
.rv.data.UUID current_cue = 3;
.rv.data.UUID next_cue = 4;
.rv.data.TriggerTransferRenderState.AutoAdvanceState auto_advance = 5;
.rv.data.TriggerTransferRenderState.TimelineState timeline_state = 6;
int32 current_cue_index = 7;
int32 current_playlist_index = 8;
bool is_current_position = 9;
.rv.data.TriggerTransferRenderState.SlideState.TriggerSource trigger_source = 10;
}
message TimecodeState {
enum Status {
Stopped = 0;
Playing = 1;
Error = 2;
Discontinuity = 3;
}
.rv.data.TriggerTransferRenderState.TimecodeState.Status status = 1;
float time = 2;
float fps = 3;
}
.rv.data.Slide slide = 1;
string stage_message = 2;
.rv.data.TriggerTransferRenderState.MediaState presentation_media = 3;
.rv.data.TriggerTransferRenderState.MediaState announcement_media = 4;
.rv.data.TriggerTransferRenderState.MediaState audio_media = 5;
.rv.data.Media live_video_media = 6;
.rv.data.TriggerTransferRenderState.SlideState presentation = 7;
.rv.data.TriggerTransferRenderState.SlideState announcement = 8;
repeated .rv.data.TriggerTransferRenderState.TimerState timers = 9;
.rv.data.TriggerTransferRenderState.CaptureState capture = 10;
.rv.data.TriggerTransferRenderState.TimecodeState timecode = 11;
uint64 system_time = 12;
}