Code Monkey home page Code Monkey logo

propresenter7-proto's Introduction

ProPresenter7-Proto

This is a set of unoffical and unsupported .proto files that define the messages (data structures) used in the ProPresenter 7 files that are encoded as Google Protocol Buffers.

Background

One of the things I really loved about ProPresenter 5 and 6 was how easy it was to read and understand the documents and configuration files - both of which are XML. I loved being able to make scripts and programs that could help improve and automate our workflow by working directly with Pro6 documents and also perform my own troubleshooting.

When ProPresenter7 first came out I was a bit surprised to find that the files were no longer easy-to-understand, human readable XML files.
Instead, ProPresenter 7 uses Google "Protocol Buffers" to encode data stored in documents and various configuration files.
(See https://developers.google.com/protocol-buffers for more information.)

Even though the new files encoded with protocol buffers are not human readable, one of the nice things about using protocol buffers is how easy it is to auto-generate code that to work with the files once you have the data structure (messages) defined in human-readable .proto files.

✅ If you have the .proto files, you have everything you need to create, read and update the data files.

That's what you will find in this repository - a set of unofficial .proto files, that I have reverse-engineered, which you can use to auto-generate code that will enable you to read, create and modify ProPresenter 7 data files including:

  • Documents
  • PlayLists
  • Workspace
  • Screens
  • Calendar
  • Masks
  • Props
  • Live Video
  • Looks
  • Recordings

WARNING: These are unofficial, reverse-engineered .proto files created by myself as a user of ProPresenter.

They are NOT created, endorsed or supported by the makers of ProPresenter: Renewed Vision.

In addition to the "usual disclaimers" that should obviously apply, please note the following:

  • If you don't understand what you are doing with these files or you don't have a proven backup and recovery process, you may end up destroying your ProPresenter documents and configuration with no way to recover what you have lost.
  • ⚠️ Do NOT contact Renewed Vision for support!
  • Who knows what else could go wrong if you don't understand how to correctly use these files - You might destroy the computer itself, and all other computers on your network (maybe even the Pastor's Macbook). It's possible you might even be responsible for the destruction of millions of other computers around the world and cause the building you are in to burn down. All kidding aside - be careful when changing ProPresenter files - mistakes can crash/break the application
  • ⚠️ Do NOT contact Renewed Vision for support!

Well that should cover it.

Hopefully you understand what you are doing with these file, and have multiple, good backups of your entire Pro7 configuration and documents and are ready to take full responsibility for your actions/experiments as you now have the power to auto-generate code that can read, write and modify ProPresenter 7 data files!

Example of using with protoc to decode ProPresenter data files.

In addition to using protoc to auto-generate code for handling ProPresenter data files you can also use protoc to decode data files and output a (JSON-like) text representation of the files:

  1. Download protoc command for your system.
  2. Download these .proto files to a folder
  3. Open terminal/console and change to the folder containing the .proto files
  4. To decode a ProPresenter presentation document run:
    protoc --decode rv.data.Presentation ./propresenter.proto < /Path/To/ProPresenter/PresentationFile
  5. To decode a playlist file, run:
    protoc --decode rv.data.PlaylistDocument ./propresenter.proto < /Path/To/ProPresenter/PlaylistFile

You can find more info/example at my blog: https://greyshirtguy.com/blog/propresenter-7-file-format-part-2/

Update: My original method of extracting the .protos was pretty clumsy - but I was happy that at least I found a way!
Now it's much easier to use https://github.com/arkadiyt/protodump on the ProPresenter binaries!

propresenter7-proto's People

Contributors

greyshirtguy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

propresenter7-proto's Issues

Templates/Themes Support

Is there a way to make this work with themes files? I actually may just be missing something and doing something wrong since I'm honestly not at all familiar with proto files. It seems like they're not getting the names of the identifiers and instead using numbers/ids for them when I export using rv.data.Template.

