@vibeframe/cli 0.55.1 → 0.56.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 +27 -28
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -18508,7 +18508,7 @@ var DEFAULT_MODEL, OpenAIImageProvider, openaiImageProvider;
|
|
|
18508
18508
|
var init_OpenAIImageProvider = __esm({
|
|
18509
18509
|
"../ai-providers/dist/openai-image/OpenAIImageProvider.js"() {
|
|
18510
18510
|
"use strict";
|
|
18511
|
-
DEFAULT_MODEL = "gpt-image-
|
|
18511
|
+
DEFAULT_MODEL = "gpt-image-2";
|
|
18512
18512
|
OpenAIImageProvider = class {
|
|
18513
18513
|
constructor() {
|
|
18514
18514
|
this.id = "openai-image";
|
|
@@ -21130,9 +21130,7 @@ async function getApiKey(envVar, providerName, optionValue) {
|
|
|
21130
21130
|
}
|
|
21131
21131
|
function hasApiKey(envVar) {
|
|
21132
21132
|
loadEnv();
|
|
21133
|
-
|
|
21134
|
-
const key = getApiKeyFromConfig(envVar);
|
|
21135
|
-
return !!key;
|
|
21133
|
+
return !!process.env[envVar];
|
|
21136
21134
|
}
|
|
21137
21135
|
async function requireApiKey(envVar, providerName, cliOverride) {
|
|
21138
21136
|
const key = await getApiKey(envVar, providerName, cliOverride);
|
|
@@ -21570,9 +21568,7 @@ function buildPreset(input) {
|
|
|
21570
21568
|
const captionInner = useWordSync ? renderTranscriptSpans(transcript) : esc(captionText);
|
|
21571
21569
|
const wordCss = useWordSync ? `
|
|
21572
21570
|
${scope} .caption .word { display: inline-block; opacity: 0; }` : "";
|
|
21573
|
-
const timeline = useWordSync ?
|
|
21574
|
-
tl.to('${scope} .caption', { opacity: 0, duration: 0.4, ease: 'power2.in' }, ${(dur - 0.4).toFixed(2)});` : `tl.from('${scope} .caption', { opacity: 0, y: 28, duration: 0.6, ease: 'power2.out' }, 0.1);
|
|
21575
|
-
tl.to('${scope} .caption', { opacity: 0, duration: 0.4, ease: 'power2.in' }, ${(dur - 0.4).toFixed(2)});`;
|
|
21571
|
+
const timeline = useWordSync ? buildTranscriptTweens(transcript, `${scope} .caption .word`) : `tl.from('${scope} .caption', { opacity: 0, y: 28, duration: 0.45, ease: 'power3.out' }, 0.05);`;
|
|
21576
21572
|
return {
|
|
21577
21573
|
css: `${scope} {
|
|
21578
21574
|
position: absolute; inset: 0; width: 100%; height: 100%;
|
|
@@ -21620,8 +21616,11 @@ function buildPreset(input) {
|
|
|
21620
21616
|
}`,
|
|
21621
21617
|
body: `${backdropMarkup}
|
|
21622
21618
|
<div class="announce"><h1 id="headline">${esc(headline)}</h1></div>`,
|
|
21623
|
-
|
|
21624
|
-
|
|
21619
|
+
// Faster, snappier entrance and no tail fade-out — see the
|
|
21620
|
+
// matching note in the `simple` case above. The headline stays
|
|
21621
|
+
// on screen until the producer cuts to the next clip; the next
|
|
21622
|
+
// scene's own fade-in handles the visual transition.
|
|
21623
|
+
timeline: `tl.from('${scope} #headline', { opacity: 0, scale: 0.92, duration: 0.55, ease: 'power3.out' }, 0.05);`
|
|
21625
21624
|
};
|
|
21626
21625
|
}
|
|
21627
21626
|
case "explainer": {
|
|
@@ -25353,7 +25352,7 @@ async function executeSilenceCut(options) {
|
|
|
25353
25352
|
return { success: false, error: `Video not found: ${videoPath}` };
|
|
25354
25353
|
}
|
|
25355
25354
|
if (!commandExists("ffmpeg")) {
|
|
25356
|
-
return { success: false, error: "FFmpeg not found.
|
|
25355
|
+
return { success: false, error: "FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details." };
|
|
25357
25356
|
}
|
|
25358
25357
|
const method = useGemini ? "gemini" : "ffmpeg";
|
|
25359
25358
|
try {
|
|
@@ -25503,7 +25502,7 @@ async function executeJumpCut(options) {
|
|
|
25503
25502
|
return { success: false, error: `Video not found: ${videoPath}` };
|
|
25504
25503
|
}
|
|
25505
25504
|
if (!commandExists("ffmpeg")) {
|
|
25506
|
-
return { success: false, error: "FFmpeg not found.
|
|
25505
|
+
return { success: false, error: "FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details." };
|
|
25507
25506
|
}
|
|
25508
25507
|
const openaiKey = apiKey || process.env.OPENAI_API_KEY;
|
|
25509
25508
|
if (!openaiKey) {
|
|
@@ -25648,7 +25647,7 @@ async function executeCaption(options) {
|
|
|
25648
25647
|
return { success: false, error: `Video not found: ${videoPath}` };
|
|
25649
25648
|
}
|
|
25650
25649
|
if (!commandExists("ffmpeg")) {
|
|
25651
|
-
return { success: false, error: "FFmpeg not found.
|
|
25650
|
+
return { success: false, error: "FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details." };
|
|
25652
25651
|
}
|
|
25653
25652
|
const openaiKey = apiKey || process.env.OPENAI_API_KEY;
|
|
25654
25653
|
if (!openaiKey) {
|
|
@@ -25786,7 +25785,7 @@ async function executeNoiseReduce(options) {
|
|
|
25786
25785
|
return { success: false, error: `File not found: ${inputPath}` };
|
|
25787
25786
|
}
|
|
25788
25787
|
if (!commandExists("ffmpeg")) {
|
|
25789
|
-
return { success: false, error: "FFmpeg not found.
|
|
25788
|
+
return { success: false, error: "FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details." };
|
|
25790
25789
|
}
|
|
25791
25790
|
try {
|
|
25792
25791
|
const inputDuration = await getVideoDuration(inputPath);
|
|
@@ -25840,7 +25839,7 @@ async function executeFade(options) {
|
|
|
25840
25839
|
return { success: false, error: `Video not found: ${videoPath}` };
|
|
25841
25840
|
}
|
|
25842
25841
|
if (!commandExists("ffmpeg")) {
|
|
25843
|
-
return { success: false, error: "FFmpeg not found.
|
|
25842
|
+
return { success: false, error: "FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details." };
|
|
25844
25843
|
}
|
|
25845
25844
|
try {
|
|
25846
25845
|
const totalDuration = await getVideoDuration(videoPath);
|
|
@@ -26066,7 +26065,7 @@ async function applyTextOverlays(options) {
|
|
|
26066
26065
|
return { success: false, error: `Video not found: ${absVideoPath}` };
|
|
26067
26066
|
}
|
|
26068
26067
|
if (!commandExists("ffmpeg")) {
|
|
26069
|
-
return { success: false, error: "FFmpeg not found.
|
|
26068
|
+
return { success: false, error: "FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details." };
|
|
26070
26069
|
}
|
|
26071
26070
|
let hasDrawtext = true;
|
|
26072
26071
|
try {
|
|
@@ -28076,8 +28075,8 @@ var init_provider_resolver = __esm({
|
|
|
28076
28075
|
"use strict";
|
|
28077
28076
|
init_api_key();
|
|
28078
28077
|
IMAGE_PROVIDERS = [
|
|
28079
|
-
{ name: "gemini", envVar: "GOOGLE_API_KEY", label: "Gemini" },
|
|
28080
28078
|
{ name: "openai", envVar: "OPENAI_API_KEY", label: "OpenAI" },
|
|
28079
|
+
{ name: "gemini", envVar: "GOOGLE_API_KEY", label: "Gemini" },
|
|
28081
28080
|
{ name: "grok", envVar: "XAI_API_KEY", label: "Grok" }
|
|
28082
28081
|
];
|
|
28083
28082
|
VIDEO_PROVIDERS = [
|
|
@@ -28328,7 +28327,7 @@ function _registerImageCommands(aiCommand) {
|
|
|
28328
28327
|
exitWithError(notFoundError(absVideoPath));
|
|
28329
28328
|
}
|
|
28330
28329
|
if (!commandExists("ffmpeg")) {
|
|
28331
|
-
exitWithError(generalError("FFmpeg not found.
|
|
28330
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
28332
28331
|
}
|
|
28333
28332
|
const apiKey2 = await getApiKey("GOOGLE_API_KEY", "Google", options.apiKey);
|
|
28334
28333
|
if (!apiKey2) {
|
|
@@ -28787,7 +28786,7 @@ async function executeThumbnailBestFrame(options) {
|
|
|
28787
28786
|
return { success: false, error: `Video not found: ${videoPath}` };
|
|
28788
28787
|
}
|
|
28789
28788
|
if (!commandExists("ffmpeg")) {
|
|
28790
|
-
return { success: false, error: "FFmpeg not found.
|
|
28789
|
+
return { success: false, error: "FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details." };
|
|
28791
28790
|
}
|
|
28792
28791
|
const googleKey = apiKey || process.env.GOOGLE_API_KEY;
|
|
28793
28792
|
if (!googleKey) {
|
|
@@ -30917,7 +30916,7 @@ No API key needed (FFmpeg only). Use --use-gemini for smart detection (requires
|
|
|
30917
30916
|
exitWithError(notFoundError(absVideoPath));
|
|
30918
30917
|
}
|
|
30919
30918
|
if (!commandExists("ffmpeg")) {
|
|
30920
|
-
exitWithError(generalError("FFmpeg not found.
|
|
30919
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
30921
30920
|
}
|
|
30922
30921
|
const ext = extname7(videoPath);
|
|
30923
30922
|
const name = basename11(videoPath, ext);
|
|
@@ -31011,7 +31010,7 @@ Requires: OPENAI_API_KEY (Whisper transcription) + FFmpeg`).action(async (videoP
|
|
|
31011
31010
|
exitWithError(notFoundError(absVideoPath));
|
|
31012
31011
|
}
|
|
31013
31012
|
if (!commandExists("ffmpeg")) {
|
|
31014
|
-
exitWithError(generalError("FFmpeg not found.
|
|
31013
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
31015
31014
|
}
|
|
31016
31015
|
if (options.dryRun) {
|
|
31017
31016
|
outputResult({
|
|
@@ -31085,7 +31084,7 @@ Requires: OPENAI_API_KEY (Whisper transcription) + FFmpeg`).action(async (videoP
|
|
|
31085
31084
|
exitWithError(notFoundError(absInputPath));
|
|
31086
31085
|
}
|
|
31087
31086
|
if (!commandExists("ffmpeg")) {
|
|
31088
|
-
exitWithError(generalError("FFmpeg not found.
|
|
31087
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
31089
31088
|
}
|
|
31090
31089
|
if (options.dryRun) {
|
|
31091
31090
|
outputResult({
|
|
@@ -31144,7 +31143,7 @@ Requires: OPENAI_API_KEY (Whisper transcription) + FFmpeg`).action(async (videoP
|
|
|
31144
31143
|
exitWithError(notFoundError(absVideoPath));
|
|
31145
31144
|
}
|
|
31146
31145
|
if (!commandExists("ffmpeg")) {
|
|
31147
|
-
exitWithError(generalError("FFmpeg not found.
|
|
31146
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
31148
31147
|
}
|
|
31149
31148
|
if (options.dryRun) {
|
|
31150
31149
|
outputResult({
|
|
@@ -31281,7 +31280,7 @@ Requires: OPENAI_API_KEY (Whisper transcription) + FFmpeg`).action(async (videoP
|
|
|
31281
31280
|
exitWithError(notFoundError(absVideoPath));
|
|
31282
31281
|
}
|
|
31283
31282
|
if (!commandExists("ffmpeg")) {
|
|
31284
|
-
exitWithError(generalError("FFmpeg not found.
|
|
31283
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
31285
31284
|
}
|
|
31286
31285
|
if (options.dryRun) {
|
|
31287
31286
|
const fillers2 = options.fillers ? options.fillers.split(",").map((f) => f.trim()) : void 0;
|
|
@@ -33514,7 +33513,7 @@ Analyze both what is SHOWN (visual cues, actions, expressions) and what is SAID
|
|
|
33514
33513
|
try {
|
|
33515
33514
|
if (!commandExists("ffmpeg")) {
|
|
33516
33515
|
audioSpinner.fail("FFmpeg not found");
|
|
33517
|
-
exitWithError(generalError("FFmpeg not found.
|
|
33516
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
33518
33517
|
}
|
|
33519
33518
|
const { stdout: probeOut } = await execSafe("ffprobe", [
|
|
33520
33519
|
"-v",
|
|
@@ -33703,7 +33702,7 @@ Analyze both what is SHOWN (visual cues, actions, expressions) and what is SAID
|
|
|
33703
33702
|
return;
|
|
33704
33703
|
}
|
|
33705
33704
|
if (!commandExists("ffmpeg")) {
|
|
33706
|
-
exitWithError(generalError("FFmpeg not found.
|
|
33705
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
33707
33706
|
}
|
|
33708
33707
|
const targetDuration = parseInt(options.duration);
|
|
33709
33708
|
const shortCount = parseInt(options.count);
|
|
@@ -46843,7 +46842,7 @@ ${segmentTexts}`,
|
|
|
46843
46842
|
return;
|
|
46844
46843
|
}
|
|
46845
46844
|
if (!commandExists("ffmpeg")) {
|
|
46846
|
-
exitWithError(generalError("FFmpeg not found.
|
|
46845
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
46847
46846
|
}
|
|
46848
46847
|
const spinner2 = ora("Processing audio ducking...").start();
|
|
46849
46848
|
const absMusic = resolve41(process.cwd(), musicPath);
|
|
@@ -53225,7 +53224,7 @@ init_source();
|
|
|
53225
53224
|
// package.json
|
|
53226
53225
|
var package_default = {
|
|
53227
53226
|
name: "@vibeframe/cli",
|
|
53228
|
-
version: "0.
|
|
53227
|
+
version: "0.56.0",
|
|
53229
53228
|
description: "VibeFrame CLI - natural language video editing from the terminal",
|
|
53230
53229
|
private: false,
|
|
53231
53230
|
license: "MIT",
|
|
@@ -55805,7 +55804,7 @@ function registerBrollCommand(ai) {
|
|
|
55805
55804
|
exitWithError(authError("ANTHROPIC_API_KEY", "Anthropic"));
|
|
55806
55805
|
}
|
|
55807
55806
|
if (!commandExists("ffmpeg")) {
|
|
55808
|
-
exitWithError(generalError("FFmpeg not found.
|
|
55807
|
+
exitWithError(generalError("FFmpeg not found. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux). Run `vibe doctor` for details."));
|
|
55809
55808
|
}
|
|
55810
55809
|
console.log();
|
|
55811
55810
|
console.log(source_default.bold.cyan("\u{1F3AC} B-Roll Matcher Pipeline"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.56.0",
|
|
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/
|
|
153
|
-
"@vibeframe/
|
|
152
|
+
"@vibeframe/core": "0.56.0",
|
|
153
|
+
"@vibeframe/ai-providers": "0.56.0"
|
|
154
154
|
},
|
|
155
155
|
"engines": {
|
|
156
156
|
"node": ">=20"
|