Campus kit for other ProPresenter Macs (v1.3.0)

- settings.py: per-Mac settings.json (campus code, youtube); ProPresenter
  folder, network port and template library read from ProPresenter itself
- First run / --setup / y asks the campus; YouTube text only at NA
- Preacher picked for this campus from the notes email; a lone surname
  ("Pastor Geyser") matches the most recent speaker with it
- Never restart ProPresenter when its network API is off or not answering
- tools/make_kit.sh builds "Message Notes Kit <version>.zip" (installer,
  program, launcher, READ ME FIRST); deploy.sh writes NA's settings
- Email setup text no longer names media@

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 12:57:44 -04:00
co-authored by Claude Opus 5.5
parent 1c30753743
commit d7eee1bc05
10 changed files with 382 additions and 50 deletions
+5 -9
View File
@@ -6,16 +6,12 @@
# message presentation, built from the series or generic template in the
# Messages library - the same slides you'd make by copy and paste.
#
# Double-click, then answer the questions:
# 1. which notes file (newest ones are listed; or drag a file in)
# 2. which template (series / generic - it suggests one)
# 3. who is speaking (recent speakers are listed)
# 4. date + presentation name (e.g. "261018 Where Is Your Faith Part 8")
# Then every slide is listed for review. Nothing is written until you press
# Enter at "Create this presentation?". Type q at any prompt to quit.
# Double-click. It picks up the newest notes (from the email folder, or
# Downloads/Desktop/Documents), checks them for typos, picks the template and
# speaker, and shows one summary. Enter creates the presentation and links it
# into the next service's playlist (Message section). Type q at any prompt to quit.
#
# Afterwards it checks the new presentation through ProPresenter's API and
# opens a page of slide previews drawn by ProPresenter itself.
# First run asks which campus this is (saved). Run with --setup to change it.
#
# Program: ~/Library/Application Support/MessageNotes/message-notes.pyz
# Log: ~/Library/Logs/message-notes.log
+10 -5
View File
@@ -1,17 +1,22 @@
#!/bin/bash
# Build and install on the ProPresenter Mac (via the ingest Mac, which holds the SSH key).
# Build and install on the North Attleboro ProPresenter Mac (via the ingest Mac, which holds the SSH key).
# app -> ~/Library/Application Support/MessageNotes/message-notes.pyz
# launcher -> ~/Desktop/Message Notes to ProPresenter.command
# settings -> NA + YouTube, only if that Mac has no settings.json yet (so it never asks there)
# Other campuses: tools/make_kit.sh
set -euo pipefail
cd "$(dirname "$0")/.."
tools/build.sh >/dev/null
HOP=checklist-ingest
PROP=napropresenter@10.1.14.225
scp -q dist/message-notes.pyz "dist/Message Notes to ProPresenter.command" "$HOP:/tmp/"
ssh "$HOP" "scp -q -i ~/.ssh/id_status_panel /tmp/message-notes.pyz '/tmp/Message Notes to ProPresenter.command' $PROP:/tmp/ \
&& rm -f /tmp/message-notes.pyz '/tmp/Message Notes to ProPresenter.command' \
printf '{\n "campus": "NA",\n "youtube": true\n}\n' > dist/na-settings.json
scp -q dist/message-notes.pyz "dist/Message Notes to ProPresenter.command" dist/na-settings.json "$HOP:/tmp/"
rm -f dist/na-settings.json
ssh "$HOP" "scp -q -i ~/.ssh/id_status_panel /tmp/message-notes.pyz '/tmp/Message Notes to ProPresenter.command' /tmp/na-settings.json $PROP:/tmp/ \
&& rm -f /tmp/message-notes.pyz '/tmp/Message Notes to ProPresenter.command' /tmp/na-settings.json \
&& ssh -i ~/.ssh/id_status_panel $PROP 'set -e; D=\"\$HOME/Library/Application Support/MessageNotes\"; mkdir -p \"\$D\"; \
mv /tmp/message-notes.pyz \"\$D/message-notes.pyz\"; \
mv \"/tmp/Message Notes to ProPresenter.command\" \"\$HOME/Desktop/Message Notes to ProPresenter.command\"; \
chmod +x \"\$HOME/Desktop/Message Notes to ProPresenter.command\"; \
/usr/bin/python3 \"\$D/message-notes.pyz\" --version; ls -l \"\$D/message-notes.pyz\" \"\$HOME/Desktop/Message Notes to ProPresenter.command\"'"
if [ -f \"\$D/settings.json\" ]; then rm -f /tmp/na-settings.json; else mv /tmp/na-settings.json \"\$D/settings.json\"; fi; \
/usr/bin/python3 \"\$D/message-notes.pyz\" --version; cat \"\$D/settings.json\"; ls -l \"\$D/message-notes.pyz\" \"\$HOME/Desktop/Message Notes to ProPresenter.command\"'"
+45
View File
@@ -0,0 +1,45 @@
#!/bin/bash
#==============================================================================
# INSTALL MESSAGE NOTES -> PROPRESENTER
# Run this once on the ProPresenter Mac. It puts the program in
# ~/Library/Application Support/MessageNotes, puts "Message Notes to
# ProPresenter" on the Desktop, and asks a few setup questions.
# Running it again updates the program and keeps the settings.
#==============================================================================
cd "$(dirname "$0")" || exit 1
clear
echo "Installing Message Notes -> ProPresenter"
echo
finish() { echo; read -r -p "Press Enter to close this window." _; exit "$1"; }
if [ ! -f message-notes.pyz ] || [ ! -f "Message Notes to ProPresenter.command" ]; then
echo "This installer has to stay in the kit folder, next to message-notes.pyz."
finish 1
fi
# macOS's own Python comes with Apple's free Command Line Tools
if ! /usr/bin/xcode-select -p >/dev/null 2>&1 || ! /usr/bin/python3 -c 'import sys; sys.exit(sys.version_info < (3, 8))' >/dev/null 2>&1; then
echo "This Mac first needs Apple's free Command Line Tools (they include Python)."
echo "A box will pop up: click Install and wait until it's finished (5-15 minutes),"
echo "then double-click this installer again."
/usr/bin/xcode-select --install >/dev/null 2>&1
finish 1
fi
D="$HOME/Library/Application Support/MessageNotes"
L="$HOME/Desktop/Message Notes to ProPresenter.command"
mkdir -p "$D" || finish 1
cp message-notes.pyz "$D/message-notes.pyz" || finish 1
cp "Message Notes to ProPresenter.command" "$L" || finish 1
chmod +x "$L"
/usr/bin/xattr -c "$D/message-notes.pyz" "$L" 2>/dev/null # no "downloaded from the internet" warning
echo "Installed version $(/usr/bin/python3 "$D/message-notes.pyz" --version 2>&1)"
echo " program: $D/message-notes.pyz"
echo " Desktop: Message Notes to ProPresenter"
/usr/bin/python3 "$D/message-notes.pyz" --setup
status=$?
echo
echo "All set. From now on just double-click 'Message Notes to ProPresenter' on the Desktop."
finish $status
+74
View File
@@ -0,0 +1,74 @@
MESSAGE NOTES -> PROPRESENTER (version VERSION_HERE)
=====================================================
Turns the pastor's notes ("Slides - <message>.rtf") into the message presentation
in ProPresenter, built from your own message templates, and links it into the
next service's playlist. Runs on the ProPresenter Mac.
INSTALL (once, on the ProPresenter Mac)
---------------------------------------
1. Unzip the kit (double-click the .zip) and open the "Message Notes Kit" folder.
2. Double-click "Install Message Notes.command".
If macOS says it "can't be opened" / "not verified":
click Done, open System Settings > Privacy & Security, scroll down,
click "Open Anyway" next to "Install Message Notes.command", then Open.
(Or: open Terminal, type bash and a space, drag the installer into the
Terminal window, press Return.)
3. If it asks for Apple's Command Line Tools: click Install, wait, run step 2 again.
4. Answer the setup questions (which campus; email pickup - you can skip that).
5. If macOS asks whether Terminal may access Documents, Desktop, Downloads or
Google Drive: click Allow.
Then use "Message Notes to ProPresenter" on the Desktop every week.
To update later: run the installer from a newer kit (settings are kept).
WHAT PROPRESENTER NEEDS
-----------------------
- The templates in a library (normally "Messages"), named like:
_TEMPLATE - DO NOT DELETE 2608 Lower Thirds (series)
_TEMPLATE_GENERIC - DO NOT DELETE 2601 (generic)
Any name works as long as it starts with _TEMPLATE and contains DO NOT DELETE;
the one with GENERIC in the name is the generic one. If there are several,
the most recently changed one is used.
- Network turned on: ProPresenter > Settings > Network > Enable Network.
The tool uses it to check the text fits your output themes and to see that
nothing is live before it restarts ProPresenter to link the playlist.
- The service playlist imported from Planning Center, with a "Message" header.
If it's missing, the tool tells you to import it.
EVERY WEEK
----------
1. Save the notes .rtf from the email into Downloads (or set up email pickup,
below, and skip this).
2. Double-click "Message Notes to ProPresenter" on the Desktop.
3. Check the summary (typos it fixed, template, speaker, service), press Enter.
4. ProPresenter restarts once (to link the playlist) - never while anything is
on screen, on Sunday mornings, or while the message timer runs. If it can't,
it tells you to drag the presentation into the Message section yourself.
5. Check the slides on your outputs. Font sizes are never changed; if text is
too long for an output, the summary says so.
Keys at the summary: Enter = create, e = edit the slide text, r = undo typo
fixes, t = switch template, s = speaker, n = name, d = date, f = other notes
file, y = run setup again, q = quit.
EMAIL PICKUP (optional)
-----------------------
Needs: Google Drive for desktop on this Mac, signed in to the Google account that
receives the "Notes/Slides" emails. During setup (or later with y) the tool copies
a small Google Apps Script and opens script.google.com - paste it, save, run
"install", allow it. From then on the notes land in My Drive/Message Notes every
10 minutes and the tool picks the newest one by itself (it also reads who is
preaching at your campus from the email).
FILES
-----
Program: ~/Library/Application Support/MessageNotes/message-notes.pyz
Settings: ~/Library/Application Support/MessageNotes/settings.json
Log: ~/Library/Logs/message-notes.log
Remove: delete the Desktop launcher and the MessageNotes folder above.
+18
View File
@@ -0,0 +1,18 @@
#!/bin/bash
# Build the kit for other campuses: dist/Message Notes Kit <version>.zip
# Install Message Notes.command, message-notes.pyz, the Desktop launcher, READ ME FIRST.txt
# No settings and no keys go in it - each Mac asks its own campus on install.
set -euo pipefail
cd "$(dirname "$0")/.."
tools/build.sh >/dev/null
V=$(/usr/bin/python3 dist/message-notes.pyz --version)
K="dist/Message Notes Kit"
rm -rf "$K" && mkdir -p "$K"
cp dist/message-notes.pyz "dist/Message Notes to ProPresenter.command" "tools/kit/Install Message Notes.command" "$K/"
sed "s/VERSION_HERE/$V/" "tools/kit/READ ME FIRST.txt" > "$K/READ ME FIRST.txt"
chmod +x "$K/Install Message Notes.command" "$K/Message Notes to ProPresenter.command"
Z="dist/Message Notes Kit $V.zip"
rm -f "$Z"
(cd dist && /usr/bin/ditto -c -k --keepParent --norsrc "Message Notes Kit" "Message Notes Kit $V.zip")
rm -rf "$K"
ls -l "$Z"