Files
church-translate/app/_proto-columns.html
christianandClaude Opus 5 c9eef0672c Church Translate, as it runs at the campuses
Live sermon translation into 100+ languages, running entirely on one Mac per
campus: audio in, voice detection, Whisper on the GPU, NLLB-200 in its own
process, and a built-in web server the congregation reads from on their
phones. No audio leaves the building.

This is the source only. What used to sit beside it — 14 GB of speech and
translation models, 8 GB of voice bundles, 6 GB of natural voices, the Electron
caches, and the app data holding the operator PIN and every service transcript
— is machine state and downloaded assets, and stays in the NAS backup where it
belongs. The vendored node, cloudflared and Windows ffmpeg binaries are out too
(533 MB, re-fetched for packaging); the browser-side runtime beside them is
kept, so a checkout still serves the congregation page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 15:41:21 -04:00

39 lines
1.7 KiB
HTML

<!doctype html><html><head><meta charset="utf-8">
<link rel="stylesheet" href="./engine.css">
<style>body{padding:1.25rem;max-width:44rem;margin:0 auto}</style>
</head><body>
<section class="card">
<h2>Languages on the front page</h2>
<p class="hint" id="opLangCount"></p>
<div class="row">
<input id="opLangFilter" type="search" placeholder="Filter languages…" autocomplete="off">
<label class="oprow"><input type="checkbox" id="opLangVoiceOnly"><span>With a voice only</span></label>
<button class="btn" id="opLangNone">Turn all off</button>
</div>
<div class="langcols">
<div class="langcol"><div class="langcolhead">On <b id="opLangNOn">0</b></div>
<div id="opLangOn" class="langlist"></div></div>
<div class="langcol"><div class="langcolhead">Off <b id="opLangNOff">0</b></div>
<div id="opLangOff" class="langlist"></div></div>
</div>
<label class="oprow"><input type="checkbox" id="opAllowAll" checked><span>Let listeners pick any language</span></label>
<p class="hint" id="opAllowAllHint"></p>
</section>
<script src="./languages.js"></script><script src="./voice-catalog.js"></script>
<script>
/* Globals the extracted functions expect. */
const $=(i)=>document.getElementById(i);
let opConfig={featured:["spa_Latn","por_Latn","por_PT"],allowAllLanguages:true};
let featuredSaveTimer=null, lastConfigSig='';
function opSave(){ return Promise.resolve(); }
function loadOperator(){}
function renderOpLanguages(){ renderOpLangList(); }
</script>
<script>
/* THE REAL renderOpLangList / renderOpLangCount / toggleFeatured / flyRow,
pasted verbatim by the build step below — no reimplementation. */
</script>
<script src="./_extracted.js"></script>
<script>renderOpLangList();</script>
</body></html>