@vibeframe/cli 0.90.0 → 0.91.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.
- package/dist/index.js +44 -20
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -14296,7 +14296,7 @@ function getCommandKeyMap() {
|
|
|
14296
14296
|
function getSetupProviders() {
|
|
14297
14297
|
return [...apiKeyRegistry.values()].filter((k) => k.showInSetup).map((k) => ({
|
|
14298
14298
|
key: k.configKey,
|
|
14299
|
-
name: k.
|
|
14299
|
+
name: getDisplayLabelForApiKey(k.configKey),
|
|
14300
14300
|
env: k.envVar,
|
|
14301
14301
|
desc: k.setupDescription ?? "",
|
|
14302
14302
|
url: k.envExampleUrl
|
|
@@ -14308,6 +14308,16 @@ function getAllApiKeys() {
|
|
|
14308
14308
|
function getKeyFormat(configKey) {
|
|
14309
14309
|
return apiKeyRegistry.get(configKey)?.keyFormat;
|
|
14310
14310
|
}
|
|
14311
|
+
function getDisplayLabelForApiKey(configKey) {
|
|
14312
|
+
const apiKey = apiKeyRegistry.get(configKey);
|
|
14313
|
+
if (!apiKey)
|
|
14314
|
+
return configKey;
|
|
14315
|
+
const provider = [...providerRegistry2.values()].find((p) => p.apiKey === configKey && p.displayName && p.gateway);
|
|
14316
|
+
if (provider?.displayName && provider.gateway) {
|
|
14317
|
+
return `${provider.displayName} (via ${provider.gateway})`;
|
|
14318
|
+
}
|
|
14319
|
+
return apiKey.label;
|
|
14320
|
+
}
|
|
14311
14321
|
function getAllProviders() {
|
|
14312
14322
|
return [...providerRegistry2.values()];
|
|
14313
14323
|
}
|
|
@@ -24412,7 +24422,7 @@ var init_FalProvider = __esm({
|
|
|
24412
24422
|
VALID_ASPECTS = ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16", "auto"];
|
|
24413
24423
|
FalProvider = class {
|
|
24414
24424
|
constructor() {
|
|
24415
|
-
this.id = "
|
|
24425
|
+
this.id = "seedance";
|
|
24416
24426
|
this.name = "fal.ai (Seedance 2.0)";
|
|
24417
24427
|
this.description = "fal.ai hosting ByteDance Seedance 2.0 \u2014 Artificial Analysis #2 on both text-to-video and image-to-video leaderboards";
|
|
24418
24428
|
this.capabilities = ["text-to-video", "image-to-video"];
|
|
@@ -24511,11 +24521,13 @@ var init_fal = __esm({
|
|
|
24511
24521
|
init_FalProvider();
|
|
24512
24522
|
init_define_provider();
|
|
24513
24523
|
defineProvider({
|
|
24514
|
-
id: "
|
|
24515
|
-
label: "
|
|
24524
|
+
id: "seedance",
|
|
24525
|
+
label: "Seedance 2.0",
|
|
24516
24526
|
displayName: "Seedance 2.0",
|
|
24517
24527
|
gateway: "fal.ai",
|
|
24518
|
-
|
|
24528
|
+
// `fal` is a deprecated v0.x alias kept so existing scripts keep working.
|
|
24529
|
+
// Will be removed at the 1.0 cut (see docs/1.0-readiness.md).
|
|
24530
|
+
aliases: ["fal"],
|
|
24519
24531
|
models: ["seedance-2.0", "seedance-2.0-fast"],
|
|
24520
24532
|
capabilities: ["text-to-video", "image-to-video", "native-audio"],
|
|
24521
24533
|
apiKey: "fal",
|
|
@@ -25216,6 +25228,7 @@ __export(dist_exports2, {
|
|
|
25216
25228
|
getAllProviders: () => getAllProviders,
|
|
25217
25229
|
getBestProviderForCapability: () => getBestProviderForCapability,
|
|
25218
25230
|
getCommandKeyMap: () => getCommandKeyMap,
|
|
25231
|
+
getDisplayLabelForApiKey: () => getDisplayLabelForApiKey,
|
|
25219
25232
|
getKeyFormat: () => getKeyFormat,
|
|
25220
25233
|
getProviderEnvVars: () => getProviderEnvVars,
|
|
25221
25234
|
getProvidersFor: () => getProvidersFor,
|
|
@@ -35484,9 +35497,9 @@ var init_ai_script_pipeline = __esm({
|
|
|
35484
35497
|
import { resolve as resolve26 } from "node:path";
|
|
35485
35498
|
import { readFile as readFile14, writeFile as writeFile24 } from "node:fs/promises";
|
|
35486
35499
|
function registerVideoCommand(parent) {
|
|
35487
|
-
parent.command("video").alias("vid").description("Generate video using AI (Seedance, Grok, Kling, Runway, or Veo)").argument("[prompt]", "Text prompt describing the video (interactive if omitted)").option("-p, --provider <provider>", "Provider: seedance (ByteDance Seedance 2.0 via fal.ai), grok, kling, runway, veo. `fal` is a
|
|
35500
|
+
parent.command("video").alias("vid").description("Generate video using AI (Seedance, Grok, Kling, Runway, or Veo)").argument("[prompt]", "Text prompt describing the video (interactive if omitted)").option("-p, --provider <provider>", "Provider: seedance (ByteDance Seedance 2.0 via fal.ai), grok, kling, runway, veo. `fal` is a deprecated v0.x alias for seedance and will be removed in 1.0.").option("-k, --api-key <key>", "API key (or set FAL_KEY / XAI_API_KEY / RUNWAY_API_SECRET / KLING_API_KEY / GOOGLE_API_KEY env)").option("-o, --output <path>", "Output file path (downloads video)").option("-i, --image <path>", "Reference image for image-to-video").option(
|
|
35488
35501
|
"-d, --duration <sec>",
|
|
35489
|
-
"Duration in seconds. Seedance accepts 4-15
|
|
35502
|
+
"Duration in seconds. Seedance accepts 4-15; Kling accepts 5 or 10; Veo maps to 6 or 8.",
|
|
35490
35503
|
"5"
|
|
35491
35504
|
).option("-r, --ratio <ratio>", "Aspect ratio: 16:9, 9:16, or 1:1 (auto-detected from image if omitted)").option("--seed <number>", "Random seed for reproducibility (Runway only)").option("--mode <mode>", "Generation mode: std or pro (Kling only)", "std").option("--seedance-model <model>", "Seedance variant: quality or fast (fal.ai only)", "quality").option("--negative <prompt>", "Negative prompt - what to avoid (Kling/Veo)").option("--resolution <res>", "Video resolution: 720p, 1080p, 4k (Veo only)").option("--last-frame <path>", "Last frame image for frame interpolation (Veo only)").option("--ref-images <paths...>", "Reference images for character consistency (Veo 3.1 only, max 3)").option("--person <mode>", "Person generation: allow_all, allow_adult (Veo only)").option("--veo-model <model>", "Veo model: 3.0, 3.1, 3.1-fast (default: 3.1-fast)", "3.1-fast").option("--runway-model <model>", "Runway model: gen4.5 (default, text+image-to-video), gen4_turbo (image-to-video only)", "gen4.5").option("--no-wait", "Start generation and return task ID without waiting").option("--dry-run", "Preview parameters without executing").addHelpText("after", `
|
|
35492
35505
|
Examples:
|
|
@@ -35532,8 +35545,7 @@ Examples:
|
|
|
35532
35545
|
veo: "GOOGLE_API_KEY",
|
|
35533
35546
|
kling: "KLING_API_KEY",
|
|
35534
35547
|
runway: "RUNWAY_API_SECRET",
|
|
35535
|
-
seedance: "FAL_KEY"
|
|
35536
|
-
fal: "FAL_KEY"
|
|
35548
|
+
seedance: "FAL_KEY"
|
|
35537
35549
|
};
|
|
35538
35550
|
let provider;
|
|
35539
35551
|
if (options.provider) {
|
|
@@ -35542,9 +35554,17 @@ Examples:
|
|
|
35542
35554
|
exitWithError(
|
|
35543
35555
|
usageError(
|
|
35544
35556
|
`Invalid provider: ${provider}`,
|
|
35545
|
-
"Available providers: seedance, grok, kling, runway, veo. `fal` is a
|
|
35557
|
+
"Available providers: seedance, grok, kling, runway, veo. `fal` is a deprecated alias for seedance."
|
|
35558
|
+
)
|
|
35559
|
+
);
|
|
35560
|
+
}
|
|
35561
|
+
if (provider === "fal") {
|
|
35562
|
+
process.stderr.write(
|
|
35563
|
+
source_default.yellow(
|
|
35564
|
+
"Note: `-p fal` is a deprecated alias for `-p seedance` and will be removed in 1.0.\n"
|
|
35546
35565
|
)
|
|
35547
35566
|
);
|
|
35567
|
+
provider = "seedance";
|
|
35548
35568
|
}
|
|
35549
35569
|
if (videoEnvMap[provider] && !hasApiKey(videoEnvMap[provider]) && !options.apiKey) {
|
|
35550
35570
|
const resolved = resolveProvider("video");
|
|
@@ -35605,7 +35625,7 @@ Examples:
|
|
|
35605
35625
|
data: {
|
|
35606
35626
|
params: {
|
|
35607
35627
|
prompt: prompt3,
|
|
35608
|
-
provider
|
|
35628
|
+
provider,
|
|
35609
35629
|
duration: options.duration,
|
|
35610
35630
|
ratio: options.ratio,
|
|
35611
35631
|
image: options.image,
|
|
@@ -35624,16 +35644,14 @@ Examples:
|
|
|
35624
35644
|
kling: "KLING_API_KEY",
|
|
35625
35645
|
veo: "GOOGLE_API_KEY",
|
|
35626
35646
|
grok: "XAI_API_KEY",
|
|
35627
|
-
seedance: "FAL_KEY"
|
|
35628
|
-
fal: "FAL_KEY"
|
|
35647
|
+
seedance: "FAL_KEY"
|
|
35629
35648
|
};
|
|
35630
35649
|
const providerNameMap = {
|
|
35631
35650
|
runway: "Runway",
|
|
35632
35651
|
kling: "Kling",
|
|
35633
35652
|
veo: "Veo",
|
|
35634
35653
|
grok: "Grok",
|
|
35635
|
-
seedance: "Seedance 2.0 via fal.ai"
|
|
35636
|
-
fal: "Seedance 2.0 via fal.ai"
|
|
35654
|
+
seedance: "Seedance 2.0 via fal.ai"
|
|
35637
35655
|
};
|
|
35638
35656
|
const envKey = envKeyMap[provider];
|
|
35639
35657
|
const providerName = providerNameMap[provider];
|
|
@@ -35852,7 +35870,7 @@ Examples:
|
|
|
35852
35870
|
},
|
|
35853
35871
|
3e5
|
|
35854
35872
|
);
|
|
35855
|
-
} else if (provider === "
|
|
35873
|
+
} else if (provider === "seedance") {
|
|
35856
35874
|
const fal = new FalProvider();
|
|
35857
35875
|
await fal.initialize({ apiKey });
|
|
35858
35876
|
let falImage = referenceImage;
|
|
@@ -62892,7 +62910,7 @@ init_source();
|
|
|
62892
62910
|
// package.json
|
|
62893
62911
|
var package_default = {
|
|
62894
62912
|
name: "@vibeframe/cli",
|
|
62895
|
-
version: "0.
|
|
62913
|
+
version: "0.91.0",
|
|
62896
62914
|
description: "VibeFrame CLI - natural language video editing from the terminal",
|
|
62897
62915
|
private: false,
|
|
62898
62916
|
license: "MIT",
|
|
@@ -69976,7 +69994,7 @@ var AI_FEATURES = [
|
|
|
69976
69994
|
desc: "generate + extend",
|
|
69977
69995
|
defaultProvider: "Seedance 2.0 via fal.ai (Artificial Analysis #2 t2v + i2v, since v0.57)",
|
|
69978
69996
|
alsoAvailable: "Grok Imagine, Kling, Runway Gen-4.5, Google Veo",
|
|
69979
|
-
keys: [{ configKey: "fal", envVar: "FAL_KEY", name: "fal.ai", url: "https://fal.ai/dashboard/keys", what: "ByteDance Seedance 2.0 text-to-video and image-to-video" }],
|
|
69997
|
+
keys: [{ configKey: "fal", envVar: "FAL_KEY", name: "Seedance 2.0 (via fal.ai)", url: "https://fal.ai/dashboard/keys", what: "ByteDance Seedance 2.0 text-to-video and image-to-video" }],
|
|
69980
69998
|
tryCommand: 'vibe generate video "ocean waves" -o waves.mp4'
|
|
69981
69999
|
},
|
|
69982
70000
|
{
|
|
@@ -71795,11 +71813,16 @@ function printReport(results, opts = { verbose: false }) {
|
|
|
71795
71813
|
console.log(source_default.bold(" API Keys"));
|
|
71796
71814
|
const configured = [];
|
|
71797
71815
|
const missing = [];
|
|
71816
|
+
const labelFor = (configKey, fallbackEnv) => {
|
|
71817
|
+
const label = getDisplayLabelForApiKey(configKey);
|
|
71818
|
+
return label === configKey ? fallbackEnv : label;
|
|
71819
|
+
};
|
|
71798
71820
|
for (const [name, info] of Object.entries(results.providers)) {
|
|
71799
71821
|
if (info.configured) {
|
|
71800
71822
|
configured.push(name);
|
|
71823
|
+
const label = labelFor(name, info.envVar);
|
|
71801
71824
|
console.log(
|
|
71802
|
-
` ${source_default.green("OK")} ${info.envVar.padEnd(
|
|
71825
|
+
` ${source_default.green("OK")} ${label.padEnd(28)} ${source_default.dim(info.envVar.padEnd(20))} ${source_default.dim(info.commands.join(", "))}`
|
|
71803
71826
|
);
|
|
71804
71827
|
} else {
|
|
71805
71828
|
missing.push(name);
|
|
@@ -71809,8 +71832,9 @@ function printReport(results, opts = { verbose: false }) {
|
|
|
71809
71832
|
if (verbose) {
|
|
71810
71833
|
for (const name of missing) {
|
|
71811
71834
|
const info = results.providers[name];
|
|
71835
|
+
const label = labelFor(name, info.envVar);
|
|
71812
71836
|
console.log(
|
|
71813
|
-
` ${source_default.red("--")} ${info.envVar.padEnd(
|
|
71837
|
+
` ${source_default.red("--")} ${label.padEnd(28)} ${source_default.dim(info.envVar.padEnd(20))} ${source_default.dim(info.commands.join(", "))}`
|
|
71814
71838
|
);
|
|
71815
71839
|
}
|
|
71816
71840
|
} else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.91.0",
|
|
4
4
|
"description": "VibeFrame CLI - natural language video editing from the terminal",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -183,8 +183,8 @@
|
|
|
183
183
|
"tsx": "^4.21.0",
|
|
184
184
|
"typescript": "^5.3.3",
|
|
185
185
|
"vitest": "^1.2.2",
|
|
186
|
-
"@vibeframe/ai-providers": "0.
|
|
187
|
-
"@vibeframe/core": "0.
|
|
186
|
+
"@vibeframe/ai-providers": "0.91.0",
|
|
187
|
+
"@vibeframe/core": "0.91.0"
|
|
188
188
|
},
|
|
189
189
|
"engines": {
|
|
190
190
|
"node": ">=20"
|