@vibeframe/cli 0.112.0 → 0.113.0

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.
@@ -104,4 +104,13 @@ export interface CreateBuildPlanOptions {
104
104
  composer?: string;
105
105
  force?: boolean;
106
106
  }
107
+ /**
108
+ * Honest per-image estimate for backdrop generation at 1536x1024.
109
+ * OpenAI GPT Image 1.5/2 (mid-2026 pricing): "standard" maps to the API's
110
+ * medium tier (~$0.04/image) and "hd" to high (~$0.13–0.17/image); values
111
+ * below add ~20% headroom for retries. The previous flat $3/image
112
+ * overstated real spend 15–70x and scared users away from backdrops
113
+ * (e.g. 7 beats quoted as ~$21 when the real cost is ~$0.35–1.40).
114
+ */
115
+ export declare function backdropCostUsd(quality: "standard" | "hd"): number;
107
116
  export declare function createBuildPlan(opts: CreateBuildPlanOptions): Promise<BuildPlanResult>;
@@ -4,7 +4,7 @@ export declare const LEGACY_VIBE_PROJECT_FILENAME = "vibe.project.yaml";
4
4
  export type CompositionEngine = "hyperframes";
5
5
  export type ProjectImageProvider = "openai" | "gemini" | "grok" | null;
6
6
  export type ProjectVideoProvider = "seedance" | "grok" | "kling" | "runway" | "veo" | null;
7
- export type ProjectNarrationProvider = "elevenlabs" | "kokoro" | null;
7
+ export type ProjectNarrationProvider = "elevenlabs" | "openai" | "kokoro" | null;
8
8
  export type ProjectComposerProvider = "claude" | "openai" | "gemini" | null;
9
9
  export type ProjectQuality = "draft" | "standard" | "high";
10
10
  export interface VibeProjectConfigV1 {
@@ -12,7 +12,7 @@
12
12
  * Idempotent: assets that already exist on disk are reused unless `force`.
13
13
  *
14
14
  * Scope held tight for v0.60:
15
- * - TTS via `resolveTtsProvider` (ElevenLabs / Kokoro auto-fallback)
15
+ * - TTS via `resolveTtsProvider` (ElevenLabs / OpenAI / Kokoro auto-fallback)
16
16
  * - T2I via OpenAI, Gemini, or Grok
17
17
  * - No Whisper transcribe step (compose handles its own)
18
18
  * - No root `index.html` synthesis — driver expects the project to
@@ -45,7 +45,7 @@ export interface VibeProjectConfig {
45
45
  /** Default providers per capability. `null` means "auto-resolve from env". */
46
46
  providers: {
47
47
  image: "openai" | "gemini" | "grok" | null;
48
- tts: "elevenlabs" | "kokoro" | null;
48
+ tts: "elevenlabs" | "openai" | "kokoro" | null;
49
49
  transcribe: "whisper" | null;
50
50
  };
51
51
  /** Cost ceiling for `vibe remix` runs in this project. 0 disables. */
@@ -8,18 +8,21 @@
8
8
  * Routes between:
9
9
  * - **ElevenLabs** — cloud, API-key gated, paid (~$0.02/scene). Default
10
10
  * when `ELEVENLABS_API_KEY` is set.
11
- * - **Kokoro** — local Apache 2.0 model, free, ~330MB first-call download.
11
+ * - **OpenAI** — cloud gpt-4o-mini-tts, cheap (~$0.015/min of audio).
12
+ * Default when only `OPENAI_API_KEY` is set — the common Claude Desktop
13
+ * case where one key already covers backdrop images.
14
+ * - **Kokoro** — local Apache 2.0 model, free, ~90MB first-call download.
12
15
  * The fallback for key-less users.
13
16
  *
14
17
  * The router exposes a uniform `TtsCallable` shape so call sites don't have
15
- * to branch on provider id. Both providers already return the same
18
+ * to branch on provider id. All providers already return the same
16
19
  * `{ success, audioBuffer, error?, characterCount? }` result.
17
20
  */
18
21
  import type { KokoroLoadEvent } from "@vibeframe/ai-providers";
19
22
  /** TTS providers VibeFrame can route to. `"auto"` picks based on key availability. */
20
- export type TtsProviderName = "auto" | "elevenlabs" | "kokoro";
23
+ export type TtsProviderName = "auto" | "elevenlabs" | "openai" | "kokoro";
21
24
  /** Concrete provider id surfaced in result metadata. Never `"auto"`. */
22
- export type ResolvedTtsProvider = "elevenlabs" | "kokoro";
25
+ export type ResolvedTtsProvider = "elevenlabs" | "openai" | "kokoro";
23
26
  /** Options accepted by every {@link TtsCallable}. Subset of provider-specific options. */
24
27
  export interface TtsCallOptions {
25
28
  /**
@@ -56,10 +59,11 @@ export interface TtsResolution {
56
59
  * Resolution policy:
57
60
  * - `"elevenlabs"`: requires `ELEVENLABS_API_KEY`. Throws an `ApiKeyError`-style
58
61
  * error via {@link getApiKey} (consumed by `requireApiKey`/`exitWithError`).
62
+ * - `"openai"`: requires `OPENAI_API_KEY`.
59
63
  * - `"kokoro"`: always available (local). No key check.
60
- * - `"auto"` (or `undefined`): if an ElevenLabs key is configured in
61
- * project/user config.yaml, .env, or process env, picks ElevenLabs;
62
- * otherwise falls back to Kokoro.
64
+ * - `"auto"` (or `undefined`): ElevenLabs key configured → ElevenLabs
65
+ * (preserves pre-0.113 behavior — a dedicated TTS key signals intent);
66
+ * else OpenAI key configured → OpenAI; else Kokoro.
63
67
  */
64
68
  export declare function resolveTtsProvider(preferred?: TtsProviderName): Promise<TtsResolution>;
65
69
  /**