Build 117. A campus M4 Pro sat in the red with nobody listening and no language being translated — so transcription alone. Measured over SSH: sentences 4.2-4.7 s against roughly 4-5 s of audio, queue 46 deep, lag 152 s and still climbing. The mechanism built to catch exactly this could not fire. It triggers past 8 s, on the reasoning that 8 s means slower than people talk. That held when a chunk could be 8 s long; chunks are capped at HARD_CUT_MAX, 5.5 s. A 4.4 s sentence is already losing and never comes near 8 s, so the ladder never stepped down and the backlog grew without bound. It now compares against the audio the chunk actually held. Two details are measured rather than chosen: the margin is 0.85, because the Mini's 4.4 s against 4.5 s was NOMINALLY faster than real time while still losing — the work outside that timer (segmenting, the preview model sharing the GPU, the scheduler) loses on its own. And it requires a backlog of five, so one slow sentence on a healthy machine touches nothing. Checked against eight cases including the Mini's real numbers and a healthy M2 Max. The old absolute rule stays for a model that is genuinely hung. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
161 lines
4.1 KiB
JSON
161 lines
4.1 KiB
JSON
{
|
|
"name": "church-translate-engine",
|
|
"productName": "Church Translate",
|
|
"version": "3.23.2",
|
|
"buildNumber": 117,
|
|
"private": true,
|
|
"description": "Live sermon translation — self-contained: captures audio, transcribes, translates, and serves the congregation page itself",
|
|
"main": "main.js",
|
|
"scripts": {
|
|
"predist": "node tools/sync-build-version.js && node tools/check-packaged-files.js",
|
|
"start": "electron .",
|
|
"dist": "electron-builder --mac",
|
|
"dist:mac": "electron-builder --mac",
|
|
"dist:win": "electron-builder --win"
|
|
},
|
|
"devDependencies": {
|
|
"electron": "^33.2.0",
|
|
"electron-builder": "^25.1.8"
|
|
},
|
|
"dependencies": {
|
|
"@huggingface/transformers": "^3.8.1",
|
|
"espeak-ng": "^1.0.2",
|
|
"kokoro-js": "^1.2.1",
|
|
"qrcode": "^1.5.4",
|
|
"sherpa-onnx-node": "^1.13.6",
|
|
"tar-stream": "^3.2.1",
|
|
"unbzip2-stream": "^1.4.3",
|
|
"ws": "^8.18.0"
|
|
},
|
|
"build": {
|
|
"appId": "org.waterschurch.translate.engine",
|
|
"productName": "Church Translate",
|
|
"directories": {
|
|
"output": "dist"
|
|
},
|
|
"files": [
|
|
"main.js",
|
|
"preload.js",
|
|
"index.html",
|
|
"engine.css",
|
|
"engine.js",
|
|
"model-worker.js",
|
|
"mt-service.js",
|
|
"capture-worklet.js",
|
|
"selftest.html",
|
|
"selftest.js",
|
|
"selftest.wav",
|
|
"vendor/transformers.min.js",
|
|
"vendor/ort-wasm-simd-threaded.jsep.wasm",
|
|
"vendor/ort-wasm-simd-threaded.jsep.mjs",
|
|
"server/**/*",
|
|
"tts-service.js",
|
|
"kokoro-sidecar.js",
|
|
"voices.js",
|
|
"pt-variants.js",
|
|
"speech-text.js",
|
|
"tools/setup-local-voices.sh",
|
|
"voice-catalog.js",
|
|
"out-routing.js",
|
|
"mt-guard.js",
|
|
"liturgy.js",
|
|
"preach.js",
|
|
"spa-variants.js",
|
|
"bible-lexicon.js",
|
|
"app-log.js",
|
|
"sidecar-langs.js",
|
|
"short-questions.js",
|
|
"tools/verify-windows.js"
|
|
],
|
|
"mac": {
|
|
"target": [
|
|
{
|
|
"target": "dir",
|
|
"arch": [
|
|
"arm64"
|
|
]
|
|
},
|
|
{
|
|
"target": "dmg",
|
|
"arch": [
|
|
"arm64"
|
|
]
|
|
}
|
|
],
|
|
"category": "public.app-category.utilities",
|
|
"extendInfo": {
|
|
"NSMicrophoneUsageDescription": "Church Translate listens to the sermon audio you select so it can caption and translate it."
|
|
},
|
|
"identity": null,
|
|
"extraResources": [
|
|
{
|
|
"from": "vendor/node",
|
|
"to": "node"
|
|
},
|
|
{
|
|
"from": "vendor/cloudflared",
|
|
"to": "cloudflared"
|
|
}
|
|
],
|
|
"artifactName": "${productName}-${version}-${arch}.${ext}",
|
|
"files": [
|
|
"!node_modules/**/.cache${/*}",
|
|
"!node_modules/onnxruntime-node/bin/napi-v3/win32${/*}",
|
|
"!node_modules/onnxruntime-node/bin/napi-v3/linux${/*}",
|
|
"!node_modules/sherpa-onnx-win-x64${/*}"
|
|
]
|
|
},
|
|
"asar": false,
|
|
"buildVersion": "117",
|
|
"win": {
|
|
"target": [
|
|
{
|
|
"target": "nsis",
|
|
"arch": [
|
|
"x64"
|
|
]
|
|
},
|
|
{
|
|
"target": "zip",
|
|
"arch": [
|
|
"x64"
|
|
]
|
|
}
|
|
],
|
|
"artifactName": "${productName} Setup ${version}.${ext}",
|
|
"extraResources": [
|
|
{
|
|
"from": "vendor-win/node.exe",
|
|
"to": "node.exe"
|
|
},
|
|
{
|
|
"from": "vendor-win/cloudflared.exe",
|
|
"to": "cloudflared.exe"
|
|
},
|
|
{
|
|
"from": "vendor-win/ffmpeg.exe",
|
|
"to": "ffmpeg.exe"
|
|
},
|
|
{
|
|
"from": "vendor-win/FFMPEG-LICENSE.txt",
|
|
"to": "FFMPEG-LICENSE.txt"
|
|
}
|
|
],
|
|
"files": [
|
|
"!node_modules/**/.cache${/*}",
|
|
"!node_modules/onnxruntime-node/bin/napi-v3/darwin${/*}",
|
|
"!node_modules/onnxruntime-node/bin/napi-v3/linux${/*}",
|
|
"!node_modules/sherpa-onnx-darwin-arm64${/*}"
|
|
]
|
|
},
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"perMachine": false,
|
|
"allowToChangeInstallationDirectory": true,
|
|
"createDesktopShortcut": true,
|
|
"createStartMenuShortcut": true,
|
|
"deleteAppDataOnUninstall": false
|
|
}
|
|
}
|
|
}
|