@vibeframe/mcp-server 0.113.5 → 0.113.6
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 +32 -26
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -473791,7 +473791,7 @@ __export(scene_build_exports, {
|
|
|
473791
473791
|
resolveSceneBuildMode: () => resolveSceneBuildMode
|
|
473792
473792
|
});
|
|
473793
473793
|
import { existsSync as existsSync35, readFileSync as readFileSync12 } from "node:fs";
|
|
473794
|
-
import { copyFile as copyFile4, mkdir as mkdir13, readFile as readFile18, writeFile as writeFile20 } from "node:fs/promises";
|
|
473794
|
+
import { copyFile as copyFile4, mkdir as mkdir13, readFile as readFile18, rm as rm3, writeFile as writeFile20 } from "node:fs/promises";
|
|
473795
473795
|
import { dirname as dirname18, join as join31, resolve as resolve33 } from "node:path";
|
|
473796
473796
|
async function executeSceneBuild(opts) {
|
|
473797
473797
|
const startedAt = Date.now();
|
|
@@ -473799,9 +473799,9 @@ async function executeSceneBuild(opts) {
|
|
|
473799
473799
|
const onProgress = opts.onProgress ?? (() => {
|
|
473800
473800
|
});
|
|
473801
473801
|
const mode = resolveSceneBuildMode(opts);
|
|
473802
|
-
|
|
473802
|
+
const selectedStage = opts.stage ?? (opts.skipRender ? "sync" : "all");
|
|
473803
473803
|
const skipVideoStopsRender = (opts.skipVideo ?? false) && (selectedStage === "all" || selectedStage === "render");
|
|
473804
|
-
|
|
473804
|
+
const effectiveSkipRender = (opts.skipRender ?? false) || skipVideoStopsRender;
|
|
473805
473805
|
const stageReports = createEmptyStageReports();
|
|
473806
473806
|
const warnings = [];
|
|
473807
473807
|
const retryWith = [];
|
|
@@ -474297,7 +474297,7 @@ async function executeSceneBuild(opts) {
|
|
|
474297
474297
|
});
|
|
474298
474298
|
}
|
|
474299
474299
|
}
|
|
474300
|
-
if (selectedStage === "sync" ||
|
|
474300
|
+
if (selectedStage === "sync" || effectiveSkipRender) {
|
|
474301
474301
|
return finishBuildResult({
|
|
474302
474302
|
success: true,
|
|
474303
474303
|
phase: "sync-only",
|
|
@@ -474589,6 +474589,10 @@ async function dispatchNarration(beat, ctx) {
|
|
|
474589
474589
|
}
|
|
474590
474590
|
await mkdir13(dirname18(abs), { recursive: true });
|
|
474591
474591
|
await writeFile20(abs, result.audioBuffer);
|
|
474592
|
+
for (const otherExt of ["mp3", "wav"]) {
|
|
474593
|
+
const sibling = join31(ctx.projectDir, `assets/narration-${beat.id}.${otherExt}`);
|
|
474594
|
+
if (sibling !== abs && existsSync35(sibling)) await rm3(sibling, { force: true });
|
|
474595
|
+
}
|
|
474592
474596
|
await mkdir13(dirname18(cacheAbs), { recursive: true });
|
|
474593
474597
|
await writeFile20(cacheAbs, result.audioBuffer);
|
|
474594
474598
|
await writeAssetMetadata({
|
|
@@ -474621,11 +474625,12 @@ async function dispatchNarration(beat, ctx) {
|
|
|
474621
474625
|
}
|
|
474622
474626
|
function characterSheetPrompt(name, description) {
|
|
474623
474627
|
return [
|
|
474624
|
-
`Character
|
|
474625
|
-
"
|
|
474626
|
-
"
|
|
474628
|
+
`Character reference sheet of an original fictional character named ${name}: ${description}.`,
|
|
474629
|
+
"Top row: ONE large, sharp, evenly-lit frontal close-up of the FACE (head and shoulders) as the primary identity anchor \u2014 clear eyes, nose, jawline, and skin detail.",
|
|
474630
|
+
"Bottom row: three full-body views side by side \u2014 front, side profile, and back.",
|
|
474631
|
+
"The face, facial features, hairstyle, hair color, outfit, and body proportions must be IDENTICAL across the close-up and all three views.",
|
|
474627
474632
|
"Plain light-grey studio background, even neutral lighting, no props.",
|
|
474628
|
-
"Photorealistic
|
|
474633
|
+
"Photorealistic, professional concept-art character sheet layout."
|
|
474629
474634
|
].join(" ");
|
|
474630
474635
|
}
|
|
474631
474636
|
async function buildCharacters(characters, ctx) {
|
|
@@ -474964,7 +474969,8 @@ async function ensureKeyframe(beat, ctx, keyframeCue, characterRefsRel) {
|
|
|
474964
474969
|
imageSize: size,
|
|
474965
474970
|
imageQuality: ctx.imageQuality
|
|
474966
474971
|
};
|
|
474967
|
-
const
|
|
474972
|
+
const identityLock = "Keep the EXACT same person and face as the reference image(s): identical facial features (eyes, nose shape, jawline), skin tone and complexion, hairstyle, hair color, and wardrobe. Do not restyle or change the face. Change only the scene, pose, framing, and lighting. ";
|
|
474973
|
+
const generated = sheetBuffers.length > 0 ? await editKeyframeImage(`${identityLock}${keyframeCue}`, sheetBuffers, imgCtx, ratio) : await generateBackdropImage(keyframeCue, imgCtx, ratio);
|
|
474968
474974
|
if (!generated.success) return { status: "failed", error: generated.error };
|
|
474969
474975
|
await mkdir13(dirname18(abs), { recursive: true });
|
|
474970
474976
|
await writeFile20(abs, generated.buffer);
|
|
@@ -476634,8 +476640,8 @@ async function executeJumpCut(options) {
|
|
|
476634
476640
|
};
|
|
476635
476641
|
} finally {
|
|
476636
476642
|
try {
|
|
476637
|
-
const { rm:
|
|
476638
|
-
await
|
|
476643
|
+
const { rm: rm7 } = await import("node:fs/promises");
|
|
476644
|
+
await rm7(tmpDir, { recursive: true, force: true });
|
|
476639
476645
|
} catch {
|
|
476640
476646
|
}
|
|
476641
476647
|
}
|
|
@@ -476712,7 +476718,7 @@ __export(remotion_exports, {
|
|
|
476712
476718
|
wrapComponentWithImage: () => wrapComponentWithImage,
|
|
476713
476719
|
wrapComponentWithVideo: () => wrapComponentWithVideo
|
|
476714
476720
|
});
|
|
476715
|
-
import { writeFile as writeFile23, mkdir as mkdir15, rm as
|
|
476721
|
+
import { writeFile as writeFile23, mkdir as mkdir15, rm as rm4, copyFile as copyFile5 } from "node:fs/promises";
|
|
476716
476722
|
import { existsSync as existsSync39 } from "node:fs";
|
|
476717
476723
|
import { join as join34 } from "node:path";
|
|
476718
476724
|
import { tmpdir as tmpdir3 } from "node:os";
|
|
@@ -476906,7 +476912,7 @@ async function renderMotion(options) {
|
|
|
476906
476912
|
stderr: ${stderr}` : ""}`);
|
|
476907
476913
|
return { success: false, error: `Remotion render failed: ${msg}` };
|
|
476908
476914
|
} finally {
|
|
476909
|
-
await
|
|
476915
|
+
await rm4(dir, { recursive: true, force: true }).catch(() => {
|
|
476910
476916
|
});
|
|
476911
476917
|
}
|
|
476912
476918
|
}
|
|
@@ -476998,7 +477004,7 @@ async function renderWithEmbeddedImage(options) {
|
|
|
476998
477004
|
const msg = error instanceof Error ? error.message : String(error);
|
|
476999
477005
|
return { success: false, error: `Remotion image embed render failed: ${msg}` };
|
|
477000
477006
|
} finally {
|
|
477001
|
-
await
|
|
477007
|
+
await rm4(dir, { recursive: true, force: true }).catch(() => {
|
|
477002
477008
|
});
|
|
477003
477009
|
}
|
|
477004
477010
|
}
|
|
@@ -477075,14 +477081,14 @@ async function renderWithEmbeddedVideo(options) {
|
|
|
477075
477081
|
"-shortest",
|
|
477076
477082
|
mp4Out
|
|
477077
477083
|
], { timeout: 12e4 });
|
|
477078
|
-
await
|
|
477084
|
+
await rm4(mp4VideoOnly, { force: true }).catch(() => {
|
|
477079
477085
|
});
|
|
477080
477086
|
return { success: true, outputPath: mp4Out };
|
|
477081
477087
|
} catch (error) {
|
|
477082
477088
|
const msg = error instanceof Error ? error.message : String(error);
|
|
477083
477089
|
return { success: false, error: `Remotion video embed render failed: ${msg}` };
|
|
477084
477090
|
} finally {
|
|
477085
|
-
await
|
|
477091
|
+
await rm4(dir, { recursive: true, force: true }).catch(() => {
|
|
477086
477092
|
});
|
|
477087
477093
|
}
|
|
477088
477094
|
}
|
|
@@ -477646,8 +477652,8 @@ SRT saved to: ${outputSrtPath2}`
|
|
|
477646
477652
|
};
|
|
477647
477653
|
} finally {
|
|
477648
477654
|
try {
|
|
477649
|
-
const { rm:
|
|
477650
|
-
await
|
|
477655
|
+
const { rm: rm7 } = await import("node:fs/promises");
|
|
477656
|
+
await rm7(tmpDir, { recursive: true, force: true });
|
|
477651
477657
|
} catch {
|
|
477652
477658
|
}
|
|
477653
477659
|
}
|
|
@@ -480265,7 +480271,7 @@ __export(project_builder_exports, {
|
|
|
480265
480271
|
buildTempProject: () => buildTempProject,
|
|
480266
480272
|
resolveSourceUrl: () => resolveSourceUrl
|
|
480267
480273
|
});
|
|
480268
|
-
import { mkdtemp as mkdtemp4, mkdir as mkdir18, copyFile as copyFile6, writeFile as writeFile28, rm as
|
|
480274
|
+
import { mkdtemp as mkdtemp4, mkdir as mkdir18, copyFile as copyFile6, writeFile as writeFile28, rm as rm5, readdir as readdir5 } from "node:fs/promises";
|
|
480269
480275
|
import { existsSync as existsSync49 } from "node:fs";
|
|
480270
480276
|
import { tmpdir as tmpdir4 } from "node:os";
|
|
480271
480277
|
import { createRequire } from "node:module";
|
|
@@ -480292,7 +480298,7 @@ async function buildTempProject(state, projectFileDir) {
|
|
|
480292
480298
|
await writeFile28(path13.join(dir, "index.html"), html, "utf-8");
|
|
480293
480299
|
return {
|
|
480294
480300
|
dir,
|
|
480295
|
-
cleanup: () =>
|
|
480301
|
+
cleanup: () => rm5(dir, { recursive: true, force: true })
|
|
480296
480302
|
};
|
|
480297
480303
|
}
|
|
480298
480304
|
async function copyLottieRuntime(tempDir) {
|
|
@@ -490570,7 +490576,7 @@ init_api_key();
|
|
|
490570
490576
|
init_exec_safe();
|
|
490571
490577
|
init_remotion();
|
|
490572
490578
|
import { resolve as resolve45, dirname as dirname26, basename as basename13 } from "node:path";
|
|
490573
|
-
import { writeFile as writeFile30, mkdir as mkdir21, rm as
|
|
490579
|
+
import { writeFile as writeFile30, mkdir as mkdir21, rm as rm6 } from "node:fs/promises";
|
|
490574
490580
|
import { existsSync as existsSync51 } from "node:fs";
|
|
490575
490581
|
import { tmpdir as tmpdir5 } from "node:os";
|
|
490576
490582
|
var ASS_STYLES = ["karaoke-sweep", "typewriter"];
|
|
@@ -490739,13 +490745,13 @@ async function executeAnimatedCaption(options) {
|
|
|
490739
490745
|
], { timeout: 12e4 });
|
|
490740
490746
|
const apiKey = await getApiKey("OPENAI_API_KEY", "OpenAI");
|
|
490741
490747
|
if (!apiKey) {
|
|
490742
|
-
await
|
|
490748
|
+
await rm6(tmpAudioDir, { recursive: true, force: true }).catch(() => {
|
|
490743
490749
|
});
|
|
490744
490750
|
return { success: false, error: "OPENAI_API_KEY required for Whisper transcription. Run 'vibe setup' or set OPENAI_API_KEY in .env" };
|
|
490745
490751
|
}
|
|
490746
490752
|
const transcript = await transcribeWithWords(audioPath, apiKey, language);
|
|
490747
490753
|
if (!transcript.words || transcript.words.length === 0) {
|
|
490748
|
-
await
|
|
490754
|
+
await rm6(tmpAudioDir, { recursive: true, force: true }).catch(() => {
|
|
490749
490755
|
});
|
|
490750
490756
|
return { success: false, error: "No words detected in transcription" };
|
|
490751
490757
|
}
|
|
@@ -490799,12 +490805,12 @@ async function executeAnimatedCaption(options) {
|
|
|
490799
490805
|
outputPath: absOutputPath
|
|
490800
490806
|
});
|
|
490801
490807
|
if (!renderResult.success) {
|
|
490802
|
-
await
|
|
490808
|
+
await rm6(tmpAudioDir, { recursive: true, force: true }).catch(() => {
|
|
490803
490809
|
});
|
|
490804
490810
|
return { success: false, error: renderResult.error };
|
|
490805
490811
|
}
|
|
490806
490812
|
}
|
|
490807
|
-
await
|
|
490813
|
+
await rm6(tmpAudioDir, { recursive: true, force: true }).catch(() => {
|
|
490808
490814
|
});
|
|
490809
490815
|
return {
|
|
490810
490816
|
success: true,
|
|
@@ -499731,7 +499737,7 @@ var server2 = new Server(
|
|
|
499731
499737
|
{
|
|
499732
499738
|
name: "vibeframe",
|
|
499733
499739
|
// Stamped with the package version by build.js at bundle time.
|
|
499734
|
-
version: "0.113.
|
|
499740
|
+
version: "0.113.6"
|
|
499735
499741
|
},
|
|
499736
499742
|
{
|
|
499737
499743
|
capabilities: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.113.
|
|
3
|
+
"version": "0.113.6",
|
|
4
4
|
"description": "VibeFrame MCP Server - AI-native video editing via Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
"tsx": "^4.21.0",
|
|
61
61
|
"typescript": "^5.3.3",
|
|
62
62
|
"vitest": "^1.2.2",
|
|
63
|
-
"@vibeframe/cli": "0.113.
|
|
64
|
-
"@vibeframe/core": "0.113.
|
|
63
|
+
"@vibeframe/cli": "0.113.6",
|
|
64
|
+
"@vibeframe/core": "0.113.6"
|
|
65
65
|
},
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=20"
|