2026-09
ChurchBridge Real-Time Sermon Translation
Live English captions for Spanish preaching, built around how preachers actually speak
Overview
A bilingual congregation has three bad options: hire an interpreter you probably can't staff every week, translate nothing, or use off-the-shelf live translation — which looks like it should work and fails in the most interesting way.
Feed a sermon into a general-purpose speech translator and the captions are technically correct and practically unusable. Preaching is not dictation. Preachers speak in fragments — "And when Paul says — when Paul writes to the church at Corinth —" is three false starts before one complete thought, and a sentence-at-a-time translator emits three captions, each nonsense alone. Bilingual preachers code-switch mid-sentence, so a translator told "the input is Spanish" faithfully mistranslates the English. Spanish word order routinely withholds the word that makes a sentence make sense until the end.
ChurchBridge runs in production weekly. The engineering is entirely in what happens between transcribe, translate, and display.
Architecture
Waiting for a Complete Thought
A discourse-aware buffer holds transcribed text and refuses to release it while it still looks structurally incomplete — a trailing connector word, an unclosed inverted question mark, fewer than four words accumulated. Terminal punctuation, a voice-activity signal, or a fallback timer releases it. The timers extend when text looks unfinished, so a preacher who trails off mid-clause produces no caption until the clause lands.
Machine translation handles a fast path so something legible appears quickly. An LLM reviews the same sentence asynchronously and returns a better translation plus structural judgments — is this thought complete, does it need continuation, is it scripture or exposition or application. Immediacy and quality stop competing for the same time budget.
One gate decides what reaches the screen. Every sentence carries a display_ready flag and the server enforces it deterministically: the model can make the gate stricter, never looser.
Keeping Captions Still
The hardest readability problem is not accuracy — it is movement. Captions that appear, rewrite themselves, then jump to a different screen position are harder to read than captions that arrived a beat later.
ChurchBridge uses head-anchored caption chains. When the model signals a fragment belongs with the previous one, the earliest segment keeps its position and later fragments are absorbed into it. Three fragments become one stable caption, exactly where the first one already was. Detected scripture citations follow the same chains, so a verse never ends up attached to a caption that no longer exists.
On-Device Noise Suppression
A sanctuary is a hostile room: music and congregational response over the preacher, PA reinforcement bleeding into the mic, reverberation off hard surfaces. A phone in that room is not a soundboard feed.
The iPhone app carries a full streaming implementation of DeepFilterNet3 — the network in Core ML, with the signal chain around it written in Swift against Accelerate: STFT analysis and synthesis, ERB filterbank and inverse, overlap-add memory, and normalization state carried across frames so enhancement stays continuous on a live stream.
Then the obvious setting turned out to be wrong. Running the model at full strength looked spectacular by every noise measurement — 25 to 44 dB of noise floor gone — and made the captions worse. At full strength the mask closes over quiet speech as readily as over a fan; in the worst test runs the recognizer returned nothing at all. A room can be measurably quieter and less intelligible at the same time.
The enhanced signal is now mixed back at 25%, the rest left dry. The model corrects the signal instead of replacing it.
Measuring It Properly
That decision was made with an instrument, not a hunch. A separate benchmark project pairs a standalone iOS app with a Python controller: it plays sermon audio into a real room, captures it from a phone in a fixed position, and compares five capture pipelines — raw, Apple AEC, AEC plus a hand-written cleanup, DeepFilterNet3 alone, and AEC plus DeepFilterNet3 — under identical acoustic conditions, with a box fan running.
The final mix value was still chosen by listening rather than by the metric, because a playback timing offset in the rig makes word error rate untrustworthy for comparing nearby configurations. That limitation is documented publicly rather than papered over.
Design Decisions
Discourse structure over sentence boundaries. Sentence-level translation is the obvious approach and it is what makes off-the-shelf tools unusable here. Waiting for a complete thought costs latency and buys comprehension.
A deterministic gate around a probabilistic model. The LLM's judgment can tighten what reaches the screen but never loosen it. Model output is advice; the server decides.
Stability over freshness. Anchoring merges to the earliest segment means the congregation reads text that stays put.
Correct the signal, don't replace it. The noise suppression mix is deliberately conservative, because the measurement that looked best produced the worst captions.
Publish the limitations. The public repositories document what is not yet trustworthy — including why no accuracy numbers are quoted — alongside what works.