tts-engine-evaluation
Settle a "should we switch TTS engines / is X better than Edge TTS" question by measuring produced audio files, not by reading library docs or trusting…
Skill by kingithegreat
Chalk Labs
Need help deploying tts-engine-evaluation?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kingithegreat-tts-engine-evaluation
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: marketing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/tts-engine-evaluation
What's inside
- Skill name
tts-engine-evaluation- Description
- Settle a "should we switch TTS engines / is X better than Edge TTS" question by measuring produced audio files, not by reading library docs or trusting marketing sample rates. Use when asked to evaluate Kokoro, Voicebox, ElevenLabs, Piper, or any narration engine for HomeBot's Media Studio; when someone reports "the voice isn't high enough quality"; and before wiring any new TTS provider. Covers the ffprobe/volumedetect method, the model-native-rate trap (a wrapper cannot exceed its model), and the decision rule that kept Edge TTS.
- License
- MIT
- Instructions
- 83 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Evaluate a TTS engine by measuring its output, not its spec sheet
The tempting evaluation reads the library's README, sees "48 kHz!" or "neural!", and concludes
quality. Every claim about audio quality must be settled by generating the SAME script through
both engines and measuring the produced files. A wrapper's advertised rate can differ from what
it actually emits, and a model's native rate caps every wrapper built on it.
## The method (worked end-to-end 2026-08-23: Kokoro vs Edge TTS)
1. **One script, both engines.** ~55 words of real narration-style prose — not "hello world",
which has no sentence pauses and hides pacing differences.
2. **Generate through each engine in its PRODUCTION configuration.** For Edge TTS that meant
`AUDIO_24KHZ_96KBITRATE_MONO_MP3` exactly as `voice.ts` sets it — evaluating a config the
app doesn't ship proves nothing about the app.
3. **Measure with ffprobe** (format facts):
```bash
ffprobe -v error -show_entries stream=codec_name,sample_rate,channels,bit_rate \
-show_entries format=duration -of default=noprint_wrappers=1 file.ext
```
4. **Measure levels with volumedetect**:
```bash
ffmpeg -hide_banner -i file.ext -af volumedetect -f null NUL 2>&1 |
grep -E "mean_volume|max_volume"
```
Expect differences under ~2 dB to be irrelevant: Media Studio's loudnorm is the pipeline's
loudness authority, so pre-normalisation level differences are erased downstream.
5. **Measure pacing with silencedetect** (`noise=-40dB:d=0.5`): count and length of sentence
gaps. Fewer/shorter gaps = tighter narration for the same words.
6. **Time warm generations**, at least two runs each. Note WHAT the time is made of: network
TTS time is latency (varies with connectivity), local model time is compute (deterministic).
## The model-native-rate trap
This is the finding that ended the Kokoro track. Aden's framing was "Edge caps at 24 kHz —
that's the library ceiling", implying a different engine could beat it. Verified false:
- `kokoro-js/dist/kokoro.cjs` constructs output as `new RawAudio(i.data, 24e3)` — hardcoded.
- The Kokoro-82M ONNX model itself is a 24 kHz vocoder. **No packaging of a model — JS lib,
Tauri+Python app, raw Python — can exceed the model's native rate.**
So before evaluating any engine, find its MODEL's native rate:
- Grep the wrapper's dist/source for the `RawAudio(` (or equivalent) construction.
- Or generate one sample and ffprobe it — the emitted rate IS the native rate.
- A wrapper advertising more than its model delivers is lying; trust the file.
Resampling up (`ffmpeg -ar 48000`) works trivially but adds no information — upsampling cannot
create detail the source never produced. Never present an upsampled rate as a quality gain.
## The decision rule
An engine swap must win on an axis that survives the pipeline:
| Axis | Survives? | Why |
|---|---|---|
| Sample rate/channels | Only if HIGHER | Same-rate = no pipeline change needed; higher = real fidelity gain |
| Loudness | Almost never | loudnorm normalises it away |
| Pacing/silence | Yes | Affects ducking mix and video length |
| Voice character | Yes — but only human ears settle it | Numbers cannot judge this; produce A/B samples and let Aden listen |
| Speed/offline | Yes | Real operational value, but doesn't make better-sounding video |
**Kokoro vs Edge outcome (2026-08-23): same 24 kHz mono, levels within 2 dB, Edge tighter
pacing, Kokoro ~2× faster + offline. Dropped — no axis that survives the pipeline favoured it,
and voice character was never raised as a complaint about Ava specifically.**
## Cost check before any cloud TTS
ElevenLabs was evaluated and ruled out the same day: free tier ≈ 10 min/month non-commercial;
shipping in a sold product needs Creator ($22/mo). Apply the same test to any cloud voice:
free tier must cover evaluation AND the shipping tier must fit the product's economics.
## Bench location
`narration-measure/` in the repo working tree (untracked): `kokoro.mjs`, `generate.js`
(Edge path), paired samples `kokoro-heart.wav` / `edge-ava.mp3`. Reusable as-is for any future
engine comparison — add a third generator script, keep the measurement commands identical so
numbers stay comparable across evaluations.From kingithegreat/Sadie, MIT.
More from kingithegreat/Sadie
- 0.587score
homebot-defect-patterns
kingithegreat
Repo-specific defect patterns for HomeBot/SADIE that pass every automated check and only fail in a built, running app — dead IPC channels, relative require()…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
feature-decision-closure
kingithegreat
Close out a "should we build X" question so no future session re-litigates it — record the decision, the evidence that settled it, and the next lever if the…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
multi-agent-verify-content
kingithegreat
Verify that another agent's (or your own) work actually landed in a squash-merge repo where PR numbers and commit SHAs are both unreliable.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
stateful-fix-patterns
kingithegreat
Failure patterns in fixes that touch persisted state, saved settings, or external CLIs — fixes that only work for new data and leave existing users broken…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
character-art-spec
kingithegreat
What a character art kit must contain (Leila/Flappy and guests), how it is laid out, and the only approved way to generate it.
SkillAFreshness: A★ 1Claude Code +9 - 0.581score
pr-handoff-evidence
kingithegreat
Open, land and hand off a Sadie PR with acceptance evidence that another agent or Aden can check.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
homebot-dev-workflow
kingithegreat
HomeBot (kingithegreat/Sadie) build, test and landing procedures moved verbatim from AGENTS.md — the unreachable-capability defect, three traps, CI and local…
SkillAFreshness: A★ 1Claude Code +9 - 0.576score
mouth-viseme-matching
kingithegreat
Which mouth tiles exist, how audio maps to them, and on which poses a mouth may be composited.
SkillAFreshness: A★ 1Claude Code +9 - 0.576score
art-asset-naming-and-folders
kingithegreat
Where character assets live and how they must be named so the pipeline finds them.
SkillAFreshness: A★ 1Claude Code +9 - 0.576score
drive-plan-update
kingithegreat
Record verified progress in the Drive doc "HomeBot — Current Plan" without clobbering concurrent edits.
SkillAFreshness: A★ 1Claude Code +9 - 0.576score
episode-script-to-shots
kingithegreat
Turn an Ancient Pathways episode script into shots and image tickets using the existing pipeline, not a new one.
SkillAFreshness: A★ 1Claude Code +9 - 0.575score
claim-and-branch
kingithegreat
Claim a piece of HomeBot work in CLAIMS.md and start it on a safe branch/worktree so no two agents build the same thing.
SkillAFreshness: A★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 1
- Last commit (this folder)
- Oct 20, 2026 (11 days ago)
- Last release
- Dec 14, 2025 (10 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/kingithegreat/Sadie
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from kingithegreat
- 0.587score
multi-agent-verify-content
kingithegreat
Verify that another agent's (or your own) work actually landed in a squash-merge repo where PR numbers and commit SHAs are both unreliable.
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
feature-decision-closure
kingithegreat
Close out a "should we build X" question so no future session re-litigates it — record the decision, the evidence that settled it, and the next lever if the…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
homebot-defect-patterns
kingithegreat
Repo-specific defect patterns for HomeBot/SADIE that pass every automated check and only fail in a built, running app — dead IPC channels, relative require()…
SkillAFreshness: A★ 1Claude Code +9 - 0.587score
stateful-fix-patterns
kingithegreat
Failure patterns in fixes that touch persisted state, saved settings, or external CLIs — fixes that only work for new data and leave existing users broken…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
character-art-spec
kingithegreat
What a character art kit must contain (Leila/Flappy and guests), how it is laid out, and the only approved way to generate it.
SkillAFreshness: A★ 1Claude Code +9 - 0.581score
pr-handoff-evidence
kingithegreat
Open, land and hand off a Sadie PR with acceptance evidence that another agent or Aden can check.
SkillAFreshness: A★ 1Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get tts-engine-evaluation running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
tts-engine-evaluation skill. Agent Mart. https://agentmart.dev/skills/kingithegreat-tts-engine-evaluation (last updated 2026-10-24)