prod environment.prod doesn't exist, create itprod environmentEnvironment variables, click the pencil next to ROSTER_SHEET_LINK if the environment variable exists, or Add environment variable if it currently does not existvalue, paste the link of to the Google sheet that is used for rostering
Make sure that the Google sheet has view permissions for everybody
ROSTER_SHEET_LINK in your .env file.The script reads a single row from the sheet that corresponds to a specific Sunday.
Each row must contain 5 consecutive columns, with the following required fields:
| Column | Description | Format & Example |
|---|---|---|
| 1 | Date | Must match the format DD-Mon-YYYY (e.g., 05-Oct-2025). • No leading zeros in the day (e.g., 5-Oct-2025, not 05-Oct-2025). • Must be a Sunday. |
| 2 | Speaker | The name of the speaker. • If this cell contains the word combined, the script will interpret this as a combined service and translate lyrics. |
| 3 | Topic | The title or topic of the sermon. Example: The Good Shepherd. |
| 4 | Passage | The passage reference. • Any text inside parentheses will be ignored. Example: John 10:1–18 (NIV) → stored as John 10:1-18. |
| 5 | Songs | A list of songs. Can be formatted either: • One per line, or • Comma-separated. • Ensure that songs are currently within the Songs list available here. If it is not there, please refer to the below steps on adding a new song. |
| Date | Speaker | Topic | Passage | Songs |
|---|---|---|---|---|
| 05-Oct-2025 | John Smith | The Good Shepherd | John 10:1-18 | Amazing Grace, How Great Thou Art, In Christ Alone |
| 12-Oct-2025 | (Combined) Mark Smith | United in Worship | Psalm 133 | 10,000 Reasons Cornerstone Great Are You Lord |
You can add other rows/columns apart from these, but they will be ignored by the program
All workflowsThe workflow didn't seem to have been runActions tab, click Create Powerpoint and push to mainThis workflow has a workflow_dispatch event trigger.
Run workflow at the rightRun workflow button to create a workflow manuallyDeploy PowerPoint Site workflow finishes. Refresh and download the new powerpoint when it is done using the site.This typically means that there was invalid formatting in the roster sheet. To fix it:
songs directoryThe workflow didn't seem to have been run above.If you need to add a new song on the day, it's probably better to just add it manually using PowerPoint and not this program.
These steps are for when you are adding a new song for future uses. Read it very carefully and follow the instructions as shown.
smallPowerpointMaker/Songs/[YOUR SONG NAME]/[YOUR SONG NAME]_Lyrics.txt
Ensure this is entered correctly. File paths aren't case sensitive, but please capitalise each word to follow naming convention.
If you have a variant of a certain song, feel free to add it after to differentiate between songs, such asIn Christ AloneandIn Christ Alone (Passion)
Typing the slashes ensures that GitHub creates and commits a new directory to store the text file in, which is what the program expects
Please ensure that each lyric is preceded by its section, such as Chorus, Prechorus, Verse 1, etc
Each section MUST have square brackets surrounding them. This makes the program treat it as something different to song lyrics.
By default, slides have 4 lines in them. To force a slide break and new slide, add a new section after the last lyric line.
Try to ensure each line is less than 60 characters as long lines could overflow when slides are generated
Do not include any unnecessary newlines, as these will be treated as text and hence create blank lines (unless that is what you want!)
Commit changes...Create a new branch and create a description for the change.10000 Reasons (Bless the Lord) <-- Title on first line. All sections in parentheses are ignored by the program. CCLI license number: 39384635 <-- The real CCLI number isn't needed here - but the line should be filled with something [Chorus] <-- Song section header in square brackets to denote a new section Bless the Lord oh my soul Oh my soul Worship His Holy name [Chorus] <-- By ending at 3 lines, it makes a new section early. Useful for certain songs such as this one Sing like never before Oh my soul I'll worship Your Holy name [Verse 1] The sun comes up It's a new day dawning It's time to sing Your song again <-- You can also include a newline rather than explicitly setting a new section to force a new slide to be made Whatever may pass And whatever lies before me Let me be singing When the evening comes
git clone <repo_link>
python -m venv <environment_name>
source <environment_name>/bin/activate On MacOS or Linux
<environment_name>\Scripts\activate On Windows
pip install -r REQUIREMENTS.txt
GENIUS_TOKEN into a .env file in the root of the project. You can get more information about using .env files here.GENIUS_TOKEN=[THE TOKEN YOU COPY PASTED FROM THE GENIUS WEBSITE]
ROSTER_SHEET_LINK=[THE SPREADSHEET LINK]
...
python Scripts/song_finder.py
Be sure to follow all the conventions above. Using the program like this should allow inputs to be more consistent.
python3 Scripts/song_finder.py
Input song name: Your will be done
Input artist name: CityAlight
Searching for "Your Will Be Done" by CityAlight...
...
Done.
Your Will be Done (Live)
CCLI license number: 35590026
[REST OF LYRICS!]
This program has no unit tests. Instead, tests are sanity tests designed to reflect if the final product works as intended. A limited set of songs will be used to validate if everything works fine
git clone <repo_link>
ENVIRONMENT_VARIABLE_1_NAME=ENVIRONMENT_VARIABLE_1_VALUE
ENVIRONMENT_VARIABLE_2_NAME=ENVIRONMENT_VARIABLE_2_VALUE
...
python -m venv <environment_name>
source <environment_name>/bin/activate On MacOS or Linux
<environment_name>\Scripts\activate On Windows
pip install -r REQUIREMENTS.txt
new_powerpoint_maker.py and when it asks for test mode, input tTEST on your local machine, which will store all test files. View each one in order to see if the template looks good.