markdown-ai-rewriter 0.3.2 → 0.4.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.
Files changed (60) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +82 -0
  3. package/dist/cli.js +39 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/core/full-rewriter.d.ts.map +1 -1
  6. package/dist/core/full-rewriter.js +5 -3
  7. package/dist/core/full-rewriter.js.map +1 -1
  8. package/dist/core/image-processor.d.ts +32 -0
  9. package/dist/core/image-processor.d.ts.map +1 -0
  10. package/dist/core/image-processor.js +229 -0
  11. package/dist/core/image-processor.js.map +1 -0
  12. package/dist/core/image-providers/doubao.d.ts +12 -0
  13. package/dist/core/image-providers/doubao.d.ts.map +1 -0
  14. package/dist/core/image-providers/doubao.js +73 -0
  15. package/dist/core/image-providers/doubao.js.map +1 -0
  16. package/dist/core/image-providers/fal.d.ts +25 -0
  17. package/dist/core/image-providers/fal.d.ts.map +1 -0
  18. package/dist/core/image-providers/fal.js +79 -0
  19. package/dist/core/image-providers/fal.js.map +1 -0
  20. package/dist/core/image-providers/gemini.d.ts +11 -0
  21. package/dist/core/image-providers/gemini.d.ts.map +1 -0
  22. package/dist/core/image-providers/gemini.js +57 -0
  23. package/dist/core/image-providers/gemini.js.map +1 -0
  24. package/dist/core/image-providers/index.d.ts +6 -0
  25. package/dist/core/image-providers/index.d.ts.map +1 -0
  26. package/dist/core/image-providers/index.js +20 -0
  27. package/dist/core/image-providers/index.js.map +1 -0
  28. package/dist/core/image-providers/minimax.d.ts +20 -0
  29. package/dist/core/image-providers/minimax.d.ts.map +1 -0
  30. package/dist/core/image-providers/minimax.js +89 -0
  31. package/dist/core/image-providers/minimax.js.map +1 -0
  32. package/dist/core/image-providers/nano-banana.d.ts +36 -0
  33. package/dist/core/image-providers/nano-banana.d.ts.map +1 -0
  34. package/dist/core/image-providers/nano-banana.js +90 -0
  35. package/dist/core/image-providers/nano-banana.js.map +1 -0
  36. package/dist/core/image-providers/openai.d.ts +12 -0
  37. package/dist/core/image-providers/openai.d.ts.map +1 -0
  38. package/dist/core/image-providers/openai.js +82 -0
  39. package/dist/core/image-providers/openai.js.map +1 -0
  40. package/dist/core/output-sanitizer.d.ts +2 -0
  41. package/dist/core/output-sanitizer.d.ts.map +1 -0
  42. package/dist/core/output-sanitizer.js +12 -0
  43. package/dist/core/output-sanitizer.js.map +1 -0
  44. package/dist/core/providers/base.d.ts.map +1 -1
  45. package/dist/core/providers/base.js +3 -4
  46. package/dist/core/providers/base.js.map +1 -1
  47. package/dist/core/rewriter.d.ts +2 -1
  48. package/dist/core/rewriter.d.ts.map +1 -1
  49. package/dist/core/rewriter.js +27 -3
  50. package/dist/core/rewriter.js.map +1 -1
  51. package/dist/core/section-rewriter.d.ts.map +1 -1
  52. package/dist/core/section-rewriter.js +3 -1
  53. package/dist/core/section-rewriter.js.map +1 -1
  54. package/dist/index.d.ts +6 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +19 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/types/index.d.ts +62 -0
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [0.3.3] - 2026-03-29
6
+
7
+ ### Fixed
8
+ - 新增统一输出清洗:移除模型泄漏的 `<think>...</think>` 与 `<reasoning>...</reasoning>` 内容。
9
+ - `section` 与 `full` 两种改写模式均接入输出清洗,避免思考过程进入最终 Markdown。
10
+ - 强化系统提示词:明确禁止输出思考/推理过程与相关标签。
11
+
5
12
  ## [0.3.1] - 2026-03-29
