@vibeframe/cli 0.57.1 → 0.57.3

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.
Files changed (2) hide show
  1. package/dist/index.js +56 -36
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -25210,6 +25210,7 @@ var init_schema = __esm({
25210
25210
  elevenlabs: "ELEVENLABS_API_KEY",
25211
25211
  runway: "RUNWAY_API_SECRET",
25212
25212
  kling: "KLING_API_KEY",
25213
+ fal: "FAL_KEY",
25213
25214
  imgbb: "IMGBB_API_KEY",
25214
25215
  replicate: "REPLICATE_API_TOKEN",
25215
25216
  xai: "XAI_API_KEY",
@@ -33587,7 +33588,7 @@ Run 'vibe setup --show' to check API key status.
33587
33588
  Run 'vibe schema generate.<command>' for structured parameter info.
33588
33589
  `
33589
33590
  );
33590
- generateCommand.command("image").alias("img").description("Generate image using AI (Gemini, DALL-E, or Runway)").argument("[prompt]", "Image description prompt (interactive if omitted)").option("-p, --provider <provider>", "Provider: gemini, openai, grok, runway (dalle is deprecated)", "gemini").option("-k, --api-key <key>", "API key (or set env: OPENAI_API_KEY, GOOGLE_API_KEY)").option("-o, --output <path>", "Output file path (downloads image)").option("-s, --size <size>", "Image size (openai: 1024x1024, 1536x1024, 1024x1536)", "1024x1024").option("-r, --ratio <ratio>", "Aspect ratio (gemini: 1:1, 1:4, 1:8, 4:1, 8:1, 16:9, 9:16, 3:4, 4:3, etc.)", "1:1").option("-q, --quality <quality>", "Quality: standard, hd (openai only)", "standard").option("--style <style>", "Style: vivid, natural (openai only)", "vivid").option("-n, --count <n>", "Number of images to generate", "1").option("-m, --model <model>", "Model. Gemini: flash, 3.1-flash, latest, pro. OpenAI: 1.5 (default), 2 (gpt-image-2)").option("--dry-run", "Preview parameters without executing").addHelpText("after", `
33591
+ generateCommand.command("image").alias("img").description("Generate image using AI (Gemini, DALL-E, or Runway)").argument("[prompt]", "Image description prompt (interactive if omitted)").option("-p, --provider <provider>", "Provider: openai (default when OPENAI_API_KEY set), gemini, grok, runway (dalle is deprecated)").option("-k, --api-key <key>", "API key (or set env: OPENAI_API_KEY, GOOGLE_API_KEY)").option("-o, --output <path>", "Output file path (downloads image)").option("-s, --size <size>", "Image size (openai: 1024x1024, 1536x1024, 1024x1536)", "1024x1024").option("-r, --ratio <ratio>", "Aspect ratio (gemini: 1:1, 1:4, 1:8, 4:1, 8:1, 16:9, 9:16, 3:4, 4:3, etc.)", "1:1").option("-q, --quality <quality>", "Quality: standard, hd (openai only)", "standard").option("--style <style>", "Style: vivid, natural (openai only)", "vivid").option("-n, --count <n>", "Number of images to generate", "1").option("-m, --model <model>", "Model. Gemini: flash, 3.1-flash, latest, pro. OpenAI: 1.5 (default), 2 (gpt-image-2)").option("--dry-run", "Preview parameters without executing").addHelpText("after", `
33591
33592
  Examples:
33592
33593
  $ vibe generate image "a sunset over the ocean" -o sunset.png
33593
33594
  $ vibe gen img "logo design" -o logo.png -p openai
@@ -33609,22 +33610,28 @@ Examples:
33609
33610
  if (options.output) {
33610
33611
  validateOutputPath(options.output);
33611
33612
  }
33612
- let provider = options.provider.toLowerCase();
33613
33613
  const validProviders = ["openai", "dalle", "gemini", "grok", "runway"];
33614
- if (!validProviders.includes(provider)) {
33615
- exitWithError(usageError(`Invalid provider: ${provider}`, `Available providers: openai, gemini, grok, runway`));
33616
- }
33617
33614
  const providerEnvMap = {
33618
33615
  gemini: "GOOGLE_API_KEY",
33619
33616
  openai: "OPENAI_API_KEY",
33620
33617
  grok: "XAI_API_KEY"
33621
33618
  };
33622
- if (providerEnvMap[provider] && !hasApiKey(providerEnvMap[provider]) && !options.apiKey) {
33623
- const resolved = resolveProvider("image");
33624
- if (resolved) {
33625
- log(source_default.dim(` ${provider} key not found. Using ${resolved.label} instead.`));
33626
- provider = resolved.name;
33619
+ let provider;
33620
+ if (options.provider) {
33621
+ provider = options.provider.toLowerCase();
33622
+ if (!validProviders.includes(provider)) {
33623
+ exitWithError(usageError(`Invalid provider: ${provider}`, `Available providers: openai, gemini, grok, runway`));
33624
+ }
33625
+ if (providerEnvMap[provider] && !hasApiKey(providerEnvMap[provider]) && !options.apiKey) {
33626
+ const resolved = resolveProvider("image");
33627
+ if (resolved) {
33628
+ log(source_default.dim(` ${provider} key not found. Using ${resolved.label} instead.`));
33629
+ provider = resolved.name;
33630
+ }
33627
33631
  }
33632
+ } else {
33633
+ const resolved = resolveProvider("image");
33634
+ provider = resolved?.name ?? "gemini";
33628
33635
  }
33629
33636
  if (provider === "dalle") {
33630
33637
  console.log(source_default.yellow('Warning: "dalle" is deprecated. Use "openai" instead.'));
@@ -33918,7 +33925,7 @@ Examples:
33918
33925
  exitWithError(apiError(`Image generation failed: ${error.message}`));
33919
33926
  }
33920
33927
  });
33921
- generateCommand.command("video").alias("vid").description("Generate video using AI (Kling, Runway, Veo, or Grok)").argument("[prompt]", "Text prompt describing the video (interactive if omitted)").option("-p, --provider <provider>", "Provider: grok (default), kling, runway, veo, fal (Seedance 2.0)", "grok").option("-k, --api-key <key>", "API key (or set 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("-d, --duration <sec>", "Duration: 5 or 10 seconds", "5").option("-r, --ratio <ratio>", "Aspect ratio: 16:9, 9:16, or 1:1 (auto-detected from image if omitted)").option("-s, --seed <number>", "Random seed for reproducibility (Runway only)").option("-m, --mode <mode>", "Generation mode: std or pro (Kling only)", "std").option("-n, --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", `
33928
+ generateCommand.command("video").alias("vid").description("Generate video using AI (Kling, Runway, Veo, or Grok)").argument("[prompt]", "Text prompt describing the video (interactive if omitted)").option("-p, --provider <provider>", "Provider: fal (Seedance 2.0, default when FAL_KEY set), grok, kling, runway, veo").option("-k, --api-key <key>", "API key (or set 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("-d, --duration <sec>", "Duration: 5 or 10 seconds", "5").option("-r, --ratio <ratio>", "Aspect ratio: 16:9, 9:16, or 1:1 (auto-detected from image if omitted)").option("-s, --seed <number>", "Random seed for reproducibility (Runway only)").option("-m, --mode <mode>", "Generation mode: std or pro (Kling only)", "std").option("-n, --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", `
33922
33929
  Examples:
33923
33930
  $ vibe generate video "dancing cat" -o cat.mp4 # Grok (default)
33924
33931
  $ vibe gen vid "city timelapse" -o city.mp4 -p kling # Kling
@@ -33940,11 +33947,7 @@ Examples:
33940
33947
  if (options.output) {
33941
33948
  validateOutputPath(options.output);
33942
33949
  }
33943
- let provider = options.provider.toLowerCase();
33944
33950
  const validProviders = ["runway", "kling", "veo", "grok", "fal"];
33945
- if (!validProviders.includes(provider)) {
33946
- exitWithError(usageError(`Invalid provider: ${provider}`, `Available providers: ${validProviders.join(", ")}`));
33947
- }
33948
33951
  const videoEnvMap = {
33949
33952
  grok: "XAI_API_KEY",
33950
33953
  veo: "GOOGLE_API_KEY",
@@ -33952,12 +33955,22 @@ Examples:
33952
33955
  runway: "RUNWAY_API_SECRET",
33953
33956
  fal: "FAL_KEY"
33954
33957
  };
33955
- if (videoEnvMap[provider] && !hasApiKey(videoEnvMap[provider]) && !options.apiKey) {
33956
- const resolved = resolveProvider("video");
33957
- if (resolved) {
33958
- log(source_default.dim(` ${provider} key not found. Using ${resolved.label} instead.`));
33959
- provider = resolved.name;
33958
+ let provider;
33959
+ if (options.provider) {
33960
+ provider = options.provider.toLowerCase();
33961
+ if (!validProviders.includes(provider)) {
33962
+ exitWithError(usageError(`Invalid provider: ${provider}`, `Available providers: ${validProviders.join(", ")}`));
33963
+ }
33964
+ if (videoEnvMap[provider] && !hasApiKey(videoEnvMap[provider]) && !options.apiKey) {
33965
+ const resolved = resolveProvider("video");
33966
+ if (resolved) {
33967
+ log(source_default.dim(` ${provider} key not found. Using ${resolved.label} instead.`));
33968
+ provider = resolved.name;
33969
+ }
33960
33970
  }
33971
+ } else {
33972
+ const resolved = resolveProvider("video");
33973
+ provider = resolved?.name ?? "grok";
33961
33974
  }
33962
33975
  let referenceImage;
33963
33976
  let isImageToVideo = false;
@@ -57525,7 +57538,7 @@ init_source();
57525
57538
  // package.json
57526
57539
  var package_default = {
57527
57540
  name: "@vibeframe/cli",
57528
- version: "0.57.1",
57541
+ version: "0.57.3",
57529
57542
  description: "VibeFrame CLI - natural language video editing from the terminal",
57530
57543
  private: false,
57531
57544
  license: "MIT",
@@ -65233,25 +65246,25 @@ var AI_FEATURES = [
65233
65246
  {
65234
65247
  label: "Images",
65235
65248
  desc: "generate + edit",
65236
- defaultProvider: "Gemini Nano Banana",
65237
- alsoAvailable: "OpenAI GPT Image, Grok Imagine",
65238
- keys: [{ configKey: "google", envVar: "GOOGLE_API_KEY", name: "Google", url: "https://aistudio.google.com/apikey", what: "Gemini image generation + editing + video analysis" }],
65249
+ defaultProvider: "OpenAI gpt-image-2 (Artificial Analysis #1, since v0.56)",
65250
+ alsoAvailable: "Gemini Nano Banana, Grok Imagine",
65251
+ keys: [{ configKey: "openai", envVar: "OPENAI_API_KEY", name: "OpenAI", url: "https://platform.openai.com/api-keys", what: "gpt-image-2 image generation + editing (also Whisper, Agent)" }],
65239
65252
  tryCommand: 'vibe generate image "a sunset over mountains" -o test.png'
65240
65253
  },
65241
65254
  {
65242
65255
  label: "Videos",
65243
65256
  desc: "generate + extend",
65244
- defaultProvider: "Grok Imagine (native audio)",
65245
- alsoAvailable: "Kling, Runway Gen-4.5, Google Veo",
65246
- keys: [{ configKey: "xai", envVar: "XAI_API_KEY", name: "xAI", url: "https://console.x.ai", what: "Grok video generation with native audio" }],
65257
+ defaultProvider: "fal.ai Seedance 2.0 (Artificial Analysis #2 t2v + i2v, since v0.57)",
65258
+ alsoAvailable: "Grok Imagine, Kling, Runway Gen-4.5, Google Veo",
65259
+ 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" }],
65247
65260
  tryCommand: 'vibe generate video "ocean waves" -o waves.mp4'
65248
65261
  },
65249
65262
  {
65250
65263
  label: "Audio",
65251
65264
  desc: "TTS, SFX, music, voice clone",
65252
- defaultProvider: "ElevenLabs",
65265
+ defaultProvider: "ElevenLabs (paid, premium quality) \u2014 falls back to local Kokoro when no key (free, since v0.54)",
65253
65266
  alsoAvailable: "Replicate MusicGen (music only)",
65254
- keys: [{ configKey: "elevenlabs", envVar: "ELEVENLABS_API_KEY", name: "ElevenLabs", url: "https://elevenlabs.io/app/settings/api-keys", what: "Text-to-speech, sound effects, music, voice cloning" }],
65267
+ keys: [{ configKey: "elevenlabs", envVar: "ELEVENLABS_API_KEY", name: "ElevenLabs", url: "https://elevenlabs.io/app/settings/api-keys", what: "Text-to-speech, sound effects, music, voice cloning (skip to use local Kokoro)" }],
65255
65268
  tryCommand: 'vibe generate speech "Hello world" -o hello.mp3'
65256
65269
  },
65257
65270
  {
@@ -65303,9 +65316,9 @@ async function runSetupWizard(fullSetup = false) {
65303
65316
  config2.llm.provider = "claude";
65304
65317
  const pipelineKeys = [
65305
65318
  { configKey: "anthropic", envVar: "ANTHROPIC_API_KEY", name: "Anthropic", url: "https://console.anthropic.com/settings/keys", what: "Claude \u2014 storyboard generation + reasoning" },
65306
- { configKey: "google", envVar: "GOOGLE_API_KEY", name: "Google", url: "https://aistudio.google.com/apikey", what: "Gemini \u2014 image generation + video analysis" },
65307
- { configKey: "elevenlabs", envVar: "ELEVENLABS_API_KEY", name: "ElevenLabs", url: "https://elevenlabs.io/app/settings/api-keys", what: "Text-to-speech narration + music" },
65308
- { configKey: "xai", envVar: "XAI_API_KEY", name: "xAI", url: "https://console.x.ai", what: "Grok \u2014 video generation with native audio" }
65319
+ { configKey: "openai", envVar: "OPENAI_API_KEY", name: "OpenAI", url: "https://platform.openai.com/api-keys", what: "gpt-image-2 image generation (default since v0.56) + Whisper word-level transcribe" },
65320
+ { configKey: "fal", envVar: "FAL_KEY", name: "fal.ai", url: "https://fal.ai/dashboard/keys", what: "Seedance 2.0 \u2014 video generation, default since v0.57" },
65321
+ { configKey: "elevenlabs", envVar: "ELEVENLABS_API_KEY", name: "ElevenLabs", url: "https://elevenlabs.io/app/settings/api-keys", what: "Text-to-speech narration + music (skip to use local Kokoro)" }
65309
65322
  ];
65310
65323
  console.log(source_default.dim("Step 2 of 2"));
65311
65324
  console.log(source_default.bold("Pipeline requires these API keys:"));
@@ -65436,11 +65449,12 @@ async function runCustomSetup(config2) {
65436
65449
  console.log(source_default.dim(" Press Enter to skip any provider you don't need."));
65437
65450
  console.log();
65438
65451
  const allProviders = [
65452
+ { key: "openai", name: "OpenAI", env: "OPENAI_API_KEY", desc: "gpt-image-2 image gen ($, default since v0.56), Whisper transcribe, Agent" },
65439
65453
  { key: "anthropic", name: "Anthropic", env: "ANTHROPIC_API_KEY", desc: "Claude \u2014 storyboard, color grade, reframe, Agent ($)" },
65440
- { key: "openai", name: "OpenAI", env: "OPENAI_API_KEY", desc: "Whisper (captions, jump-cut $), GPT Image ($), Agent" },
65454
+ { key: "fal", name: "fal.ai", env: "FAL_KEY", desc: "Seedance 2.0 video gen ($$, default since v0.57)" },
65441
65455
  { key: "google", name: "Google", env: "GOOGLE_API_KEY", desc: "Gemini \u2014 image gen (free tier), video analysis ($), Veo ($$)" },
65442
65456
  { key: "xai", name: "xAI", env: "XAI_API_KEY", desc: "Grok \u2014 video gen with audio ($$), image ($), Agent" },
65443
- { key: "elevenlabs", name: "ElevenLabs", env: "ELEVENLABS_API_KEY", desc: "TTS ($), SFX, music, voice clone, dubbing" },
65457
+ { key: "elevenlabs", name: "ElevenLabs", env: "ELEVENLABS_API_KEY", desc: "TTS ($), SFX, music, voice clone, dubbing \u2014 skip to use local Kokoro" },
65444
65458
  { key: "runway", name: "Runway", env: "RUNWAY_API_SECRET", desc: "Gen-4.5 video generation ($$)" },
65445
65459
  { key: "kling", name: "Kling", env: "KLING_API_KEY", desc: "v2.5/v3 video \u2014 std ($$) and pro ($$$) modes" },
65446
65460
  { key: "openrouter", name: "OpenRouter", env: "OPENROUTER_API_KEY", desc: "300+ models via one key \u2014 Agent only (pay per model)" },
@@ -65554,6 +65568,7 @@ async function showConfig() {
65554
65568
  { key: "openai", name: "OpenAI", env: "OPENAI_API_KEY" },
65555
65569
  { key: "google", name: "Google", env: "GOOGLE_API_KEY" },
65556
65570
  { key: "xai", name: "xAI", env: "XAI_API_KEY" },
65571
+ { key: "fal", name: "fal.ai", env: "FAL_KEY" },
65557
65572
  { key: "elevenlabs", name: "ElevenLabs", env: "ELEVENLABS_API_KEY" },
65558
65573
  { key: "runway", name: "Runway", env: "RUNWAY_API_SECRET" },
65559
65574
  { key: "kling", name: "Kling", env: "KLING_API_KEY" },
@@ -65630,9 +65645,14 @@ var COMMAND_KEY_MAP = {
65630
65645
  XAI_API_KEY: [
65631
65646
  "agent -p xai",
65632
65647
  "generate image -p grok",
65633
- "generate video",
65648
+ "generate video -p grok",
65634
65649
  "edit image -p grok"
65635
65650
  ],
65651
+ FAL_KEY: [
65652
+ "generate video -p fal (Seedance 2.0 \u2014 default since v0.57)",
65653
+ "generate video -p fal -m fast (lower-latency variant)",
65654
+ "generate video -p fal -i <image> (image-to-video)"
65655
+ ],
65636
65656
  ELEVENLABS_API_KEY: [
65637
65657
  "generate speech",
65638
65658
  "generate sound-effect",
@@ -65644,7 +65664,7 @@ var COMMAND_KEY_MAP = {
65644
65664
  KLING_API_KEY: ["generate video -p kling"],
65645
65665
  RUNWAY_API_SECRET: ["generate video -p runway"],
65646
65666
  REPLICATE_API_TOKEN: ["generate music -p replicate"],
65647
- IMGBB_API_KEY: ["generate video -p kling (image-to-video)"]
65667
+ IMGBB_API_KEY: ["generate video -p kling/fal (image-to-video upload host)"]
65648
65668
  };
65649
65669
  var FREE_COMMANDS = [
65650
65670
  "edit silence-cut",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeframe/cli",
3
- "version": "0.57.1",
3
+ "version": "0.57.3",
4
4
  "description": "VibeFrame CLI - natural language video editing from the terminal",
5
5
  "private": false,
6
6
  "license": "MIT",
@@ -149,8 +149,8 @@
149
149
  "tsx": "^4.21.0",
150
150
  "typescript": "^5.3.3",
151
151
  "vitest": "^1.2.2",
152
- "@vibeframe/ai-providers": "0.57.1",
153
- "@vibeframe/core": "0.57.1"
152
+ "@vibeframe/ai-providers": "0.57.3",
153
+ "@vibeframe/core": "0.57.3"
154
154
  },
155
155
  "engines": {
156
156
  "node": ">=20"