2026-10-13 15:58:03 -04:00
|
|
|
# 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`.
|
|
|
|
|
|
2026-10-14 12:37:18 -04:00
|
|
|
**Typo check**: the summary's **Spelling** line says "no typos found" or how many were fixed, and
|
|
|
|
|
each fix is listed ("Slide 31: fixed “OBEDIANCE” → “OBEDIENCE”"). It uses macOS's own spelling
|
|
|
|
|
checker and autocorrect, including ALL-CAPS emphasis words and doubled words ("the the").
|
|
|
|
|
- Names it doesn't know (Rahab, Chniouli) are left alone.
|
|
|
|
|
- Greek/Hebrew sermon words (dunamis, agape…) and Bible compounds (lampstand, firstfruits) are
|
|
|
|
|
never changed.
|
|
|
|
|
- `r` undoes all fixes or just the ones you pick. An undone word goes into
|
|
|
|
|
`…/MessageNotes/allowed-words.txt` and is never changed again.
|
|
|
|
|
|
|
|
|
|
Keys at the summary: `r` undo typo fixes · `e` edit the slides in TextEdit · `t` `s` `n` `d` `f` change template /
|
2026-10-13 15:58:03 -04:00
|
|
|
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.
|
|
|
|
|
|
2026-10-14 12:57:44 -04:00
|
|
|
## Other campuses
|
|
|
|
|
|
|
|
|
|
`tools/make_kit.sh` builds `dist/Message Notes Kit <version>.zip`: an installer, the program, the
|
|
|
|
|
Desktop launcher and `READ ME FIRST.txt`. Send the zip to the campus; on their ProPresenter Mac
|
|
|
|
|
they unzip it and double-click `Install Message Notes.command` (it installs Apple's Command Line
|
|
|
|
|
Tools first if Python is missing). The first run asks which campus it is and saves it in
|
|
|
|
|
`~/Library/Application Support/MessageNotes/settings.json`:
|
|
|
|
|
|
|
|
|
|
- The campus code picks the preacher from the notes email ("Pastor Geyser will be preaching live
|
|
|
|
|
in AB"); a lone surname matches the most recent speaker with it.
|
|
|
|
|
- YouTube text is only written at NA (`"youtube": true`); `tools/deploy.sh` writes NA's settings.
|
|
|
|
|
- The ProPresenter folder, network port and template library are read from ProPresenter itself.
|
|
|
|
|
Templates are any `_TEMPLATE…DO NOT DELETE….pro` (with GENERIC in the name = generic).
|
|
|
|
|
- Without ProPresenter's network on, it never restarts ProPresenter to link the playlist.
|
|
|
|
|
|
2026-10-13 15:58:03 -04:00
|
|
|
## 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
|
2026-10-14 12:37:18 -04:00
|
|
|
- `spelling.py` is the typo check (macOS spelling checker via JXA)
|
2026-10-13 15:58:03 -04:00
|
|
|
- `docxnum.py` keeps Word list numbers
|
2026-10-14 12:57:44 -04:00
|
|
|
- `app.py` is the Terminal app; `settings.py` is the per-Mac campus settings
|
2026-10-13 15:58:03 -04:00
|
|
|
- `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
|
2026-10-14 12:57:44 -04:00
|
|
|
and installs both on the NA ProPresenter Mac, via the ingest Mac's SSH key. `tools/make_kit.sh`
|
|
|
|
|
builds the kit for other campuses (`tools/kit/` holds its installer and read-me).
|
2026-10-13 15:58:03 -04:00
|
|
|
- `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`.
|