@vibeframe/cli 0.53.0 → 0.55.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/commands/_shared/scene-audio-mux.d.ts +75 -0
- package/dist/commands/_shared/scene-audio-mux.d.ts.map +1 -0
- package/dist/commands/_shared/scene-audio-mux.js +159 -0
- package/dist/commands/_shared/scene-audio-mux.js.map +1 -0
- package/dist/commands/_shared/scene-audio-mux.test.d.ts +7 -0
- package/dist/commands/_shared/scene-audio-mux.test.d.ts.map +1 -0
- package/dist/commands/_shared/scene-audio-mux.test.js +94 -0
- package/dist/commands/_shared/scene-audio-mux.test.js.map +1 -0
- package/dist/commands/_shared/scene-audio-scan.d.ts +94 -0
- package/dist/commands/_shared/scene-audio-scan.d.ts.map +1 -0
- package/dist/commands/_shared/scene-audio-scan.js +144 -0
- package/dist/commands/_shared/scene-audio-scan.js.map +1 -0
- package/dist/commands/_shared/scene-audio-scan.test.d.ts +6 -0
- package/dist/commands/_shared/scene-audio-scan.test.d.ts.map +1 -0
- package/dist/commands/_shared/scene-audio-scan.test.js +190 -0
- package/dist/commands/_shared/scene-audio-scan.test.js.map +1 -0
- package/dist/commands/_shared/scene-html-emit.d.ts +35 -0
- package/dist/commands/_shared/scene-html-emit.d.ts.map +1 -1
- package/dist/commands/_shared/scene-html-emit.js +85 -16
- package/dist/commands/_shared/scene-html-emit.js.map +1 -1
- package/dist/commands/_shared/scene-html-emit.test.js +194 -1
- package/dist/commands/_shared/scene-html-emit.test.js.map +1 -1
- package/dist/commands/_shared/scene-project.d.ts +1 -1
- package/dist/commands/_shared/scene-project.d.ts.map +1 -1
- package/dist/commands/_shared/scene-render.d.ts +6 -0
- package/dist/commands/_shared/scene-render.d.ts.map +1 -1
- package/dist/commands/_shared/scene-render.js +41 -1
- package/dist/commands/_shared/scene-render.js.map +1 -1
- package/dist/commands/_shared/tts-resolve.d.ts +75 -0
- package/dist/commands/_shared/tts-resolve.d.ts.map +1 -0
- package/dist/commands/_shared/tts-resolve.js +89 -0
- package/dist/commands/_shared/tts-resolve.js.map +1 -0
- package/dist/commands/_shared/tts-resolve.test.d.ts +6 -0
- package/dist/commands/_shared/tts-resolve.test.d.ts.map +1 -0
- package/dist/commands/_shared/tts-resolve.test.js +147 -0
- package/dist/commands/_shared/tts-resolve.test.js.map +1 -0
- package/dist/commands/scene.d.ts +27 -1
- package/dist/commands/scene.d.ts.map +1 -1
- package/dist/commands/scene.js +120 -13
- package/dist/commands/scene.js.map +1 -1
- package/dist/commands/scene.test.js +87 -1
- package/dist/commands/scene.test.js.map +1 -1
- package/dist/utils/provider-resolver.d.ts.map +1 -1
- package/dist/utils/provider-resolver.js +6 -2
- package/dist/utils/provider-resolver.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { mkdtemp, readFile, access } from "node:fs/promises";
|
|
2
|
+
import { mkdtemp, readFile, writeFile, access } from "node:fs/promises";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
5
|
import { scaffoldSceneProject } from "./_shared/scene-project.js";
|
|
@@ -130,4 +130,90 @@ describe("executeSceneAdd — offline (--no-audio --no-image)", () => {
|
|
|
130
130
|
expect(html).toContain('data-height="1920"');
|
|
131
131
|
});
|
|
132
132
|
});
|
|
133
|
+
describe("executeSceneAdd — narration-file path", () => {
|
|
134
|
+
it("copies an external wav into assets/ and skips TTS", async () => {
|
|
135
|
+
const projectDir = await makeProject();
|
|
136
|
+
// Minimal valid 8-byte stub — getAudioDuration may fail on non-real wav
|
|
137
|
+
// but the pathway under test is just file copy + skip-TTS.
|
|
138
|
+
const externalWav = join(projectDir, "external.wav");
|
|
139
|
+
await writeFile(externalWav, Buffer.from([82, 73, 70, 70, 0, 0, 0, 0]));
|
|
140
|
+
const result = await executeSceneAdd({
|
|
141
|
+
name: "from-file",
|
|
142
|
+
preset: "simple",
|
|
143
|
+
narrationFile: externalWav,
|
|
144
|
+
duration: 4,
|
|
145
|
+
projectDir,
|
|
146
|
+
skipImage: true,
|
|
147
|
+
skipTranscribe: true,
|
|
148
|
+
});
|
|
149
|
+
expect(result.success).toBe(true);
|
|
150
|
+
expect(result.audioPath).toBeDefined();
|
|
151
|
+
const copied = resolve(projectDir, "assets/narration-from-file.wav");
|
|
152
|
+
expect(await pathExists(copied)).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
it("returns an error for missing narration file", async () => {
|
|
155
|
+
const projectDir = await makeProject();
|
|
156
|
+
const result = await executeSceneAdd({
|
|
157
|
+
name: "x",
|
|
158
|
+
preset: "simple",
|
|
159
|
+
narrationFile: "/does/not/exist.wav",
|
|
160
|
+
duration: 3,
|
|
161
|
+
projectDir,
|
|
162
|
+
skipImage: true,
|
|
163
|
+
skipTranscribe: true,
|
|
164
|
+
});
|
|
165
|
+
expect(result.success).toBe(false);
|
|
166
|
+
expect(result.error).toMatch(/Narration file not found/);
|
|
167
|
+
});
|
|
168
|
+
it("rejects unsupported audio extensions", async () => {
|
|
169
|
+
const projectDir = await makeProject();
|
|
170
|
+
const externalFlac = join(projectDir, "audio.flac");
|
|
171
|
+
await writeFile(externalFlac, Buffer.from([1, 2, 3]));
|
|
172
|
+
const result = await executeSceneAdd({
|
|
173
|
+
name: "x",
|
|
174
|
+
preset: "simple",
|
|
175
|
+
narrationFile: externalFlac,
|
|
176
|
+
duration: 3,
|
|
177
|
+
projectDir,
|
|
178
|
+
skipImage: true,
|
|
179
|
+
skipTranscribe: true,
|
|
180
|
+
});
|
|
181
|
+
expect(result.success).toBe(false);
|
|
182
|
+
expect(result.error).toMatch(/Unsupported narration file extension/);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe("executeSceneAdd — transcribe", () => {
|
|
186
|
+
it("does not emit transcript when skipTranscribe is true", async () => {
|
|
187
|
+
const projectDir = await makeProject();
|
|
188
|
+
const externalWav = join(projectDir, "ext.wav");
|
|
189
|
+
await writeFile(externalWav, Buffer.from([82, 73, 70, 70, 0, 0, 0, 0]));
|
|
190
|
+
const result = await executeSceneAdd({
|
|
191
|
+
name: "no-transcribe",
|
|
192
|
+
preset: "simple",
|
|
193
|
+
narrationFile: externalWav,
|
|
194
|
+
duration: 3,
|
|
195
|
+
projectDir,
|
|
196
|
+
skipImage: true,
|
|
197
|
+
skipTranscribe: true,
|
|
198
|
+
});
|
|
199
|
+
expect(result.success).toBe(true);
|
|
200
|
+
expect(result.transcriptPath).toBeUndefined();
|
|
201
|
+
expect(result.transcriptWordCount).toBeUndefined();
|
|
202
|
+
const transcriptFile = resolve(projectDir, "assets/transcript-no-transcribe.json");
|
|
203
|
+
expect(await pathExists(transcriptFile)).toBe(false);
|
|
204
|
+
});
|
|
205
|
+
it("does not emit transcript when there's no audio to transcribe", async () => {
|
|
206
|
+
const projectDir = await makeProject();
|
|
207
|
+
const result = await executeSceneAdd({
|
|
208
|
+
name: "silent",
|
|
209
|
+
preset: "simple",
|
|
210
|
+
duration: 3,
|
|
211
|
+
projectDir,
|
|
212
|
+
skipAudio: true,
|
|
213
|
+
skipImage: true,
|
|
214
|
+
});
|
|
215
|
+
expect(result.success).toBe(true);
|
|
216
|
+
expect(result.transcriptPath).toBeUndefined();
|
|
217
|
+
});
|
|
218
|
+
});
|
|
133
219
|
//# sourceMappingURL=scene.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.test.js","sourceRoot":"","sources":["../../src/commands/scene.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"scene.test.js","sourceRoot":"","sources":["../../src/commands/scene.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"provider-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6CH;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAY1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBxC"}
|
|
@@ -15,8 +15,12 @@ const VIDEO_PROVIDERS = [
|
|
|
15
15
|
{ name: "kling", envVar: "KLING_API_KEY", label: "Kling" },
|
|
16
16
|
{ name: "runway", envVar: "RUNWAY_API_SECRET", label: "Runway" },
|
|
17
17
|
];
|
|
18
|
+
// `kokoro` runs locally with no API key — it's the always-available fallback
|
|
19
|
+
// behind ElevenLabs. Listing it last keeps existing key-holding users on
|
|
20
|
+
// ElevenLabs by default while letting key-less users land on Kokoro.
|
|
18
21
|
const SPEECH_PROVIDERS = [
|
|
19
22
|
{ name: "elevenlabs", envVar: "ELEVENLABS_API_KEY", label: "ElevenLabs" },
|
|
23
|
+
{ name: "kokoro", envVar: null, label: "Kokoro (local)" },
|
|
20
24
|
];
|
|
21
25
|
const PROVIDER_MAP = {
|
|
22
26
|
image: IMAGE_PROVIDERS,
|
|
@@ -56,13 +60,13 @@ export function resolveProvider(category) {
|
|
|
56
60
|
// Check config default first
|
|
57
61
|
if (configDefaults?.[category]) {
|
|
58
62
|
const preferred = candidates.find(c => c.name === configDefaults[category]);
|
|
59
|
-
if (preferred && hasApiKey(preferred.envVar)) {
|
|
63
|
+
if (preferred && (preferred.envVar === null || hasApiKey(preferred.envVar))) {
|
|
60
64
|
return { name: preferred.name, label: preferred.label };
|
|
61
65
|
}
|
|
62
66
|
}
|
|
63
67
|
// Fall back to first available
|
|
64
68
|
for (const candidate of candidates) {
|
|
65
|
-
if (hasApiKey(candidate.envVar)) {
|
|
69
|
+
if (candidate.envVar === null || hasApiKey(candidate.envVar)) {
|
|
66
70
|
return { name: candidate.name, label: candidate.label };
|
|
67
71
|
}
|
|
68
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-resolver.js","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-resolver.js","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.55.0",
|
|
4
4
|
"description": "VibeFrame CLI - natural language video editing from the terminal",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -137,8 +137,8 @@
|
|
|
137
137
|
"openai": "^4.77.0",
|
|
138
138
|
"ora": "^8.0.1",
|
|
139
139
|
"yaml": "^2.3.4",
|
|
140
|
-
"@vibeframe/core": "0.
|
|
141
|
-
"@vibeframe/ai-providers": "0.
|
|
140
|
+
"@vibeframe/core": "0.55.0",
|
|
141
|
+
"@vibeframe/ai-providers": "0.55.0"
|
|
142
142
|
},
|
|
143
143
|
"devDependencies": {
|
|
144
144
|
"@types/node": "^20.11.0",
|