Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
a6ff74c
feat(media-use): provider registry contract (U1)
miguel-heygen Jun 26, 2026
675c892
feat(media-use): spec-gated local-model runtime (U2)
miguel-heygen Jun 26, 2026
bff2343
feat(media-use): flip-to-enable fal + voice adapters (#5)
miguel-heygen Jun 26, 2026
ff86a81
feat(media-use): local-model runner (#4)
miguel-heygen Jun 26, 2026
bc946e5
feat(media-use): auto-promote + global cache + search + in-use detect…
miguel-heygen Jun 26, 2026
c555689
feat(media-use): ingest --from + brand upsell (#9, #10)
miguel-heygen Jun 26, 2026
9cf3ede
feat(media-use): media-ops guidance + process transforms (#12, #7)
miguel-heygen Jun 26, 2026
8f73aee
feat(studio): in-use / unused filter in the Asset tab (#13)
miguel-heygen Jun 26, 2026
7512659
fix(studio): harden asset usedPaths matching (#13)
miguel-heygen Jun 26, 2026
deb19bd
feat(media-use): enable fal + ElevenLabs (Bin approved) + cost guard
miguel-heygen Jun 26, 2026
6ef5e4e
refactor(media-use): relocate audio engine from hyperframes-media (U20)
miguel-heygen Jun 26, 2026
8fad6ac
fix(skills): repoint video skills + engine docs to relocated media-us…
miguel-heygen Jun 26, 2026
ea8979a
refactor: retire hyperframes-media skill, fold into media-use (U22)
miguel-heygen Jun 26, 2026
339817c
fix(docs): dedup media-use rows + skill count after consolidation (U22)
miguel-heygen Jun 26, 2026
d8128be
docs(media-use): absorb audio capabilities into SKILL (U23)
miguel-heygen Jun 26, 2026
7250f81
feat(studio-api): /api/assets/global route for cross-project assets (…
miguel-heygen Jun 26, 2026
39dfb4b
feat(media-use): weakness-coverage matrix + test-enforced audit (U28)
miguel-heygen Jun 26, 2026
f2957b2
feat(studio): cross-project 'all projects' view in the asset tab (U24)
miguel-heygen Jun 26, 2026
ebc1f16
fix(media-use): voice resolves free-first via HeyGen TTS + honor --lo…
miguel-heygen Jun 27, 2026
b03c28c
fix(media-use): stream freeze cap + SSRF guard + drop cached_path fro…
miguel-heygen Jun 27, 2026
97bf39f
docs(media-use): correct doc-rot surfaced by the eval
miguel-heygen Jun 27, 2026
d9417cd
fix(media-use): wire HeyGen TTS to the real CLI surface (m8)
miguel-heygen Jun 27, 2026
686b048
docs(media-use): list voice in the resolve Types table
miguel-heygen Jun 27, 2026
6c44b86
fix(media-use): correct fal + ElevenLabs adapters to their real CLIs
miguel-heygen Jun 27, 2026
6cf8c8d
docs(media-use): attribute transcription + bg-removal to the hyperfra…
miguel-heygen Jun 27, 2026
1145ec5
docs(media-use): apply Wenbo's 06-29 review (cost + local-model stance)
miguel-heygen Jun 29, 2026
dc8b43c
refactor(media-use): heygen CLI only — drop fal/ElevenLabs adapters a…
miguel-heygen Jul 3, 2026
80a819f
refactor(media-use): drop the Iconify stub + flag-gating machinery
miguel-heygen Jul 3, 2026
67e08d5
feat(studio): non-destructive crop via clip-path inset (OP2)
miguel-heygen Jul 3, 2026
cbde03d
feat(studio): pro-editor crop UX — toolbar button, double-click, crop…
miguel-heygen Jul 4, 2026
0c8d84f
feat(studio): drag the crop window itself
miguel-heygen Jul 4, 2026
1531915
fix(studio): dragging a cropped element detaches the selection box fr…
miguel-heygen Jul 4, 2026
6a9c78f
test(studio): drag gesture now receives the hugged rect as third arg
miguel-heygen Jul 4, 2026
701d1cf
fix(studio): crop hug fights the drag gesture — clip the box instead …
miguel-heygen Jul 4, 2026
2fed652
fix(studio): crop outline at any crop depth, outside-click exits crop…
miguel-heygen Jul 4, 2026
38e2785
fix(studio): hover ring hugs the cropped region
miguel-heygen Jul 4, 2026
162649b
fix(studio): overlay geometry consumers respect the crop everywhere
miguel-heygen Jul 4, 2026
eabfc3c
chore: regenerate skills-manifest after rebase onto main
miguel-heygen Jul 4, 2026
ca281c9
chore(studio): drop unused toOverlayRect import after rebase merge
miguel-heygen Jul 4, 2026
b455fce
chore: refresh skills-manifest hashes after rebase
miguel-heygen Jul 4, 2026
2643edf
docs(studio): crop shortcuts in the timeline shortcuts panel
miguel-heygen Jul 4, 2026
edd437a
feat(media-use): transcript-driven cutting + declarative auto-duck
miguel-heygen Jul 4, 2026
9c97cbe
fix(studio): remove polynomial-backtracking regexes from clip-path pa…
miguel-heygen Jul 4, 2026
2b1cb8f
fix(media-use): real-world hardening of transcript-cut + audio-duck
miguel-heygen Jul 4, 2026
75bf08b
fix(media-use): global manifest path + copy-mode snap warning
miguel-heygen Jul 4, 2026
592d627
fix: muted preview/render parity, tts --out alias, HYPERFRAMES_PYTHON…
miguel-heygen Jul 4, 2026
0097275
feat(media-use): codex image generation fallback + spec-gated local v…
miguel-heygen Jul 5, 2026
6817b3f
feat(media-use): ram-graded local image gen (mflux/FLUX) + agent-sele…
miguel-heygen Jul 5, 2026
47b94a3
feat(media-use): voice local-first (Kokoro), HeyGen TTS paid upsell; …
miguel-heygen Jul 5, 2026
5c22d7d
feat(media-use): parakeet local ASR (better than whisper.cpp) + trans…
miguel-heygen Jul 5, 2026
aee1fd8
feat(media-use): parakeet is the default transcription (eval-backed);…
miguel-heygen Jul 5, 2026
1d38323
docs(media-use): complete CLI-tools table + runtime install hints so …
miguel-heygen Jul 6, 2026
d1c4024
feat(cli): add parakeet ASR engine to transcribe (--engine parakeet|w…
miguel-heygen Jul 6, 2026
666053a
fix(media-use): surface kokoro install hint instead of silently payin…
miguel-heygen Jul 6, 2026
abef89a
feat(media-use): anonymous opt-out PostHog usage tracking
miguel-heygen Jul 6, 2026
9138190
Merge remote-tracking branch 'origin/main' into feat/media-use-v2
miguel-heygen Jul 6, 2026
ce61349
Merge remote-tracking branch 'origin/main' into feat/media-use-v2
miguel-heygen Jul 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ Open-source video rendering framework: write HTML, render video.

## Skills

This repo ships 21 AI agent skills via [vercel-labs/skills](https://github.com/vercel-labs/skills). Install them before writing compositions — they encode framework-specific patterns that generic docs don't cover.
This repo ships 20 AI agent skills via [vercel-labs/skills](https://github.com/vercel-labs/skills). Install them before writing compositions — they encode framework-specific patterns that generic docs don't cover.

```bash
npx skills add heygen-com/hyperframes # interactive picker
npx skills add heygen-com/hyperframes --all # install all 21 (skips picker)
npx skills add heygen-com/hyperframes --all # install all 20 (skips picker)
npx skills add heygen-com/hyperframes --skill <name> # just one (bare name, no leading slash)
```

Expand Down Expand Up @@ -36,8 +36,7 @@ Atomic capabilities the creation workflows compose against — pull one when you
- `/hyperframes-animation` — all animation knowledge: atomic motion rules, scene blueprints, transitions, runtime adapters (GSAP default, plus Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU).
- `/hyperframes-keyframes` — seek-safe keyframe authoring across runtimes: GSAP timelines, CSS keyframes, Anime.js, WAAPI, FLIP, paths, masks, SVG morph/draw, text trails, cursor demos, 3D depth; plus `hyperframes keyframes` diagnostics for surfacing and verifying rendered motion.
- `/hyperframes-creative` — non-animation creative direction: `frame.md` / `design.md` handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns.
- `/hyperframes-media` — audio + media: TTS voiceover, background music, sound effects, Whisper transcription, background removal, caption authoring (one shared `scripts/audio.mjs` engine, multi-provider).
- `/media-use` — resolve any media need (BGM, SFX, image, icon) into a frozen local file + ledger record. One verb (`resolve`) over the HeyGen catalog with manifest tracking; keeps search noise on disk.
- `/media-use` — the media OS: resolve any media need (BGM, SFX, image, icon, voice) into a frozen local file + ledger record; generate via TTS / music when the catalog misses; transcribe, remove backgrounds, and reuse assets across projects. One shared `scripts/audio.mjs` engine + manifest tracking; keeps search noise on disk.
- `/hyperframes-cli` — CLI dev loop: `init`, `add`, `lint`, `validate`, `inspect`, `preview`, `render`, `publish`, `doctor`, `lambda` (AWS Lambda cloud rendering).
- `/hyperframes-registry` — install and wire registry blocks and components into compositions via `hyperframes add`. Covers authoring a new block or component to contribute upstream.
- `/figma` — import Figma assets, tokens, components, and storyboard sections → animatics (REST/CLI) plus Motion animations and shaders (MCP) into a composition.
Expand All @@ -49,7 +48,7 @@ When adding a new skill, or substantially renaming / repurposing an existing one
1. The skill list above (CLAUDE.md) AND the `## Skills` section in `README.md` AND `docs/guides/skills.mdx` (rendered at [hyperframes.heygen.com/guides/skills](https://hyperframes.heygen.com/guides/skills)). Out-of-date entries silently kill discovery.
2. If the skill changes the routing surface for "make a video" requests, also update the capability map and intent router in `skills/hyperframes/SKILL.md` — that's the canonical router agents read first.
3. Mirror the Router / Creation workflows / Domain skills grouping across all three surfaces so a skill always lives in the same column.
4. Skill count appears in the README and CLAUDE.md intro lines ("21 AI agent skills…") — update on add/remove. The `docs/guides/skills.mdx` page deliberately omits a count to avoid drift; keep it count-free.
4. Skill count appears in the README and CLAUDE.md intro lines ("20 AI agent skills…") — update on add/remove. The `docs/guides/skills.mdx` page deliberately omits a count to avoid drift; keep it count-free.

The skill's own `SKILL.md` frontmatter `description:` is the source of truth for the one-line "use when" blurb; copy from there into the catalog rather than paraphrasing.

Expand Down
25 changes: 12 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ The skills teach agents the HyperFrames production loop: plan the video, write v

## Skills

HyperFrames ships 21 skills agents load on demand. Read `/hyperframes` first — it's the router and capability map; it picks a workflow for any "make me a video" request and points to the domain skills below.
HyperFrames ships 20 skills agents load on demand. Read `/hyperframes` first — it's the router and capability map; it picks a workflow for any "make me a video" request and points to the domain skills below.

Run `npx skills add heygen-com/hyperframes` for the interactive picker, `npx skills add heygen-com/hyperframes --all` to install all 21 at once (skips the picker), or `npx skills add heygen-com/hyperframes --skill <name>` for just one (bare name, no leading `/`).
Run `npx skills add heygen-com/hyperframes` for the interactive picker, `npx skills add heygen-com/hyperframes --all` to install all 20 at once (skips the picker), or `npx skills add heygen-com/hyperframes --skill <name>` for just one (bare name, no leading `/`).

### Router

Expand Down Expand Up @@ -79,17 +79,16 @@ Run `npx skills add heygen-com/hyperframes` for the interactive picker, `npx ski

Atomic capabilities the creation workflows compose against — pull one when you need that specific layer.

| Skill | Covers |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/hyperframes-core` | The composition contract — `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, determinism rules. |
| `/hyperframes-animation` | All animation knowledge — atomic motion rules, scene blueprints, transitions, runtime adapters (GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU). |
| `/hyperframes-keyframes` | Seek-safe keyframe authoring across runtimes — GSAP timelines, CSS keyframes, Anime.js, WAAPI, FLIP, paths, masks, SVG morph/draw, 3D depth — plus `hyperframes keyframes` diagnostics for rendered motion. |
| `/hyperframes-creative` | Non-animation creative direction — `frame.md` / `design.md`, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns. |
| `/hyperframes-media` | Audio + media — TTS voiceover, background music, sound effects, Whisper transcription, background removal, caption authoring (one shared audio engine). |
| `/media-use` | Resolve any media need (BGM, SFX, image, icon) into a frozen local file + ledger record. One verb (`resolve`) over the HeyGen catalog with manifest tracking. |
| `/hyperframes-cli` | CLI dev loop — `init`, `lint`, `validate`, `inspect`, `preview`, `render`, `publish`, `doctor`, plus AWS Lambda cloud rendering (`lambda deploy / render / progress`). |
| `/hyperframes-registry` | Install and wire registry blocks and components into compositions via `hyperframes add`. Authoring a new block or component to contribute upstream. |
| `/figma` | Import Figma assets, tokens, components, and storyboard sections → animatics (REST/CLI) plus Motion animations and shaders (MCP) into a composition. |
| Skill | Covers |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/hyperframes-core` | The composition contract — `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, determinism rules. |
| `/hyperframes-animation` | All animation knowledge — atomic motion rules, scene blueprints, transitions, runtime adapters (GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU). |
| `/hyperframes-keyframes` | Seek-safe keyframe authoring across runtimes — GSAP timelines, CSS keyframes, Anime.js, WAAPI, FLIP, paths, masks, SVG morph/draw, 3D depth — plus `hyperframes keyframes` diagnostics for rendered motion. |
| `/hyperframes-creative` | Non-animation creative direction — `frame.md` / `design.md`, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns. |
| `/media-use` | The media OS — resolve any media need (BGM, SFX, image, icon, voice) into a frozen local file + ledger record, generate via TTS/music when the catalog misses, transcribe, remove backgrounds, and reuse assets across projects. One shared audio engine + manifest tracking. |
| `/hyperframes-cli` | CLI dev loop — `init`, `lint`, `validate`, `inspect`, `preview`, `render`, `publish`, `doctor`, plus AWS Lambda cloud rendering (`lambda deploy / render / progress`). |
| `/hyperframes-registry` | Install and wire registry blocks and components into compositions via `hyperframes add`. Authoring a new block or component to contribute upstream. |
| `/figma` | Import Figma assets, tokens, components, and storyboard sections → animatics (REST/CLI) plus Motion animations and shaders (MCP) into a composition. |

For visual design handoff workflows, see the [Claude Design guide](https://hyperframes.heygen.com/guides/claude-design) and [Open Design guide](https://hyperframes.heygen.com/guides/open-design).

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/antigravity.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Antigravity uses **semantic matching** — when you type a prompt, the agent com
| "Create a 10-second product intro with captions" | `hyperframes`, `hyperframes-core` |
| "Add a GSAP scale-pop to the title" | `hyperframes-animation` |
| "Use Tailwind for styling" | `hyperframes-core` |
| "Transcribe this audio and add captions" | `hyperframes-media` |
| "Transcribe this audio and add captions" | `media-use` |
| "Add a shimmer sweep transition" | `hyperframes-registry` |

The skill is only injected into the agent's context window when it matches — this keeps the context clean and focused.
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/pipeline.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ npx hyperframes transcribe narration.wav
| `narration.txt` | The exact spoken text with pronunciation substitutions applied (`API` → `A P I`, `$2T` → `two trillion`). Distinct from `SCRIPT.md` so you can regenerate the audio later with a different voice without redoing the substitutions. |
| `transcript.json`| `[{ text, start, end }]` for every word. Every later step reads this for timing. |

Hyperframes ships multiple TTS adapters (Kokoro, ElevenLabs, HeyGen); see [`/hyperframes-media`](/guides/prompting) for the skill that picks one. After generating audio, update `STORYBOARD.md` with the real beat boundaries from `transcript.json`.
Hyperframes ships multiple TTS adapters (Kokoro, ElevenLabs, HeyGen); see [`/media-use`](/guides/prompting) for the skill that picks one. After generating audio, update `STORYBOARD.md` with the real beat boundaries from `transcript.json`.

**Gate:** `narration.wav`, `narration.txt`, and `transcript.json` exist. `STORYBOARD.md` beat timings reference real timestamps, not estimates.

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/prompting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ The installer shows a picker. Select the **core skills** below — every project
| `/hyperframes-animation`| All animation — motion rules, scene blueprints, transitions, and the runtime adapters (GSAP, Lottie, Three.js, Anime.js, CSS, WAAPI, TypeGPU) |
| `/hyperframes-creative` | Creative direction — design spec, palettes, typography, narration, beats |
| `/hyperframes-cli` | Dev-loop CLI — `init`, `lint`, `inspect`, `preview`, `render`, `doctor` |
| `/hyperframes-media` | Asset preprocessing — `tts`, `transcribe`, `remove-background` |
| `/media-use` | Asset preprocessing — `tts`, `transcribe`, `remove-background` |
| `/hyperframes-registry` | Block and component installation via `hyperframes add` |
| `/general-video` | The general authoring workflow — fallback for any video that doesn't match a specific workflow below |

Expand Down
3 changes: 1 addition & 2 deletions docs/guides/skills.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,7 @@ Atomic capabilities the creation workflows compose against — pull one when you
| `/hyperframes-animation` | All animation knowledge — atomic motion rules, scene blueprints, transitions, runtime adapters (GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU). |
| `/hyperframes-keyframes` | Seek-safe keyframe authoring across runtimes — GSAP timelines, CSS keyframes, Anime.js, WAAPI, FLIP, paths, masks, SVG morph/draw, 3D depth — plus `hyperframes keyframes` diagnostics for rendered motion. |
| `/hyperframes-creative` | Non-animation creative direction — `frame.md` / `design.md`, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns. |
| `/hyperframes-media` | Audio + media — TTS voiceover, background music, sound effects, Whisper transcription, background removal, caption authoring (one shared audio engine). |
| `/media-use` | Resolve any media need (BGM, SFX, image, icon) into a frozen local file + ledger record. One verb (`resolve`) over the HeyGen catalog with manifest tracking. |
| `/media-use` | The media OS — resolve any media need (BGM, SFX, image, icon, voice) into a frozen local file + ledger record, generate via TTS/music when the catalog misses, transcribe, remove backgrounds, and reuse assets across projects. One shared audio engine + manifest tracking. |
| `/hyperframes-cli` | CLI dev loop — `init`, `lint`, `validate`, `inspect`, `preview`, `render`, `publish`, `doctor`, plus AWS Lambda cloud rendering (`lambda deploy / render / progress`). |
| `/hyperframes-registry` | Install and wire registry blocks and components into compositions via `hyperframes add`. Authoring a new block or component to contribute upstream. |
| `/figma` | Import Figma assets, tokens, components, and storyboard sections → animatics (REST/CLI) plus Motion animations and shaders (MCP) into a composition. |
Expand Down
2 changes: 1 addition & 1 deletion docs/packages/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -930,7 +930,7 @@ Word-level transcripts (whisper output) are grouped into readable caption cues o
| `--codex` | Install to Codex CLI (`~/.codex/skills/`) |
| `--cursor` | Install to Cursor (`.cursor/skills/` in current project) |

Skills are fetched from GitHub: the `/hyperframes` entry skill (routes "make me a video" to a workflow), the composition contract and Tailwind v4 browser-runtime guidance (`/hyperframes-core`), all animation including the GSAP / Anime.js / CSS / Lottie / Three.js / WAAPI / TypeGPU runtime adapters (`/hyperframes-animation`), creative direction (`/hyperframes-creative`), media preprocessing (`/hyperframes-media`), registry block/component wiring (`/hyperframes-registry`), and the video workflows. The `init` command also offers to install skills automatically after scaffolding a project.
Skills are fetched from GitHub: the `/hyperframes` entry skill (routes "make me a video" to a workflow), the composition contract and Tailwind v4 browser-runtime guidance (`/hyperframes-core`), all animation including the GSAP / Anime.js / CSS / Lottie / Three.js / WAAPI / TypeGPU runtime adapters (`/hyperframes-animation`), creative direction (`/hyperframes-creative`), media preprocessing (`/media-use`), registry block/component wiring (`/hyperframes-registry`), and the video workflows. The `init` command also offers to install skills automatically after scaffolding a project.

#### Troubleshooting: `fatal: active post-checkout hook found during git clone`

Expand Down
2 changes: 1 addition & 1 deletion docs/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ The installer shows a picker. Select the **core set** every project needs — th
| `/hyperframes-animation` | All animation + the GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU runtime adapters |
| `/hyperframes-creative` | Design direction — palettes, typography, narration, beat planning |
| `/hyperframes-cli` | Dev-loop CLI — init, lint, preview, render, doctor |
| `/hyperframes-media` | Asset preprocessing — TTS, transcription, background removal |
| `/media-use` | Asset preprocessing — TTS, transcription, background removal |
| `/hyperframes-registry` | Install catalog blocks and components |
| `/general-video` | The general authoring workflow — the fallback for any video that doesn't match a specific workflow |

Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/audio/providers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* Which voice / music engine a workflow will actually use, and whether
* its local dependencies are present. Mirrors the resolution order the
* hyperframes-media skill scripts use, so `auth status` and `doctor`
* media-use skill scripts use, so `auth status` and `doctor`
* report the same engine the render pipeline would pick:
*
* voice: HeyGen Starfish → ElevenLabs (key + `elevenlabs`) → Kokoro (local)
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/commands/auth/status-guidance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ function offlineEngineLines(engines?: OfflineEngineLine[]): string[] {
* so it's left to the docs — not dangled here as a command a fresh machine
* can't run. Names the local fallback so "no key" never reads as a failure,
* and never steers users toward a per-repo `.env`. Mirrors the
* hyperframes-media skill's Preflight section.
* media-use skill's Preflight section.
*/
export function buildUnconfiguredLines(
ctx: UnconfiguredContext,
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/commands/tts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export default defineCommand({
output: {
type: "string",
description: "Output file path (default: speech.wav in current directory)",
alias: "o",
alias: ["o", "out"],
},
voice: {
type: "string",
Expand Down
Loading
Loading