@vibeframe/mcp-server 0.78.0 → 0.79.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.
Files changed (2) hide show
  1. package/dist/index.js +42 -21
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -452406,7 +452406,7 @@ function registerEditCommands(aiCommand) {
452406
452406
  aiCommand.command("silence-cut").alias("sc").description("Remove silent segments from video (FFmpeg default, or Gemini for smart detection)").argument("<video>", "Video file path").option("-o, --output <path>", "Output file path (default: <name>-cut.<ext>)").option("--noise <dB>", "Silence threshold in dB (default: -30)", "-30").option("-d, --min-duration <seconds>", "Minimum silence duration to cut (default: 0.5)", "0.5").option("--padding <seconds>", "Padding around non-silent segments (default: 0.1)", "0.1").option("--analyze-only", "Only detect silence, don't cut").option("--use-gemini", "Use Gemini Video Understanding for context-aware silence detection").option("-m, --model <model>", "Gemini model (default: flash)").option("--low-res", "Low resolution mode for longer videos (Gemini only)").option("-k, --api-key <key>", "Google API key override (or set GOOGLE_API_KEY env)").option("--dry-run", "Preview parameters without executing").addHelpText("after", `
452407
452407
  Examples:
452408
452408
  $ vibe edit silence-cut interview.mp4 -o clean.mp4
452409
- $ vibe ed sc podcast.mp4 -o trimmed.mp4 -n -25 -d 1.0
452409
+ $ vibe ed sc podcast.mp4 -o trimmed.mp4 --noise -25 --min-duration 1.0
452410
452410
  $ vibe ed sc video.mp4 --use-gemini -o smart-cut.mp4 # AI-powered detection
452411
452411
  $ vibe ed sc video.mp4 --analyze-only # Detect only, no cut
452412
452412
  $ vibe ed sc video.mp4 --dry-run --json
@@ -452507,9 +452507,9 @@ No API key needed (FFmpeg only). Use --use-gemini for smart detection (requires
452507
452507
  aiCommand.command("caption").alias("cap").description("Transcribe and burn styled captions onto video (Whisper + FFmpeg)").argument("<video>", "Video file path").option("-o, --output <path>", "Output file path (default: <name>-captioned.<ext>)").option("--style <style>", "Caption style: minimal, bold, outline, karaoke (default: bold)", "bold").option("--font-size <pixels>", "Override auto-calculated font size").option("--color <color>", "Font color (default: white)", "white").option("-l, --language <lang>", "Language code for transcription (e.g., en, ko)").option("--position <pos>", "Caption position: top, center, bottom (default: bottom)", "bottom").option("-k, --api-key <key>", "OpenAI API key (or set OPENAI_API_KEY env)").option("--dry-run", "Preview parameters without executing").addHelpText("after", `
452508
452508
  Examples:
452509
452509
  $ vibe edit caption video.mp4 -o captioned.mp4
452510
- $ vibe ed cap video.mp4 -o out.mp4 -s bold --position top
452510
+ $ vibe ed cap video.mp4 -o out.mp4 --style bold --position top
452511
452511
  $ vibe ed cap video.mp4 -o out.mp4 -l ko # Korean transcription
452512
- $ vibe ed cap video.mp4 -o out.mp4 -s karaoke # Karaoke-style
452512
+ $ vibe ed cap video.mp4 -o out.mp4 --style karaoke # Karaoke-style
452513
452513
  $ vibe ed cap video.mp4 --dry-run --json
452514
452514
 
452515
452515
  Requires: OPENAI_API_KEY (Whisper transcription) + FFmpeg`).action(async (videoPath, options) => {
@@ -453999,12 +453999,12 @@ var init_edit_cmd = __esm({
453999
453999
  `
454000
454000
  Examples:
454001
454001
  $ vibe edit silence-cut interview.mp4 -o clean.mp4
454002
- $ vibe edit caption video.mp4 -o captioned.mp4 -s bold
454002
+ $ vibe edit caption video.mp4 -o captioned.mp4 --style bold
454003
454003
  $ vibe edit grade video.mp4 -o graded.mp4 --preset cinematic-warm
454004
454004
  $ vibe edit reframe landscape.mp4 -o vertical.mp4 -a 9:16
454005
454005
  $ vibe edit image photo.png "add sunset background" -o edited.png
454006
- $ vibe edit text-overlay video.mp4 -t "Title" -s center-bold -o out.mp4
454007
- $ vibe edit noise-reduce noisy.mp4 -o clean.mp4 -s high
454006
+ $ vibe edit text-overlay video.mp4 --text "Title" --style center-bold -o out.mp4
454007
+ $ vibe edit noise-reduce noisy.mp4 -o clean.mp4 --strength high
454008
454008
  $ vibe edit fade video.mp4 -o faded.mp4 --fade-in 1 --fade-out 1
454009
454009
 
454010
454010
  API Keys (varies by subcommand):
@@ -456674,7 +456674,7 @@ async function executeMusic(options) {
456674
456674
  }
456675
456675
  }
456676
456676
  function registerMusicCommand(parent) {
456677
- parent.command("music").description("Generate background music from a text prompt (ElevenLabs or Replicate MusicGen)").argument("<prompt>", "Description of the music to generate").option("-p, --provider <provider>", "Provider: elevenlabs (default, up to 10min), replicate (MusicGen, max 30s)", "elevenlabs").option("-k, --api-key <key>", "API key (or set ELEVENLABS_API_KEY / REPLICATE_API_TOKEN env)").option("-d, --duration <seconds>", "Duration in seconds (elevenlabs: 3-600, replicate: 1-30)", "8").option("--instrumental", "Force instrumental music, no vocals (ElevenLabs only)").option("--melody <file>", "Reference melody audio file for conditioning (Replicate only)").option("--model <model>", "Model variant (Replicate only): large, stereo-large, melody-large, stereo-melody-large", "stereo-large").option("-o, --output <path>", "Output audio file path", "music.mp3").option("--no-wait", "Don't wait for generation to complete (Replicate async mode)").option("--dry-run", "Preview parameters without executing").action(async (prompt3, options) => {
456677
+ parent.command("music").description("Generate background music from a text prompt (ElevenLabs or Replicate MusicGen)").argument("<prompt>", "Description of the music to generate").option("-p, --provider <provider>", "Provider: elevenlabs (default, up to 10min), replicate (MusicGen, max 30s)", "elevenlabs").option("-k, --api-key <key>", "API key (or set ELEVENLABS_API_KEY / REPLICATE_API_TOKEN env)").option("-d, --duration <seconds>", "Duration in seconds (elevenlabs: 3-600, replicate: 1-30)", "8").option("--instrumental", "Force instrumental music, no vocals (ElevenLabs only)").option("--melody <file>", "Reference melody audio file for conditioning (Replicate only)").option("-m, --model <model>", "Model variant (Replicate only): large, stereo-large, melody-large, stereo-melody-large", "stereo-large").option("-o, --output <path>", "Output audio file path", "music.mp3").option("--no-wait", "Don't wait for generation to complete (Replicate async mode)").option("--dry-run", "Preview parameters without executing").action(async (prompt3, options) => {
456678
456678
  const startedAt = Date.now();
456679
456679
  try {
456680
456680
  rejectControlChars(prompt3);
@@ -457549,6 +457549,15 @@ Examples:
457549
457549
  if (options.output) {
457550
457550
  validateOutputPath(options.output);
457551
457551
  }
457552
+ if (options.count !== void 0) {
457553
+ const n = parseInt(options.count, 10);
457554
+ if (!Number.isFinite(n) || n < 1 || n > 10) {
457555
+ exitWithError(usageError(
457556
+ `Invalid --count: ${options.count}`,
457557
+ "Must be an integer between 1 and 10."
457558
+ ));
457559
+ }
457560
+ }
457552
457561
  const imageRegistry = getProvidersFor("image");
457553
457562
  const validProviders = [...imageRegistry.map((p) => p.name), "runway"];
457554
457563
  const providerEnvMap = Object.fromEntries(
@@ -459693,6 +459702,15 @@ Examples:
459693
459702
  if (options.output) {
459694
459703
  validateOutputPath(options.output);
459695
459704
  }
459705
+ if (options.duration !== void 0) {
459706
+ const d = parseFloat(options.duration);
459707
+ if (!Number.isFinite(d) || d <= 0 || d > 60) {
459708
+ exitWithError(usageError(
459709
+ `Invalid --duration: ${options.duration}`,
459710
+ "Must be a positive number \u2264 60 seconds."
459711
+ ));
459712
+ }
459713
+ }
459696
459714
  const validProviders = ["runway", "kling", "veo", "grok", "seedance", "fal"];
459697
459715
  const videoEnvMap = {
459698
459716
  grok: "XAI_API_KEY",
@@ -466067,11 +466085,11 @@ var exportCommand = new Command("export").description("Export project to video f
466067
466085
  ).option("--overwrite", "Overwrite output file if exists", false).option("--gap-fill <strategy>", "Gap filling strategy (black, extend)", "extend").option("--backend <name>", "Render backend: ffmpeg (default) | hyperframes (experimental)", "ffmpeg").option("--bitrate <value>", "Video bitrate (e.g. 5000k, 8M) \u2014 overrides preset").option("--fps <number>", "Frames per second (e.g. 24, 30, 60) \u2014 overrides preset").option("--resolution <WxH>", "Output resolution (e.g. 1920x1080) \u2014 overrides preset").option("--codec <codec>", "Video codec: h264 (default) | h265 | vp9 \u2014 overrides preset").option("--dry-run", "Preview parameters without executing").addHelpText("after", `
466068
466086
  Examples:
466069
466087
  $ vibe export project.vibe.json -o output.mp4
466070
- $ vibe export project.vibe.json -o output.mp4 -p high -y
466071
- $ vibe export project.vibe.json -o output.webm -f webm
466072
- $ vibe export project.vibe.json -o output.gif -f gif
466088
+ $ vibe export project.vibe.json -o output.mp4 --preset high --overwrite
466089
+ $ vibe export project.vibe.json -o output.webm --format webm
466090
+ $ vibe export project.vibe.json -o output.gif --format gif
466073
466091
  $ vibe export project.vibe.json -o out.mp4 --bitrate 5000k --fps 24 --codec h265
466074
- $ vibe export project.vibe.json -o out.mp4 -p high --fps 60
466092
+ $ vibe export project.vibe.json -o out.mp4 --preset high --fps 60
466075
466093
 
466076
466094
  Cost: Free (no API keys needed). Requires FFmpeg.
466077
466095
  GIF format: 15fps, no audio, looping. Good for previews and sharing.
@@ -467712,28 +467730,31 @@ narration / backdrop intent.
467712
467730
  ## Quick-draft path
467713
467731
 
467714
467732
  \`\`\`bash
467715
- vibe scene init my-promo -r 16:9 -d 30
467733
+ vibe init my-promo -r 16:9 -d 30
467716
467734
  vibe scene add intro --style announcement \\
467717
467735
  --headline "Ship videos, not clicks"
467718
467736
  vibe scene lint
467719
467737
  vibe render my-promo
467720
467738
  \`\`\`
467721
467739
 
467722
- \`vibe scene init\` is **idempotent** \u2014 running it on an existing
467723
- Hyperframes directory merges \`hyperframes.json\` instead of clobbering it.
467724
- Safe to invoke on user-provided projects.
467740
+ \`vibe init\` is **idempotent** \u2014 running it on an existing Hyperframes
467741
+ directory merges \`hyperframes.json\` instead of clobbering it. Safe to
467742
+ invoke on user-provided projects.
467725
467743
 
467726
467744
  ## Subcommands
467727
467745
 
467728
467746
  \`\`\`bash
467729
- vibe scene init <dir> [-r 16:9|9:16|1:1|4:5] [-d <sec>] [--visual-style "<name>"]
467747
+ # Project flow (top-level \u2014 preferred entry points)
467748
+ vibe init <dir> [-r 16:9|9:16|1:1|4:5] [-d <sec>] [--visual-style "<name>"]
467749
+ vibe build [<dir>] [--mode agent|batch|auto] # H3 dispatch
467750
+ vibe render [<dir>] [--fps 30] [--quality standard] [--format mp4]
467751
+
467752
+ # Lower-level scene authoring
467730
467753
  vibe scene list-styles [<name>] # list / show vendored visual identities
467731
467754
  vibe scene install-skill [<dir>] [--host all] # retroactive composition-rules install
467732
467755
  vibe scene add <name> --style <preset> [...]
467733
467756
  vibe scene compose-prompts [<dir>] [--beat <id>] # H2: emit plan, no LLM call
467734
467757
  vibe scene lint [<root>] [--json] [--fix]
467735
- vibe scene render [<root>] [--fps 30] [--quality standard] [--format mp4]
467736
- vibe build [<dir>] [--mode agent|batch|auto] # H3 dispatch
467737
467758
  \`\`\`
467738
467759
 
467739
467760
  ## Style presets (for \`vibe scene add --style\`)
@@ -467787,7 +467808,7 @@ and surface the error to the user.
467787
467808
  | Generate narration + image, then author scene | \`vibe scene add\` |
467788
467809
  | Generate a full scenes project from a STORYBOARD | \`vibe build\` |
467789
467810
  | Hand-tweak a single scene's animation | edit \`compositions/<file>.html\` directly |
467790
- | Render the project | \`vibe render\` *or* \`vibe scene render\` for lower-level control |
467811
+ | Render the project | \`vibe render\` (one canonical entry point) |
467791
467812
  | Lint | \`vibe scene lint\` *or* \`npx hyperframes lint\` (equivalent) |
467792
467813
 
467793
467814
  The \`vibe\` CLI adds asset generation, AI orchestration, and pipeline
@@ -467915,12 +467936,12 @@ var META = {
467915
467936
  ],
467916
467937
  relatedCommands: [
467917
467938
  "vibe init",
467939
+ "vibe build",
467940
+ "vibe render",
467918
467941
  "vibe scene list-styles",
467919
467942
  "vibe scene install-skill",
467920
467943
  "vibe scene compose-prompts",
467921
- "vibe build",
467922
467944
  "vibe scene lint",
467923
- "vibe scene render",
467924
467945
  "vibe scene add"
467925
467946
  ]
467926
467947
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeframe/mcp-server",
3
- "version": "0.78.0",
3
+ "version": "0.79.0",
4
4
  "description": "VibeFrame MCP Server - AI-native video editing via Model Context Protocol",
5
5
  "type": "module",
6
6
  "bin": {
@@ -57,8 +57,8 @@
57
57
  "tsx": "^4.21.0",
58
58
  "typescript": "^5.3.3",
59
59
  "vitest": "^1.2.2",
60
- "@vibeframe/cli": "0.78.0",
61
- "@vibeframe/core": "0.78.0"
60
+ "@vibeframe/cli": "0.79.0",
61
+ "@vibeframe/core": "0.79.0"
62
62
  },
63
63
  "engines": {
64
64
  "node": ">=20"