video-maker-mcp 0.1.5 → 0.1.7

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Local MCP storyboard video renderer for Codex-driven short video generation.
4
4
 
5
- `video-maker-mcp` does not run its own LLM and does not generate images itself. Codex writes the script and storyboard, uses its host image generation capability to create scene images, then this MCP server validates assets, generates Doubao/Volcengine narration, and renders a 9:16 MP4 with ffmpeg. The requested duration is treated as a target; final video length follows the generated narration audio so speech is not cut off or padded with silence.
5
+ `video-maker-mcp` does not run its own LLM. Codex writes the script and storyboard, then this MCP server uses Doubao Seedream to generate scene images, validates assets, generates Doubao/Volcengine narration, and renders a 9:16 MP4 with ffmpeg. The requested duration is treated as a target; final video length follows the generated narration audio so speech is not cut off or padded with silence.
6
6
 
7
7
  ## Install With Codex
8
8
 
@@ -15,6 +15,9 @@ npx -y video-maker-mcp@latest install --host codex
15
15
  如果提示缺少 ffmpeg,请按提示安装 ffmpeg,然后重新运行:
16
16
  npx -y video-maker-mcp@latest doctor
17
17
 
18
+ 如果提示缺少图片配置,请执行:
19
+ npx -y video-maker-mcp@latest configure-image
20
+
18
21
  如果提示缺少 TTS 配置,请执行:
19
22
  npx -y video-maker-mcp@latest configure-tts
20
23
 
@@ -25,6 +28,7 @@ Manual command:
25
28
 
26
29
  ```bash
27
30
  npx -y video-maker-mcp@latest install --host codex
31
+ npx -y video-maker-mcp@latest configure-image
28
32
  npx -y video-maker-mcp@latest configure-tts
29
33
  npx -y video-maker-mcp@latest doctor
30
34
  ```
@@ -42,6 +46,7 @@ It does not silently install system packages and does not bundle `ffmpeg-static`
42
46
  - Node.js 20+
43
47
  - Codex CLI
44
48
  - ffmpeg on PATH
49
+ - Doubao Seedream image generation credentials
45
50
  - Doubao/Volcengine TTS credentials
46
51
 
47
52
  ffmpeg install hints:
@@ -57,6 +62,46 @@ sudo apt update && sudo apt install -y ffmpeg
57
62
  winget install Gyan.FFmpeg
58
63
  ```
59
64
 
65
+ ## Image Environment
66
+
67
+ Scene image generation uses Doubao Seedream by default. Configure it before creating videos:
68
+
69
+ ```bash
70
+ npx -y video-maker-mcp@latest configure-image
71
+ ```
72
+
73
+ The command prompts for the API key locally, does not require pasting the key into an LLM chat, and writes the configuration to `~/.video-maker/.env`. By default it does not generate a test image, to avoid spending image-generation quota. To run a smoke test:
74
+
75
+ ```bash
76
+ npx -y video-maker-mcp@latest configure-image --test
77
+ ```
78
+
79
+ It writes:
80
+
81
+ ```env
82
+ VIDEO_MAKER_IMAGE_API_KEY=your-ark-api-key
83
+ VIDEO_MAKER_IMAGE_MODEL=doubao-seedream-5-0-260128
84
+ VIDEO_MAKER_IMAGE_ENDPOINT=https://ark.cn-beijing.volces.com/api/v3/images/generations
85
+ VIDEO_MAKER_IMAGE_SIZE=2K
86
+ ```
87
+
88
+ `VIDEO_MAKER_IMAGE_API_KEY` can also be supplied as `ARK_API_KEY` or `VOLCENGINE_API_KEY`, but the `VIDEO_MAKER_*` key is preferred for this tool.
89
+
90
+ Quick image smoke test:
91
+
92
+ ```bash
93
+ npm run build
94
+ node dist/cli/index.js image-test --prompt "一张 9:16 竖屏科技短视频封面,真实摄影质感,无文字,无水印。"
95
+ open ~/Downloads/video-maker/seedream-image-test.png
96
+ ```
97
+
98
+ `image-test --out` accepts either a directory or a `.png` file:
99
+
100
+ ```bash
101
+ node dist/cli/index.js image-test --out ~/Downloads/video-maker
102
+ node dist/cli/index.js image-test --out ~/Downloads/my-seedream-test.png
103
+ ```
104
+
60
105
  ## TTS Environment
61
106
 
62
107
  Narrated video generation requires Doubao/Volcengine TTS credentials before `generate_audio` can work.
@@ -111,19 +156,19 @@ node dist/cli/index.js tts-test --out ~/Downloads/my-voice-test.mp3
111
156
  Once installed, ask Codex:
112
157
 
113
158
  ```text
