propresenter7-php-lib/proto/slide.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

535 lines
18 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 "alignmentGuide.proto";
import "color.proto";
import "customOptions.proto";
import "effects.proto";
import "graphicsData.proto";
import "timers.proto";
import "url.proto";
import "uuid.proto";
import "messages.proto";
message Slide {
message Element {
message Build {
enum Start {
START_ON_CLICK = 0;
START_WITH_PREVIOUS = 1;
START_AFTER_PREVIOUS = 2;
START_WITH_SLIDE = 3;
}
.rv.data.UUID uuid = 1;
.rv.data.UUID elementUUID = 2;
.rv.data.Slide.Element.Build.Start start = 3;
double delayTime = 4;
.rv.data.Transition transition = 5;
}
message ChildBuild {
.rv.data.UUID uuid = 1;
.rv.data.Slide.Element.Build.Start start = 2;
double delayTime = 3;
uint32 index = 4;
}
message DataLink {
message RSSFeed {
enum ContentType {
CONTENT_TYPE_TITLE_ONLY = 0;
CONTENT_TYPE_TITLE_AND_DESCRIPTION = 1;
}
.rv.data.URL url = 1;
.rv.data.Slide.Element.DataLink.RSSFeed.ContentType content = 2;
string text_delimiter = 3;
}
message FileFeed {
.rv.data.URL url = 1;
}
message Ticker {
message TextType {
string text = 1;
}
message RSSType {
enum ContentType {
CONTENT_TYPE_TITLE_ONLY = 0;
CONTENT_TYPE_TITLE_AND_DESCRIPTION = 1;
}
.rv.data.URL url = 1;
.rv.data.Slide.Element.DataLink.Ticker.RSSType.ContentType content = 2;
}
message FileType {
.rv.data.URL url = 1;
}
double play_rate = 4;
bool should_loop = 5;
double loop_delay = 6;
string text_delimiter = 7;
oneof SourceType {
.rv.data.Slide.Element.DataLink.Ticker.TextType text_type = 1;
.rv.data.Slide.Element.DataLink.Ticker.RSSType rss_type = 2;
.rv.data.Slide.Element.DataLink.Ticker.FileType file_type = 3;
}
}
message AlternateElementText {
enum TextTransformOption {
TEXT_TRANSFORM_OPTION_NONE = 0;
TEXT_TRANSFORM_OPTION_REMOVE_LINE_RETURNS = 1;
TEXT_TRANSFORM_OPTION_ONE_WORD_PER_LINE = 2;
TEXT_TRANSFORM_OPTION_ONE_CHARACTER_PER_LINE = 3;
}
.rv.data.UUID other_element_uuid = 1;
string other_element_name = 2;
uint32 text_transform_options = 3;
.rv.data.Slide.Element.DataLink.AlternateElementText.TextTransformOption text_transform = 4;
}
message CCLIText {
}
message ColorTrigger {
double time = 1;
.rv.data.Color color = 2;
}
message TimerText {
.rv.data.UUID timer_uuid = 1;
string timer_name = 2;
.rv.data.Timer.Format timer_format = 3;
string timer_format_string = 4;
repeated .rv.data.Slide.Element.DataLink.ColorTrigger color_triggers = 5;
}
message ClockText {
reserved 2;
reserved 3;
reserved 4;
string clock_format_string = 1;
.rv.data.Clock.Format format = 5;
}
message ChordChart {
}
message OutputScreen {
.rv.data.UUID screen_id = 1;
string screen_name = 2;
}
message PCOLive {
reserved 1;
enum Theme {
PCOLIVE_THEME_LIGHT = 0;
PCOLIVE_THEME_DARK = 1;
}
enum CountdownType {
COUNTDOWN_TYPE_FULL_ITEM_LENGTH = 0;
COUNTDOWN_TYPE_END_ITEM_ON_TIME = 1;
COUNTDOWN_TYPE_END_SERVICE_ON_TIME = 2;
}
.rv.data.Slide.Element.DataLink.PCOLive.Theme theme = 2;
.rv.data.Slide.Element.DataLink.PCOLive.CountdownType countdown_type = 3;
}
message AlternateElementFill {
.rv.data.UUID other_element_uuid = 1;
string other_element_name = 2;
}
message VisibilityLink {
message Condition {
message ElementVisibility {
enum ElementVisibilityCriterion {
ELEMENT_VISIBILITY_CRITERION_HAS_TEXT = 0;
ELEMENT_VISIBILITY_CRITERION_HAS_NO_TEXT = 1;
}
.rv.data.UUID other_element_uuid = 1;
string other_element_name = 2;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.ElementVisibility.ElementVisibilityCriterion visibility_criterion = 3;
}
message TimerVisibility {
enum TimerVisibilityCriterion {
TIMER_VISIBILITY_CRITERION_HAS_TIME_REMAINING = 0;
TIMER_VISIBILITY_CRITERION_HAS_EXPIRED = 1;
TIMER_VISIBILITY_CRITERION_IS_RUNNING = 2;
TIMER_VISIBILITY_CRITERION_NOT_RUNNING = 3;
}
.rv.data.UUID timer_uuid = 1;
string timer_name = 2;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.TimerVisibility.TimerVisibilityCriterion visibility_criterion = 3;
}
message VideoCountdownVisibility {
enum VideoCountdownVisibilityCriterion {
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_HAS_TIME_REMAINING = 0;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_HAS_EXPIRED = 1;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_IS_RUNNING = 2;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_NOT_RUNNING = 3;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_LOOPING = 4;
VIDEO_COUNTDOWN_VISIBILITY_CRITERION_NOT_LOOPING = 5;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoCountdownVisibility.VideoCountdownVisibilityCriterion visibility_criterion = 1;
}
message AudioCountdownVisibility {
enum AudioCountdownVisibilityCriterion {
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_HAS_TIME_REMAINING = 0;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_HAS_EXPIRED = 1;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_IS_RUNNING = 2;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_NOT_RUNNING = 3;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_LOOPING = 4;
AUDIO_COUNTDOWN_VISIBILITY_CRITERION_NOT_LOOPING = 5;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.AudioCountdownVisibility.AudioCountdownVisibilityCriterion visibility_criterion = 1;
}
message CaptureSessionVisibility {
enum CaptureSessionVisibilityCriterion {
CAPTURE_SESSION_VISIBILITY_CRITERION_ACTIVE = 0;
CAPTURE_SESSION_VISIBILITY_CRITERION_INACTIVE = 1;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.CaptureSessionVisibility.CaptureSessionVisibilityCriterion visibility_criterion = 1;
}
message VideoInputVisibility {
enum VideoInputVisibilityCriterion {
VIDEO_INPUT_VISIBILITY_CRITERION_ACTIVE = 0;
VIDEO_INPUT_VISIBILITY_CRITERION_INACTIVE = 1;
}
int32 video_input_index = 1;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoInputVisibility.VideoInputVisibilityCriterion visibility_criterion = 2;
}
oneof ConditionType {
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.ElementVisibility element_visibility = 1;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.TimerVisibility timer_visibility = 2;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoCountdownVisibility video_countdown_visibility = 3;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.CaptureSessionVisibility capture_session_visibility = 4;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.VideoInputVisibility video_input_visibility = 5;
.rv.data.Slide.Element.DataLink.VisibilityLink.Condition.AudioCountdownVisibility audio_countdown_visibility = 6;
}
}
enum VisibilityCriterion {
VISIBILITY_CRITERION_ALL = 0;
VISIBILITY_CRITERION_ANY = 1;
VISIBILITY_CRITERION_NONE = 2;
}
.rv.data.Slide.Element.DataLink.VisibilityLink.VisibilityCriterion visibility_criterion = 1;
repeated .rv.data.Slide.Element.DataLink.VisibilityLink.Condition conditions = 2;
}
message SlideText {
enum TextSourceOption {
TEXT_SOURCE_OPTION_TEXT = 0;
TEXT_SOURCE_OPTION_NOTES = 1;
TEXT_SOURCE_OPTION_ELEMENT_MATCHING_NAME = 2;
}
.rv.data.Slide.Element.DataLink.SlideSourceType source_slide = 1;
.rv.data.Slide.Element.DataLink.SlideText.TextSourceOption source_option = 2;
bool preserve_notes_format = 3;
string name_to_match = 4;
.rv.data.Slide.Element.DataLink.AlternateElementText.TextTransformOption element_text_transform = 5;
}
message SlideImage {
.rv.data.Slide.Element.DataLink.SlideSourceType source_slide = 1;
}
message StageMessage {
bool should_flash = 1;
.rv.data.Color flash_color = 2;
}
message VideoCountdown {
enum VideoCountdownSource {
VIDEO_COUNTDOWN_SOURCE_PRESENTATION = 0;
VIDEO_COUNTDOWN_SOURCE_ANNOUNCEMENT = 1;
}
.rv.data.Timer.Format timer_format = 1;
string timer_format_string = 2;
repeated .rv.data.Slide.Element.DataLink.ColorTrigger color_triggers = 3;
bool ignore_looping_videos = 4;
.rv.data.Slide.Element.DataLink.VideoCountdown.VideoCountdownSource video_countdown_source = 5;
}
message AudioCountdown {
.rv.data.Timer.Format timer_format = 1;
string timer_format_string = 2;
repeated .rv.data.Slide.Element.DataLink.ColorTrigger color_triggers = 3;
bool ignore_looping_audio = 4;
}
message GroupName {
.rv.data.Slide.Element.DataLink.GroupSourceType groupSource = 1;
}
message GroupColor {
.rv.data.Slide.Element.DataLink.GroupSourceType groupSource = 1;
}
message SlideLabelText {
.rv.data.Slide.Element.DataLink.SlideLabelSource slide_label_source = 1;
}
message SlideLabelColor {
.rv.data.Slide.Element.DataLink.SlideLabelSource slide_label_source = 1;
}
message PresentationNotes {
}
message Presentation {
enum PresentationSource {
PRESENTATION_SOURCE_PRESENTATION = 0;
PRESENTATION_SOURCE_ANNOUNCEMENT = 1;
}
.rv.data.Slide.Element.DataLink.Presentation.PresentationSource presentation_source = 1;
}
message PlaylistItem {
enum PlaylistItemSourceType {
PLAYLIST_ITEM_SOURCE_TYPE_CURRENT = 0;
PLAYLIST_ITEM_SOURCE_TYPE_NEXT = 1;
PLAYLIST_ITEM_SOURCE_TYPE_CURRENT_HEADER = 2;
PLAYLIST_ITEM_SOURCE_TYPE_NEXT_HEADER = 3;
PLAYLIST_ITEM_SOURCE_TYPE_PARENT_PLAYLIST = 4;
}
.rv.data.Slide.Element.DataLink.PlaylistItem.PlaylistItemSourceType playlistItemSource = 1;
bool showArrangement = 2;
}
message AutoAdvanceTimeRemaining {
enum AutoAdvanceSource {
AUTO_ADVANCE_SOURCE_PRESENTATION = 0;
AUTO_ADVANCE_SOURCE_ANNOUNCEMENT = 1;
}
.rv.data.Slide.Element.DataLink.AutoAdvanceTimeRemaining.AutoAdvanceSource auto_advance_source = 1;
.rv.data.Timer.Format timer_format = 2;
}
message CaptureStatusText {
message StatusText {
}
message ElapsedTime {
.rv.data.Timer.Format timer_format = 1;
}
oneof TextType {
.rv.data.Slide.Element.DataLink.CaptureStatusText.StatusText status_text = 1;
.rv.data.Slide.Element.DataLink.CaptureStatusText.ElapsedTime elapsed_time = 2;
}
}
message CaptureStatusColor {
}
message SlideCount {
enum SlideCountSourceType {
SLIDE_COUNT_SOURCE_TYPE_CURRENT = 0;
SLIDE_COUNT_SOURCE_TYPE_REMAINING = 1;
SLIDE_COUNT_SOURCE_TYPE_TOTAL = 2;
}
.rv.data.Slide.Element.DataLink.SlideCount.SlideCountSourceType slideCountSourceType = 1;
}
message PlaybackMarkerIdentifier {
enum Type {
PLAYBACK_MARKER_IDENTIFIER_FIRST = 0;
PLAYBACK_MARKER_IDENTIFIER_PREVIOUS = 1;
PLAYBACK_MARKER_IDENTIFIER_NEXT = 2;
PLAYBACK_MARKER_IDENTIFIER_LAST = 3;
PLAYBACK_MARKER_IDENTIFIER_NAME = 4;
}
enum Destination {
PLAYBACK_MARKER_DESTINATION_PRESENTATION = 0;
PLAYBACK_MARKER_DESTINATION_ANNOUNCEMENT = 1;
PLAYBACK_MARKER_DESTINATION_AUDIO = 2;
}
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier.Destination destination = 1;
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier.Type type = 2;
string name = 3;
}
message PlaybackMarkerText {
message Name {
}
message Time {
.rv.data.Timer.Format format = 1;
}
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier identifier = 1;
bool should_use_marker_color = 4;
oneof TextType {
.rv.data.Slide.Element.DataLink.PlaybackMarkerText.Name name = 2;
.rv.data.Slide.Element.DataLink.PlaybackMarkerText.Time time = 3;
}
}
message ChordProChart {
}
message TimecodeText {
}
message TimecodeStatus {
}
message KeyValueText {
string key = 1;
}
message KeyValueFill {
string key = 1;
}
message Zone {
.rv.data.UUID uuid = 1;
string name = 2;
}
enum SlideSourceType {
SLIDE_SOURCE_TYPE_CURRENT_SLIDE = 0;
SLIDE_SOURCE_TYPE_NEXT_SLIDE = 1;
}
enum GroupSourceType {
GROUP_SOURCE_TYPE_CURRENT_SLIDE = 0;
GROUP_SOURCE_TYPE_NEXT_SLIDE = 1;
GROUP_SOURCE_TYPE_NEXT_GROUP = 2;
}
enum SlideLabelSource {
SLIDE_LABEL_SOURCE_CURRENT_SLIDE = 0;
SLIDE_LABEL_SOURCE_NEXT_SLIDE = 1;
}
oneof PropertyType {
.rv.data.Slide.Element.DataLink.Ticker ticker = 1;
.rv.data.Slide.Element.DataLink.AlternateElementText alternate_text = 2;
.rv.data.Slide.Element.DataLink.TimerText timer_text = 3;
.rv.data.Slide.Element.DataLink.ClockText clock_text = 4;
.rv.data.Slide.Element.DataLink.ChordChart chord_chart = 5;
.rv.data.Slide.Element.DataLink.OutputScreen output_screen = 6;
.rv.data.Slide.Element.DataLink.PCOLive pco_live = 7;
.rv.data.Slide.Element.DataLink.AlternateElementFill alternate_fill = 8;
.rv.data.Slide.Element.DataLink.VisibilityLink visibility_link = 9;
.rv.data.Slide.Element.DataLink.SlideText slide_text = 10;
.rv.data.Slide.Element.DataLink.StageMessage stage_message = 11;
.rv.data.Slide.Element.DataLink.VideoCountdown video_countdown = 12;
.rv.data.Slide.Element.DataLink.SlideImage slide_image = 13;
.rv.data.Slide.Element.DataLink.CCLIText ccli_text = 14;
.rv.data.Slide.Element.DataLink.GroupName group_name = 15;
.rv.data.Slide.Element.DataLink.GroupColor group_color = 16;
.rv.data.Slide.Element.DataLink.PresentationNotes presentation_notes = 17;
.rv.data.Slide.Element.DataLink.PlaylistItem playlist_item = 18;
.rv.data.Slide.Element.DataLink.AutoAdvanceTimeRemaining auto_advance_time_remaining = 19;
.rv.data.Slide.Element.DataLink.CaptureStatusText capture_status_text = 20;
.rv.data.Slide.Element.DataLink.CaptureStatusColor capture_status_color = 21;
.rv.data.Slide.Element.DataLink.SlideCount slide_count = 22;
.rv.data.Slide.Element.DataLink.AudioCountdown audio_countdown = 23;
.rv.data.Slide.Element.DataLink.Presentation presentation = 24;
.rv.data.Slide.Element.DataLink.SlideLabelText slide_Label_Text = 25;
.rv.data.Slide.Element.DataLink.SlideLabelColor slide_Label_Color = 26;
.rv.data.Slide.Element.DataLink.RSSFeed rss_feed = 27;
.rv.data.Slide.Element.DataLink.FileFeed file_feed = 28;
.rv.data.Slide.Element.DataLink.ChordProChart chord_pro_chart = 29;
.rv.data.Slide.Element.DataLink.PlaybackMarkerText playback_marker_text = 30;
.rv.data.Slide.Element.DataLink.PlaybackMarkerIdentifier playback_marker_color = 32;
.rv.data.Slide.Element.DataLink.TimecodeText timecode_text = 33;
.rv.data.Slide.Element.DataLink.TimecodeStatus timecode_status = 34;
.rv.data.Message message_text = 35;
.rv.data.Slide.Element.DataLink.KeyValueText key_value_text = 36;
.rv.data.Slide.Element.DataLink.KeyValueFill key_value_fill = 37;
.rv.data.Slide.Element.DataLink.Zone zone = 38;
}
}
message TextScroller {
enum Direction {
DIRECTION_LEFT = 0;
DIRECTION_RIGHT = 1;
DIRECTION_UP = 2;
DIRECTION_DOWN = 3;
}
bool should_scroll = 1;
double scroll_rate = 2;
bool should_repeat = 3;
double repeat_distance = 4;
.rv.data.Slide.Element.TextScroller.Direction scrolling_direction = 5;
bool starts_off_screen = 6;
double fade_left = 7;
double fade_right = 8;
}
enum TextRevealType {
TEXT_REVEAL_TYPE_NONE = 0;
TEXT_REVEAL_TYPE_BULLET = 1;
TEXT_REVEAL_TYPE_UNDERLINE = 2;
}
enum Info {
INFO_NONE = 0;
INFO_IS_TEMPLATE_ELEMENT = 1;
INFO_IS_TEXT_ELEMENT = 2;
INFO_IS_TEXT_TICKER = 4;
}
.rv.data.Graphics.Element element = 1;
.rv.data.Slide.Element.Build build_in = 2;
.rv.data.Slide.Element.Build build_out = 3;
uint32 info = 4;
.rv.data.Slide.Element.TextRevealType reveal_type = 5;
repeated .rv.data.Slide.Element.DataLink data_links = 6;
repeated .rv.data.Slide.Element.ChildBuild childBuilds = 7;
uint32 reveal_from_index = 8;
.rv.data.Slide.Element.TextScroller text_scroller = 9;
}
repeated .rv.data.Slide.Element elements = 1;
repeated .rv.data.UUID element_build_order = 2;
repeated .rv.data.AlignmentGuide guidelines = 3;
bool draws_background_color = 4;
.rv.data.Color background_color = 5;
.rv.data.Graphics.Size size = 6;
.rv.data.UUID uuid = 7;
}