feat(short): narración — el grounding la cubre, el contrato la admite y el prompt la guía
Build & Deploy ResearchOwl / build-and-push (push) Successful in 10s

El comprobador va primero, antes que el campo (fase 2 §12): la narración es
prosa que el modelo redacta, no una etiqueta que copia, y es donde se cuela
una cifra sin fuente. De paso, la huella de una cifra pasa a ser número +
unidad canónica: con la voz repitiendo la pantalla, '35,000 FT' y '35,000
feet' son el mismo dato y contarlos dos veces inflaría el informe del que
depende la revisión humana.

editorial_notes estima la duración CON la voz: la declarada es un suelo y sin
esto el modelo escribiría 40 s de shots, les colgaría narración y se enteraría
del Short de 65 s cuando ya está pagado.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
ChemaVX
2026-08-06 15:38:34 +00:00
co-authored by Claude Fable 5
parent 93a506b636
commit a13c3062b6
9 changed files with 375 additions and 13 deletions
+27 -1
View File
@@ -63,7 +63,33 @@ keeping until the palette itself proves its value. If it happens, it is an opt-i
`Audio.transitions` flag with boundaries passed alongside `silence` — additive, and
`sonar`'s reference gate must not notice.
### 4b. Narration (TTS) + burned-in captions
### 4b. Narration (TTS) + burned-in captions — **shipped 2026-08-06**
What actually landed, and where it differs from the plan below:
- **Piper as a standalone binary**, not the PyPI package: `piper-phonemize` is a
compiled extension whose wheels chase the interpreter version, and the image's
Python is pinned by digest. Binary, voice and config are all pinned by sha256 — the
voice model *is* the channel's sound.
- **`--noise_scale 0 --noise_w 0` is load-bearing.** Measured before building anything:
the same line twice gave 5.668 s and 5.796 s with different hashes. With the flags,
three runs and one hash. Without that probe the phase would have shipped a renderer
that quietly stopped being deterministic.
- **Declared duration became a floor**, as planned — plus a consequence the plan
missed: `audio.silence` windows are written in absolute seconds, so a stretched shot
slides them onto the wrong line. They are now remapped through the shot they pointed
at.
- **One caption size for the whole video**, fitted against the longest group. Per-group
fitting made the type jump between cues, which is the clearest tell of an
auto-captioned video.
- researchowl got the grounding extension first, as the order below demanded, and one
thing that order revealed: with the voice repeating on-screen figures, claims had to
be de-duplicated by *canonical unit* ("35,000 FT" and "35,000 feet" are one claim) or
every narrated Short would double its own review report.
Original plan, kept for the record:
### 4b (as planned). Narration (TTS) + burned-in captions
These two ship together: most Shorts are watched muted, so the captions matter more than
the voice — but both come from the same new field.