My use case for this is to push out "standard" themes to other campuses in our network. ProPresenter seems to hard link full file paths sometimes, and this causes issues on other devices that have different file paths; meanwhile they do have a way to relative link files, and I'm hoping to try to change to use that before I add the themes to our distro point. Right now, I have a work around for this, but I'd rather just "patch" the themes files... of course, provided Pro7 sees them correctly on the other side.

Command:

protoc --decode rv.data.Template ./propresenter.proto < ../Theme

Returns the following (trimmed the output):

1 {
  1: 1
  2 {
    1: 10
    2: 15
    3: 6
  }
  3: 1
  4 {
    1: 7
    2: 2
    3: 1
    4 {
      6: 0x3134383137353731
    }
  }
}
3 {
  1 {
    1 {
      1 {
        1 {
          1: "F385C1DC-C927-4DD8-892B-23CB1848CD0B"
        }
        2: "TextElement"

My specific problem, their stock theme has this:

            2 {
              1: "file:///Users/keahi/Documents/ProPresenter/Themes/Stock/White/Assets/EventPhoto.jpg"
              3: 1
              4 {
                1: 12
                2: "Assets/EventPhoto.jpg"
              }
            }

Unfortunately, my theme doesn't have that 4 block which I'm guessing is telling it it's built into the theme. I've tried various ways to get this to work, and it could be that I'm doing something wrong or a Pro bug.

            2 {
              1: "file:///Users/josborne/Documents/ProPresenter/Themes/Central/Notes/Lower%20Thirds/Assets/photo.png"
              3: 1
            }

Updating propresenter presentation

I followed your tutorial and I was able to decode a presentation with the following.

protoc --decode rv.data.Presentation ./presentation.proto < /Users/user/Documents/ProPresenter/Libraries/Default/test.pro > simplePresentation.txt

Now, I am assuming that after reading that text, I could do the opposite and recode the resulting file back into a ProPresenter file like this,

cat SimplePresentation.txt | protoc --encode rv.data.Presentation ./presentation.proto > test.pro

But the resulting file does not have the slides that the original propresenter file had. Just to make sure that I wasn't missing something, I decided to do the following.

protoc --decode rv.data.Presentation ./presentation.proto < ./test.pro > simplePresentation2.txt

And then check if there was a difference between the original file and the one decoded from the encoding

diff simplePresentation.txt simplePresentation2.txt

And they were the same. I think that the data structure in the protobuf from 7.11 to 7.12 may have broken something, but I am just guessing.

I am using Ventura and Propresenter 7.12 if that helps.

Missing entries in GraphicsData.proto

Hi

It seems that ProPresenter had new features added for "LineFillMask"

When I parse a .pro-file I get some unassigned entries here:
Graphics\Text\LineFillMask

They look like:
4: 0
5: some binary value
6: some binary value

In ProPresenter there are new options for the line fill background width (longest line, line length) and some more offsets.

Is there a way to reverse-engineer these?

Simon

Help with more examples

I'd like to appreciate your repo and the blog posts which helped me a lot to do the same but exporting the proto files to TS (nodeJS).

All good, works very well, except that I have troubles with a few things:

  • Add a media action (I feel I am missing something, as the decoded proto does not contain the action after the .pro is opened by PP7)
  • Add custom styles like chars spacing on the text shapes

Can you assist me with that? I'd appreciate it a lot if you could try and see if it works, or if you can help me how to debug this further.

PlaylistDocument: Failed to parse input

Hi,

I'm using ProPresenter v7.9.1 and protoc (libprotoc 3.21.0).

When I try decode a playlist, I get a "failed to parse input" error message:
image

Exists any method for debug to help you?

Best regards,
Vasco Cruz

Support for 7.10.*

I have not checked but I presume that the protos should be regenerated for the latest PP version, 7.10.4 at the time of this writing.

Furthermore, perhaps you could share the exact scripts that you use to generate these?

Add license to repository

Thank you very much for your work in reverse engineering the file formats and producing these protobuf definitions! I've already found it extremely useful for performing automated checks on my church's lyric database.

I would quite like to start distributing some of the software I create with this, however in order to do so I would need a clear license for the contents of this repository. Please could you consider adding either an MIT or Apache 2.0 license? Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.