Files
Ray Xi 0d53c96beb fix daemon HyperFrames scaffold and runtime (#7030)
* fix daemon HyperFrames scaffold and runtime

* fix CI snapshots and Nix hashes

* fix(pack): preserve HyperFrames sharp runtime

Copy the target-native sharp closure into final standalone payloads and execute the packaged HyperFrames CLI during afterPack.

Generated-By: looper 0.11.8 (runner=fixer, agent=codex)

* test(pack): avoid chmod on linked Node fixture

Only chmod the copied fallback so a successful hard link does not try to change the CI-owned Node inode.

Generated-By: looper 0.11.8 (runner=fixer, agent=codex)
2026-08-19 03:16:46 +00:00

2.7 KiB

Text-to-Speech

Generate speech audio locally using Kokoro-82M (no API key, runs on CPU).

Voice Selection

Match voice to content. Default is af_heart.

Content type Voice Why
Product demo af_heart/af_nova Warm, professional
Tutorial am_adam/bf_emma Neutral, easy to follow
Marketing af_sky/am_michael Energetic or authoritative
Documentation bf_emma/bm_george Clear British English
Casual af_heart/af_sky Approachable, natural

Run "$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" tts --list for all 54 voices (8 languages).

Multilingual Phonemization

Kokoro voice IDs encode language in the first letter: a=American English, b=British English, e=Spanish, f=French, h=Hindi, i=Italian, j=Japanese, p=Brazilian Portuguese, z=Mandarin. The CLI auto-detects the phonemizer locale from that prefix — you don't need to pass --lang when the voice matches the text.

"$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" tts "La reunión empieza a las nueve" --voice ef_dora --output es.wav
"$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" tts "今日はいい天気ですね" --voice jf_alpha --output ja.wav

Use --lang only to override auto-detection (e.g. stylized accents):

"$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" tts "Hello there" --voice af_heart --lang fr-fr --output accented.wav

Valid --lang codes: en-us, en-gb, es, fr-fr, hi, it, pt-br, ja, zh.

Non-English phonemization requires espeak-ng installed system-wide (brew install espeak-ng on macOS, apt-get install espeak-ng on Debian/Ubuntu).

Speed Tuning

  • 0.7-0.8 — Tutorial, complex content
  • 1.0 — Natural pace (default)
  • 1.1-1.2 — Intros, upbeat content
  • 1.5+ — Rarely appropriate

Usage

"$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" tts "Your script here" --voice af_nova --output narration.wav
"$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" tts script.txt --voice bf_emma --output narration.wav

In compositions:

<audio
  id="narration"
  data-start="0"
  data-duration="auto"
  data-track-index="2"
  src="narration.wav"
  data-volume="1"
></audio>

TTS + Captions Workflow

"$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" tts script.txt --voice af_heart --output narration.wav
"$OD_NODE_BIN" "$OD_HYPERFRAMES_BIN" transcribe narration.wav  # → transcript.json with word-level timestamps

Requirements

  • Python 3.8+ with kokoro-onnx and soundfile
  • Model downloads on first use (~311 MB + ~27 MB voices, cached in ~/.cache/hyperframes/tts/)