* feat(media-use): use CLI free HeyGen usage * fix(media-use): address #2027 R1 nits — gate cli-source header to OAuth, export origin constant - X-HeyGen-Source is now sent only on OAuth (Bearer) requests, not API-key ones — the backend ignores it for API-key traffic (normal billing), so it was dead metadata there. buildAuthHeaders + heygenAuthHeaders + tests updated. - Export HEYGEN_CLI_ORIGIN_HEADER ("X-HeyGen-Client-Origin") for future cli:<origin> consumers. - Document the deliberate paid/X4 confirm-before-call decision on heygen.tts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H5k87mPZ4d6yiFwcWSb8Vv * refactor(cli): drop unused origin-header export, dedup auth-client tests Fallow flagged 5 findings on this PR: - major: HEYGEN_CLI_ORIGIN_HEADER was exported but never emitted or imported — speculative dead code ("future consumers"). Remove it; a real consumer can add the constant when one exists. - 4x minor duplication in client.test.ts: fold the repeated `.rejects.toSatisfy(auth-code)` assertion into expectAuthCode(), and the repeated try/catch scrubbed-message assertion into expectRejectionMessage(). No behavior change; auth/client tests still 17/17. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H5k87mPZ4d6yiFwcWSb8Vv --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.0 KiB
Requirements & Caches
Credential & key priority
Run npx hyperframes auth status to see what's configured and which engines a workflow will use (see the skill's Preflight section). Keys resolve in this order — first match wins:
| Provider | Resolution order (first non-empty wins) | Local deps when used |
|---|---|---|
| HeyGen (TTS + BGM/SFX retrieval) | $HEYGEN_API_KEY → $HYPERFRAMES_API_KEY → ~/.heygen/credentials (shared with heygen-cli; $HEYGEN_CONFIG_DIR overrides the dir; written by hyperframes auth login) |
none (REST) |
| ElevenLabs (TTS fallback) | $ELEVENLABS_API_KEY |
pip install elevenlabs |
| Lyria (BGM fallback) | $GEMINI_API_KEY → $GOOGLE_API_KEY |
pip install google-genai |
| Kokoro (TTS, no key) | always — final voice fallback | pip install kokoro-onnx soundfile |
| MusicGen (BGM, no key) | always — final music fallback | pip install transformers torch soundfile numpy |
hyperframes auth login (browser OAuth) is the recommended setup: one sign-in, every project, no per-repo .env. An OAuth login is sent as Authorization: Bearer; an API key as X-Api-Key; both are tagged with X-HeyGen-Source: cli. OAuth CLI users can consume the web-plan free allowance for HeyGen TTS (10 min/month); API keys follow the normal API billing path. With no HeyGen credential, voice/BGM run fully locally (Kokoro / MusicGen) — hyperframes auth status and hyperframes doctor both report whether those local deps are installed.
Model caches & system dependencies
Each command downloads its own model on first run and caches it under ~/.cache/hyperframes/:
- TTS (HeyGen) — no local deps; needs a HeyGen credential +
ffmpegon PATH (to transcode the mp3 response to.wav). Credential resolves like the CLI:$HEYGEN_API_KEY→$HYPERFRAMES_API_KEY→~/.heygen/credentials(shared with heygen-cli; runnpx hyperframes auth login). An OAuth login is sent asAuthorization: Bearer; an API key asX-Api-Key; both includeX-HeyGen-Source: cliso the backend can apply CLI OAuth free usage. - TTS (ElevenLabs) — same as HeyGen: API key +
ffmpeg. - TTS (Kokoro) — Kokoro-82M (~311 MB) + voices (~27 MB) in
tts/. Requires Python 3.8+ withkokoro-onnxandsoundfile(pip install kokoro-onnx soundfile). Non-English text also needsespeak-ngsystem-wide. - BGM (Lyria) — needs
$GEMINI_API_KEYor$GOOGLE_API_KEY+pip install google-genai. No local model cache. - BGM (MusicGen) —
pip install transformers torch soundfile.facebook/musicgen-small(~300 MB) cached under~/.cache/huggingface/on first run. - Transcribe — Whisper model size depending on choice (75 MB – 3.1 GB) in
whisper/. Bundleswhisper.cpp. - Remove-background —
u2net_human_seg(~168 MB ONNX) inbackground-removal/models/. Peak inference RAM ~1.5 GB.
Run npx hyperframes doctor if a command fails because of a missing dependency.