6
13
 
7
14
  ### Fixed
package/README.md CHANGED
@@ -14,6 +14,7 @@
14
14
  | **风格可控** | 内置 casual / formal / technical / creative / custom,并支持温度、长度倾向、`--prompt` 自定义指令。 |
15
15
  | **工程化友好** | 提供 **CLI**(`markdown-ai-rewrite` / `md-rewrite`)与 **TypeScript API**,可嵌入脚本、CI 或内容流水线。 |
16
16
  | **并发可配** | 章节模式下可配置并发请求数,在长文档场景下兼顾速度与 API 限流。 |
17
+ | **图片处理** | 支持图生图,可使用 MiniMax、OpenAI DALL-E、Google Imagen 3 (Nano Banana) 等模型重新生成图片。 |
17
18
 
18
19
  **一句话**:把「能改的部分」交给模型,把「必须稳的结构」留在本地解析与重组逻辑里,**更适合严肃内容生产**,而不是聊天式随意生成。
19
20
 
@@ -313,6 +314,23 @@ interface RewriteResult {
313
314
  blocksRewritten: number;
314
315
  tokensUsed?: number;
315
316
  cost?: number;
317
+ imageProcessing?: ImageProcessResult; // 图片处理结果
318
+ }
319
+ ```
320
+
321
+ ### `ImageProcessorConfig`
322
+
323
+ ```typescript
324
+ interface ImageProcessorConfig {
325
+ provider: 'minimax' | 'openai' | 'gemini' | 'doubao' | 'nano-banana' | 'nano-banana-pro' | 'custom';
326
+ apiKey?: string;
327
+ model?: string;
328
+ baseUrl?: string;
329
+ promptTemplate?: string; // 图片生成提示词模板
330
+ aspectRatio?: '1:1' | '16:9' | '4:3' | '3:2' | '2:3' | '3:4' | '9:16';
331
+ outputDir?: string; // 生成图片输出目录
332
+ overwrite?: boolean; // 是否覆盖原图
333
+ verbose?: boolean;
316
334
  }
317
335
  ```
318
336
 
@@ -321,6 +339,7 @@ interface RewriteResult {
321
339
  ## 环境变量
322
340
 
323
341
  ```bash
342
+ # 文本改写 Provider
324
343
  export OPENAI_API_KEY="sk-..."
325
344
  export ANTHROPIC_API_KEY="sk-ant-..."
326
345
  export AZURE_OPENAI_API_KEY="..."
@@ -338,6 +357,69 @@ export MINIMAX_API_KEY="..."
338
357
 
339
358
  ---
340
359
 
