Desktop wizard for church media teams: download a Facebook sermon, trim multiple highlights, pick a Bible verse and instrumental by theme, and export a Filmora 14.2.9 .wfp project with separate editable tracks.
- Download — paste a Facebook URL (yt-dlp with 16 parallel fragments)
- Timestamps — add one or more start/end ranges
- Preview — scrub each segment
- Trim & join — FFmpeg trims and concatenates highlights
- Bible verse — enter a theme; AI suggests verses (offline fallback without API key)
- Instrumental — AI suggests beds; download the one you pick
- Layers — review sermon / verse / music tracks
- Project name
- Export — writes
exports/<name>.wfpfor Filmora 14.2.9
- Python 3.12+
- FFmpeg / ffprobe on
PATH - Filmora 14.2.9 to open the exported project
- Optional:
OPENAI_API_KEY(smarter verse/music suggestions)
- Windows: ffmpeg.org or
choco install ffmpeg - macOS:
brew install ffmpeg - Linux / WSL:
sudo apt install ffmpeg
From the project root:
git clone <repo-url> wordly
cd wordly
python3 -m venv .venvLinux / macOS / WSL:
source .venv/bin/activate
pip install -r requirements.txtWindows (PowerShell):
.venv\Scripts\Activate.ps1
pip install -r requirements.txtIf activation fails with “running scripts is disabled on this system”, either allow scripts for your user (one time):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUseror skip activation and call the venv Python directly (works for install and run):
.\.venv\Scripts\python.exe -m pip install -r requirements.txtWindows (cmd):
.venv\Scripts\activate.bat
pip install -r requirements.txtActivate the virtual environment (if you use one), then:
python main.pyWindows without activating:
cd path\to\wordly
.\.venv\Scripts\python.exe main.pyIf your system only has python3:
python3 main.pyOn first launch, Wordly creates downloads/, clips/, exports/, and temp/ if they are missing.
export OPENAI_API_KEY=sk-... # smarter verse / instrumental suggestions
export WORDLY_OPENAI_MODEL=gpt-4o-mini # optional model overridewordly/
├── main.py
├── models/ # wizard project state
├── services/ # download, trim, AI, Filmora .wfp export
├── ui/ # wizard_window, preview_player
├── utils/
├── assets/
│ └── filmora_templates/
│ ├── sermon-highlights.wfp # GUI layout reference (preferred)
│ ├── video.mp4, music.mp3, image.jpg # media for that template
│ └── reference_media/ # tiny placeholders if bundle media missing
├── downloads/ # sermon sources
├── clips/ # trimmed / joined segments
├── exports/ # one folder per project: .wfp + media/ + verse.txt
└── tests/
Wordly clones assets/filmora_templates/sermon-highlights.wfp (or filmora_14_2_9.wfp) and patches paths, hashes, and timeline trims for your sermon segments, joined highlights, instrumental, and verse. Media paths are written for Windows Filmora (C:\... or \\wsl$\... when running in WSL).
Important
- Use Filmora 14.2.9 (same build as the template).
- In the wizard, click Finish (or Generate .wfp). Wordly writes
exports/<project-name>/<project-name>.wfpand copies your joined clip, music, and verse text intoexports/<project-name>/media/. Open the.wfpfrom that folder in Filmora — keep themedia/folder beside it. - The timeline keeps Filmora’s native layer stack: title (Bible verse), mirrored sermon segments on two video tracks (one muted like your GSM template), joined highlights reel, and instrumental audio.
- Put your working Filmora project in
assets/filmora_templates/as**sermon-highlights.wfp** with**video.mp4**,**music.mp3**, and**image.jpg**in the same folder (paths inside the.wfpshould point at those files on this PC). - After updating the template, run once:
python tools/sanitize_filmora_template.py(rewrites leftover Downloads/GSM paths to the bundle media). - Do not open the template
.wfpfor editing in Filmora from Wordly’s export step — use Finish and open the copy underexports/<project>/.
To repoint the bundled template at local placeholder media (only if you are not using your own GSM project as the template):
.\.venv\Scripts\python.exe tools\sanitize_filmora_template.pyCheck an export for leftover template paths:
.\.venv\Scripts\python.exe tools\scan_wfp_refs.py exports\your-project.wfp
.\.venv\Scripts\python.exe tools\verify_export.py exports\your-project.wfpA clean export should report timeline JSON: OK and no Facebook_1 / D:/ hits from scan_wfp_refs.py.
.\.venv\Scripts\python.exe -m unittest discover -s tests -p "test_*.py" -vOn Linux / macOS / WSL with the venv activated:
python -m unittest discover -s tests -p 'test_*.py' -v