app
Adom TTS — Text to Speech
Public Made by Adomby adom
Adom's shared voice service. Reads your AI's answers back to you while you drive, and renders perfectly-timed voiceover tracks for your demo videos — so you never record your own voice.
Adom TTS — Text to Speech — wiki walkthrough video
Target duration: 0:50–1:00 (4 clips)
Recorded: 2026-07-04
Final output: ~/project/recordings/adom-tts-walkthrough.webm
Wiki target: adom/adom-tts (README embed + page video asset)
Hero frame: taken from scene 1 (player mid-karaoke)
App version demoed: 1.9.20
Dependencies
adom-tts1.9.20 (narration TTS — the app narrates its own demo)- puppeteer-core 24.x + Chrome for Testing (in-container screencast; the
player UI is deterministic HTML so scenes are staged states of the real
src/player.html, driven by scripted JS — no live audio plays while recording) video-post1.0.3,ffmpeg 6+
Recording config
- Voice:
en-US-AndrewNeuralviaadom-tts say(house voice, pronunciation overrides server-side) - Surface: in-container headless Chrome,
page.screencastat 900x620. Every scene keeps continuous animation (karaoke advance, typing, LED breathing) so frames flow. - Captions: rendered inside the page (small chip, top-center) — no Hydrogen caption tooling touched (user's live workspace stays untouched).
Scenes
| # | id | Caption (on-screen) | Narration (TTS) | Target | Choreography |
|---|---|---|---|---|---|
| 1 | player | One shared player for all your AI threads |
This is Adom TTS. Your AI speaks its answers out loud through one shared player. The header shows which thread is talking and what the update is about, and the transcript follows along word by word. |
14s | player page, clip "flight-search" playing; karaoke advances a word every 400ms; LED breathing; seek bar creeps |
| 2 | verify | Playback is verified, never assumed |
Every clip is verified. The A I must name its thread and describe the update, and confirm blocks until the audio truly reached your ears. If your connection drops, clips buffer and retry on their own. |
13s | terminal page: the say command types out, ACCEPTED + CONFIRMED lines appear in sequence |
| 3 | history | Missed a clip? It waits for you in History |
Missed something? Every clip lands in the history with who sent it and what it says. Clips you did not fully hear are flagged. Tap replay and it plays immediately — your tap outranks the machine queue. |
15s | player + history drawer; missed row pulses; replay button flashes; header swaps to "(replay)" and karaoke restarts |
| 4 | outro | adom-wiki pkg install adom/adom-tts |
Adom TTS is open source under M I T, on the Adom wiki. One install command, and your A I has a voice. |
9s | hero image slow zoom; install command types under it |
Reproduction
cd /home/adom/project/adom-tts
python3 demo/build_scenes.py # writes staged scene HTML to /tmp/ttsdemo/scenes
node demo/record.mjs # screencasts each scene to /tmp/ttsdemo/raw
bash demo/tts_and_mux.sh # adom-tts say per scene + ffmpeg mux -> narrated clips + manifest
video-post storyboard /tmp/ttsdemo/manifest.json # MANDATORY user review
bash demo/finalize.sh # concat + keyframes + hero + wiki upload + README embed
Known issues from this rev
- Scenes are staged states of the real player HTML (deterministic, no live audio out) rather than a capture of the live Hydrogen tab — chosen so the user's active workspace and speakers are untouched during recording.
# Adom TTS — Text to Speech — wiki walkthrough video
**Target duration:** 0:50–1:00 (4 clips)
**Recorded:** 2026-07-04
**Final output:** `~/project/recordings/adom-tts-walkthrough.webm`
**Wiki target:** `adom/adom-tts` (README embed + page video asset)
**Hero frame:** taken from scene 1 (player mid-karaoke)
**App version demoed:** 1.9.20
## Dependencies
- `adom-tts` 1.9.20 (narration TTS — the app narrates its own demo)
- puppeteer-core 24.x + Chrome for Testing (in-container screencast; the
player UI is deterministic HTML so scenes are staged states of the real
`src/player.html`, driven by scripted JS — no live audio plays while
recording)
- `video-post` 1.0.3, `ffmpeg 6+`
## Recording config
- **Voice:** `en-US-AndrewNeural` via `adom-tts say` (house voice, pronunciation
overrides server-side)
- **Surface:** in-container headless Chrome, `page.screencast` at 900x620.
Every scene keeps continuous animation (karaoke advance, typing, LED
breathing) so frames flow.
- **Captions:** rendered inside the page (small chip, top-center) — no
Hydrogen caption tooling touched (user's live workspace stays untouched).
## Scenes
| # | id | Caption (on-screen) | Narration (TTS) | Target | Choreography |
|---|---|---|---|---|---|
| 1 | player | `One shared player for all your AI threads` | `This is Adom TTS. Your AI speaks its answers out loud through one shared player. The header shows which thread is talking and what the update is about, and the transcript follows along word by word.` | 14s | player page, clip "flight-search" playing; karaoke advances a word every 400ms; LED breathing; seek bar creeps |
| 2 | verify | `Playback is verified, never assumed` | `Every clip is verified. The A I must name its thread and describe the update, and confirm blocks until the audio truly reached your ears. If your connection drops, clips buffer and retry on their own.` | 13s | terminal page: the say command types out, ACCEPTED + CONFIRMED lines appear in sequence |
| 3 | history | `Missed a clip? It waits for you in History` | `Missed something? Every clip lands in the history with who sent it and what it says. Clips you did not fully hear are flagged. Tap replay and it plays immediately — your tap outranks the machine queue.` | 15s | player + history drawer; missed row pulses; replay button flashes; header swaps to "(replay)" and karaoke restarts |
| 4 | outro | `adom-wiki pkg install adom/adom-tts` | `Adom TTS is open source under M I T, on the Adom wiki. One install command, and your A I has a voice.` | 9s | hero image slow zoom; install command types under it |
## Reproduction
```bash
cd /home/adom/project/adom-tts
python3 demo/build_scenes.py # writes staged scene HTML to /tmp/ttsdemo/scenes
node demo/record.mjs # screencasts each scene to /tmp/ttsdemo/raw
bash demo/tts_and_mux.sh # adom-tts say per scene + ffmpeg mux -> narrated clips + manifest
video-post storyboard /tmp/ttsdemo/manifest.json # MANDATORY user review
bash demo/finalize.sh # concat + keyframes + hero + wiki upload + README embed
```
## Known issues from this rev
- Scenes are staged states of the real player HTML (deterministic, no live
audio out) rather than a capture of the live Hydrogen tab — chosen so the
user's active workspace and speakers are untouched during recording.