@vibeframe/cli 0.112.0 → 0.112.1
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>;
|
package/dist/index.js
CHANGED
|
@@ -59515,6 +59515,9 @@ var init_build_backdrop_prompt = __esm({
|
|
|
59515
59515
|
import { existsSync as existsSync47 } from "node:fs";
|
|
59516
59516
|
import { readFile as readFile43 } from "node:fs/promises";
|
|
59517
59517
|
import { dirname as dirname21, join as join23, resolve as resolve60 } from "node:path";
|
|
59518
|
+
function backdropCostUsd(quality) {
|
|
59519
|
+
return quality === "hd" ? 0.2 : 0.05;
|
|
59520
|
+
}
|
|
59518
59521
|
async function createBuildPlan(opts) {
|
|
59519
59522
|
const projectDir = resolve60(opts.projectDir);
|
|
59520
59523
|
loadPlanEnv(projectDir);
|
|
@@ -59670,7 +59673,7 @@ async function createBuildPlan(opts) {
|
|
|
59670
59673
|
reference: backdropReference,
|
|
59671
59674
|
projectDir,
|
|
59672
59675
|
force: opts.force,
|
|
59673
|
-
cost:
|
|
59676
|
+
cost: backdropCostUsd(imageQuality),
|
|
59674
59677
|
active: includeAssets
|
|
59675
59678
|
}) : null;
|
|
59676
59679
|
const video = videoCue && !opts.skipVideo ? assetPlan({
|
|
@@ -60146,7 +60149,7 @@ function loadPlanEnv(projectDir) {
|
|
|
60146
60149
|
dir = dirname21(dir);
|
|
60147
60150
|
}
|
|
60148
60151
|
}
|
|
60149
|
-
var import_dotenv3,
|
|
60152
|
+
var import_dotenv3, VIDEO_COST_USD, MUSIC_COST_USD, ELEVENLABS_NARRATION_COST_USD, COMPOSE_COST_USD, SUPPORTED_BUILD_IMAGE_PROVIDERS;
|
|
60150
60153
|
var init_build_plan = __esm({
|
|
60151
60154
|
"src/commands/_shared/build-plan.ts"() {
|
|
60152
60155
|
"use strict";
|
|
@@ -60161,7 +60164,6 @@ var init_build_plan = __esm({
|
|
|
60161
60164
|
init_storyboard_parse();
|
|
60162
60165
|
init_project_config();
|
|
60163
60166
|
init_storyboard_edit();
|
|
60164
|
-
BACKDROP_COST_USD = 3;
|
|
60165
60167
|
VIDEO_COST_USD = 5;
|
|
60166
60168
|
MUSIC_COST_USD = 0.5;
|
|
60167
60169
|
ELEVENLABS_NARRATION_COST_USD = 0.05;
|
|
@@ -61177,7 +61179,10 @@ async function executeSceneBuild(opts) {
|
|
|
61177
61179
|
(beat) => beat.narrationStatus === "failed" || beat.backdropStatus === "failed" || beat.videoStatus === "failed" || beat.musicStatus === "failed"
|
|
61178
61180
|
);
|
|
61179
61181
|
stageReports.assets.status = assetFailed ? "failed" : pendingJobs.length > 0 ? "pending-jobs" : "done";
|
|
61180
|
-
stageReports.assets.costUsd = estimateActualAssetCost(
|
|
61182
|
+
stageReports.assets.costUsd = estimateActualAssetCost(
|
|
61183
|
+
beatOutcomes,
|
|
61184
|
+
opts.imageQuality ?? "hd"
|
|
61185
|
+
);
|
|
61181
61186
|
stageReports.assets.retryWith = pendingJobs.map(
|
|
61182
61187
|
(job) => `vibe status job ${job.id} --project ${projectDir} --json`
|
|
61183
61188
|
);
|
|
@@ -62360,11 +62365,11 @@ function shouldRunStage(selected, stage) {
|
|
|
62360
62365
|
if (selected === "all") return true;
|
|
62361
62366
|
return selected === stage;
|
|
62362
62367
|
}
|
|
62363
|
-
function estimateActualAssetCost(outcomes) {
|
|
62368
|
+
function estimateActualAssetCost(outcomes, imageQuality) {
|
|
62364
62369
|
let cost = 0;
|
|
62365
62370
|
for (const outcome of outcomes) {
|
|
62366
62371
|
if (outcome.narrationStatus === "generated") cost += 0.05;
|
|
62367
|
-
if (outcome.backdropStatus === "generated") cost +=
|
|
62372
|
+
if (outcome.backdropStatus === "generated") cost += backdropCostUsd(imageQuality);
|
|
62368
62373
|
if (outcome.videoStatus === "generated" || outcome.videoStatus === "pending") cost += 5;
|
|
62369
62374
|
if (outcome.musicStatus === "generated" || outcome.musicStatus === "pending") cost += 0.5;
|
|
62370
62375
|
}
|
|
@@ -73431,7 +73436,7 @@ init_source();
|
|
|
73431
73436
|
// package.json
|
|
73432
73437
|
var package_default = {
|
|
73433
73438
|
name: "@vibeframe/cli",
|
|
73434
|
-
version: "0.112.
|
|
73439
|
+
version: "0.112.1",
|
|
73435
73440
|
description: "VibeFrame CLI - agentic video workflow runtime",
|
|
73436
73441
|
private: false,
|
|
73437
73442
|
license: "MIT",
|
|
@@ -32697,6 +32697,9 @@ var init_storyboard_edit = __esm({
|
|
|
32697
32697
|
import { existsSync as existsSync17 } from "node:fs";
|
|
32698
32698
|
import { readFile as readFile17 } from "node:fs/promises";
|
|
32699
32699
|
import { dirname as dirname9, join as join15, resolve as resolve22 } from "node:path";
|
|
32700
|
+
function backdropCostUsd(quality) {
|
|
32701
|
+
return quality === "hd" ? 0.2 : 0.05;
|
|
32702
|
+
}
|
|
32700
32703
|
async function createBuildPlan(opts) {
|
|
32701
32704
|
const projectDir = resolve22(opts.projectDir);
|
|
32702
32705
|
loadPlanEnv(projectDir);
|
|
@@ -32852,7 +32855,7 @@ async function createBuildPlan(opts) {
|
|
|
32852
32855
|
reference: backdropReference,
|
|
32853
32856
|
projectDir,
|
|
32854
32857
|
force: opts.force,
|
|
32855
|
-
cost:
|
|
32858
|
+
cost: backdropCostUsd(imageQuality),
|
|
32856
32859
|
active: includeAssets
|
|
32857
32860
|
}) : null;
|
|
32858
32861
|
const video = videoCue && !opts.skipVideo ? assetPlan({
|
|
@@ -33328,7 +33331,7 @@ function loadPlanEnv(projectDir) {
|
|
|
33328
33331
|
dir = dirname9(dir);
|
|
33329
33332
|
}
|
|
33330
33333
|
}
|
|
33331
|
-
var import_dotenv2,
|
|
33334
|
+
var import_dotenv2, VIDEO_COST_USD, MUSIC_COST_USD, ELEVENLABS_NARRATION_COST_USD, COMPOSE_COST_USD, SUPPORTED_BUILD_IMAGE_PROVIDERS;
|
|
33332
33335
|
var init_build_plan = __esm({
|
|
33333
33336
|
"src/commands/_shared/build-plan.ts"() {
|
|
33334
33337
|
"use strict";
|
|
@@ -33343,7 +33346,6 @@ var init_build_plan = __esm({
|
|
|
33343
33346
|
init_storyboard_parse();
|
|
33344
33347
|
init_project_config();
|
|
33345
33348
|
init_storyboard_edit();
|
|
33346
|
-
BACKDROP_COST_USD = 3;
|
|
33347
33349
|
VIDEO_COST_USD = 5;
|
|
33348
33350
|
MUSIC_COST_USD = 0.5;
|
|
33349
33351
|
ELEVENLABS_NARRATION_COST_USD = 0.05;
|
|
@@ -33864,7 +33866,10 @@ async function executeSceneBuild(opts) {
|
|
|
33864
33866
|
(beat) => beat.narrationStatus === "failed" || beat.backdropStatus === "failed" || beat.videoStatus === "failed" || beat.musicStatus === "failed"
|
|
33865
33867
|
);
|
|
33866
33868
|
stageReports.assets.status = assetFailed ? "failed" : pendingJobs.length > 0 ? "pending-jobs" : "done";
|
|
33867
|
-
stageReports.assets.costUsd = estimateActualAssetCost(
|
|
33869
|
+
stageReports.assets.costUsd = estimateActualAssetCost(
|
|
33870
|
+
beatOutcomes,
|
|
33871
|
+
opts.imageQuality ?? "hd"
|
|
33872
|
+
);
|
|
33868
33873
|
stageReports.assets.retryWith = pendingJobs.map(
|
|
33869
33874
|
(job) => `vibe status job ${job.id} --project ${projectDir} --json`
|
|
33870
33875
|
);
|
|
@@ -35047,11 +35052,11 @@ function shouldRunStage(selected, stage) {
|
|
|
35047
35052
|
if (selected === "all") return true;
|
|
35048
35053
|
return selected === stage;
|
|
35049
35054
|
}
|
|
35050
|
-
function estimateActualAssetCost(outcomes) {
|
|
35055
|
+
function estimateActualAssetCost(outcomes, imageQuality) {
|
|
35051
35056
|
let cost = 0;
|
|
35052
35057
|
for (const outcome of outcomes) {
|
|
35053
35058
|
if (outcome.narrationStatus === "generated") cost += 0.05;
|
|
35054
|
-
if (outcome.backdropStatus === "generated") cost +=
|
|
35059
|
+
if (outcome.backdropStatus === "generated") cost += backdropCostUsd(imageQuality);
|
|
35055
35060
|
if (outcome.videoStatus === "generated" || outcome.videoStatus === "pending") cost += 5;
|
|
35056
35061
|
if (outcome.musicStatus === "generated" || outcome.musicStatus === "pending") cost += 0.5;
|
|
35057
35062
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/cli",
|
|
3
|
-
"version": "0.112.
|
|
3
|
+
"version": "0.112.1",
|
|
4
4
|
"description": "VibeFrame CLI - agentic video workflow runtime",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,8 +83,8 @@
|
|
|
83
83
|
"tsx": "^4.21.0",
|
|
84
84
|
"typescript": "^5.3.3",
|
|
85
85
|
"vitest": "^1.2.2",
|
|
86
|
-
"@vibeframe/ai-providers": "0.112.
|
|
87
|
-
"@vibeframe/core": "0.112.
|
|
86
|
+
"@vibeframe/ai-providers": "0.112.1",
|
|
87
|
+
"@vibeframe/core": "0.112.1"
|
|
88
88
|
},
|
|
89
89
|
"engines": {
|
|
90
90
|
"node": ">=20"
|