114
- 用 video-maker 把下面文稿生成一个 60 秒竖屏中文解说视频。请先检查环境,然后创建项目,生成分镜计划,生成每个分镜图片,验证素材,生成语音,最后渲染 mp4,并把最终文件导出到 ~/Downloads/video-maker。
159
+ 用 video-maker 把下面文稿生成一个约 60 秒竖屏中文解说视频。请先检查环境,然后创建项目,生成分镜计划,用 Seedream 生成每个分镜图片,验证素材,生成语音,最后渲染 mp4,并把最终文件导出到 ~/Downloads/video-maker。
115
160
  ```
116
161
 
117
162
  The MCP workflow is:
118
163
 
119
164
  1. `check_environment`
120
- 2. `assert_image_generation_contract`
121
- 3. `create_video_project`
122
- 4. `get_video_plan_schema`
123
- 5. `save_video_plan`
124
- 6. `list_required_assets`
125
- 7. Codex generates the dedicated cover image and real scene images into the exact returned paths
126
- 8. Optional fallback: `save_generated_image`
165
+ 2. `create_video_project`
166
+ 3. `get_video_plan_schema`
167
+ 4. `save_video_plan`
168
+ 5. `list_required_assets`
169
+ 6. `generate_assets`
170
+ 7. Optional fallback: `assert_image_generation_contract` + host image generation
171
+ 8. Optional fallback bridge: `save_generated_image`
127
172
  9. `verify_assets`
128
173
  10. Optional: `create_asset_contact_sheet`
129
174
  11. `generate_audio`
@@ -132,12 +177,16 @@ The MCP workflow is:
132
177
 
133
178
  Important asset contract:
134
179
 
135
- - Preferred: the host supports `generate_image_to_file(prompt, absolutePath)`: call a real image model and save the generated bitmap directly to the requested local file path.
136
- - Fallback: if the host image tool exposes a real generated image as a temporary local file or base64/data URL, call `save_generated_image(projectId, assetPath, sourcePath|imageBase64)` to let MCP persist it to the required asset path.
180
+ - Default: call `generate_assets`. The MCP server uses Doubao Seedream and writes generated images directly to the required project asset paths.
181
+ - Host image generation is only a fallback when Seedream credentials are unavailable and the user explicitly agrees.
182
+ - Do not call ad-hoc external image URLs/APIs from the host to bypass `generate_assets`.
183
+ - Host fallback requires `generate_image_to_file(prompt, absolutePath)`: call a real image model and save the generated bitmap directly to the requested local file path.
184
+ - Fallback bridge: if the host image tool exposes a real generated image as a temporary local file or base64/data URL, call `save_generated_image(projectId, assetPath, sourcePath|imageBase64)` to let MCP persist it to the required asset path.
137
185
  - If the host can only show generated images in chat and cannot expose a local file path or bytes/base64, stop. Do not continue with fallback graphics.
138
186
  - `list_required_assets` returns the image paths the tool will use, including `assets/cover.png` and scene paths such as `assets/scene_001.png`.
139
187
  - Codex must save the actual generated scene image to each returned `absolutePath`.
140
188
  - The cover must be a dedicated, content-rich 9:16 cover image generated for the video. It should not be a first-frame extraction.
189
+ - `render_video` uses the dedicated cover as a short opening segment when `assets/cover.png` is available. `export_video` also copies it as `cover.png`.
141
190
  - Do not substitute SVGs, chart screenshots, CSS drawings, HTML/canvas/sharp scripted graphics, preview strips, first-frame extractions, or manually created placeholder graphics.
142
191
  - `verify_assets` rejects missing files, unreadable files, wrong aspect ratios, tiny files, suspicious placeholder-sized images, and PNG files with same-name SVG sources such as `scene_001.svg`.
143
192
  - `create_asset_contact_sheet` creates `output/asset_contact_sheet.png` from the exact image files that `render_video` will use. Check this if the preview does not match the intended generated images.
@@ -171,8 +220,9 @@ The video is audio-driven:
171
220
 
172
221
  - `durationSec` in `video_plan.json` is used as a relative weight for each scene.
173
222
  - After `generate_audio`, `render_video` reads the real narration duration with `ffprobe`.
174
- - Scene durations and subtitle timing are scaled to fill the audio duration.
223
+ - The dedicated cover opening, scene durations, and subtitle timing are scaled to fill the audio duration.
175
224
  - The final MP4 duration is set to the audio duration, so narration is not cut off and the video does not continue after speech ends.
225
+ - Duration requests are soft targets unless the user explicitly asks for an exact duration. `generate_audio` returns a `durationPolicy`; if `durationPolicy.isAcceptable` is `true`, do not rewrite or regenerate narration only to get closer to the target duration.
176
226
 
177
227
  ## Subtitle Alignment
178
228
 
@@ -0,0 +1,20 @@
1
+ export interface ConfigureImageOptions {
2
+ apiKey?: string;
3
+ model?: string;
4
+ endpoint?: string;
5
+ size?: string;
6
+ envFile?: string;
7
+ test?: boolean;
8
+ }
9
+ export interface ConfigureImageResult {
10
+ ok: boolean;
11
+ envFile: string;
12
+ wroteKeys: string[];
13
+ test?: {
14
+ ok: boolean;
15
+ outputPath?: string;
16
+ bytes?: number;
17
+ error?: string;
18
+ };
19
+ }
20
+ export declare function configureImage(options?: ConfigureImageOptions): Promise<ConfigureImageResult>;
@@ -0,0 +1,148 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import readline from "node:readline/promises";
4
+ import { stdin as input, stdout as output } from "node:process";
5
+ import sharp from "sharp";
6
+ import { defaultEnvFile, exportDir, resolveUserPath } from "../core/paths.js";
7
+ import { DEFAULT_SEEDREAM_IMAGE_ENDPOINT, DEFAULT_SEEDREAM_IMAGE_MODEL, DEFAULT_SEEDREAM_IMAGE_SIZE, generateSeedreamImage } from "../providers/image/seedream.js";
8
+ const CONFIG_KEYS = [
9
+ "VIDEO_MAKER_IMAGE_API_KEY",
10
+ "VIDEO_MAKER_IMAGE_MODEL",
11
+ "VIDEO_MAKER_IMAGE_ENDPOINT",
12
+ "VIDEO_MAKER_IMAGE_SIZE"
13
+ ];
14
+ export async function configureImage(options = {}) {
15
+ const envFile = options.envFile ? resolveUserPath(options.envFile) : defaultEnvFile();
16
+ const apiKey = (options.apiKey ?? await promptHidden("Doubao Seedream image API Key (hidden): ")).trim();
17
+ if (!apiKey) {
18
+ throw new Error("VIDEO_MAKER_IMAGE_API_KEY cannot be empty.");
19
+ }
20
+ const model = options.model ?? await promptWithDefault("Seedream image model", process.env.VIDEO_MAKER_IMAGE_MODEL ?? DEFAULT_SEEDREAM_IMAGE_MODEL);
21
+ const endpoint = options.endpoint ?? await promptWithDefault("Seedream image endpoint", process.env.VIDEO_MAKER_IMAGE_ENDPOINT ?? DEFAULT_SEEDREAM_IMAGE_ENDPOINT);
22
+ const size = options.size ?? await promptWithDefault("Seedream image size", process.env.VIDEO_MAKER_IMAGE_SIZE ?? DEFAULT_SEEDREAM_IMAGE_SIZE);
23
+ await upsertEnvFile(envFile, {
24
+ VIDEO_MAKER_IMAGE_API_KEY: apiKey,
25
+ VIDEO_MAKER_IMAGE_MODEL: model,
26
+ VIDEO_MAKER_IMAGE_ENDPOINT: endpoint,
27
+ VIDEO_MAKER_IMAGE_SIZE: size
28
+ });
29
+ process.env.VIDEO_MAKER_IMAGE_API_KEY = apiKey;
30
+ process.env.VIDEO_MAKER_IMAGE_MODEL = model;
31
+ process.env.VIDEO_MAKER_IMAGE_ENDPOINT = endpoint;
32
+ process.env.VIDEO_MAKER_IMAGE_SIZE = size;
33
+ const result = {
34
+ ok: true,
35
+ envFile,
36
+ wroteKeys: CONFIG_KEYS
37
+ };
38
+ if (options.test) {
39
+ const outputPath = path.join(exportDir(), "seedream-image-test.png");
40
+ try {
41
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
42
+ const image = await generateSeedreamImage("一张 9:16 竖屏短视频封面,现代科技感,丰富细节,真实摄影质感,无文字,无水印。");
43
+ await sharp(image.bytes)
44
+ .rotate()
45
+ .resize(1080, 1920, { fit: "cover", position: "center" })
46
+ .png()
47
+ .toFile(outputPath);
48
+ const stat = await fs.stat(outputPath);
49
+ result.test = {
50
+ ok: true,
51
+ outputPath,
52
+ bytes: stat.size
53
+ };
54
+ }
55
+ catch (error) {
56
+ result.ok = false;
57
+ result.test = {
58
+ ok: false,
59
+ error: error instanceof Error ? error.message : String(error)
60
+ };
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+ async function promptWithDefault(label, defaultValue) {
66
+ const answer = await promptVisible(`${label} [${defaultValue}]: `);
67
+ return answer.trim() || defaultValue;
68
+ }
69
+ async function promptVisible(question) {
70
+ const rl = readline.createInterface({ input, output });
71
+ try {
72
+ return await rl.question(question);
73
+ }
74
+ finally {
75
+ rl.close();
76
+ }
77
+ }
78
+ async function promptHidden(question) {
79
+ if (!input.isTTY || !output.isTTY) {
80
+ return promptVisible(question);
81
+ }
82
+ return new Promise((resolve, reject) => {
83
+ let value = "";
84
+ const onData = (buffer) => {
85
+ const char = buffer.toString("utf8");
86
+ if (char === "\u0003") {
87
+ cleanup();
88
+ reject(new Error("Canceled."));
89
+ return;
90
+ }
91
+ if (char === "\r" || char === "\n") {
92
+ cleanup();
93
+ output.write("\n");
94
+ resolve(value);
95
+ return;
96
+ }
97
+ if (char === "\u007f" || char === "\b") {
98
+ value = value.slice(0, -1);
99
+ return;
100
+ }
101
+ value += char;
102
+ };
103
+ const cleanup = () => {
104
+ input.off("data", onData);
105
+ input.setRawMode(false);
106
+ input.pause();
107
+ };
108
+ output.write(question);
109
+ input.setRawMode(true);
110
+ input.resume();
111
+ input.on("data", onData);
112
+ });
113
+ }
114
+ async function upsertEnvFile(envFile, values) {
115
+ await fs.mkdir(path.dirname(envFile), { recursive: true });
116
+ let existing = "";
117
+ try {
118
+ existing = await fs.readFile(envFile, "utf8");
119
+ }
120
+ catch (error) {
121
+ if (error.code !== "ENOENT")
122
+ throw error;
123
+ }
124
+ const seen = new Set();
125
+ const lines = existing.length > 0 ? existing.split(/\r?\n/) : [];
126
+ const nextLines = lines.map((line) => {
127
+ const match = /^([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(line);
128
+ if (!match)
129
+ return line;
130
+ const key = match[1];
131
+ if (!(key in values))
132
+ return line;
133
+ seen.add(key);
134
+ return `${key}=${formatEnvValue(values[key])}`;
135
+ });
136
+ for (const [key, value] of Object.entries(values)) {
137
+ if (!seen.has(key)) {
138
+ nextLines.push(`${key}=${formatEnvValue(value)}`);
139
+ }
140
+ }
141
+ const content = `${nextLines.filter((line, index, all) => line.length > 0 || index < all.length - 1).join("\n")}\n`;
142
+ await fs.writeFile(envFile, content, { mode: 0o600 });
143
+ await fs.chmod(envFile, 0o600).catch(() => undefined);
144
+ }
145
+ function formatEnvValue(value) {
146
+ return JSON.stringify(value);
147
+ }
148
+ //# sourceMappingURL=configure-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-image.js","sourceRoot":"","sources":["../../src/cli/configure-image.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -9,6 +9,9 @@ import { synthesizeVolcengineSpeech } from "../providers/tts/volcengine.js";
9
9
  import { loadCliEnv } from "./load-env.js";
10
10
  import { DEFAULT_EXPORT_DIR, resolveUserPath } from "../core/paths.js";
11
11
  import { configureTts } from "./configure-tts.js";
12
+ import { configureImage } from "./configure-image.js";
13
+ import { generateSeedreamImage } from "../providers/image/seedream.js";
14
+ import sharp from "sharp";
12
15
  loadCliEnv();
13
16
  const program = new Command();
14
17
  function readPackageVersion() {
@@ -23,6 +26,9 @@ function readPackageVersion() {
23
26
  function defaultTtsTestPath() {
24
27
  return path.join(DEFAULT_EXPORT_DIR, "doubao-tts-test.mp3");
25
28
  }
29
+ function defaultImageTestPath() {
30
+ return path.join(DEFAULT_EXPORT_DIR, "seedream-image-test.png");
31
+ }
26
32
  async function resolveOutputPath(output) {
27
33
  const resolved = resolveUserPath(output);
28
34
  if (path.extname(resolved).toLowerCase() === ".mp3") {
@@ -32,6 +38,15 @@ async function resolveOutputPath(output) {
32
38
  await fs.mkdir(resolved, { recursive: true });
33
39
  return path.join(resolved, "doubao-tts-test.mp3");
34
40
  }
41
+ async function resolvePngOutputPath(output) {
42
+ const resolved = resolveUserPath(output);
43
+ if (path.extname(resolved).toLowerCase() === ".png") {
44
+ await fs.mkdir(path.dirname(resolved), { recursive: true });
45
+ return resolved;
46
+ }
47
+ await fs.mkdir(resolved, { recursive: true });
48
+ return path.join(resolved, "seedream-image-test.png");
49
+ }
35
50
  program
36
51
  .name("video-maker-mcp")
37
52
  .description("Local MCP storyboard video renderer for Codex.")
@@ -89,6 +104,28 @@ program
89
104
  if (!result.ok)
90
105
  process.exitCode = 1;
91
106
  });
107
+ program
108
+ .command("configure-image")
109
+ .description("Configure Doubao Seedream image generation credentials in the local video-maker env file.")
110
+ .option("--model <id>", "Seedream image model", undefined)
111
+ .option("--endpoint <url>", "Seedream image endpoint", undefined)
112
+ .option("--size <size>", "Seedream image size, e.g. 2K or 3K", undefined)
113
+ .option("--config-file <path>", "Env file to write; defaults to ~/.video-maker/.env")
114
+ .option("--test", "Generate a test PNG after writing configuration.")
115
+ .addOption(new Option("--api-key <key>", "Image API key").hideHelp())
116
+ .action(async (opts) => {
117
+ const result = await configureImage({
118
+ apiKey: opts.apiKey,
119
+ model: opts.model,
120
+ endpoint: opts.endpoint,
121
+ size: opts.size,
122
+ envFile: opts.configFile,
123
+ test: opts.test
124
+ });
125
+ console.log(JSON.stringify(result, null, 2));
126
+ if (!result.ok)
127
+ process.exitCode = 1;
128
+ });
92
129
  program
93
130
  .command("tts-test")
94
131
  .description("Generate a short MP3 with the configured Doubao/Volcengine TTS credentials.")
@@ -100,6 +137,22 @@ program
100
137
  await fs.writeFile(outputPath, audio);
101
138
  console.log(JSON.stringify({ ok: true, outputPath, bytes: audio.length }, null, 2));
102
139
  });
140
+ program
141
+ .command("image-test")
142
+ .description("Generate a short PNG with the configured Doubao Seedream image credentials.")
143
+ .option("--prompt <prompt>", "Prompt to generate", "一张 9:16 竖屏短视频封面,现代科技感,丰富细节,真实摄影质感,无文字,无水印。")
144
+ .option("--out <path>", "Output PNG path or directory", defaultImageTestPath())
145
+ .action(async (opts) => {
146
+ const outputPath = await resolvePngOutputPath(opts.out);
147
+ const image = await generateSeedreamImage(opts.prompt);
148
+ await sharp(image.bytes)
149
+ .rotate()
150
+ .resize(1080, 1920, { fit: "cover", position: "center" })
151
+ .png()
152
+ .toFile(outputPath);
153
+ const stat = await fs.stat(outputPath);
154
+ console.log(JSON.stringify({ ok: true, outputPath, bytes: stat.size, source: image.source }, null, 2));
155
+ });
103
156
  program.parseAsync(process.argv).catch((error) => {
104
157
  console.error(error instanceof Error ? error.message : String(error));
105
158
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -44,9 +44,28 @@ export interface SavedGeneratedImageResult {
44
44
  source: "sourcePath" | "imageBase64";
45
45
  asset: VerifiedAsset;
46
46
  }
47
+ export interface GeneratedAsset {
48
+ kind: "scene" | "cover";
49
+ sceneId: string;
50
+ assetPath: string;
51
+ absolutePath: string;
52
+ provider: "seedream";
53
+ model: string;
54
+ skipped: boolean;
55
+ source?: "url" | "b64_json";
56
+ revisedPrompt?: string;
57
+ asset: VerifiedAsset;
58
+ }
59
+ export interface GenerateAssetsResult {
60
+ projectId: string;
61
+ provider: "seedream";
62
+ model: string;
63
+ endpoint: string;
64
+ generated: GeneratedAsset[];
65
+ }
47
66
  export interface ImageGenerationContract {
48
67
  ok: false;
49
- requiredCapability: "generate_image_to_file";
68
+ requiredCapability: "host_image_fallback";
50
69
  contract: {
51
70
  operation: string;
52
71
  mustUseRealImageModel: true;
@@ -62,6 +81,10 @@ export interface SaveGeneratedImageInput {
62
81
  }
63
82
  export declare function imageGenerationContract(): ImageGenerationContract;
64
83
  export declare function listRequiredAssets(projectId: string): Promise<RequiredAsset[]>;
84
+ export declare function generateAssets(projectId: string, options?: {
85
+ overwrite?: boolean;
86
+ includeCover?: boolean;
87
+ }): Promise<GenerateAssetsResult>;
65
88
  export declare function verifyAssets(projectId: string): Promise<{
66
89
  ok: boolean;
67
90
  assets: Array<VerifiedAsset | AssetIssue>;
@@ -1,6 +1,7 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import sharp from "sharp";
4
+ import { generateSeedreamImage, seedreamImageConfigFromEnv } from "../providers/image/seedream.js";
4
5
  import { readVideoPlan, markStatus } from "./project.js";
5
6
  import { resolveUserPath, toProjectPath } from "./paths.js";
6
7
  const DEFAULT_MIN_ASSET_BYTES = 150 * 1024;
@@ -18,9 +19,9 @@ function minAssetBytes() {
18
19
  export function imageGenerationContract() {
19
20
  return {
20
21
  ok: false,
21
- requiredCapability: "generate_image_to_file",
22
+ requiredCapability: "host_image_fallback",
22
23
  contract: {
23
- operation: "generate_image_to_file(prompt, absolutePath), or fallback save_generated_image(projectId, assetPath, sourcePath|imageBase64)",
24
+ operation: "fallback only: generate_image_to_file(prompt, absolutePath), or save_generated_image(projectId, assetPath, sourcePath|imageBase64)",
24
25
  mustUseRealImageModel: true,
25
26
  mustSaveToExactAbsolutePath: true,
26
27
  mustStopIfUnsupported: true,
@@ -32,10 +33,11 @@ export function imageGenerationContract() {
32
33
  "sharp/Jimp/canvas scripted graphics",
33
34
  "chart or infographic screenshots",
34
35
  "first-frame extraction",
35
- "placeholder or manually composed fallback images"
36
+ "placeholder or manually composed fallback images",
37
+ "ad-hoc external image API calls from the host"
36
38
  ]
37
39
  },
38
- instruction: "Preferred: the host must provide a real image generation capability that can save the generated bitmap directly to the requested absolutePath. Fallback: if the host can access a real generated image file path or image bytes/base64, call save_generated_image to let MCP persist it to assetPath. If neither is possible, stop and tell the user that this host does not satisfy video-maker-mcp's image generation contract."
40
+ instruction: "Default image generation should use generate_assets with Doubao Seedream. This contract is only for an explicit host fallback when Seedream credentials are unavailable and the user agrees. The host must provide a real image generation capability that can save the generated bitmap directly to the requested absolutePath, or expose a real generated image file path/base64 for save_generated_image. Do not call temporary external image URLs/APIs from the host to bypass generate_assets."
39
41
  };
40
42
  }
41
43
  export async function listRequiredAssets(projectId) {
@@ -52,7 +54,7 @@ export async function listRequiredAssets(projectId) {
52
54
  minHeight: MIN_ASSET_HEIGHT,
53
55
  aspectRatio: "9:16",
54
56
  minBytes: minAssetBytes(),
55
- note: "Use generate_image_to_file(prompt, absolutePath): a real image model output saved exactly to this path. Do not create placeholder SVGs, charts, screenshots, HTML/CSS/canvas/sharp scripted graphics, preview strips, or manually drawn fallback graphics. If unsupported, stop."
57
+ note: "Default: generate_assets uses Doubao Seedream and writes a real image model output exactly to this path. Do not create placeholder SVGs, charts, screenshots, HTML/CSS/canvas/sharp scripted graphics, preview strips, manually drawn fallback graphics, or host-side ad-hoc external API downloads."
56
58
  }
57
59
  }));
58
60
  return [
@@ -68,7 +70,7 @@ export async function listRequiredAssets(projectId) {
68
70
  minHeight: MIN_ASSET_HEIGHT,
69
71
  aspectRatio: "9:16",
70
72
  minBytes: minAssetBytes(),
71
- note: "Use generate_image_to_file(prompt, absolutePath) to create a dedicated, content-rich vertical cover image. It should not be a screenshot, SVG, chart-only graphic, HTML/CSS/canvas/sharp scripted graphic, or first-frame extraction. If unsupported, stop."
73
+ note: "Default: generate_assets uses Doubao Seedream to create a dedicated, content-rich vertical cover image. It should not be a screenshot, SVG, chart-only graphic, HTML/CSS/canvas/sharp scripted graphic, first-frame extraction, or host-side ad-hoc external API download."
72
74
  }
73
75
  },
74
76
  ...sceneAssets
@@ -86,6 +88,71 @@ function buildCoverPrompt(plan) {
86
88
  `Visual themes from the storyboard: ${sceneSummary}`
87
89
  ].join(" ");
88
90
  }
91
+ export async function generateAssets(projectId, options = {}) {
92
+ const config = seedreamImageConfigFromEnv();
93
+ const required = (await listRequiredAssets(projectId)).filter((asset) => options.includeCover !== false || asset.kind !== "cover");
94
+ const generated = [];
95
+ for (const asset of required) {
96
+ if (!options.overwrite) {
97
+ const existing = await validateRequiredAsset(asset);
98
+ if (existing.ok) {
99
+ generated.push({
100
+ kind: asset.kind,
101
+ sceneId: asset.sceneId,
102
+ assetPath: asset.assetPath,
103
+ absolutePath: asset.absolutePath,
104
+ provider: "seedream",
105
+ model: config.model,
106
+ skipped: true,
107
+ asset: existing
108
+ });
109
+ continue;
110
+ }
111
+ }
112
+ const image = await generateSeedreamImage(buildSeedreamPrompt(asset), config);
113
+ await fs.mkdir(path.dirname(asset.absolutePath), { recursive: true });
114
+ await sharp(image.bytes)
115
+ .rotate()
116
+ .resize(1080, 1920, { fit: "cover", position: "center" })
117
+ .toFormat(outputFormat(asset.assetPath))
118
+ .toFile(asset.absolutePath);
119
+ const verified = await validateRequiredAsset(asset);
120
+ if (!verified.ok) {
121
+ throw new Error(`Seedream generated invalid asset ${asset.assetPath}: ${verified.error}`);
122
+ }
123
+ generated.push({
124
+ kind: asset.kind,
125
+ sceneId: asset.sceneId,
126
+ assetPath: asset.assetPath,
127
+ absolutePath: asset.absolutePath,
128
+ provider: "seedream",
129
+ model: config.model,
130
+ skipped: false,
131
+ source: image.source,
132
+ revisedPrompt: image.revisedPrompt,
133
+ asset: verified
134
+ });
135
+ }
136
+ if (generated.length > 0 && generated.every((item) => item.asset.ok)) {
137
+ const cover = generated.find((item) => item.kind === "cover");
138
+ await markStatus(projectId, "assets_ready", cover ? { coverPath: cover.assetPath } : {});
139
+ }
140
+ return {
141
+ projectId,
142
+ provider: "seedream",
143
+ model: config.model,
144
+ endpoint: config.endpoint,
145
+ generated
146
+ };
147
+ }
148
+ function buildSeedreamPrompt(asset) {
149
+ return [
150
+ asset.prompt,
151
+ "Vertical 9:16 short-video production still.",
152
+ "Generate a rich, photographic/editorial bitmap image suitable for a 1080x1920 video scene.",
153
+ "No watermarks. No real brand logos. Avoid tiny unreadable text. Avoid charts-only visuals, screenshots, UI mockups, SVG/vector style, or placeholder graphics."
154
+ ].join("\n");
155
+ }
89
156
  export async function verifyAssets(projectId) {
90
157
  return verifyProjectAssets(projectId, { includeCover: true });
91
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/core/assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/core/assets.ts"],"names":[],"mappings":"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"}