mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-11 23:00:03 +00:00
* feat(cli): add `tts` command for local text-to-speech via Kokoro-82M Adds `hyperframes tts` — generate speech audio locally using Kokoro-82M (ONNX), no API key needed. Mirrors the transcribe command architecture. - New command: `hyperframes tts "text" --voice af_heart --output speech.wav` - 54 voices across 8 languages, ~5x realtime on CPU - Auto-downloads model (~311 MB) + voices (~27 MB) to ~/.cache/hyperframes/tts/ - Requires Python 3.8+ with kokoro-onnx installed - Extracted shared `downloadFile` utility from whisper/manager.ts with atomic .tmp→rename to prevent partial download corruption - Added hyperframes-tts skill with voice selection guide - Updated CLAUDE.md with TTS docs, voice table, and skill reference Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs(tts): improve skill per skill-creator guidelines - Move trigger info from body to frontmatter description - Remove `trigger` field (not a valid frontmatter field) - Remove CLI flag docs Claude can derive from --help - Remove redundant voice tables (keep content-to-voice mapping) - Fix composition audio example to use actual <audio> element pattern - Keep non-obvious workflows: TTS+transcribe for captions, long scripts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs(tts): add guidance for using external TTS sources Help users understand when to use cloud TTS (voice cloning, broader languages, higher quality) vs the built-in Kokoro model, and how external audio integrates into the same composition workflow. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs(tts): prioritize HeyGen API as recommended cloud TTS Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs(tts): remove external TTS section for now Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(tts): set required: false on input arg so --list works standalone Citty treats positional args as required by default unless explicitly set to required: false. Without this, `hyperframes tts --list` fails with "Missing required positional argument". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(tts): add --help examples and fix required:false for --list Add examples section to `tts --help` matching the pattern from other commands (transcribe, render, etc.). Fix citty positional arg requiring explicit `required: false` for --list to work standalone. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: add CLI command checklist to CLAUDE.md Ensure new commands always get --help examples in help.ts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
---
|
|
name: hyperframes-tts
|
|
description: Generate speech audio locally using Kokoro-82M (no API key). Use when asked to create narration, voiceover, or text-to-speech audio for compositions, or when a user needs spoken audio from text. Covers voice selection, speed tuning, and integrating TTS output with compositions and captions.
|
|
---
|
|
|
|
# Text-to-Speech
|
|
|
|
## Voice Selection
|
|
|
|
Match voice to content. Default is `af_heart`.
|
|
|
|
| Content type | Voice | Why |
|
|
| ----------------- | --------------------- | ----------------------------- |
|
|
| Product demo | `af_heart`/`af_nova` | Warm, professional |
|
|
| Tutorial / how-to | `am_adam`/`bf_emma` | Neutral, easy to follow |
|
|
| Marketing / promo | `af_sky`/`am_michael` | Energetic or authoritative |
|
|
| Documentation | `bf_emma`/`bm_george` | Clear British English, formal |
|
|
| Casual / social | `af_heart`/`af_sky` | Approachable, natural |
|
|
|
|
Run `npx hyperframes tts --list` for all 54 voices (8 languages: EN, JP, ZH, KO, FR, DE, IT, PT).
|
|
|
|
## Speed Tuning
|
|
|
|
- **0.7-0.8** — Tutorial, complex content, accessibility
|
|
- **1.0** — Natural pace (default)
|
|
- **1.1-1.2** — Intros, transitions, upbeat content
|
|
- **1.5+** — Rarely appropriate; test carefully
|
|
|
|
## Composing with TTS Audio
|
|
|
|
Generate a voiceover and use it as the audio track:
|
|
|
|
```bash
|
|
npx hyperframes tts "Your script here" --voice af_nova --output narration.wav
|
|
```
|
|
|
|
Then reference it in the composition as a standard `<audio>` element:
|
|
|
|
```html
|
|
<audio
|
|
id="narration"
|
|
data-start="0"
|
|
data-duration="auto"
|
|
data-track-index="2"
|
|
src="narration.wav"
|
|
data-volume="1"
|
|
></audio>
|
|
```
|
|
|
|
## TTS + Captions Workflow
|
|
|
|
Generate speech, then transcribe it back for word-level caption timestamps:
|
|
|
|
```bash
|
|
# 1. Generate speech
|
|
npx hyperframes tts script.txt --voice af_heart --output narration.wav
|
|
|
|
# 2. Transcribe for word-level timestamps
|
|
npx hyperframes transcribe narration.wav
|
|
|
|
# 3. Result: narration.wav + transcript.json ready for captions
|
|
```
|
|
|
|
This avoids manually timing captions — whisper extracts precise word boundaries from the generated audio.
|
|
|
|
## Long Scripts
|
|
|
|
For scripts longer than a few paragraphs, write the text to a `.txt` file and pass the path:
|
|
|
|
```bash
|
|
npx hyperframes tts script.txt --voice bf_emma --output narration.wav
|
|
```
|
|
|
|
The model handles long text well but very long inputs (>5 minutes of speech) may benefit from splitting into segments.
|
|
|
|
## Requirements
|
|
|
|
- Python 3.8+ with `kokoro-onnx` and `soundfile` installed (`pip install kokoro-onnx soundfile`)
|
|
- Model downloads automatically on first use (~311 MB + ~27 MB voices, cached in `~/.cache/hyperframes/tts/`)
|