360
+ ## 图片处理功能
361
+
362
+ 除了文本改写,还支持对 Markdown 中的图片进行 AI 图生图处理。
363
+
364
+ ### 支持的图片 Provider
365
+
366
+ | Provider | 环境变量 | 默认模型 | 说明 |
367
+ |----------|----------|----------|------|
368
+ | `minimax` | `MINIMAX_API_KEY` | `image-01` | MiniMax 图生图 |
369
+ | `openai` | `OPENAI_API_KEY` | `dall-e-3` | OpenAI DALL-E |
370
+ | `gemini` | `GEMINI_API_KEY` | `imagen-3.0-generate-002` | Google Imagen 3 |
371
+ | `doubao` | `DOUBAO_API_KEY` | `general_v2.0` | 火山引擎豆包 |
372
+ | `nano-banana` | `GEMINI_API_KEY` | `imagen-3.0-generate-002` | Google Imagen 3 标准版 |
373
+ | `nano-banana-pro` | `GEMINI_API_KEY` | `imagen-3.0-capability-001` | Google Imagen 3 Pro(支持编辑/inpainting) |
374
+
375
+ ### CLI 图片处理参数
376
+
377
+ | 参数 | 含义 |
378
+ |------|------|
379
+ | `--process-images` | 启用图片处理 |
380
+ | `--image-provider` | 图片 Provider:`minimax`, `openai`, `gemini`, `doubao`, `nano-banana`, `nano-banana-pro` |
381
+ | `--image-model` | 图片模型名称(可选,各 provider 有默认值) |
382
+ | `--image-prompt` | 自定义图片生成提示词 |
383
+ | `--image-output-dir` | 生成图片的输出目录 |
384
+
385
+ ### 图片处理示例
386
+
387
+ ```bash
388
+ # 文本改写 + 图片处理
389
+ export OPENAI_API_KEY="your-openai-key"
390
+ export GEMINI_API_KEY="your-gemini-key"
391
+
392
+ md-rewrite rewrite -i article.md -o out.md -p openai \
393
+ --process-images \
394
+ --image-provider nano-banana-pro
395
+
396
+ # 只改写文本(默认)
397
+ md-rewrite rewrite -i article.md -o out.md -p openai
398
+ ```
399
+
400
+ ### 在代码中使用图片处理
401
+
402
+ ```typescript
403
+ import { MarkdownRewriter } from 'markdown-ai-rewriter';
404
+
405
+ const rewriter = new MarkdownRewriter({
406
+ provider: 'openai',
407
+ apiKey: process.env.OPENAI_API_KEY,
408
+ // 图片处理配置
409
+ imageProcessing: {
410
+ provider: 'nano-banana-pro',
411
+ apiKey: process.env.GEMINI_API_KEY,
412
+ promptTemplate: '根据参考图生成风格相似的新图',
413
+ outputDir: './generated-images',
414
+ },
415
+ });
416
+
417
+ const result = await rewriter.rewrite(markdown, '/path/to/article.md');
418
+ console.log(result.imageProcessing); // { processed: 3, success: 3, failed: 0, ... }
419
+ ```
420
+
421
+ ---
422
+
341
423
  ## 费用参考(量级)
342
424
 
343
425
  以约 **1000 英文单词** 的文章为量级(实际随结构、`--mode`、模型与并发变化):
package/dist/cli.js CHANGED
@@ -43,6 +43,11 @@ program
43
43
  .option('-v, --verbose', 'Verbose output')
44
44
  .option('--mode <mode>', 'Rewrite mode: section (按标题分章,默认), full (整篇一次,最连贯)', 'section')
45
45
  .option('--section-level <level>', 'Section level for section mode (1-3)', parseInt, 1)
