Turns the pastor's sermon notes into the message presentation in ProPresenter's Messages library, built from the series or generic template. - Notes (RTF/Word) are parsed into title, scriptures (with bold emphasis), points, builds, quotes, picture slides and the Sermon in a Sentence; team instructions are left off and shown in the summary - Slides are cloned from the template with fresh ids and the template's own formatting; a dependency-free protobuf codec reads/writes .pro files - Text is checked to fit on the slide and in the stream and LED wall theme boxes; long scriptures split at verse numbers, font sizes never change - Links the presentation into the Planning Center playlist's Message section (restarting ProPresenter safely, never while anything is live) - Picks the newest notes from the email inbox folder (Google Apps Script), reads the speaker from the email, and writes the YouTube title and description with the Claude API for pasting into Restream - Offline tests rebuild last Sunday's deck from its notes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
101 lines
6.1 KiB
Markdown
101 lines
6.1 KiB
Markdown
# Message Notes → ProPresenter
|
|
|
|
Turns the pastor's sermon notes (`Slides - <message>.rtf`, or a Word file) into the message
|
|
presentation in ProPresenter's **Messages** library, built from the series or generic template.
|
|
These are the same slides you'd otherwise make by copy and paste.
|
|
|
|
## Using it (on the ProPresenter Mac)
|
|
|
|
Double-click **Message Notes to ProPresenter.command** on the Desktop. It works everything out:
|
|
|
|
- **Notes**: the newest `Slides - ….rtf`. The email script saves these into Google Drive >
|
|
My Drive > **Message Notes**; it also checks Downloads, Desktop and Documents.
|
|
- **Speaker**: from the email ("Pastor Mehdi will be preaching live from NA…"), matched to the
|
|
speakers in your library; otherwise the template's speaker.
|
|
- **Template**: series when the title matches the series template's sample title, else generic.
|
|
- **Date and playlist**: the Planning Center playlist for this message, e.g. "Where is Your Faith? -
|
|
Part 8 - October 18, 2026". Its date gives the name: `261018 Where Is Your Faith Part 8`.
|
|
- **YouTube**: Claude writes the title and description in the house style.
|
|
|
|
It shows one short summary, plus notes only where something changed or needs a look: a scripture
|
|
split over two slides, text that is too long somewhere, picture slides, lines left off the slides.
|
|
**Font sizes are never changed**; if text is too long, the note says what size would fit.
|
|
|
|
**Enter** then does it all:
|
|
1. Saves the presentation in the Messages library.
|
|
2. Links it into the playlist's **Message** section (Planning Center's "Resi Message" item).
|
|
ProPresenter only reads playlists when it starts, so the tool quits ProPresenter, adds the link,
|
|
and reopens the same version, about 30 s. It won't do that on a Sunday morning or while a slide
|
|
is on screen, or while the Message timer runs; it tells you to drag it in instead. If the
|
|
playlist isn't imported yet, it asks you to import it from Planning Center first. Each change
|
|
backs the playlist file up to `…/MessageNotes/backups` (last 20 kept).
|
|
3. Opens the YouTube title and description in TextEdit, ready to paste into Restream. They're
|
|
saved as `…/MessageNotes/youtube-<name>.txt`.
|
|
|
|
Keys at the summary: `e` edit the slides in TextEdit · `t` `s` `n` `d` `f` change template /
|
|
speaker / name / date / notes file · `v` view the description · `y` setup · `q` quit.
|
|
|
|
**One-time setup (`y`)**, done at the ProPresenter Mac:
|
|
- **Claude API key** (console.anthropic.com → API keys). It goes straight into the Keychain.
|
|
- **Email pickup**: paste `apps-script/SaveSermonNotes.gs` into script.google.com as
|
|
media@waterschurch.org, run `install`, Allow. It checks every 10 minutes and saves the notes and
|
|
the email text into Drive > Message Notes.
|
|
- The first restart asks "Terminal wants to control ProPresenter". Click OK.
|
|
|
|
PICTURE / CLEAR PICTURE slides are always kept. When the notes mark a picture ("[PICTURE: …]",
|
|
"<pic - ….jpg>"), they go there with the picture named in the slide notes.
|
|
|
|
## How notes become slides
|
|
|
|
| In the notes | On the slides |
|
|
|---|---|
|
|
| first line / second line / bare reference | **Title** slide (title, subtitle, main passage) |
|
|
| paragraph starting with a reference (`John 1:12 ESV …`) | **SCRIPTURE**. Bold words stay bold. |
|
|
| a line on its own | **Point** |
|
|
| lead-in (`…:` / `…?` / italic) + one line | one **Point**, lead-in in the italic style |
|
|
| 3+ lines together, a list, or after "(one at a time)" | **\*STREAM DECK\*** slide + **Build** (one step per line) |
|
|
| `Sermon in a Sentence:` + sentence | **SERMON IN A SENTENCE** |
|
|
| `(…)`, `[…]`, `// …`, coloured non-scripture notes | left off, shown in the review |
|
|
|
|
Formatting always comes from the template's own sample slides. To change how something looks,
|
|
change the template in ProPresenter and the tool follows. Templates are found by name: any
|
|
`_TEMPLATE … DO NOT DELETE …` presentation in Messages, with `GENERIC` marking the generic one.
|
|
|
|
**Fitting.** Every text is laid out with macOS's text system (the one ProPresenter uses) in each
|
|
place it will be seen:
|
|
- the slide itself
|
|
- each themed screen of the Look the template's SPEAKER NAME slide triggers (today *Message*:
|
|
**Stream Lower Thirds** on the stream, **Center LED Wall** on the LED wall)
|
|
|
|
On themed screens ProPresenter uses the theme's font size, and only words styled differently
|
|
from the rest of their box keep bold/italic.
|
|
- Scriptures too long anywhere are split at verse numbers into as few, even slides as possible,
|
|
all with the same reference.
|
|
- Other text too big for the slide is reduced in 1pt steps.
|
|
- Text too long for a theme box is flagged, since the theme fixes the size there.
|
|
|
|
## Files
|
|
|
|
- `src/`: the program (pure Python 3.9, no installs)
|
|
- `notes.py` reads the notes and decides the slides
|
|
- `deck.py` copies template slides and fills them in
|
|
- `themes.py` finds the stream and LED wall theme boxes
|
|
- `measure.py` does the text layout
|
|
- `rtf.py`, `pbwire.py` + `schema.json` read and write the RTF and ProPresenter files
|
|
- `plantext.py` is the TextEdit format
|
|
- `playlist.py` + `ppctl.py` handle the playlist link and the safe ProPresenter restart
|
|
- `youtube.py` writes the YouTube text (Claude API over HTTPS); `secrets_store.py` keeps the key in the Keychain
|
|
- `docxnum.py` keeps Word list numbers
|
|
- `app.py` is the Terminal app
|
|
- `apps-script/SaveSermonNotes.gs` is the Google Apps Script for email pickup.
|
|
- `tools/build.sh` builds `dist/message-notes.pyz` and the launcher. `tools/deploy.sh` builds
|
|
and installs both on the ProPresenter Mac, via the ingest Mac's SSH key.
|
|
- `tools/gen_schema.py` regenerates `schema.json` from the community ProPresenter `.proto` files
|
|
(github.com/greyshirtguy/ProPresenter7-Proto, `autogen-proto`) after a ProPresenter upgrade.
|
|
- `tests/run_tests.py` runs offline checks against real notes and presentations. Last Sunday's
|
|
notes must rebuild last Sunday's deck. `tests/gen.py` builds a deck from a laptop, measuring
|
|
on the ProPresenter Mac.
|
|
|
|
On the ProPresenter Mac: app in `~/Library/Application Support/MessageNotes/`, log in
|
|
`~/Library/Logs/message-notes.log`, last preview page in `…/MessageNotes/last-run/index.html`.
|