@vibeframe/cli 0.113.10 → 0.113.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTEXT.md +12 -11
- package/dist/commands/_shared/build-plan.d.ts +8 -1
- package/dist/commands/_shared/compose-aivideo.d.ts +82 -0
- package/dist/commands/_shared/compose-aivideo.test.d.ts +1 -0
- package/dist/commands/_shared/compose-prompts.d.ts +15 -0
- package/dist/commands/_shared/compose-scenes-skills.d.ts +46 -3
- package/dist/commands/_shared/design-parse.d.ts +26 -0
- package/dist/commands/_shared/design-parse.test.d.ts +1 -0
- package/dist/commands/_shared/hf-skill-bundle/bundle.d.ts +8 -2
- package/dist/commands/_shared/init-templates.d.ts +2 -2
- package/dist/commands/_shared/install-skill.d.ts +47 -6
- package/dist/commands/_shared/project-config.d.ts +5 -1
- package/dist/commands/_shared/project-config.test.d.ts +1 -0
- package/dist/commands/_shared/root-sync.d.ts +25 -0
- package/dist/commands/_shared/scene-assemble.d.ts +47 -0
- package/dist/commands/_shared/scene-assemble.test.d.ts +1 -0
- package/dist/commands/_shared/scene-build.d.ts +26 -5
- package/dist/commands/_shared/scene-project.d.ts +47 -13
- package/dist/commands/_shared/scene-render.d.ts +6 -0
- package/dist/commands/_shared/storyboard-edit.d.ts +1 -1
- package/dist/commands/_shared/storyboard-parse.d.ts +6 -0
- package/dist/commands/_shared/transcribe-narration.d.ts +23 -0
- package/dist/commands/_shared/transcribe-narration.test.d.ts +1 -0
- package/dist/commands/assemble.d.ts +2 -0
- package/dist/commands/design.d.ts +2 -0
- package/dist/commands/export.d.ts +0 -2
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/preview.d.ts +2 -0
- package/dist/commands/preview.test.d.ts +1 -0
- package/dist/index.js +2482 -1480
- package/dist/tools/define-tool.js +3 -0
- package/dist/tools/manifest/design.d.ts +10 -0
- package/dist/tools/manifest/design.test.d.ts +1 -0
- package/dist/tools/manifest/index.d.ts +2 -1
- package/dist/tools/manifest/index.js +2178 -1521
- package/package.json +3 -3
|
@@ -64,6 +64,19 @@ export type SceneBuildProgressEvent = {
|
|
|
64
64
|
type: "narration-skipped";
|
|
65
65
|
beatId: string;
|
|
66
66
|
reason: string;
|
|
67
|
+
} | {
|
|
68
|
+
type: "transcript-generated";
|
|
69
|
+
beatId: string;
|
|
70
|
+
path: string;
|
|
71
|
+
wordCount: number;
|
|
72
|
+
} | {
|
|
73
|
+
type: "transcript-cached";
|
|
74
|
+
beatId: string;
|
|
75
|
+
path: string;
|
|
76
|
+
} | {
|
|
77
|
+
type: "transcript-skipped";
|
|
78
|
+
beatId: string;
|
|
79
|
+
reason: string;
|
|
67
80
|
} | {
|
|
68
81
|
type: "backdrop-cached";
|
|
69
82
|
beatId: string;
|
|
@@ -234,7 +247,7 @@ export interface SceneBuildOptions {
|
|
|
234
247
|
* based on env keys (claude > gemini > openai). Pass an explicit value
|
|
235
248
|
* to require that provider's key.
|
|
236
249
|
*/
|
|
237
|
-
composer?: ComposerProvider;
|
|
250
|
+
composer?: ComposerProvider | "template";
|
|
238
251
|
skipNarration?: boolean;
|
|
239
252
|
skipBackdrop?: boolean;
|
|
240
253
|
skipRender?: boolean;
|
|
@@ -254,6 +267,13 @@ export interface SceneBuildOptions {
|
|
|
254
267
|
skipKeyframe?: boolean;
|
|
255
268
|
/** Skip music generation even when beats declare music cues. */
|
|
256
269
|
skipMusic?: boolean;
|
|
270
|
+
/**
|
|
271
|
+
* Skip Whisper word-level transcription of generated narration. Default is
|
|
272
|
+
* to transcribe whenever narration exists and an OpenAI key is configured,
|
|
273
|
+
* writing `assets/transcript-<beat>.json` so the composer can sync caption /
|
|
274
|
+
* kinetic-type reveals to speech. Pass true to opt out (no transcribe cost).
|
|
275
|
+
*/
|
|
276
|
+
skipTranscript?: boolean;
|
|
257
277
|
/** OpenAI image quality — see `vibe generate image --quality`. */
|
|
258
278
|
imageQuality?: "standard" | "hd";
|
|
259
279
|
/** OpenAI image size. Default 1536x1024 for cinematic 16:9-ish framing. */
|
|
@@ -282,9 +302,9 @@ export interface SceneBuildOptions {
|
|
|
282
302
|
* - `failed` — primitives, compose, or render errored. {@link error}
|
|
283
303
|
* carries the message; {@link beats} reflects partial state.
|
|
284
304
|
*/
|
|
285
|
-
export type SceneBuildPhase = "done" | "assets-only" | "pending-jobs" | "compose-only" | "sync-only" | "render-only" | "needs-author" | "failed";
|
|
305
|
+
export type SceneBuildPhase = "done" | "assets-only" | "transcript-only" | "pending-jobs" | "compose-only" | "sync-only" | "render-only" | "needs-author" | "failed";
|
|
286
306
|
export type BuildWorkflowStatus = "done" | "running" | "needs-author" | "failed" | "ready";
|
|
287
|
-
export type BuildCurrentStage = "assets" | "compose" | "sync" | "render" | "done";
|
|
307
|
+
export type BuildCurrentStage = "assets" | "transcript" | "compose" | "sync" | "render" | "done";
|
|
288
308
|
export interface BuildBeatSummary {
|
|
289
309
|
total: number;
|
|
290
310
|
assetsReady: number;
|
|
@@ -333,6 +353,7 @@ export interface SceneBuildResult {
|
|
|
333
353
|
composePrompts?: {
|
|
334
354
|
skillReference: string | null;
|
|
335
355
|
designReference: string;
|
|
356
|
+
compositionReference: string | null;
|
|
336
357
|
storyboardReference: string;
|
|
337
358
|
compositionsDir: string;
|
|
338
359
|
instructions: string[];
|
|
@@ -346,7 +367,7 @@ export interface SceneBuildResult {
|
|
|
346
367
|
beatSummary?: BuildBeatSummary;
|
|
347
368
|
estimatedCostUsd?: number;
|
|
348
369
|
costUsd?: number;
|
|
349
|
-
stageReports?: Record<"assets" | "compose" | "sync" | "render", StageReport>;
|
|
370
|
+
stageReports?: Record<"assets" | "transcript" | "compose" | "sync" | "render", StageReport>;
|
|
350
371
|
sceneRepair?: BuildSceneRepairSummary;
|
|
351
372
|
jobs?: JobRecord[];
|
|
352
373
|
warnings?: string[];
|
|
@@ -479,7 +500,7 @@ declare function toBuildReport(projectDir: string, result: SceneBuildResult): {
|
|
|
479
500
|
}[];
|
|
480
501
|
outputPath: string | undefined;
|
|
481
502
|
sceneRepair: BuildSceneRepairSummary;
|
|
482
|
-
stageReports: Record<"assets" | "compose" | "sync" | "render", StageReport> | undefined;
|
|
503
|
+
stageReports: Record<"assets" | "compose" | "sync" | "render" | "transcript", StageReport> | undefined;
|
|
483
504
|
warnings: string[];
|
|
484
505
|
retryWith: string[];
|
|
485
506
|
totalLatencyMs: number;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module _shared/scene-project
|
|
3
3
|
*
|
|
4
4
|
* Helpers for scaffolding a "scene project" — a directory that works as both
|
|
5
|
-
* a VibeFrame project (via `vibe.
|
|
5
|
+
* a VibeFrame project (via `vibe.config.json`) AND a HeyGen Hyperframes
|
|
6
6
|
* project (via `hyperframes.json` + `meta.json` + `index.html`). Either
|
|
7
7
|
* toolchain can be run inside the directory.
|
|
8
8
|
*
|
|
@@ -14,6 +14,37 @@ import type { VisualStyle } from "./visual-styles.js";
|
|
|
14
14
|
/** Supported aspect ratios for scene projects (maps to CSS canvas dims). */
|
|
15
15
|
export type SceneAspect = "16:9" | "9:16" | "1:1" | "4:5";
|
|
16
16
|
export type SceneScaffoldProfile = "minimal" | "agent" | "full";
|
|
17
|
+
/**
|
|
18
|
+
* Project KIND — orthogonal to {@link SceneScaffoldProfile} (which decides which
|
|
19
|
+
* files exist). Kind decides which pipeline STAGES run and which composer is the
|
|
20
|
+
* default:
|
|
21
|
+
* - `cinema` / `story` — directed, character-driven; keyframe→i2v, LLM composer.
|
|
22
|
+
* - `aivideo` — character + i2v, the deterministic `template` composer.
|
|
23
|
+
* - `product` — backdrop/asset-centric (no i2v keyframes).
|
|
24
|
+
* - `motion` — pure HTML/CSS/GSAP graphics (no AI image/video assets).
|
|
25
|
+
*/
|
|
26
|
+
export type SceneKind = "cinema" | "product" | "aivideo" | "story" | "motion";
|
|
27
|
+
export declare const VALID_SCENE_KINDS: readonly SceneKind[];
|
|
28
|
+
/** Default kind preserves today's behavior (LLM composer, cue-driven assets). */
|
|
29
|
+
export declare const DEFAULT_SCENE_KIND: SceneKind;
|
|
30
|
+
export declare function isSceneKind(value: string): value is SceneKind;
|
|
31
|
+
/**
|
|
32
|
+
* Per-kind default asset skips, OR'd with the explicit `--skip-*` flags. Returns
|
|
33
|
+
* only the skips a kind forces; `cinema`/`story`/`aivideo` add none (assets run
|
|
34
|
+
* from their cues).
|
|
35
|
+
*/
|
|
36
|
+
export declare function kindAssetPolicy(kind: SceneKind): {
|
|
37
|
+
skipKeyframe?: boolean;
|
|
38
|
+
skipVideo?: boolean;
|
|
39
|
+
skipBackdrop?: boolean;
|
|
40
|
+
};
|
|
41
|
+
/** The composer a kind defaults to when `--composer` is not given. */
|
|
42
|
+
export declare function composerDefaultForKind(kind: SceneKind): "template" | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Whether a kind has a recurring cast worth a `CHARACTERS.md` bible. Character-
|
|
45
|
+
* driven kinds (cinema/story/aivideo) do; product/motion do not.
|
|
46
|
+
*/
|
|
47
|
+
export declare function kindHasCast(kind: SceneKind): boolean;
|
|
17
48
|
export declare function aspectToDims(aspect: SceneAspect): {
|
|
18
49
|
width: number;
|
|
19
50
|
height: number;
|
|
@@ -80,22 +111,22 @@ export declare function buildEmptyRootHtml(opts: {
|
|
|
80
111
|
aspect: SceneAspect;
|
|
81
112
|
duration: number;
|
|
82
113
|
}): string;
|
|
83
|
-
/**
|
|
84
|
-
* Project-local `DESIGN.md` template — the visual-identity hard-gate.
|
|
85
|
-
*
|
|
86
|
-
* Hyperframes' `hyperframes` skill teaches: "no scene HTML before DESIGN.md is
|
|
87
|
-
* authored." This template seeds that contract so the project never opens
|
|
88
|
-
* with a blank slate. When `style` is provided, the rules are pre-filled
|
|
89
|
-
* from the vendored named-style data (`visual-styles.ts`); otherwise the
|
|
90
|
-
* user (or agent) fills the placeholders.
|
|
91
|
-
*
|
|
92
|
-
* The agent-driven craft path expects this file as input — see
|
|
93
|
-
* `.claude/skills/vibe-scene/SKILL.md`.
|
|
94
|
-
*/
|
|
95
114
|
export declare function buildDesignMd(opts: {
|
|
96
115
|
name: string;
|
|
97
116
|
style?: VisualStyle;
|
|
98
117
|
}): string;
|
|
118
|
+
/**
|
|
119
|
+
* Always-on `SCRIPT.md` — the narrative spine authored before the beat-level
|
|
120
|
+
* STORYBOARD.md. Kind tailors the guidance (a `motion`/`product` script is a
|
|
121
|
+
* shot/asset list; a `story`/`cinema` script is a scene-by-scene narrative).
|
|
122
|
+
*/
|
|
123
|
+
export declare function buildScriptMd(name: string, kind?: SceneKind): string;
|
|
124
|
+
/**
|
|
125
|
+
* Kind-gated `CHARACTERS.md` — the cast bible. Promotes today's STORYBOARD
|
|
126
|
+
* \`characters:\` frontmatter into first-class identity blocks (reference sheet
|
|
127
|
+
* path + an identity-lock description used to keep keyframes/i2v on-model).
|
|
128
|
+
*/
|
|
129
|
+
export declare function buildCharactersMd(name: string): string;
|
|
99
130
|
/** Starter `STORYBOARD.md` for the one-shot `vibe build` flow. */
|
|
100
131
|
export declare function buildStoryboardMd(name: string, duration?: number): string;
|
|
101
132
|
/** Project-local AGENTS.md that orients every agent host to both toolchains. */
|
|
@@ -118,6 +149,8 @@ export interface ScaffoldOptions {
|
|
|
118
149
|
visualStyle?: VisualStyle;
|
|
119
150
|
/** Scaffold shape. Defaults to "full" for backward-compatible programmatic use. */
|
|
120
151
|
profile?: SceneScaffoldProfile;
|
|
152
|
+
/** Project kind — drives which pipeline stages run + the default composer. */
|
|
153
|
+
kind?: SceneKind;
|
|
121
154
|
}
|
|
122
155
|
export interface ScaffoldResult {
|
|
123
156
|
/** Files written (absolute paths). */
|
|
@@ -138,6 +171,7 @@ export declare function isSceneScaffoldProfile(value: string): value is SceneSca
|
|
|
138
171
|
export declare function describeSceneScaffold(opts: {
|
|
139
172
|
dir: string;
|
|
140
173
|
profile?: SceneScaffoldProfile;
|
|
174
|
+
kind?: SceneKind;
|
|
141
175
|
}): SceneScaffoldGroups;
|
|
142
176
|
/**
|
|
143
177
|
* Scaffold (or update) a scene project at `dir`. Idempotent: running twice is
|
|
@@ -38,6 +38,12 @@ export interface SceneRenderOptions {
|
|
|
38
38
|
openAfterRender?: boolean;
|
|
39
39
|
/** Reveal the rendered media in Finder/file manager after a successful render. */
|
|
40
40
|
revealInFinder?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Skip the audio-mux pass and emit silent video. The audio is added later by
|
|
43
|
+
* the `assemble` stage (`executeSceneAssemble` / `vibe assemble`). Default
|
|
44
|
+
* `vibe render` keeps the render+assemble single-shot behavior.
|
|
45
|
+
*/
|
|
46
|
+
silent?: boolean;
|
|
41
47
|
signal?: AbortSignal;
|
|
42
48
|
onProgress?: (pct: number, stage: string) => void;
|
|
43
49
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Beat } from "./storyboard-parse.js";
|
|
2
|
-
export declare const STORYBOARD_CUE_KEYS: readonly ["duration", "narration", "backdrop", "video", "keyframe", "motion", "voice", "music", "asset", "characters"];
|
|
2
|
+
export declare const STORYBOARD_CUE_KEYS: readonly ["duration", "narration", "backdrop", "video", "keyframe", "motion", "voice", "music", "asset", "characters", "eyebrow", "title", "caption", "kicker", "sub"];
|
|
3
3
|
export type StoryboardCueKey = (typeof STORYBOARD_CUE_KEYS)[number];
|
|
4
4
|
export interface StoryboardValidationIssue {
|
|
5
5
|
severity: "error" | "warning";
|
|
@@ -120,6 +120,12 @@ export interface BeatCues {
|
|
|
120
120
|
* if present, supplies the motion prompt; otherwise this text is used.
|
|
121
121
|
*/
|
|
122
122
|
keyframe?: string;
|
|
123
|
+
/** Lower-third overlay eyebrow/kicker (read by the deterministic composer). */
|
|
124
|
+
eyebrow?: string;
|
|
125
|
+
/** Lower-third headline; falls back to the beat heading when absent. */
|
|
126
|
+
title?: string;
|
|
127
|
+
/** Lower-third sub-line / caption. */
|
|
128
|
+
caption?: string;
|
|
123
129
|
[key: string]: unknown;
|
|
124
130
|
}
|
|
125
131
|
/** Normalize a beat's `characters` cue to a clean string[] (single or list). */
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SceneTranscriptWord } from "./scene-html-emit.js";
|
|
2
|
+
export interface TranscribeNarrationOptions {
|
|
3
|
+
/** OpenAI API key for Whisper. */
|
|
4
|
+
apiKey: string;
|
|
5
|
+
/** Optional BCP-47 language hint passed to Whisper (auto-detect when unset). */
|
|
6
|
+
language?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Transcribe a narration audio file to word-level timings. Returns an empty
|
|
10
|
+
* array on ANY failure (no words, API error, bad audio) so callers can treat
|
|
11
|
+
* the absence of timings as "no word-sync available" rather than abort.
|
|
12
|
+
*/
|
|
13
|
+
export declare function transcribeNarrationWords(audioAbsPath: string, opts: TranscribeNarrationOptions): Promise<SceneTranscriptWord[]>;
|
|
14
|
+
/** Canonical per-beat transcript path, relative to the project root. */
|
|
15
|
+
export declare function beatTranscriptRelPath(beatId: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Read a previously generated `assets/transcript-<beatId>.json` from disk.
|
|
18
|
+
* Returns `undefined` when the file is missing or malformed — compose then
|
|
19
|
+
* proceeds without word timings (identical to a project that never
|
|
20
|
+
* transcribed). Validates each entry's shape so a hand-edited or partial file
|
|
21
|
+
* can't inject `NaN`/`undefined` timings into the prompt.
|
|
22
|
+
*/
|
|
23
|
+
export declare function readBeatTranscript(projectDir: string, beatId: string): Promise<SceneTranscriptWord[] | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
1
|
/**
|
|
3
2
|
* Get the duration of a media file using ffprobe
|
|
4
3
|
* For images, returns a default duration since they have no inherent time
|
|
@@ -50,7 +49,6 @@ export declare function validateOverrides(overrides: CustomOverrides): string |
|
|
|
50
49
|
* Reusable export function for programmatic usage
|
|
51
50
|
*/
|
|
52
51
|
export declare function runExport(projectPath: string, outputPath: string, options?: ExportOptions): Promise<ExportResult>;
|
|
53
|
-
export declare const exportCommand: Command;
|
|
54
52
|
export interface PresetSettings {
|
|
55
53
|
resolution: string;
|
|
56
54
|
videoBitrate: string;
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* machine-wide config (`~/.vibeframe/config.yaml`), init writes
|
|
8
8
|
* project-local files: `AGENTS.md` (cross-tool), `CLAUDE.md` (Claude
|
|
9
9
|
* Code, imports `@AGENTS.md`), `.env.example`, `.gitignore` additions,
|
|
10
|
-
* and
|
|
10
|
+
* and `vibe.config.json` (the canonical project contract).
|
|
11
11
|
*
|
|
12
12
|
* Scaffolding decision tree:
|
|
13
13
|
* - Always: `.gitignore` additions, `.env.example`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|