46
+ .option('--process-images', 'Process images using AI image-to-image generation')
47
+ .option('--image-provider <provider>', 'Image provider: minimax, openai, gemini, doubao, nano-banana, nano-banana-pro (default: minimax)', 'minimax')
48
+ .option('--image-model <model>', 'Image model name (provider-specific default used when omitted)')
49
+ .option('--image-prompt <prompt>', 'Custom prompt for image generation')
50
+ .option('--image-output-dir <dir>', 'Output directory for generated images')
46
51
  .action(async (options) => {
47
52
  try {
48
53
  if (!['section', 'full'].includes(options.mode)) {
@@ -67,6 +72,34 @@ program
67
72
  process.exit(1);
68
73
  }
69
74
  const markdown = (0, fs_1.readFileSync)(options.input, 'utf-8');
75
+ // 构建图片处理配置
76
+ let imageProcessing;
77
+ if (options.processImages) {
78
+ const imageProviderEnvMap = {
79
+ minimax: 'MINIMAX_API_KEY',
80
+ openai: 'OPENAI_API_KEY',
81
+ gemini: 'GEMINI_API_KEY',
82
+ doubao: 'DOUBAO_API_KEY',
83
+ 'nano-banana': 'GEMINI_API_KEY',
84
+ 'nano-banana-pro': 'GEMINI_API_KEY',
85
+ };
86
+ const imageProvider = options.imageProvider;
87
+ const imageEnvKey = imageProviderEnvMap[imageProvider];
88
+ const imageApiKey = process.env[imageEnvKey];
89
+ if (!imageApiKey) {
90
+ console.error('❌ 错误:图片处理需要 API key');
91
+ console.error(` 设置环境变量: ${imageEnvKey}`);
92
+ process.exit(1);
93
+ }
94
+ imageProcessing = {
95
+ provider: imageProvider,
96
+ apiKey: imageApiKey,
97
+ model: options.imageModel,
98
+ promptTemplate: options.imagePrompt,
99
+ outputDir: options.imageOutputDir || (0, path_1.join)((0, path_1.dirname)((0, path_1.resolve)(options.input)), 'generated-images'),
100
+ verbose: options.verbose,
101
+ };
102
+ }
70
103
  const config = {
71
104
  provider,
72
105
  apiKey,
@@ -84,16 +117,21 @@ program
84
117
  maxTokens: options.maxTokens,
85
118
  preserveLength: options.preserveLength,
86
119
  },
120
+ imageProcessing,
87
121
  };
88
122
  const modeLabel = options.mode === 'section' ? '章节级' : '全文';
89
123
  console.log(`🚀 开始${modeLabel}改写 (${provider})...`);
90
124
  const rewriter = new rewriter_1.MarkdownRewriter(config);
91
- const result = await rewriter.rewrite(markdown);
125
+ const inputPath = (0, path_1.resolve)(options.input);
126
+ const result = await rewriter.rewrite(markdown, inputPath);
92
127
  (0, fs_1.writeFileSync)(options.output, result.rewritten, 'utf-8');
93
128
  console.log('\n✅ 改写完成!');
94
129
  console.log('📊 统计:');
95
130
  console.log(` - 处理单元: ${result.blocksProcessed}`);
96
131
  console.log(` - 已改写: ${result.blocksRewritten}`);
132
+ if (result.imageProcessing) {
133
+ console.log(` - 图片处理: ${result.imageProcessing.success}/${result.imageProcessing.processed} 成功`);
134
+ }
97
135
  console.log(` - 输出文件: ${options.output}`);
98
136
  }
99
137
  catch (error) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"full-rewriter.d.ts","sourceRoot":"","sources":["../../src/core/full-rewriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AAElF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAU;gBAEb,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAE,OAAe;IAKpD,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC;IAwCzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkDrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2DzB;;OAEG;IACH,OAAO,CAAC,aAAa;CAsBtB"}
1
+ {"version":3,"file":"full-rewriter.d.ts","sourceRoot":"","sources":["../../src/core/full-rewriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AAGlF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,OAAO,CAAU;gBAEb,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAE,OAAe;IAKpD,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC;IA0CzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkDrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2DzB;;OAEG;IACH,OAAO,CAAC,aAAa;CAsBtB"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FullRewriter = void 0;
4
+ const output_sanitizer_1 = require("./output-sanitizer");
4
5
  class FullRewriter {
5
6
  constructor(provider, verbose = false) {
6
7
  this.provider = provider;
@@ -20,18 +21,19 @@ class FullRewriter {
20
21
  ...options,
21
22
  prompt: enhancedPrompt,
22
23
  });
24
+ const sanitized = (0, output_sanitizer_1.sanitizeModelOutput)(rewritten) || content;
23
25
  // 4. 验证占位符是否保留
24
- const validation = this.validateAnchors(rewritten, anchors);
26
+ const validation = this.validateAnchors(sanitized, anchors);
25
27
  if (!validation.success) {
26
28
  if (this.verbose) {
27
29
  console.warn(`⚠️ 警告:${validation.missing.length} 个图片占位符丢失,尝试修复...`);
28
30
  }
29
31
  // 尝试修复
30
- const fixed = this.fixMissingAnchors(rewritten, anchors, validation.missing);
32
+ const fixed = this.fixMissingAnchors(sanitized, anchors, validation.missing);
31
33
  return this.restoreImages(fixed, anchors, markdown);
32
34
  }
33
35
  // 5. 恢复图片
34
- const final = this.restoreImages(rewritten, anchors, markdown);
36
+ const final = this.restoreImages(sanitized, anchors, markdown);
35
37
  if (this.verbose) {
36
38
  console.log('✅ 改写完成,图片位置已恢复');
37
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"full-rewriter.js","sourceRoot":"","sources":["../../src/core/full-rewriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"full-rewriter.js","sourceRoot":"","sources":["../../src/core/full-rewriter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { ImageProcessorConfig, ImageProcessResult } from '../types';
2
+ export declare class ImageProcessor {
3
+ private provider;
4
+ private config;
5
+ constructor(config: ImageProcessorConfig);
6
+ private createProvider;
7
+ /**
8
+ * 处理 Markdown 中的所有图片
9
+ */
10
+ processMarkdown(markdown: string, basePath?: string): Promise<ImageProcessResult>;
11
+ /**
12
+ * 从 Markdown 中提取所有图片
13
+ */
14
+ private extractImages;
15
+ /**
16
+ * 解析图片路径(支持本地路径和 URL)
17
+ */
18
+ private resolveImagePath;
19
+ /**
20
+ * 获取 MIME 类型
21
+ */
22
+ private getMimeType;
23
+ /**
24
+ * 构建生成提示词
25
+ */
26
+ private buildPrompt;
27
+ /**
28
+ * 保存生成的图片
29
+ */
30
+ private saveGeneratedImage;
31
+ }
32
+ //# sourceMappingURL=image-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../../src/core/image-processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,oBAAoB,EACpB,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AASlB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,oBAAoB;IAUxC,OAAO,CAAC,cAAc;IA2DtB;;OAEG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC;IAgF9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;YACW,kBAAkB;CAgCjC"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImageProcessor = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const minimax_1 = require("./image-providers/minimax");
7
+ const openai_1 = require("./image-providers/openai");
8
+ const gemini_1 = require("./image-providers/gemini");
9
+ const doubao_1 = require("./image-providers/doubao");
10
+ const nano_banana_1 = require("./image-providers/nano-banana");
11
+ const DEFAULT_PROMPT_TEMPLATE = '根据参考图片,生成一张风格相似、内容相近的新图片,保持主要元素和构图';
12
+ class ImageProcessor {
13
+ constructor(config) {
14
+ this.config = config;
15
+ if (config.customProvider) {
16
+ this.provider = config.customProvider;
17
+ }
18
+ else {
19
+ this.provider = this.createProvider(config);
20
+ }
21
+ }
22
+ createProvider(config) {
23
+ const { provider, model, baseUrl } = config;
24
+ switch (provider) {
25
+ case 'minimax': {
26
+ const apiKey = config.apiKey || process.env.MINIMAX_API_KEY;
27
+ if (!apiKey) {
28
+ throw new Error('MiniMax API key required. Set MINIMAX_API_KEY or pass apiKey in config.');
29
+ }
30
+ return new minimax_1.MiniMaxImageProvider(apiKey, baseUrl);
31
+ }
32
+ case 'openai': {
33
+ const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
34
+ if (!apiKey) {
35
+ throw new Error('OpenAI API key required. Set OPENAI_API_KEY or pass apiKey in config.');
36
+ }
37
+ return new openai_1.OpenAIImageProvider(apiKey, model || 'dall-e-3', baseUrl);
38
+ }
39
+ case 'gemini': {
40
+ const apiKey = config.apiKey || process.env.GEMINI_API_KEY;
41
+ if (!apiKey) {
42
+ throw new Error('Gemini API key required. Set GEMINI_API_KEY or pass apiKey in config.');
43
+ }
44
+ return new gemini_1.GeminiImageProvider(apiKey, model || 'imagen-3.0-generate-002', baseUrl);
45
+ }
46
+ case 'doubao': {
47
+ const apiKey = config.apiKey || process.env.DOUBAO_API_KEY;
48
+ if (!apiKey) {
49
+ throw new Error('Doubao API key required. Set DOUBAO_API_KEY or pass apiKey in config.');
50
+ }
51
+ return new doubao_1.DoubaoImageProvider(apiKey, model || 'general_v2.0', baseUrl);
52
+ }
53
+ case 'nano-banana': {
54
+ const apiKey = config.apiKey || process.env.GEMINI_API_KEY;
55
+ if (!apiKey) {
56
+ throw new Error('Nano Banana API key required. Set GEMINI_API_KEY.');
57
+ }
58
+ // 默认使用标准版 imagen-3.0-generate-002
59
+ return new nano_banana_1.NanoBananaImageProvider(apiKey, model || 'imagen-3.0-generate-002', baseUrl);
60
+ }
61
+ case 'nano-banana-pro': {
62
+ const apiKey = config.apiKey || process.env.GEMINI_API_KEY;
63
+ if (!apiKey) {
64
+ throw new Error('Nano Banana Pro API key required. Set GEMINI_API_KEY.');
65
+ }
66
+ // Pro 版使用 imagen-3.0-capability-001,支持编辑/inpainting
67
+ return new nano_banana_1.NanoBananaImageProvider(apiKey, model || 'imagen-3.0-capability-001', baseUrl);
68
+ }
69
+ default:
70
+ throw new Error(`Unsupported image provider: ${provider}`);
71
+ }
72
+ }
73
+ /**
74
+ * 处理 Markdown 中的所有图片
75
+ */
76
+ async processMarkdown(markdown, basePath) {
77
+ const images = this.extractImages(markdown);
78
+ const details = [];
79
+ let updatedMarkdown = markdown;
80
+ let successCount = 0;
81
+ let failedCount = 0;
82
+ if (this.config.verbose) {
83
+ console.log(`🖼️ 发现 ${images.length} 张图片需要处理`);
84
+ }
85
+ for (const image of images) {
86
+ const { syntax, alt, url } = image;
87
+ if (this.config.verbose) {
88
+ console.log(` 处理: ${url}`);
89
+ }
90
+ try {
91
+ // 解析图片路径
92
+ const imagePath = this.resolveImagePath(url, basePath);
93
+ // 生成提示词
94
+ const prompt = this.buildPrompt(alt);
95
+ // 调用图生图 API
96
+ const result = await this.provider.generateImage({
97
+ referenceImage: imagePath,
98
+ prompt,
99
+ aspectRatio: this.config.aspectRatio,
100
+ responseFormat: 'base64',
101
+ watermark: false,
102
+ });
103
+ if (!result.success || !result.imageData) {
104
+ throw new Error(result.error || 'Failed to generate image');
105
+ }
106
+ // 保存生成的图片
107
+ const newImagePath = await this.saveGeneratedImage(result.imageData, url, basePath);
108
+ // 更新 Markdown 中的图片路径
109
+ const newSyntax = syntax.replace(url, newImagePath);
110
+ updatedMarkdown = updatedMarkdown.replace(syntax, newSyntax);
111
+ details.push({
112
+ original: url,
113
+ generated: newImagePath,
114
+ });
115
+ successCount++;
116
+ if (this.config.verbose) {
117
+ console.log(` ✅ 成功: ${newImagePath}`);
118
+ }
119
+ }
120
+ catch (error) {
121
+ details.push({
122
+ original: url,
123
+ error: error.message,
124
+ });
125
+ failedCount++;
126
+ if (this.config.verbose) {
127
+ console.log(` ❌ 失败: ${error.message}`);
128
+ }
129
+ }
130
+ }
131
+ return {
132
+ processed: images.length,
133
+ success: successCount,
134
+ failed: failedCount,
135
+ markdown: updatedMarkdown,
136
+ details,
137
+ };
138
+ }
139
+ /**
140
+ * 从 Markdown 中提取所有图片
141
+ */
142
+ extractImages(markdown) {
143
+ const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g;
144
+ const images = [];
145
+ let match;
146
+ while ((match = imageRegex.exec(markdown)) !== null) {
147
+ images.push({
148
+ syntax: match[0],
149
+ alt: match[1],
150
+ url: match[2],
151
+ });
152
+ }
153
+ return images;
154
+ }
155
+ /**
156
+ * 解析图片路径(支持本地路径和 URL)
157
+ */
158
+ resolveImagePath(url, basePath) {
159
+ // 如果是 HTTP URL,直接返回
160
+ if (url.startsWith('http://') || url.startsWith('https://')) {
161
+ return url;
162
+ }
163
+ // 本地路径:需要转换为绝对路径或可访问的 URL
164
+ if (basePath) {
165
+ const absolutePath = (0, path_1.join)((0, path_1.dirname)(basePath), url);
166
+ // MiniMax API 需要 URL,本地文件需要先上传或转 base64
167
+ // 这里先读取文件转 base64 data URL
168
+ if ((0, fs_1.existsSync)(absolutePath)) {
169
+ const imageBuffer = (0, fs_1.readFileSync)(absolutePath);
170
+ const ext = (0, path_1.extname)(absolutePath).toLowerCase();
171
+ const mimeType = this.getMimeType(ext);
172
+ return `data:${mimeType};base64,${imageBuffer.toString('base64')}`;
173
+ }
174
+ }
175
+ return url;
176
+ }
177
+ /**
178
+ * 获取 MIME 类型
179
+ */
180
+ getMimeType(ext) {
181
+ const mimeTypes = {
182
+ '.jpg': 'image/jpeg',
183
+ '.jpeg': 'image/jpeg',
184
+ '.png': 'image/png',
185
+ '.gif': 'image/gif',
186
+ '.webp': 'image/webp',
187
+ '.bmp': 'image/bmp',
188
+ };
189
+ return mimeTypes[ext] || 'image/jpeg';
190
+ }
191
+ /**
192
+ * 构建生成提示词
193
+ */
194
+ buildPrompt(alt) {
195
+ const template = this.config.promptTemplate || DEFAULT_PROMPT_TEMPLATE;
196
+ if (alt && alt.trim()) {
197
+ return `${template}。图片描述:${alt}`;
198
+ }
199
+ return template;
200
+ }
201
+ /**
202
+ * 保存生成的图片
203
+ */
204
+ async saveGeneratedImage(base64Data, originalUrl, basePath) {
205
+ const outputDir = this.config.outputDir || (basePath ? (0, path_1.join)((0, path_1.dirname)(basePath), 'generated-images') : './generated-images');
206
+ // 确保输出目录存在
207
+ if (!(0, fs_1.existsSync)(outputDir)) {
208
+ (0, fs_1.mkdirSync)(outputDir, { recursive: true });
209
+ }
210
+ // 生成文件名
211
+ const originalName = (0, path_1.basename)(originalUrl, (0, path_1.extname)(originalUrl));
212
+ const timestamp = Date.now();
213
+ const newFileName = this.config.overwrite
214
+ ? `${originalName}.jpg`
215
+ : `${originalName}_${timestamp}.jpg`;
216
+ const newFilePath = (0, path_1.join)(outputDir, newFileName);
217
+ // 保存图片
218
+ const imageBuffer = Buffer.from(base64Data, 'base64');
219
+ (0, fs_1.writeFileSync)(newFilePath, imageBuffer);
220
+ // 返回相对路径
221
+ if (basePath) {
222
+ const baseDir = (0, path_1.dirname)(basePath);
223
+ return newFilePath.replace(baseDir + '/', './');
224
+ }
225
+ return newFilePath;
226
+ }
227
+ }
228
+ exports.ImageProcessor = ImageProcessor;
229
+ //# sourceMappingURL=image-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../../src/core/image-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ImageProvider, ImageGenerationOptions, ImageGenerationResult } from '../../types';
2
+ export declare const DEFAULT_DOUBAO_IMAGE_URL = "https://visual.volcengineapi.com";
3
+ export declare class DoubaoImageProvider implements ImageProvider {
4
+ name: string;
5
+ private apiKey;
6
+ private model;
7
+ private baseUrl;
8
+ constructor(apiKey: string, model?: string, baseUrl?: string);
9
+ generateImage(options: ImageGenerationOptions): Promise<ImageGenerationResult>;
10
+ private aspectRatioToSize;
11
+ }
12
+ //# sourceMappingURL=doubao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.d.ts","sourceRoot":"","sources":["../../../src/core/image-providers/doubao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE3F,eAAO,MAAM,wBAAwB,qCAAqC,CAAC;AAE3E,qBAAa,mBAAoB,YAAW,aAAa;IACvD,IAAI,SAAkB;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAuB,EAAE,OAAO,CAAC,EAAE,MAAM;IAMtE,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA+DpF,OAAO,CAAC,iBAAiB;CAY1B"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DoubaoImageProvider = exports.DEFAULT_DOUBAO_IMAGE_URL = void 0;
4
+ exports.DEFAULT_DOUBAO_IMAGE_URL = 'https://visual.volcengineapi.com';
5
+ class DoubaoImageProvider {
6
+ constructor(apiKey, model = 'general_v2.0', baseUrl) {
7
+ this.name = 'doubao-image';
8
+ this.apiKey = apiKey;
9
+ this.model = model;
10
+ this.baseUrl = baseUrl || exports.DEFAULT_DOUBAO_IMAGE_URL;
11
+ }
12
+ async generateImage(options) {
13
+ const { referenceImage, prompt, aspectRatio = '1:1', } = options;
14
+ try {
15
+ const { width, height } = this.aspectRatioToSize(aspectRatio);
16
+ const payload = {
17
+ req_key: 'high_aes_general_v20',
18
+ prompt,
19
+ model_version: this.model,
20
+ width,
21
+ height,
22
+ use_sr: true,
23
+ return_url: false,
24
+ };
25
+ const response = await fetch(`${this.baseUrl}/`, {
26
+ method: 'POST',
27
+ headers: {
28
+ 'Authorization': `Bearer ${this.apiKey}`,
29
+ 'Content-Type': 'application/json',
30
+ },
31
+ body: JSON.stringify(payload),
32
+ });
33
+ if (!response.ok) {
34
+ const errorText = await response.text();
35
+ throw new Error(`Doubao API error: ${response.status} - ${errorText}`);
36
+ }
37
+ const result = await response.json();
38
+ if (result.code !== 10000) {
39
+ throw new Error(`Doubao API error: ${result.message}`);
40
+ }
41
+ const imageData = result.data?.binary_data_base64?.[0];
42
+ if (!imageData) {
43
+ throw new Error('No image data returned');
44
+ }
45
+ return {
46
+ success: true,
47
+ imageData,
48
+ format: 'base64',
49
+ };
50
+ }
51
+ catch (error) {
52
+ return {
53
+ success: false,
54
+ format: 'base64',
55
+ error: error.message,
56
+ };
57
+ }
58
+ }
59
+ aspectRatioToSize(aspectRatio) {
60
+ const sizeMap = {
61
+ '1:1': { width: 1024, height: 1024 },
62
+ '16:9': { width: 1280, height: 720 },
63
+ '9:16': { width: 720, height: 1280 },
64
+ '4:3': { width: 1024, height: 768 },
65
+ '3:4': { width: 768, height: 1024 },
66
+ '3:2': { width: 1200, height: 800 },
67
+ '2:3': { width: 800, height: 1200 },
68
+ };
69
+ return sizeMap[aspectRatio] || { width: 1024, height: 1024 };
70
+ }
71
+ }
72
+ exports.DoubaoImageProvider = DoubaoImageProvider;
73
+ //# sourceMappingURL=doubao.js.map