propresenter-php/doc/INDEX.md
Thorsten Bus 4e1ac9b7ea feat(labels): add reader for global Labels file
Mirrors the Macros reader: LabelsFileReader -> LabelLibrary -> Label wraps
the protobuf ProLabelsDocument and exposes each label's name (the proto
'text' field) plus optional RGBA color with a #RRGGBB hex helper. Includes
CLI tool, PHPUnit suite against the bundled reference Labels sample, and
api/labels.md docs.
2026-05-03 20:53:45 +02:00

5.5 KiB

ProPresenter Parser Documentation

For AI Agents: Load only the documents you need. Use the keyword index to find relevant sections.

Quick Navigation

Need Load
Parse/modify .pro song files api/song.md
Parse/modify .proplaylist files api/playlist.md
Parse/modify .probundle files api/bundle.md
Read the global Macros file api/macros.md
Read the global Labels file api/labels.md
Understand .pro binary format formats/pp_song_spec.md
Understand .proplaylist format formats/pp_playlist_spec.md
Understand .probundle format formats/pp_bundle_spec.md
Add new documentation CONTRIBUTING.md
Search by keyword keywords.md

Table of Contents

File Format Specifications

PHP API Documentation

  • api/song.md — Song parser API (read, modify, generate .pro files)
  • api/playlist.md — Playlist parser API (read, modify, generate .proplaylist files)
  • api/bundle.md — Bundle parser API (read, write .probundle files with media)
  • api/macros.md — Macros library API (read the global Macros file)
  • api/labels.md — Labels library API (read the global Labels file)

Internal Reference

Meta


Directory Structure

doc/
├── INDEX.md           ← You are here (main entry point)
├── keywords.md        ← Keyword search index
├── CONTRIBUTING.md    ← Documentation guidelines
├── formats/           ← File format specifications
│   ├── pp_song_spec.md
│   ├── pp_playlist_spec.md
│   └── pp_bundle_spec.md
├── api/               ← PHP API documentation
│   ├── song.md
│   ├── playlist.md
│   ├── bundle.md
│   ├── macros.md
│   └── labels.md
└── internal/          ← Development notes (optional context)
    ├── learnings.md
    ├── decisions.md
    └── issues.md

When to Load What

Task: "Parse a song file"

Load: doc/api/song.md

Task: "Generate a new playlist"

Load: doc/api/playlist.md

Task: "Read/write a .probundle"

Load: doc/api/bundle.md

Task: "Debug protobuf parsing issues"

Load: doc/formats/pp_song_spec.md (sections 2-5)

Task: "Understand translation handling"

Load: doc/api/song.md (section: Translations)
Load: doc/formats/pp_song_spec.md (section 7: Translations)

Task: "Fix ZIP64 issues"

Load: doc/formats/pp_playlist_spec.md (section 4: ZIP64 Container Format)
Load: doc/formats/pp_bundle_spec.md (section 4: ZIP64 EOCD Quirk)
Load: doc/internal/learnings.md (search: Zip64Fixer)

Project Overview

This project provides PHP tools to parse, modify, and generate ProPresenter 7 files:

  • Songs (.pro) — Presentation files containing lyrics with groups, slides, arrangements, and translations
  • Playlists (.proplaylist) — ZIP archives containing playlist metadata and embedded song files
  • Bundles (.probundle) — ZIP archives containing a single presentation with embedded media assets

Key Components

File Purpose
src/Song.php Song wrapper (read/modify .pro files)
src/ProFileReader.php Read .pro files
src/ProFileWriter.php Write .pro files
src/ProFileGenerator.php Generate .pro files from scratch
src/PlaylistArchive.php Playlist wrapper (read/modify .proplaylist files)
src/ProPlaylistReader.php Read .proplaylist files
src/ProPlaylistWriter.php Write .proplaylist files
src/ProPlaylistGenerator.php Generate .proplaylist files from scratch
src/PresentationBundle.php Bundle wrapper (read/write .probundle files)
src/ProBundleReader.php Read .probundle files
src/ProBundleWriter.php Write .probundle files
src/MacroLibrary.php Macros library wrapper (read global Macros file)
src/MacrosFileReader.php Read global Macros file
src/LabelLibrary.php Labels library wrapper (read global Labels file)
src/LabelsFileReader.php Read global Labels file

CLI Tools

# Parse and display song structure
php bin/parse-song.php path/to/song.pro

# Parse and display playlist structure
php bin/parse-playlist.php path/to/playlist.proplaylist

# Parse and display the global Macros file
php bin/parse-macros.php path/to/Macros

# Parse and display the global Labels file
php bin/parse-labels.php path/to/Labels