Compare commits

...

No commits in common. "20fe32af527b0d338e9921ffd17107000a8128c8" and "01654209c699deaea267c9e11e95d97e79505234" have entirely different histories.

928 changed files with 29428 additions and 18983 deletions

View file

@ -26,4 +26,5 @@ SOFTWARE.
This project bundles `.proto` files derived from
[greyshirtguy/ProPresenter7-Proto](https://github.com/greyshirtguy/ProPresenter7-Proto)
(v7.16.2), which is also distributed under the MIT License.
(Proto 19beta, dumped from ProPresenter v19 beta build 318767123, plus a few
retained extras), which is also distributed under the MIT License.

View file

@ -1,10 +1,10 @@
# ProPresenter 7 PHP API
# ProPresenter 7 PHP Library
> A PHP library to **read, modify, and generate** [ProPresenter 7](https://renewedvision.com/propresenter/) files — songs, playlists, bundles, themes, and global library files.
[![PHP Version](https://img.shields.io/badge/php-%5E8.4-777bb4.svg)](https://www.php.net/)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
[![Tests](https://img.shields.io/badge/tests-370%20passing-brightgreen.svg)](#development)
[![Tests](https://img.shields.io/badge/tests-369%20passing-brightgreen.svg)](#development)
[![Built on Protocol Buffers](https://img.shields.io/badge/format-protobuf-4285F4.svg)](https://protobuf.dev/)
ProPresenter 7 stores its data in protobuf-encoded binary files (with ZIP wrappers for playlists and bundles). This library decodes those formats into idiomatic PHP objects, lets you modify them, and writes them back out — with full round-trip fidelity for global library files and verified compatibility with PP7 for songs and bundles.
@ -68,7 +68,7 @@ ProPresenter 7 stores its data in protobuf-encoded binary files (with ZIP wrappe
- **ZIP64 repair** — automatically fixes ProPresenter's 98-byte ZIP64 header bug on read.
- **Generate from scratch** — build complete `.pro` and `.proplaylist` files programmatically with media references.
- **18 CLI tools** — quickly inspect any ProPresenter file from the command line.
- **370 tests, 9,200+ assertions** — verified against 169 real-world reference songs from production worship environments.
- **369 tests, 1,300+ assertions** — covering all readers, writers, generators, and round-trip fidelity against a synthetic test corpus.
- **Comprehensive docs** — every API and binary format is documented in [`doc/`](doc/).
---
@ -84,14 +84,14 @@ ProPresenter 7 stores its data in protobuf-encoded binary files (with ZIP wrappe
## Installation
```bash
composer require bussnet/propresenter7-php-api
composer require bussnet/propresenter7-php-lib
```
Or clone the repository to develop locally:
```bash
git clone https://github.com/bussnet/propresenter7-php-api.git
cd propresenter7-php-api
git clone https://github.com/bussnet/propresenter7-php-lib.git
cd propresenter7-php-lib
composer install
```
@ -410,8 +410,8 @@ Looking for something specific? Use the keyword index: [doc/keywords.md](doc/key
├── bin/ # 18 CLI tools (parse-*.php scripts)
├── src/ # PHP source (wrappers, readers, writers, generators)
├── generated/ # Auto-generated protobuf PHP classes (Rv\Data\…)
├── proto/ # Vendored .proto files (greyshirtguy/ProPresenter7-Proto v7.16.2)
├── tests/ # PHPUnit test suite (370 tests)
├── proto/ # Vendored .proto files (greyshirtguy/ProPresenter7-Proto, Proto 19beta + extras)
├── tests/ # PHPUnit test suite (369 tests)
├── doc/
│ ├── INDEX.md # Documentation entry point
│ ├── keywords.md # Keyword search index
@ -460,14 +460,14 @@ You should see:
```text
PHPUnit 11.5.55 by Sebastian Bergmann and contributors.
OK (370 tests, 9200 assertions)
OK (369 tests, 1298 assertions)
```
The test suite includes:
- **Unit tests** — every wrapper class
- **Integration tests** — readers + writers round-tripping reference files
- **Mass validation** — parses 169 real-world `.pro` songs (`tests/MassValidationTest.php`)
- **Mass validation** — parses every `.pro` fixture in `doc/reference_samples/all-songs/` (`tests/MassValidationTest.php`)
- **Binary fidelity tests** — verifies byte-perfect round-trips for global library files
### Reference samples
@ -510,7 +510,7 @@ Contributions are welcome! Please:
This project is released under the [MIT License](LICENSE).
The bundled `.proto` files in [`proto/`](proto/) are derived from [greyshirtguy/ProPresenter7-Proto](https://github.com/greyshirtguy/ProPresenter7-Proto) v7.16.2, also distributed under the MIT License.
The bundled `.proto` files in [`proto/`](proto/) are derived from [greyshirtguy/ProPresenter7-Proto](https://github.com/greyshirtguy/ProPresenter7-Proto), Proto 19beta (dumped from ProPresenter v19 beta build 318767123) plus a few extras (`calendar`, `keyMappings`, plus three legacy analytics protos retained from the 7.16.2 set), also distributed under the MIT License.
---

View file

@ -1,5 +1,5 @@
{
"name": "bussnet/propresenter7-php-api",
"name": "bussnet/propresenter7-php-lib",
"description": "PHP library to read, modify, and generate ProPresenter 7 files (.pro songs, .proplaylist, .probundle, themes, and global library files).",
"type": "library",
"license": "MIT",
@ -16,10 +16,10 @@
"proplaylist",
"probundle"
],
"homepage": "https://github.com/bussnet/propresenter7-php-api",
"homepage": "https://github.com/bussnet/propresenter7-php-lib",
"support": {
"issues": "https://github.com/bussnet/propresenter7-php-api/issues",
"source": "https://github.com/bussnet/propresenter7-php-api"
"issues": "https://github.com/bussnet/propresenter7-php-lib/issues",
"source": "https://github.com/bussnet/propresenter7-php-lib"
},
"authors": [
{

View file

@ -1,6 +1,6 @@
# ProPresenter 7 PHP API — Documentation
# ProPresenter 7 PHP Library — Documentation
> Comprehensive reference for the [ProPresenter 7 PHP API](../README.md) library.
> Comprehensive reference for the [ProPresenter 7 PHP Library](../README.md).
>
> Each document is self-contained — open the one that matches your task. If you don't know which to load, search [keywords.md](keywords.md) or scan the table below.

View file

@ -2,7 +2,7 @@
**Version:** 1.0
**Target Audience:** AI agents, automated parsers, developers
**Proto Source:** greyshirtguy/ProPresenter7-Proto v7.16.2 (MIT License)
**Proto Source:** greyshirtguy/ProPresenter7-Proto Proto 19beta (MIT License)
---
@ -13,7 +13,7 @@
- **Container Format:** Standard ZIP archive (PKZIP 2.0+, default deflate compression)
- **Binary Format:** Protocol Buffers (Google protobuf v3) for the embedded `.pro` file
- **Top-level Message:** `rv.data.Presentation` (defined in `presentation.proto`)
- **Proto Definitions:** greyshirtguy/ProPresenter7-Proto v7.16.2 (MIT)
- **Proto Definitions:** greyshirtguy/ProPresenter7-Proto Proto 19beta (MIT)
- **Predecessor:** Pro6 `.pro6x` format
### Container Structure
@ -98,7 +98,7 @@ Both `url` and `image.file.localUrl` use the same structure.
PP7's own exports and standalone `.pro` files use absolute `file:///` URLs with filesystem-based root mappings:
```
URL.absolute_string = "file:///Users/thorsten/Downloads/pp-test/Media/background.png"
URL.absolute_string = "file:///Users/me/Downloads/pp-test/Media/background.png"
URL.local.root = ROOT_USER_DOWNLOADS (4)
URL.local.path = "pp-test/Media/background.png"
URL.platform = PLATFORM_MACOS

View file

@ -2,7 +2,7 @@
**Version:** 1.0
**Target Audience:** AI agents, automated parsers, developers
**Proto Source:** greyshirtguy/ProPresenter7-Proto v7.16.2 (MIT License)
**Proto Source:** greyshirtguy/ProPresenter7-Proto Proto 19beta (MIT License)
---
@ -14,7 +14,7 @@
- **Compression:** Store only (no deflate compression)
- **Binary Format:** Protocol Buffers (Google protobuf v3)
- **Top-level Message:** `rv.data.Playlist` (defined in `playlist.proto`)
- **Proto Definitions:** greyshirtguy/ProPresenter7-Proto v7.16.2 (MIT)
- **Proto Definitions:** greyshirtguy/ProPresenter7-Proto Proto 19beta (MIT)
### Container Structure
- **Archive Type:** ZIP64 with store compression (compression method 0)

View file

@ -2,7 +2,7 @@
**Version:** 1.1
**Target Audience:** AI agents, automated parsers, developers
**Proto Source:** greyshirtguy/ProPresenter7-Proto v7.16.2 (MIT License)
**Proto Source:** greyshirtguy/ProPresenter7-Proto Proto 19beta (MIT License)
---
@ -12,7 +12,7 @@
- **Extension:** `.pro`
- **Binary Format:** Protocol Buffers (Google protobuf v3)
- **Top-level Message:** `rv.data.Presentation` (defined in `presentation.proto`)
- **Proto Definitions:** greyshirtguy/ProPresenter7-Proto v7.16.2 (MIT)
- **Proto Definitions:** greyshirtguy/ProPresenter7-Proto Proto 19beta (MIT)
### Known Limitations
- **Binary Fidelity:** Round-trip decode→encode fails on all reference files. Proto definitions are incomplete; unknown fields are lost during serialization.

View file

@ -3,9 +3,10 @@
## Decisions Made
### Proto Version Choice
- **Decision**: Use greyshirtguy/ProPresenter7-Proto v7.16.2
- **Reason**: Field numbers match Test.pro raw decode perfectly
- **Source**: Metis analysis + typed decode validation in T2
- **Decision**: Use greyshirtguy/ProPresenter7-Proto, Proto 19beta (dumped from ProPresenter v19 beta build 318767123)
- **Reason**: Latest available proto schema; field numbers compatible with our reference files; covers new ProPresenter 19 features
- **Retained extras**: `calendar.proto`, `keyMappings.proto` (not present in 19beta upstream but extracted from PP binaries to support our `parse-calendar` and `parse-key-mappings` tools); `analyticsCapture/Update/WHMStore.proto` retained from the prior 7.16.2 set for backward compatibility
- **History**: Originally adopted v7.16.2 (Metis analysis + typed decode validation in T2); upgraded to Proto 19beta on 2026-05-04
### RTF Handling
- **Getters**: Plain text only (via RtfExtractor)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more