Extract and export worship song lyrics from ProPresenter 7
View the Project on GitHub adamswbrown/propresenterlyricexport
Get your development environment running.
git clone https://github.com/adamswbrown/propresenterlyricexport.git
cd propresenterlyricexport
npm install
This installs:
# Test CLI
npm start -- status
# This should show:
# ProPresenter 7.x.x
# (or connection error if ProPresenter isn't running)
# Development mode (from source)
npm start -- <command>
# Examples:
npm start -- status
npm start -- playlists
npm start -- pptx
npm start -- export --json
All CLI commands work in development mode - changes to TypeScript files don’t require rebuilding.
# Development mode with hot reload
npm run electron:dev
# This starts:
# 1. Webpack dev server (handles changes)
# 2. Electron main process
# 3. React renderer (hot reload on file changes)
Features in dev mode:
# Compile TypeScript to JavaScript
npm run build
# Creates:
# dist/ - CLI executable code
# dist-electron/ - Electron bundles
# Build standalone executables (macOS & Windows)
npm run build:exe
# Creates:
# executables/propresenter-lyrics-macos-x64
# executables/propresenter-lyrics-macos-arm64
# executables/propresenter-lyrics-win-x64.exe
# Build Electron app
npm run electron:build
npm run electron:package
# Creates:
# release/mac-arm64/ - macOS app
# release/mac-x64/ - macOS Intel app
# release/win-unpacked/ - Windows app
# Run tests
npm test
# Watch mode (re-run on changes)
npm test -- --watch
# Coverage report
npm run coverage
# Use --debug flag to see API responses
npm start -- status --debug
npm start -- export --debug
npm start -- pptx --debug
Recommended extensions:
Debug configuration (.vscode/launch.json):
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "CLI",
"program": "${workspaceFolder}/dist/cli.js",
"args": ["status"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
}
]
}
src/cli.ts:
if (command === 'mynewcommand') {
const result = await myNewCommand(config);
console.log(result);
}
src/mynewcommand.ts:
export async function myNewCommand(config: ConnectionConfig) {
// implementation
return result;
}
npm start -- mynewcommand
If editing src/propresenter-client.ts, src/lyrics-extractor.ts, or src/pptx-exporter.ts:
npm run buildnpm start -- status # CLI
npm run electron:dev # Desktop app
electron/renderer/src/MyComponent.tsx:
export function MyComponent() {
return <div>Component</div>;
}
electron/renderer/src/App.tsx:
import { MyComponent } from './MyComponent';
<MyComponent />
# Check for updates
npm outdated
# Update all (carefully!)
npm update
# Update specific package
npm update pptxgenjs
# ⚠️ DO NOT update pptxgenjs beyond 3.10.0
# (causes bundling issues in CLI executables)
127.0.0.1:1025 by defaultVS Code settings (.vscode/settings.json):
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
# Install git hooks (pre-commit linting)
npm run prepare
# This sets up husky to lint before commits
# Reinstall dependencies
rm -rf node_modules package-lock.json
npm install
# Rebuild TypeScript
npm run build
# Kill the process
lsof -i :3000 # macOS/Linux
kill -9 <PID>
# Or use different port
PORT=3001 npm run electron:dev
npm start -- status --debug
# Clear cache and rebuild
rm -rf dist-electron
npm run electron:build
npm run electron:dev