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.
← Commit history
Publish 1.9.47
4 files changed
+53−2
bin/adom-tts⋯ 1 unchanged line ⋯
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-tts",- "version": "1.9.46",+ "version": "1.9.47", "type": "app", "description": "Adom's shared text-to-speech CLI + Playground. Reads your AI answers back to you while driving, and renders perfectly-timed voiceover tracks for demo videos.", "license": "MIT",
page.json+22−1@@ -4,7 +4,7 @@ "slug": "adom-tts", "title": "Adom TTS: Text to Speech", "brief": "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.",- "version": "1.9.46",+ "version": "1.9.47", "license": "MIT", "tags": [ "tts",@@ -12,6 +12,7 @@ "audio", "demo", "accessibility",+ "cli", "open-source", "mit" ],@@ -64,5 +65,25 @@ ], "install": { "binary_name": "adom-tts"+ },+ "description": "Adom's shared text-to-speech CLI + Playground. Reads your AI answers back to you while driving, and renders perfectly-timed voiceover tracks for demo videos.",+ "dependencies": {},+ "scripts": {+ "install": "./install.sh",+ "uninstall": "./uninstall.sh"+ },+ "needs_sudo": false,+ "files": [+ "package.json",+ "install.sh",+ "uninstall.sh",+ "bin/adom-tts",+ "skills/**",+ "completions/**"+ ],+ "org": "adom",+ "author": {+ "name": "John Lauer",+ "email": "[email protected]" } }
skills/adom-tts/SKILL.md+30@@ -114,6 +114,36 @@ adom-tts say "Quickly" --out q.mp3 --rate +15% --play adom-tts say "Generic sentence" --out g.mp3 --no-pronunciations --play ``` +## Live demos: pre-cache a script, cue one marker at a time++When you narrate a demo in lockstep with what you show on screen, do NOT `say`+each line as you go (synthesis + download latency lands between your screen+action and the voice). Load the whole script once, then cue markers:++```bash+# 1. Load: every marker is synthesized NOW and prefetched onto the player.+# Separate markers with a line containing only --- (or pass a JSON array).+adom-tts load @demo.txt --thread "<thread>" --id mydemo+# → script mydemo: 5 markers pre-cached ...++# 2. Cue exactly ONE marker per screen action. Instant: no synthesis, no+# download. Nothing auto-advances; the next marker plays only when you cue it.+adom-tts cue mydemo 1 --confirm # blocks until the human heard marker 1+<do the on-screen thing for step 2>+adom-tts cue mydemo 2 --confirm++# 3. Status, always: what played, what is queued, what is not cued yet.+adom-tts cue-status mydemo+```++Rules: a cue rides the normal shared queue (other threads' clips keep their+turn; a cue never interrupts anything) and gets the same verdicts as any clip,+so `--confirm` and `check mydemo#2` are honest. Re-cueing a marker is allowed+by design (it is an explicit request), and cued audio is exempt from the+stale-audio guard because you synthesized it on purpose at load time. Scripts+loaded more than 6 hours ago are no longer prefetched: reload before an old+demo.+ **Anti-patterns (have caused real spin-loops in past sessions):** - Do NOT: `python3 -m http.server <port>` to serve the mp3 — pup runs on the user's *desktop*, container localhost is unreachable. Hydrogen webviews have the same constraint. - Do NOT: custom HTML with base64-inlined mp3 + `data:` URL — past 2 MB this hits Chrome's URL length limit.