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
v1.9.50: hide the freshness warning icon on fresh clips (svg hidden rule), diag line only on audio errors
4 files changed
+6−24
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-tts"-version = "1.9.49"+version = "1.9.50" edition = "2021" license = "AGPL-3.0-or-later" repository = "https://github.com/adom-inc/adom-tts"
VERSION+1−1@@ -1 +1 @@-1.9.49+1.9.50
page.json−21@@ -12,7 +12,6 @@ "audio", "demo", "accessibility",- "cli", "open-source", "mit" ],@@ -65,25 +64,5 @@ ], "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]" } }
src/player.html+4−1@@ -48,6 +48,7 @@ :focus-visible { outline: 2px solid var(--teal); outline-offset: 2px; } button { font-family: inherit; } svg.ic { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex: none; }+ svg.ic[hidden] { display: none; } /* ============ 1. The house header (dash-header numbers) ============ */ header.dash {@@ -169,7 +170,9 @@ .hist-replay svg.ic { width: 15px; height: 15px; } .hist-replay:hover { background: var(--teal-soft); } .hist-replay:active { transform: scale(.9); }+ /* developer diagnostics: shown only once the audio element reports an error */ .diag { margin-top: 12px; font-size: 10.5px; color: var(--muted); font-family: var(--mono); opacity: .6; word-break: break-all; }+ .diag[hidden] { display: none; } footer { padding: 10px var(--gutter); text-align: center; font-size: 11px; color: var(--muted); opacity: .7; flex: none; } /* ============ Toasts (toasts skill: bottom center, newest on top) ============ */@@ -401,7 +404,7 @@ playBtn.setAttribute('aria-label', kind==='pause'?'Pause':kind==='replay'?'Replay':'Play'); document.body.classList.toggle('is-playing', kind==='pause'); }- function updateDiag(){ const e=a.error?`err=${MEDIA_ERR[a.error.code]||a.error.code}`:'err=none'; diag.textContent=`clip#${curClipId} ready=${a.readyState} net=${a.networkState} ${e}${lastErr?' '+lastErr:''}`; }+ function updateDiag(){ const e=a.error?`err=${MEDIA_ERR[a.error.code]||a.error.code}`:'err=none'; diag.textContent=`clip#${curClipId} ready=${a.readyState} net=${a.networkState} ${e}${lastErr?' '+lastErr:''}`; diag.hidden = !(a.error || lastErr); } function beacon(p){ fetch(p,{cache:'no-store'}).catch(()=>{}); } function ev(name, extra){ const buf = a.buffered.length ? a.buffered.end(a.buffered.length-1).toFixed(1) : '0';