#247 · Add eight vertical shorts, narrate with Kokoro, timescale.info on every end card
- timeline-app
- pull request
Stacked on #246: merge #244 and #245, then #246, then this one. When #246 merges and its branch is deleted, GitHub retargets this PR to `main`; otherwise, change the base by hand. ## Shorts - `publicity/shorts/` holds the plan (`0-shorts-audiences-and-series.md`: what the feeds demand, who would watch, the frame, the guardrails) and eight scripts. Each has its narration, its claims with sources, and posting notes: title, caption, hashtags, cover and pinned comment. - They render from `publicity/video/s01-…` to `s08-…`. Each is 9:16, 25–38 s long, with burned-in word captions. - New pipeline pieces: - `"format": "vertical"` in `video.json`: a 1080×1920 page, a `SAFE` area clear of the platforms' overlays, and `phoneShot`, `shortHeadline`, `shortCaption`, `shortEnd` and `renderShort` in `core.js`. - Gap-free caption cues in `captions.py` (the SRT output is unchanged). - A web-font check with reload in `render.mjs`. ## Narration: Piper → Kokoro - `narrate.py` now uses Kokoro 82M with the `af_heart` voice, still offline in `python:3.12-slim`, with weights cached in `common/tts/` (git-ignored). - A `say` respelling can give exact phonemes as `[word](/phonemes/)`. Piper-style respellings ("DAY-a-gol") are removed where Kokoro already says the word right. - All 19 videos are re-narrated and re-aligned. I compared Whisper transcripts with the scripts, and every render has no missing cues. ## End cards - Every explainer and short ends with `https://timescale.info` above `github.com/openchronology/timeline-app`, using a new `addresses()` helper. - `timescale.info` doesn't resolve yet, so the `[CONFIRM]` notes stay. `npm test`: 301/301.