@vibeframe/mcp-server 0.81.0 → 0.83.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 +81 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -452425,7 +452425,7 @@ var init_validate = __esm({
|
|
|
452425
452425
|
import { resolve as resolve27, extname as extname7, basename as basename8 } from "node:path";
|
|
452426
452426
|
import { existsSync as existsSync39 } from "node:fs";
|
|
452427
452427
|
function registerEditCommands(aiCommand) {
|
|
452428
|
-
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", `
|
|
452428
|
+
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", "(deprecated \u2014 use `vibe detect silence`) 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", `
|
|
452429
452429
|
Examples:
|
|
452430
452430
|
$ vibe edit silence-cut interview.mp4 -o clean.mp4
|
|
452431
452431
|
$ vibe ed sc podcast.mp4 -o trimmed.mp4 --noise -25 --min-duration 1.0
|
|
@@ -452450,6 +452450,13 @@ No API key needed (FFmpeg only). Use --use-gemini for smart detection (requires
|
|
|
452450
452450
|
const name = basename8(videoPath, ext);
|
|
452451
452451
|
const outputPath = options.output || `${name}-cut${ext}`;
|
|
452452
452452
|
const useGemini = options.useGemini || false;
|
|
452453
|
+
if (options.analyzeOnly) {
|
|
452454
|
+
console.error(
|
|
452455
|
+
source_default.yellow(
|
|
452456
|
+
"\u26A0 --analyze-only is deprecated. Use `vibe detect silence` for read-only detection. Will be removed in v1.0."
|
|
452457
|
+
)
|
|
452458
|
+
);
|
|
452459
|
+
}
|
|
452453
452460
|
if (options.dryRun) {
|
|
452454
452461
|
outputSuccess({
|
|
452455
452462
|
command: "edit silence-cut",
|
|
@@ -453863,6 +453870,34 @@ var init_ai_fill_gaps = __esm({
|
|
|
453863
453870
|
}
|
|
453864
453871
|
});
|
|
453865
453872
|
|
|
453873
|
+
// ../cli/src/commands/_shared/cost-tier.ts
|
|
453874
|
+
function applyTier(cmd, tier) {
|
|
453875
|
+
cmd[COST_TIER_KEY] = tier;
|
|
453876
|
+
cmd.addHelpText("after", `
|
|
453877
|
+
Cost: ${tier} (${TIER_DESCRIPTION[tier]})
|
|
453878
|
+
`);
|
|
453879
|
+
return cmd;
|
|
453880
|
+
}
|
|
453881
|
+
function applyTiers(parent, tiers) {
|
|
453882
|
+
for (const cmd of parent.commands) {
|
|
453883
|
+
const tier = tiers[cmd.name()];
|
|
453884
|
+
if (tier) applyTier(cmd, tier);
|
|
453885
|
+
}
|
|
453886
|
+
}
|
|
453887
|
+
var TIER_DESCRIPTION, COST_TIER_KEY;
|
|
453888
|
+
var init_cost_tier = __esm({
|
|
453889
|
+
"../cli/src/commands/_shared/cost-tier.ts"() {
|
|
453890
|
+
"use strict";
|
|
453891
|
+
TIER_DESCRIPTION = {
|
|
453892
|
+
"free": "FFmpeg only, no API call",
|
|
453893
|
+
"low": "$0.01\u2013$0.10 per call",
|
|
453894
|
+
"high": "$1\u2013$5 per call",
|
|
453895
|
+
"very-high": "$5\u2013$50+ per call"
|
|
453896
|
+
};
|
|
453897
|
+
COST_TIER_KEY = /* @__PURE__ */ Symbol.for("@vibeframe/cli.costTier");
|
|
453898
|
+
}
|
|
453899
|
+
});
|
|
453900
|
+
|
|
453866
453901
|
// ../cli/src/commands/edit-cmd.ts
|
|
453867
453902
|
var edit_cmd_exports = {};
|
|
453868
453903
|
__export(edit_cmd_exports, {
|
|
@@ -454065,6 +454100,7 @@ var init_edit_cmd = __esm({
|
|
|
454065
454100
|
init_ai_fill_gaps();
|
|
454066
454101
|
init_output();
|
|
454067
454102
|
init_validate();
|
|
454103
|
+
init_cost_tier();
|
|
454068
454104
|
editCommand = new Command("edit").alias("ed").description(
|
|
454069
454105
|
"Edit and post-process media (silence-cut, caption, grade, reframe, upscale...)"
|
|
454070
454106
|
).addHelpText(
|
|
@@ -454812,6 +454848,26 @@ Run 'vibe schema edit.<command>' for structured parameter info.
|
|
|
454812
454848
|
exitWithError(generalError(`Video upscaling failed: ${msg}`));
|
|
454813
454849
|
}
|
|
454814
454850
|
});
|
|
454851
|
+
applyTiers(editCommand, {
|
|
454852
|
+
// free — FFmpeg only
|
|
454853
|
+
"noise-reduce": "free",
|
|
454854
|
+
"fade": "free",
|
|
454855
|
+
"text-overlay": "free",
|
|
454856
|
+
"interpolate": "free",
|
|
454857
|
+
// low — Whisper / single LLM call
|
|
454858
|
+
"silence-cut": "low",
|
|
454859
|
+
"caption": "low",
|
|
454860
|
+
"translate-srt": "low",
|
|
454861
|
+
"jump-cut": "low",
|
|
454862
|
+
"grade": "low",
|
|
454863
|
+
"speed-ramp": "low",
|
|
454864
|
+
// high — vision LLM or image gen
|
|
454865
|
+
"reframe": "high",
|
|
454866
|
+
"image": "high",
|
|
454867
|
+
"upscale": "high",
|
|
454868
|
+
// very-high — video gen per gap
|
|
454869
|
+
"fill-gaps": "very-high"
|
|
454870
|
+
});
|
|
454815
454871
|
}
|
|
454816
454872
|
});
|
|
454817
454873
|
|
|
@@ -460269,6 +460325,10 @@ __export(generate_exports, {
|
|
|
460269
460325
|
executeStoryboard: () => executeStoryboard,
|
|
460270
460326
|
generateCommand: () => generateCommand
|
|
460271
460327
|
});
|
|
460328
|
+
function tierLast(parent, tier) {
|
|
460329
|
+
const newest = parent.commands[parent.commands.length - 1];
|
|
460330
|
+
if (newest) applyTier(newest, tier);
|
|
460331
|
+
}
|
|
460272
460332
|
var generateCommand;
|
|
460273
460333
|
var init_generate = __esm({
|
|
460274
460334
|
"../cli/src/commands/generate.ts"() {
|
|
@@ -460287,6 +460347,7 @@ var init_generate = __esm({
|
|
|
460287
460347
|
init_video_extend();
|
|
460288
460348
|
init_image();
|
|
460289
460349
|
init_video();
|
|
460350
|
+
init_cost_tier();
|
|
460290
460351
|
init_sound_effect();
|
|
460291
460352
|
init_music_status();
|
|
460292
460353
|
init_background();
|
|
@@ -460324,18 +460385,31 @@ Run 'vibe schema generate.<command>' for structured parameter info.
|
|
|
460324
460385
|
`
|
|
460325
460386
|
);
|
|
460326
460387
|
registerImageCommand(generateCommand);
|
|
460388
|
+
tierLast(generateCommand, "high");
|
|
460327
460389
|
registerVideoCommand(generateCommand);
|
|
460390
|
+
tierLast(generateCommand, "very-high");
|
|
460328
460391
|
registerSpeechCommand(generateCommand);
|
|
460392
|
+
tierLast(generateCommand, "low");
|
|
460329
460393
|
registerSoundEffectCommand(generateCommand);
|
|
460394
|
+
tierLast(generateCommand, "low");
|
|
460330
460395
|
registerMusicCommand(generateCommand);
|
|
460396
|
+
tierLast(generateCommand, "low");
|
|
460331
460397
|
registerMusicStatusCommand(generateCommand);
|
|
460398
|
+
tierLast(generateCommand, "free");
|
|
460332
460399
|
registerStoryboardCommand(generateCommand);
|
|
460400
|
+
tierLast(generateCommand, "high");
|
|
460333
460401
|
registerMotionCommand(generateCommand);
|
|
460402
|
+
tierLast(generateCommand, "high");
|
|
460334
460403
|
registerThumbnailCommand(generateCommand);
|
|
460404
|
+
tierLast(generateCommand, "free");
|
|
460335
460405
|
registerBackgroundCommand(generateCommand);
|
|
460406
|
+
tierLast(generateCommand, "high");
|
|
460336
460407
|
registerVideoStatusCommand(generateCommand);
|
|
460408
|
+
tierLast(generateCommand, "free");
|
|
460337
460409
|
registerVideoCancelCommand(generateCommand);
|
|
460410
|
+
tierLast(generateCommand, "free");
|
|
460338
460411
|
registerVideoExtendCommand(generateCommand);
|
|
460412
|
+
tierLast(generateCommand, "very-high");
|
|
460339
460413
|
}
|
|
460340
460414
|
});
|
|
460341
460415
|
|
|
@@ -460809,6 +460883,7 @@ var init_detect = __esm({
|
|
|
460809
460883
|
init_exec_safe();
|
|
460810
460884
|
init_output();
|
|
460811
460885
|
init_validate();
|
|
460886
|
+
init_cost_tier();
|
|
460812
460887
|
detectCommand = new Command("detect").description("Auto-detect scenes, beats, and silences in media");
|
|
460813
460888
|
detectCommand.command("scenes").description("Detect scene changes in video").argument("<video>", "Video file path").option("--threshold <value>", "Scene change threshold (0-1)", "0.3").option("-o, --output <path>", "Output JSON file with timestamps").option("--project <path>", "Add scenes as clips to project").option("--dry-run", "Preview parameters without executing").action(async (videoPath, options) => {
|
|
460814
460889
|
const startedAt = Date.now();
|
|
@@ -461100,6 +461175,11 @@ var init_detect = __esm({
|
|
|
461100
461175
|
exitWithError(generalError(`Beat detection failed: ${msg}`));
|
|
461101
461176
|
}
|
|
461102
461177
|
});
|
|
461178
|
+
applyTiers(detectCommand, {
|
|
461179
|
+
"scenes": "free",
|
|
461180
|
+
"silence": "free",
|
|
461181
|
+
"beats": "free"
|
|
461182
|
+
});
|
|
461103
461183
|
}
|
|
461104
461184
|
});
|
|
461105
461185
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.83.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.83.0",
|
|
61
|
+
"@vibeframe/core": "0.83.0"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=20"
|