← Commit history

Publish 1.9.47

John Lauer ·700029341b ·1mo ago ·parent 3b09be9
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]"   } }\ No newline at end of file
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.