@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.
- package/dist/index.js +42 -21
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
454007
|
-
$ vibe edit noise-reduce noisy.mp4 -o clean.mp4
|
|
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
|
|
466071
|
-
$ vibe export project.vibe.json -o output.webm
|
|
466072
|
-
$ vibe export project.vibe.json -o output.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
|
|
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
|
|
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
|
|
467723
|
-
|
|
467724
|
-
|
|
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
|
-
|
|
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\`
|
|
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.
|
|
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.
|
|
61
|
-
"@vibeframe/core": "0.
|
|
60
|
+
"@vibeframe/cli": "0.79.0",
|
|
61
|
+
"@vibeframe/core": "0.79.0"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=20"
|