Extract and export worship song lyrics from ProPresenter 7
View the Project on GitHub adamswbrown/propresenterlyricexport
Information for developers and contributors.
# 1. Clone and install
git clone https://github.com/adamswbrown/propresenterlyricexport.git
cd propresenterlyricexport
npm install
# 2. Run development version
npm start -- status
# 3. Run tests
npm test
# 4. Build for distribution
npm run build
npm run build:exe
npm run electron:dev
The project uses a shared core + dual distribution pattern:
src/ (Shared core - both paths use this)
├── propresenter-client.ts (API wrapper)
├── lyrics-extractor.ts (Lyric parsing)
└── pptx-exporter.ts (PowerPoint generation)
electron/ (Desktop app only)
└── main/index.ts (Electron main process)
src/cli.ts (CLI only)
└── Command-line interface
Changes to src/ affect both CLI and desktop app. UI changes stay isolated.
⚠️ pptxgenjs Locked at 3.10.0 - Never upgrade without resolving bundling issues. Versions 3.11.0+ fail in CLI executables due to dynamic fs imports.
src/
├── cli.ts # CLI entry point
├── propresenter-client.ts # ProPresenter API wrapper
├── lyrics-extractor.ts # Lyric parsing logic
├── pptx-exporter.ts # PowerPoint generation
├── services/ # Reusable business logic
│ ├── playlist-exporter.ts
│ ├── song-matcher.ts
│ ├── bible-fetcher.ts
│ └── ...
├── types/ # TypeScript interfaces
│ ├── playlist.ts
│ ├── service-order.ts
│ └── ...
└── utils/ # Pure utility functions
electron/
├── main/index.ts # Main process, IPC handlers
├── preload/index.ts # Preload script
└── renderer/src/
├── App.tsx # React app root
├── ServiceGeneratorView.tsx # Service Generator component
└── ...
dist/ # Compiled CLI (generated)
dist-electron/ # Compiled Electron (generated)
executables/ # CLI executables (generated)
release/ # Packaged Electron app (generated)
Core Logic:
Services:
Desktop App:
Electron Integration:
Development mode:
npm start -- status # CLI
npm run electron:dev # Desktop app
Production build:
npm run build # Compile TypeScript
npm run build:exe # Create executables
npm run electron:package # Package app
If editing src/ (core logic):
npm run build && npm start -- statusnpm run electron:devIf editing Electron UI:
npm run electron:devIf editing CLI:
npm start -- [command]npm run buildnpm test # Run test suite
npm test -- --watch # Watch mode
npm run coverage # Coverage report
# Make your changes
git add src/...
# Commit with descriptive message
git commit -m "feat: Add feature description
- Detailed change 1
- Detailed change 2"
# Follow conventions in CONTRIBUTING.md
Choose what you want to explore: