Professional Bible & worship presentation for macOS
Project scripture, lyrics, media, and custom slides to any screen — with a full per-presenter theme engine, built in native SwiftUI & SwiftData.
- 100% native macOS — SwiftUI interface, SwiftData persistence, no Electron, no web views
- Theme engine (Editor de Teme) — a full design studio: per-presenter layouts, text boxes, media overlays, backgrounds, and a three-phase transition system
- Per-presenter profiles — Bible, Songs, and Slides each have their own boxes, styles, backgrounds, and transitions; the output always renders the live content's profile
- Universal themes — one theme snapshots the entire look of all presenters; portable
.tpthemepackages travel between machines with all media embedded - Transparent output window — invisible on the projector when idle; content fades in from transparency and back out
- Multi-window tabs (⌘T) — different modules and Bible translations per tab, one shared output
- Multi-format import — 6 Bible formats, 6 song formats (incl. the GOAT TopPresenter Song JSON with versions + chords), universal drag & drop
- Resolution adaptive — layouts are defined in percentages and fonts scale from a 1080p reference; any projector resolution, aspect ratio, or PPI just works
Download from the Resurse release:
- 6 starter themes (
.tptheme.zip) — photo and video backgrounds with preconfigured layouts and transitions: Cer Nepal, Flori, Galaxie, Minimal, Particule, Plaja. Unzip, then import from the Teme gallery (⤓ button) — selecting the whole folder imports everything inside. - Biblia EDC100 — Ediția Dumitru Cornilescu Centenară (Romanian, 66 books, 31,102 verses) in TopPresenter Bible JSON. Import from the Bible module or drag & drop.
© British and Foreign Bible Society (BFBS) & Societatea Biblică Interconfesională din România (SBIR), 1924/2024. Distributed for personal and liturgical use.
The design studio behind everything you see on screen:
- Per-presenter layout profiles — Biblie / Cântece / Slide-uri are edited independently (segmented picker in the editor header, with one-click copy between presenters). Songs have song boxes (Versuri, Titlu Cântec, Etichetă Strofă), not Bible ones.
- Fixed text boxes — boxes never move or resize with their content; text flows inside them. Drag/resize on the canvas, arrow-key nudge (⇧ = 5%), numeric X/Y/W/H fields, quick-align toggles.
- Custom text boxes & media boxes — add static text (church name, CCLI, "Amin."), live-fed boxes, clocks, slide counters, or image/GIF/video overlays with opacity, corner radius, edge feather, and fit/fill.
- Unified z-order — one stacking order for every box; drag rows in the always-visible Casete list or use the Ordonare context menu. Boxes are recolorable (click the swatch), removable, hideable.
- Data sources per box — every box can pull from any live field (lyrics, title, reference, translation, strofă label), static text, date, time, or slide number ("2 / 7"), with per-presenter source catalogs.
- Slide scope (Afișare) — show a box on all/first/last slides; songs add Refren / Strofe (chorus detection from section labels). Song title on the first slide, "Amin." on the last — done.
- Complete text styling, twice — Text Global and per-box Personalizează share the same 12 options in the same order: Font, Size (≤200pt), Weight, Color, Alignment, Vertical, Opacity, Line spacing, Letter spacing, Transform (MAJUSCULE/minuscule), Padding, Shadow (color + radius), Auto-fit. Every per-box option has a Global inherit.
- Backgrounds — global + per-presenter overrides; photos, animated GIFs, or looping muted videos.
- Three-phase transitions — Intrare (transparency → content), Intermediar (slide → slide), Ieșire (content → transparency on Hide/Clear/ESC). 14 effects (fade, zoom, slides, blur, blur+zoom, fall, 3D flip…), per-phase durations (0–3 s, 0 = instant), per-box overrides with stagger delay, and click-to-preview on the editor canvas.
- Undo/redo for every layout change, coalesced per gesture.
- A theme snapshots the entire look — all three presenter profiles plus global text/background settings. Selecting one restyles every presenter at once.
- Thumbnail gallery in every panel footer — click to apply, hover to live-preview (never while live), right-click to update/rename/export/delete. Drag sideways to pan.
.tpthemepackages — directory bundles withtheme.json+ every referenced media file embedded. Export/import is fully portable across machines; importing a folder imports every package inside it.
- 6 import formats — TopPresenter JSON, OSIS XML, Zefania XML, MySword SQLite, USFM, Unbound Bible
- The GOAT format — TopPresenter Bible JSON v1.0.0 is a superset of every format: section headings, footnotes, cross-references, Strong's numbers, poetry, and red-letter (words of Christ) all round-trip through import → store → export. Fields are optional; nothing is lost importing OSIS/USFM and re-exporting.
- Red-letter theme — highlight the words spoken by Jesus in any color, per theme (Editor de Teme ▸ Text ▸ Cuvintele lui Isus). Populated from OSIS/USFM Bibles that mark them.
- Smart duplicate handling — importing a Bible whose code already exists prompts Combină / Înlocuiește / Păstrează ambele / Anulează; Combină fills in only the chapters/verses you're missing.
- Full-text & reference search — type
John 3:16orGen 1:1-3to jump directly - List view & Grid view with color-coded book categories
- Multi-verse selection (⌘+Click) and auto-fill that measures the actual verse box
- Block navigation crossing chapter/book boundaries; double-click to go live
- Export as TopPresenter JSON (full v2 schema), Plain Text, or CSV
- The GOAT format — TopPresenter Song JSON v2.0.0 is one file per song and a superset of every source: per-song versions, sections with inline chords (ChordPro positions) and bilingual translation lines, arrangement/play-order, section repeat counts, linked media, and rich metadata all round-trip through import → store → export.
- Multiple versions per song — a song groups several renditions (e.g. 3 Romanian variants, an ES translation). Each version owns its own metadata (title shown, authors, language, key/capo/tempo, copyright, CCLI, songbook, style, themes, notes, repeat marker) and inherits the original's by default, with a per-version toggle to customize.
- 6 import formats — TopPresenter Song JSON, OpenSong XML, OpenLyrics XML (translations + chords), ChordPro, plain text, and PowerPoint (PPTX & PPT — sandbox-safe, in-process parsing, with filename titles + chorus-reuse detection).
- Recursive folder import for thousands of files, with progress, format auto-detection, and duplicate handling (add as new version / keep both / skip).
- Scalable browser — list ⇄ grid with theme-rendered thumbnails, instant indexed search, and filters (collection, language, media).
- Song studio editor — two-pane visual editor with a live theme-rendered preview, version tabs, color-coded section cards (drag-to-reorder, duplicate, ×N repeat, inline-chord mode), and per-version metadata.
- Rendered slide filmstrip — sections auto-split to fit the screen (configurable lines/slide); click to project, double-click or ▶ to go live; bilingual + repeat markers (
/: :/,‖: :‖,|: :|,(×N),bis/ter) applied per the theme. - Export as TopPresenter Song JSON (one file per song or a whole folder), OpenLyrics XML, or Plain Text.
- Transparent, borderless, fullscreen overlay — auto-opens on the target screen
- Single-screen mode — the window hides after the exit transition and returns on Show
- Black screen (⌘B), Freeze (⌘F), Clear/ESC, split Clear button with Force Touch
- Ieșire panel in the right bar: screen, window level, disconnect behavior
- Live clocks tick on screen; full-screen video playback with transport controls
⌘T opens native tabs — each with its own module, Bible translation, and selection. One output, driven by whichever tab presses Show.
- Drop any file — Bibles, songs, media auto-classify (mixed drops handled)
- Media library with grid, type filter, thumbnails; audio player (speed, seek), video looping
- Service schedules with running order and go-live; custom text slides
- ⌘K Quick Search across Bible, songs, and slides
| Shortcut | Action |
|---|---|
⌘K |
Quick search |
⌘T |
New tab |
⌘B |
Black screen |
⌘F |
Freeze / Unfreeze |
Return |
Show / Hide content |
← → |
Navigate verses / slides |
Escape |
Clear output (plays the Ieșire transition) |
⌘+Click |
Multi-select verses |
⇧⌘Escape |
Clear All |
Double-Click |
Instant present |
| Formats | |
|---|---|
| Bible import | TopPresenter JSON · OSIS XML · Zefania XML · MySword SQLite · USFM · Unbound Bible |
| Song import | TopPresenter Song JSON · OpenSong XML · OpenLyrics XML · ChordPro (.cho, .crd, .chordpro) · Plain text (.txt) · PowerPoint (.pptx, .ppt) |
| Media | Images (jpg, png, gif, heic, tiff, bmp, webp, svg) · Audio (mp3, wav, aac, m4a, flac, ogg, aiff) · Video (mp4, mov, avi, mkv, webm, m4v) |
| Themes | .tptheme packages (theme.json + embedded media) |
| Export | Bible: TopPresenter JSON, TXT, CSV · Songs: TopPresenter JSON, OpenLyrics, TXT · Themes: .tptheme |
eBiblia-Scraper.user.js is a Tampermonkey/Violentmonkey userscript that exports complete Bible translations from eBiblia.ro into the TopPresenter Bible JSON format.
It exports straight to TopPresenter Bible JSON — clean verse text plus red-letter (words of Christ), section headings, cross-references, footnotes, Strong's numbers, morphology, interlinear glosses, and full translation metadata (name, year, copyright, foreword). Toggle the rich-content groups to keep files lean. ⏬ Toate exports every translation your account can open at once, organized into per-language folders. Works on Chrome, Firefox and Safari.
Please respect each translation's copyright — export only for personal and congregational use.
Shipped
- Native SwiftUI + SwiftData app — Bible, Songs, Slides, Media, Schedules
- Per-presenter theme engine: layouts, transitions, custom & media boxes, portable
.tptheme - 6 Bible + 6 song import formats; lossless TopPresenter Bible and Song JSON (GOAT) round-trip — songs carry versions, chords, bilingual lines, arrangement & repeats
- Red-letter, footnotes, cross-references, headings, Strong's & morphology stored in the DB
- Three-column Bible reader (Books · Chapters · Verses) with language groups & canon badges
- Drag-and-drop batch import (files and folders, recursive); eBiblia exporter
- Liquid Glass app icon (Icon Composer
.icon+.icnsfallback)
Planned
- Stage / monitor display — next slide, clock, speaker notes
- Remote control from phone or tablet
- Schedules → full service planning & running order
- Interlinear + Strong's display in the Bible reader (data already captured)
- NDI / Syphon output for video mixers
- Cloud sync for themes & libraries
- Fully localized UI
TopPresenter/
├── Core/ # PresentationManager (state, profiles, themes,
│ # transitions), commands, constants, migration
├── Models/ # BibleModule, Song, MediaItem, Schedule, LiveContent
├── Services/
│ ├── Import/ # 9 importers, in-process ZIP reader, drag-drop
│ ├── Export/ # Multi-format export service
│ ├── Audio/ & Video/ # AVFoundation wrappers
├── Views/
│ ├── Main/ # Window, toolbar, sidebar, preview panels, tabs
│ ├── Bible/ Songs/ Media/ # Modules
│ ├── Schedule/ CustomSlides/
│ ├── Presentation/ # Output window, Editor de Teme, text-box engine,
│ │ # media boxes, theme gallery
│ └── Settings/ # Preferences, projection, shortcuts
└── TopPresenterApp.swift # @main entry point
Key design decisions live in AGENTS.md — fixed text boxes (content never moves a box), per-presenter LayoutProfiles, snapshot-based undo, resilient Codable everywhere (stored data survives model growth), and a sandbox-safe bookmark layer.
git clone https://github.com/RobyRew/TopPresenter.git
cd TopPresenter
open TopPresenter.xcodeprojSelect the TopPresenter scheme → Build and Run (⌘R).
Requirements: macOS 15.7+, Xcode 16.3+, Swift 5.0+
Run the unit suite (70+ tests) with:
xcodebuild -scheme TopPresenter -destination 'platform=macOS' test -only-testing:TopPresenterTests- Every push to
mainpublishes an alpha pre-release; the alpha number counts per version, so bumpingMARKETING_VERSIONrestarts the series (e.g.v0.1.0-alpha.1). - Stable releases come from final tags (
v1.0.0): bumpMARKETING_VERSION, push, thengit tag v1.0.0 && git push origin v1.0.0. - The Resurse release hosts the starter themes and the EDC100 Bible.
- The Bible Library release bundles all 70 Bible translations (17 languages) as TopPresenter JSON — red-letter, Strong's, headings, cross-references and metadata included.
- The Themes release bundles the starter
.tpthemepack (Default, Cer Nepal, Galaxie, Minimal) with backgrounds embedded.