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>
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# Plan — three Spanish variants for live preaching
|
||||
|
||||
## The ask
|
||||
Operator, relaying a native Spanish speaker: the Spanish output is Latin
|
||||
American, and three variants are wanted — **Latin American, Spain, Mexican** —
|
||||
"fine tuned exactly to how it's supposed to be". No native speaker will be
|
||||
provided; research from the web instead. Nothing may be left out.
|
||||
|
||||
## Finding 1 — the taxonomy overlaps
|
||||
es-MX is INSIDE es-419, not beside it. Their differences are lexical only
|
||||
(*computadora/ordenador*, *carro/coche*, *ícono/icono*). es-ES is the one that
|
||||
differs GRAMMATICALLY. So the three deliverables are not three equal problems:
|
||||
|
||||
| variant | differs from es-419 by | difficulty |
|
||||
|---|---|---|
|
||||
| es_419 Latin American | — (this is today's output) | none |
|
||||
| es_MX Mexican | word choice | low, deterministic |
|
||||
| es_ES Spain | **the whole 2nd-person-plural system** | high |
|
||||
|
||||
Reference editions, so each variant has an authority rather than my preference:
|
||||
- **es_ES** → Reina-Valera 1960 (uses `vosotros`) / LBLA
|
||||
- **es_419** → NBLA (explicitly uses `ustedes` for Latin America) / NVI
|
||||
- **es_MX** → NBLA + Mexican lexicon
|
||||
|
||||
## Finding 2 — why es-ES cannot be a find-and-replace
|
||||
Spanish 3rd-person-plural is IDENTICAL for "ustedes" (you all) and "ellos"
|
||||
(they). `hablan` is both. So a target-side rule `hablan → habláis` corrupts
|
||||
every genuine third-person sentence: "they were there" becomes "you all were
|
||||
there". In scripture. Silently. This is the exact failure class the whole
|
||||
fidelity effort exists to prevent, so a naive transform is not shippable.
|
||||
|
||||
## Finding 3 — the English source resolves the ambiguity
|
||||
This is the key idea and it may remove the need for any model change.
|
||||
|
||||
The ambiguity is unresolvable in the Spanish. It is already resolved in the
|
||||
ENGLISH, which we still have:
|
||||
|
||||
"Open YOUR Bibles." -> 2nd person -> ustedes-form -> convert
|
||||
"THEY were there." -> 3rd person -> ellos-form -> leave alone
|
||||
|
||||
So: convert to `vosotros` ONLY when the English sentence contains 2nd-person
|
||||
address AND contains NO 3rd-person-plural marker. Mixed sentences ("tell them
|
||||
that you are loved") are left in es-419 form — which a Spaniard understands
|
||||
perfectly, it just reads Latin American. **Conservative by construction: the
|
||||
failure mode is "not converted", never "wrongly converted".**
|
||||
|
||||
## Design
|
||||
|
||||
NLLB -> guard -> cache -> [es-419 base]
|
||||
|-- es_MX : lexical layer
|
||||
|-- es_ES : gated vosotros transform
|
||||
`-- es_419: as-is
|
||||
|
||||
Same shape as `pt-variants.js` (por_Latn / por_PT share one NLLB result), and it
|
||||
reuses `NLLB_ALIAS` so the extra variants cost no extra inference.
|
||||
|
||||
New pseudo-codes `spa_MX` and `spa_ES`, both aliased to `spa_Latn` at the MT
|
||||
boundary only — exactly how `por_PT` already works.
|
||||
|
||||
### es_ES transform components
|
||||
1. **Gate** (on the English source): 2nd-person markers present, 3rd-person-plural
|
||||
markers absent.
|
||||
2. **Pronouns/possessives**: ustedes→vosotros, su(s)→vuestro(s)/vuestra(s),
|
||||
les→os, se (reflexive 2pl)→os, a ustedes→a vosotros.
|
||||
3. **Verb morphology**: 3pl→2pl. `-an→-áis`; `-en→-éis` for -er verbs but
|
||||
`-en→-ís` for -ir verbs, so the verb's class must be known — a table, not a
|
||||
rule. Irregulars (ser, ir, tener, hacer, poder, querer, decir, venir, saber,
|
||||
dar, ver, poner, salir, traer, oír, haber) need explicit entries.
|
||||
4. **Imperatives**: `abran→abrid`, `vengan→venid`, `miren→mirad` — highest
|
||||
frequency in preaching and the most audible difference.
|
||||
|
||||
### es_MX layer
|
||||
Lexical only. Word-level, no morphology, no gate needed.
|
||||
|
||||
## What must not regress
|
||||
- Latency: no extra inference. All layers are string work over a shared result.
|
||||
- `applyOverrides` still runs last so an operator pin outranks everything.
|
||||
- The English caption and archive keep what was actually said.
|
||||
- Voice: `speech-text.js` has Spanish book-name rules (`ES_BOOKS`) that fire on
|
||||
`1 Corintios` → `Primera de Corintios`. New variants must not produce forms
|
||||
outside that list or the voice reads "uno Juan".
|
||||
- Each variant needs its own voice choice — es_ES should get a Castilian voice
|
||||
(miro/sharvard, measured male), es_MX the Mexican `ald`.
|
||||
|
||||
## Open questions for the audit
|
||||
1. Is the source-side gate actually safe? Where does it misfire?
|
||||
2. Verb-table coverage: what fraction of real sermon Spanish is reachable?
|
||||
3. Does adding two pseudo-languages break the shared-cache invariant?
|
||||
4. Is `vosotros` even wanted? RVR1960 uses it and is read across Latin America.
|
||||
5. Does the listener page cope with three Spanish entries in the picker?
|
||||
Reference in New Issue
Block a user