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.6.1
7 files changed
+146−12
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-tts"-version = "1.6.0"+version = "1.6.1" edition = "2021" license = "AGPL-3.0-or-later" repository = "https://github.com/adom-inc/adom-tts"
SKILL.md+40@@ -130,6 +130,46 @@ adom-tts config # which URL is this binary hitting? adom-tts config --show # also dump the resolved play surface + config path ``` +## Capabilities & commands (v1.6+)++**One shared player, queued across ALL threads.** Every `say --play` / `play`+from every Claude thread feeds ONE shared player (a single Hydrogen pane, right+20% of the screen) and clips play **sequentially — never overlapping**. You just+call `say --play`; a background drainer serializes the queue. A stalled/failed+clip no longer blocks the queue (it self-advances in ~15s) and the player+**self-heals** a stalled stream by reloading it.++**Identify your thread.** Clips from parallel threads share the player, so the+listener needs to know who's speaking:+```bash+adom-tts say "This is the <thread> thread — <answer>" --out /tmp/x.mp3 --thread "<thread>" --play+```+`--thread "<name>"` labels the clip in the player header. ALSO begin your spoken+text by naming the thread ("This is the brand thread — …") so it's heard aloud.++**Long text is auto-chunked.** service-tts drops long single requests, so `say`+auto-splits text >~700 chars at sentence boundaries, synthesizes each short piece+(fast, cached, retried on flaps), and stitches them into ONE seamless clip. Pass+the full paragraph — do NOT pre-chunk. Transient service failures are retried+automatically; **never install a local TTS engine** (shared-infra rule).++**Control the live player without reloading it** (great for hands-free "play+that again"):+```bash+adom-tts control replay # jump to start + play+adom-tts control pause+adom-tts control play+adom-tts control toggle+```++**Review what happened.** Every synth + playback + queue event is logged:+```bash+adom-tts logs [--tail N] # events + summary + anomaly hints+```+Use it to diagnose silent clips, service flaps, or multiple threads/containers+competing for the shared player. The player header also shows a **live-link LED**+(green = live pipe to the AI, red = dead/orphaned tab).+ ## Drive mode (hands-free auto-player) You wrote an mp3 — now play it. Don't author a custom autoplay HTML.
VERSION+1−1@@ -1 +1 @@-1.6.0+1.6.1
bin/adom-tts⋯ 1 unchanged line ⋯
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-tts",- "version": "1.6.0",+ "version": "1.6.1", "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+63−9@@ -4,24 +4,78 @@ "slug": "adom-tts", "title": "adom-tts — your AI's voice", "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.6.0",+ "version": "1.6.1", "license": "MIT",- "tags": ["tts", "voice", "audio", "demo", "accessibility", "open-source", "mit"],+ "tags": [+ "tts",+ "voice",+ "audio",+ "demo",+ "accessibility",+ "cli",+ "open-source",+ "mit"+ ], "hero": { "type": "image", "path": "screenshots/hero-v2.png", "thumbnail": "screenshots/hero-v2-thumb.png" }, "discovery_pitch": "Hands-free in the car? Say 'read me your last answer, I'm driving' and adom-tts speaks it aloud. Making a demo video? Feed it your script and get a perfectly-timed narration track in the house voice — no recording booth, no retakes. One shared edge-tts service with Adom pronunciation overrides and an instant source-hash cache.",- "discovery_triggers": ["adom-tts", "text to speech", "tts", "voiceover", "demo narration", "narration", "synthesize speech", "make audio from text", "read it to me", "read me your answer", "read that back", "read me the last prompt", "I'm driving", "hands-free", "drive mode", "narrate the answer", "play this audio"],+ "discovery_triggers": [+ "adom-tts",+ "text to speech",+ "tts",+ "voiceover",+ "demo narration",+ "narration",+ "synthesize speech",+ "make audio from text",+ "read it to me",+ "read me your answer",+ "read that back",+ "read me the last prompt",+ "I'm driving",+ "hands-free",+ "drive mode",+ "narrate the answer",+ "play this audio"+ ], "sample_prompts": [- { "label": "Drive mode", "prompt": "Read me your last answer, I'm driving" },- { "label": "Demo voiceover", "prompt": "Render this script as a demo voiceover track" },- { "label": "Synthesize and play", "prompt": "Synthesize a 30-second walkthrough of this design and play it for me" },- { "label": "Replay last", "prompt": "Play the last TTS clip again" },- { "label": "Add pronunciation", "prompt": "Teach the TTS service that aci is pronounced A-C-I" }+ {+ "label": "Drive mode",+ "prompt": "Read me your last answer, I'm driving"+ },+ {+ "label": "Demo voiceover",+ "prompt": "Render this script as a demo voiceover track"+ },+ {+ "label": "Synthesize and play",+ "prompt": "Synthesize a 30-second walkthrough of this design and play it for me"+ },+ {+ "label": "Replay last",+ "prompt": "Play the last TTS clip again"+ },+ {+ "label": "Add pronunciation",+ "prompt": "Teach the TTS service that aci is pronounced A-C-I"+ } ], "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,+ "org": "adom",+ "author": {+ "name": "John Lauer",+ "email": "[email protected]" }-}+}
skills/adom-tts/SKILL.md+40@@ -130,6 +130,46 @@ adom-tts config # which URL is this binary hitting? adom-tts config --show # also dump the resolved play surface + config path ``` +## Capabilities & commands (v1.6+)++**One shared player, queued across ALL threads.** Every `say --play` / `play`+from every Claude thread feeds ONE shared player (a single Hydrogen pane, right+20% of the screen) and clips play **sequentially — never overlapping**. You just+call `say --play`; a background drainer serializes the queue. A stalled/failed+clip no longer blocks the queue (it self-advances in ~15s) and the player+**self-heals** a stalled stream by reloading it.++**Identify your thread.** Clips from parallel threads share the player, so the+listener needs to know who's speaking:+```bash+adom-tts say "This is the <thread> thread — <answer>" --out /tmp/x.mp3 --thread "<thread>" --play+```+`--thread "<name>"` labels the clip in the player header. ALSO begin your spoken+text by naming the thread ("This is the brand thread — …") so it's heard aloud.++**Long text is auto-chunked.** service-tts drops long single requests, so `say`+auto-splits text >~700 chars at sentence boundaries, synthesizes each short piece+(fast, cached, retried on flaps), and stitches them into ONE seamless clip. Pass+the full paragraph — do NOT pre-chunk. Transient service failures are retried+automatically; **never install a local TTS engine** (shared-infra rule).++**Control the live player without reloading it** (great for hands-free "play+that again"):+```bash+adom-tts control replay # jump to start + play+adom-tts control pause+adom-tts control play+adom-tts control toggle+```++**Review what happened.** Every synth + playback + queue event is logged:+```bash+adom-tts logs [--tail N] # events + summary + anomaly hints+```+Use it to diagnose silent clips, service flaps, or multiple threads/containers+competing for the shared player. The player header also shows a **live-link LED**+(green = live pipe to the AI, red = dead/orphaned tab).+ ## Drive mode (hands-free auto-player) You wrote an mp3 — now play it. Don't author a custom autoplay HTML.