markdown-ai-rewriter 0.4.1 → 0.5.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 (93) hide show
  1. package/dist/cli.js +135 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/core/rewriter.d.ts +9 -0
  4. package/dist/core/rewriter.d.ts.map +1 -1
  5. package/dist/core/rewriter.js +116 -11
  6. package/dist/core/rewriter.js.map +1 -1
  7. package/dist/core/text-providers/anthropic.d.ts +12 -0
  8. package/dist/core/text-providers/anthropic.d.ts.map +1 -0
  9. package/dist/core/text-providers/anthropic.js +78 -0
  10. package/dist/core/text-providers/anthropic.js.map +1 -0
  11. package/dist/core/text-providers/azure-openai.d.ts +15 -0
  12. package/dist/core/text-providers/azure-openai.d.ts.map +1 -0
  13. package/dist/core/text-providers/azure-openai.js +87 -0
  14. package/dist/core/text-providers/azure-openai.js.map +1 -0
  15. package/dist/core/text-providers/base.d.ts +12 -0
  16. package/dist/core/text-providers/base.d.ts.map +1 -0
  17. package/dist/core/text-providers/base.js +66 -0
  18. package/dist/core/text-providers/base.js.map +1 -0
  19. package/dist/core/text-providers/deepseek.d.ts +6 -0
  20. package/dist/core/text-providers/deepseek.d.ts.map +1 -0
  21. package/dist/core/text-providers/deepseek.js +12 -0
  22. package/dist/core/text-providers/deepseek.js.map +1 -0
  23. package/dist/core/text-providers/doubao.d.ts +6 -0
  24. package/dist/core/text-providers/doubao.d.ts.map +1 -0
  25. package/dist/core/text-providers/doubao.js +12 -0
  26. package/dist/core/text-providers/doubao.js.map +1 -0
  27. package/dist/core/text-providers/gemini.d.ts +6 -0
  28. package/dist/core/text-providers/gemini.d.ts.map +1 -0
  29. package/dist/core/text-providers/gemini.js +12 -0
  30. package/dist/core/text-providers/gemini.js.map +1 -0
  31. package/dist/core/text-providers/glm.d.ts +6 -0
  32. package/dist/core/text-providers/glm.d.ts.map +1 -0
  33. package/dist/core/text-providers/glm.js +12 -0
  34. package/dist/core/text-providers/glm.js.map +1 -0
  35. package/dist/core/text-providers/minimax.d.ts +20 -0
  36. package/dist/core/text-providers/minimax.d.ts.map +1 -0
  37. package/dist/core/text-providers/minimax.js +88 -0
  38. package/dist/core/text-providers/minimax.js.map +1 -0
  39. package/dist/core/text-providers/openai-compatible.d.ts +14 -0
  40. package/dist/core/text-providers/openai-compatible.d.ts.map +1 -0
  41. package/dist/core/text-providers/openai-compatible.js +82 -0
  42. package/dist/core/text-providers/openai-compatible.js.map +1 -0
  43. package/dist/core/text-providers/openai.d.ts +12 -0
  44. package/dist/core/text-providers/openai.d.ts.map +1 -0
  45. package/dist/core/text-providers/openai.js +77 -0
  46. package/dist/core/text-providers/openai.js.map +1 -0
  47. package/dist/core/text-providers/openrouter.d.ts +6 -0
  48. package/dist/core/text-providers/openrouter.d.ts.map +1 -0
  49. package/dist/core/text-providers/openrouter.js +12 -0
  50. package/dist/core/text-providers/openrouter.js.map +1 -0
  51. package/dist/core/text-providers/qwen.d.ts +6 -0
  52. package/dist/core/text-providers/qwen.d.ts.map +1 -0
  53. package/dist/core/text-providers/qwen.js +12 -0
  54. package/dist/core/text-providers/qwen.js.map +1 -0
  55. package/dist/core/text-providers/wenxin.d.ts +6 -0
  56. package/dist/core/text-providers/wenxin.d.ts.map +1 -0
  57. package/dist/core/text-providers/wenxin.js +12 -0
  58. package/dist/core/text-providers/wenxin.js.map +1 -0
  59. package/dist/core/video-generator.d.ts +65 -0
  60. package/dist/core/video-generator.d.ts.map +1 -0
  61. package/dist/core/video-generator.js +140 -0
  62. package/dist/core/video-generator.js.map +1 -0
  63. package/dist/core/video-providers/doubao.d.ts +52 -0
  64. package/dist/core/video-providers/doubao.d.ts.map +1 -0
  65. package/dist/core/video-providers/doubao.js +148 -0
  66. package/dist/core/video-providers/doubao.js.map +1 -0
  67. package/dist/core/video-providers/index.d.ts +6 -0
  68. package/dist/core/video-providers/index.d.ts.map +1 -0
  69. package/dist/core/video-providers/index.js +16 -0
  70. package/dist/core/video-providers/index.js.map +1 -0
  71. package/dist/core/video-providers/kling.d.ts +27 -0
  72. package/dist/core/video-providers/kling.d.ts.map +1 -0
  73. package/dist/core/video-providers/kling.js +113 -0
  74. package/dist/core/video-providers/kling.js.map +1 -0
  75. package/dist/core/video-providers/minimax.d.ts +30 -0
  76. package/dist/core/video-providers/minimax.d.ts.map +1 -0
  77. package/dist/core/video-providers/minimax.js +133 -0
  78. package/dist/core/video-providers/minimax.js.map +1 -0
  79. package/dist/core/video-providers/runway.d.ts +22 -0
  80. package/dist/core/video-providers/runway.d.ts.map +1 -0
  81. package/dist/core/video-providers/runway.js +121 -0
  82. package/dist/core/video-providers/runway.js.map +1 -0
  83. package/dist/core/video-providers/types.d.ts +41 -0
  84. package/dist/core/video-providers/types.d.ts.map +1 -0
  85. package/dist/core/video-providers/types.js +3 -0
  86. package/dist/core/video-providers/types.js.map +1 -0
  87. package/dist/index.d.ts +21 -13
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +29 -14
  90. package/dist/index.js.map +1 -1
  91. package/dist/types/index.d.ts +36 -0
  92. package/dist/types/index.d.ts.map +1 -1
  93. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wenxin.js","sourceRoot":"","sources":["../../../src/core/text-providers/wenxin.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,uBAAuB,GAAG,iCAAiC,CAAC;AAEzE,MAAa,cAAe,SAAQ,4CAAwB;IAC1D,YAAY,MAAc,EAAE,QAAgB,qBAAqB,EAAE,OAAgB;QACjF,KAAK,CACH,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,+BAAuB,EACjE,qDAAqD,CACtD,CAAC;IACJ,CAAC;CACF;AAVD,wCAUC"}
@@ -0,0 +1,65 @@
1
+ import { RewriteOptions } from '../types';
2
+ import { VideoGenerationResult } from './video-providers/types';
3
+ export { DEFAULT_MINIMAX_VIDEO_URL } from './video-providers/minimax';
4
+ export { DEFAULT_DOUBAO_VIDEO_URL } from './video-providers/doubao';
5
+ export { DEFAULT_KLING_VIDEO_URL } from './video-providers/kling';
6
+ export type { VideoGenerationResult } from './video-providers/types';
7
+ export interface VideoGenerationConfig {
8
+ /** 视频生成 Provider */
9
+ provider: 'minimax' | 'doubao' | 'kling' | 'runway';
10
+ /** API Key */
11
+ apiKey: string;
12
+ /** 视频模型 */
13
+ model?: string;
14
+ /** 视频时长(秒) */
15
+ duration?: number;
16
+ /** 视频分辨率 */
17
+ resolution?: string;
18
+ /** 宽高比 */
19
+ aspectRatio?: string;
20
+ /** 是否自动优化提示词,默认 true */
21
+ promptOptimizer?: boolean;
22
+ /** 轮询间隔(毫秒),默认 5000 */
23
+ pollInterval?: number;
24
+ /** 最大轮询次数,默认 120(10分钟) */
25
+ maxPollAttempts?: number;
26
+ /** 是否显示详细日志 */
27
+ verbose?: boolean;
28
+ }
29
+ /**
30
+ * 视频生成器
31
+ *
32
+ * 支持的 Provider:
33
+ * - minimax: MiniMax Hailuo (默认)
34
+ * - doubao: 火山引擎豆包 Seedance
35
+ * - kling: 快手可灵
36
+ * - runway: Runway Gen-4.5
37
+ */
38
+ export declare class VideoGenerator {
39
+ private config;
40
+ private provider;
41
+ constructor(config: VideoGenerationConfig);
42
+ /**
43
+ * 创建视频 Provider
44
+ */
45
+ private createProvider;
46
+ /**
47
+ * 从 Markdown 生成视频
48
+ */
49
+ generateFromMarkdown(markdown: string, summaryProvider?: {
50
+ rewrite: (text: string, options: RewriteOptions) => Promise<string>;
51
+ }): Promise<VideoGenerationResult>;
52
+ /**
53
+ * 使用 AI 生成视频脚本提示词
54
+ */
55
+ private generateVideoPrompt;
56
+ /**
57
+ * 简单提取提示词(不使用 AI)
58
+ */
59
+ private extractSimplePrompt;
60
+ /**
61
+ * 生成视频
62
+ */
63
+ generateVideo(prompt: string): Promise<VideoGenerationResult>;
64
+ }
65
+ //# sourceMappingURL=video-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-generator.d.ts","sourceRoot":"","sources":["../../src/core/video-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAiB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAM/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,oBAAoB;IACpB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,MAAM,EAAE,qBAAqB;IAczC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,GACxF,OAAO,CAAC,qBAAqB,CAAC;IAyBjC;;OAEG;YACW,mBAAmB;IA2BjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAWpE"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VideoGenerator = exports.DEFAULT_KLING_VIDEO_URL = exports.DEFAULT_DOUBAO_VIDEO_URL = exports.DEFAULT_MINIMAX_VIDEO_URL = void 0;
4
+ const minimax_1 = require("./video-providers/minimax");
5
+ const doubao_1 = require("./video-providers/doubao");
6
+ const kling_1 = require("./video-providers/kling");
7
+ const runway_1 = require("./video-providers/runway");
8
+ var minimax_2 = require("./video-providers/minimax");
9
+ Object.defineProperty(exports, "DEFAULT_MINIMAX_VIDEO_URL", { enumerable: true, get: function () { return minimax_2.DEFAULT_MINIMAX_VIDEO_URL; } });
10
+ var doubao_2 = require("./video-providers/doubao");
11
+ Object.defineProperty(exports, "DEFAULT_DOUBAO_VIDEO_URL", { enumerable: true, get: function () { return doubao_2.DEFAULT_DOUBAO_VIDEO_URL; } });
12
+ var kling_2 = require("./video-providers/kling");
13
+ Object.defineProperty(exports, "DEFAULT_KLING_VIDEO_URL", { enumerable: true, get: function () { return kling_2.DEFAULT_KLING_VIDEO_URL; } });
14
+ /**
15
+ * 视频生成器
16
+ *
17
+ * 支持的 Provider:
18
+ * - minimax: MiniMax Hailuo (默认)
19
+ * - doubao: 火山引擎豆包 Seedance
20
+ * - kling: 快手可灵
21
+ * - runway: Runway Gen-4.5
22
+ */
23
+ class VideoGenerator {
24
+ constructor(config) {
25
+ this.config = {
26
+ duration: 6,
27
+ resolution: '1080P',
28
+ aspectRatio: '16:9',
29
+ promptOptimizer: true,
30
+ pollInterval: 5000,
31
+ maxPollAttempts: 120,
32
+ ...config,
33
+ };
34
+ this.provider = this.createProvider();
35
+ }
36
+ /**
37
+ * 创建视频 Provider
38
+ */
39
+ createProvider() {
40
+ const { provider, apiKey, model, pollInterval, maxPollAttempts, verbose } = this.config;
41
+ const options = { pollInterval, maxPollAttempts, verbose };
42
+ switch (provider) {
43
+ case 'minimax':
44
+ return new minimax_1.MiniMaxVideoProvider(apiKey, model || 'MiniMax-Hailuo-2.3', options);
45
+ case 'doubao':
46
+ return new doubao_1.DoubaoVideoProvider(apiKey, model || 'seedance-2.0-lite-t2v-250428', options);
47
+ case 'kling':
48
+ return new kling_1.KlingVideoProvider(apiKey, model || 'kling-v1', options);
49
+ case 'runway':
50
+ return new runway_1.RunwayVideoProvider(apiKey, model || 'gen4.5', { verbose });
51
+ default:
52
+ throw new Error(`不支持的视频 Provider: ${provider}`);
53
+ }
54
+ }
55
+ /**
56
+ * 从 Markdown 生成视频
57
+ */
58
+ async generateFromMarkdown(markdown, summaryProvider) {
59
+ try {
60
+ // 1. 生成视频脚本提示词
61
+ let videoPrompt;
62
+ if (summaryProvider) {
63
+ videoPrompt = await this.generateVideoPrompt(markdown, summaryProvider);
64
+ }
65
+ else {
66
+ videoPrompt = this.extractSimplePrompt(markdown);
67
+ }
68
+ if (this.config.verbose) {
69
+ console.log(`🎬 视频脚本提示词:\n${videoPrompt}\n`);
70
+ }
71
+ // 2. 调用 Provider 生成视频
72
+ return await this.generateVideo(videoPrompt);
73
+ }
74
+ catch (error) {
75
+ return {
76
+ success: false,
77
+ error: error.message,
78
+ };
79
+ }
80
+ }
81
+ /**
82
+ * 使用 AI 生成视频脚本提示词
83
+ */
84
+ async generateVideoPrompt(markdown, provider) {
85
+ const duration = this.config.duration || 6;
86
+ const prompt = `请将以下文章内容转换为一个 ${duration} 秒短视频的脚本提示词。
87
+
88
+ 要求:
89
+ 1. 提取文章的核心主题和关键信息
90
+ 2. 用生动、视觉化的语言描述场景
91
+ 3. 适合 AI 视频生成,包含具体的画面描述
92
+ 4. 可以添加镜头指令如 [Zoom in]、[Pan left]、[Static shot] 等
93
+ 5. 输出长度控制在 200-500 字之间
94
+ 6. 只输出视频脚本,不要其他解释
95
+
96
+ 文章内容:
97
+ ${markdown.slice(0, 3000)}`;
98
+ const result = await provider.rewrite(prompt, {
99
+ style: 'creative',
100
+ temperature: 0.8,
101
+ maxTokens: 1000,
102
+ });
103
+ return result;
104
+ }
105
+ /**
106
+ * 简单提取提示词(不使用 AI)
107
+ */
108
+ extractSimplePrompt(markdown) {
109
+ let text = markdown
110
+ .replace(/^#+\s+/gm, '')
111
+ .replace(/!\[.*?\]\(.*?\)/g, '')
112
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
113
+ .replace(/```[\s\S]*?```/g, '')
114
+ .replace(/`[^`]+`/g, '')
115
+ .replace(/[*_~]+/g, '')
116
+ .replace(/>\s+/g, '')
117
+ .replace(/[-*+]\s+/g, '')
118
+ .replace(/\n{2,}/g, '\n')
119
+ .trim();
120
+ if (text.length > 500) {
121
+ text = text.slice(0, 500) + '...';
122
+ }
123
+ return `基于以下内容生成一个视觉化的场景 [Static shot]:\n${text}`;
124
+ }
125
+ /**
126
+ * 生成视频
127
+ */
128
+ async generateVideo(prompt) {
129
+ const { duration, resolution, aspectRatio, promptOptimizer } = this.config;
130
+ return this.provider.generateVideo({
131
+ prompt,
132
+ duration,
133
+ resolution,
134
+ aspectRatio,
135
+ promptOptimizer,
136
+ });
137
+ }
138
+ }
139
+ exports.VideoGenerator = VideoGenerator;
140
+ //# sourceMappingURL=video-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-generator.js","sourceRoot":"","sources":["../../src/core/video-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
2
+ export declare const DEFAULT_DOUBAO_VIDEO_URL = "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks";
3
+ export declare const DEFAULT_DOUBAO_VIDEO_QUERY_URL = "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks";
4
+ /**
5
+ * Seedance 模型列表
6
+ *
7
+ * 文生视频 (T2V):
8
+ * - seedance-2.0-lite-t2v-250428 (Seedance 2.0 Lite)
9
+ * - seedance-1.5-pro-t2v-250328 (Seedance 1.5 Pro)
10
+ * - seedance-1.0-pro-t2v (Seedance 1.0 Pro)
11
+ * - seedance-1.0-lite-t2v (Seedance 1.0 Lite)
12
+ *
13
+ * 图生视频 (I2V):
14
+ * - seedance-2.0-lite-i2v-250428 (Seedance 2.0 Lite)
15
+ * - seedance-1.5-pro-i2v-250328 (Seedance 1.5 Pro)
16
+ * - seedance-1.0-pro-i2v (Seedance 1.0 Pro)
17
+ * - seedance-1.0-lite-i2v (Seedance 1.0 Lite)
18
+ */
19
+ export declare const SEEDANCE_MODELS: {
20
+ 'seedance-2.0-lite-t2v': string;
21
+ 'seedance-2.0-lite-i2v': string;
22
+ 'seedance-1.5-pro-t2v': string;
23
+ 'seedance-1.5-pro-i2v': string;
24
+ 'seedance-1.0-pro-t2v': string;
25
+ 'seedance-1.0-pro-i2v': string;
26
+ 'seedance-1.0-lite-t2v': string;
27
+ 'seedance-1.0-lite-i2v': string;
28
+ };
29
+ /**
30
+ * 火山引擎豆包视频生成 Provider (Seedance)
31
+ *
32
+ * 支持模型:
33
+ * - Seedance 2.0 Lite (默认,最新)
34
+ * - Seedance 1.5 Pro
35
+ * - Seedance 1.0 Pro / Lite
36
+ */
37
+ export declare class DoubaoVideoProvider implements VideoProvider {
38
+ name: string;
39
+ private apiKey;
40
+ private model;
41
+ private pollInterval;
42
+ private maxPollAttempts;
43
+ private verbose;
44
+ constructor(apiKey: string, model?: string, options?: {
45
+ pollInterval?: number;
46
+ maxPollAttempts?: number;
47
+ verbose?: boolean;
48
+ });
49
+ generateVideo(options: VideoGenerationOptions): Promise<VideoGenerationResult>;
50
+ private sleep;
51
+ }
52
+ //# sourceMappingURL=doubao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/doubao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvF,eAAO,MAAM,wBAAwB,wEAAwE,CAAC;AAC9G,eAAO,MAAM,8BAA8B,wEAAwE,CAAC;AAEpH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAY3B,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,IAAI,SAAkB;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAU;gBAGvB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAuC,EAC9C,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAS5E,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA4HpF,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DoubaoVideoProvider = exports.SEEDANCE_MODELS = exports.DEFAULT_DOUBAO_VIDEO_QUERY_URL = exports.DEFAULT_DOUBAO_VIDEO_URL = void 0;
4
+ exports.DEFAULT_DOUBAO_VIDEO_URL = 'https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks';
5
+ exports.DEFAULT_DOUBAO_VIDEO_QUERY_URL = 'https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks';
6
+ /**
7
+ * Seedance 模型列表
8
+ *
9
+ * 文生视频 (T2V):
10
+ * - seedance-2.0-lite-t2v-250428 (Seedance 2.0 Lite)
11
+ * - seedance-1.5-pro-t2v-250328 (Seedance 1.5 Pro)
12
+ * - seedance-1.0-pro-t2v (Seedance 1.0 Pro)
13
+ * - seedance-1.0-lite-t2v (Seedance 1.0 Lite)
14
+ *
15
+ * 图生视频 (I2V):
16
+ * - seedance-2.0-lite-i2v-250428 (Seedance 2.0 Lite)
17
+ * - seedance-1.5-pro-i2v-250328 (Seedance 1.5 Pro)
18
+ * - seedance-1.0-pro-i2v (Seedance 1.0 Pro)
19
+ * - seedance-1.0-lite-i2v (Seedance 1.0 Lite)
20
+ */
21
+ exports.SEEDANCE_MODELS = {
22
+ // Seedance 2.0
23
+ 'seedance-2.0-lite-t2v': 'seedance-2.0-lite-t2v-250428',
24
+ 'seedance-2.0-lite-i2v': 'seedance-2.0-lite-i2v-250428',
25
+ // Seedance 1.5
26
+ 'seedance-1.5-pro-t2v': 'seedance-1.5-pro-t2v-250328',
27
+ 'seedance-1.5-pro-i2v': 'seedance-1.5-pro-i2v-250328',
28
+ // Seedance 1.0
29
+ 'seedance-1.0-pro-t2v': 'seedance-1.0-pro-t2v',
30
+ 'seedance-1.0-pro-i2v': 'seedance-1.0-pro-i2v',
31
+ 'seedance-1.0-lite-t2v': 'seedance-1.0-lite-t2v',
32
+ 'seedance-1.0-lite-i2v': 'seedance-1.0-lite-i2v',
33
+ };
34
+ /**
35
+ * 火山引擎豆包视频生成 Provider (Seedance)
36
+ *
37
+ * 支持模型:
38
+ * - Seedance 2.0 Lite (默认,最新)
39
+ * - Seedance 1.5 Pro
40
+ * - Seedance 1.0 Pro / Lite
41
+ */
42
+ class DoubaoVideoProvider {
43
+ constructor(apiKey, model = 'seedance-2.0-lite-t2v-250428', options) {
44
+ this.name = 'doubao-video';
45
+ this.apiKey = apiKey;
46
+ this.model = model;
47
+ this.pollInterval = options?.pollInterval || 5000;
48
+ this.maxPollAttempts = options?.maxPollAttempts || 120;
49
+ this.verbose = options?.verbose || false;
50
+ }
51
+ async generateVideo(options) {
52
+ const { prompt, duration = 5, aspectRatio = '16:9', } = options;
53
+ if (this.verbose) {
54
+ console.log(`🎬 [豆包] 开始生成视频...`);
55
+ console.log(` 模型: ${this.model}`);
56
+ console.log(` 时长: ${duration}s`);
57
+ console.log(` 宽高比: ${aspectRatio}`);
58
+ }
59
+ try {
60
+ // 1. 创建视频生成任务
61
+ const createResponse = await fetch(exports.DEFAULT_DOUBAO_VIDEO_URL, {
62
+ method: 'POST',
63
+ headers: {
64
+ 'Authorization': `Bearer ${this.apiKey}`,
65
+ 'Content-Type': 'application/json',
66
+ },
67
+ body: JSON.stringify({
68
+ model: this.model,
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: prompt,
73
+ },
74
+ ],
75
+ video_gen_params: {
76
+ duration,
77
+ aspect_ratio: aspectRatio,
78
+ },
79
+ }),
80
+ });
81
+ if (!createResponse.ok) {
82
+ const errorText = await createResponse.text();
83
+ throw new Error(`创建视频任务失败: ${createResponse.status} - ${errorText}`);
84
+ }
85
+ const createResult = await createResponse.json();
86
+ if (createResult.error) {
87
+ throw new Error(`创建视频任务失败: ${createResult.error.message}`);
88
+ }
89
+ const taskId = createResult.id;
90
+ if (!taskId) {
91
+ throw new Error('未返回任务 ID');
92
+ }
93
+ if (this.verbose) {
94
+ console.log(` 任务 ID: ${taskId}`);
95
+ console.log(` 等待视频生成...`);
96
+ }
97
+ // 2. 轮询任务状态
98
+ let attempts = 0;
99
+ while (attempts < this.maxPollAttempts) {
100
+ await this.sleep(this.pollInterval);
101
+ attempts++;
102
+ const queryResponse = await fetch(`${exports.DEFAULT_DOUBAO_VIDEO_QUERY_URL}/${taskId}`, {
103
+ method: 'GET',
104
+ headers: {
105
+ 'Authorization': `Bearer ${this.apiKey}`,
106
+ },
107
+ });
108
+ if (!queryResponse.ok) {
109
+ continue;
110
+ }
111
+ const queryResult = await queryResponse.json();
112
+ if (this.verbose && attempts % 6 === 0) {
113
+ console.log(` 状态: ${queryResult.status} (${attempts * this.pollInterval / 1000}s)`);
114
+ }
115
+ if (queryResult.status === 'succeeded') {
116
+ const videoContent = queryResult.content?.find(c => c.type === 'video_url');
117
+ const videoUrl = videoContent?.video_url;
118
+ if (!videoUrl) {
119
+ throw new Error('未返回视频 URL');
120
+ }
121
+ if (this.verbose) {
122
+ console.log(`✅ [豆包] 视频生成成功!`);
123
+ }
124
+ return {
125
+ success: true,
126
+ videoUrl,
127
+ taskId,
128
+ };
129
+ }
130
+ if (queryResult.status === 'failed') {
131
+ throw new Error(`视频生成失败: ${queryResult.error?.message || '未知错误'}`);
132
+ }
133
+ }
134
+ throw new Error(`视频生成超时(等待 ${this.maxPollAttempts * this.pollInterval / 1000}s)`);
135
+ }
136
+ catch (error) {
137
+ return {
138
+ success: false,
139
+ error: error.message,
140
+ };
141
+ }
142
+ }
143
+ sleep(ms) {
144
+ return new Promise(resolve => setTimeout(resolve, ms));
145
+ }
146
+ }
147
+ exports.DoubaoVideoProvider = DoubaoVideoProvider;
148
+ //# sourceMappingURL=doubao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.js","sourceRoot":"","sources":["../../../src/core/video-providers/doubao.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { MiniMaxVideoProvider, DEFAULT_MINIMAX_VIDEO_URL } from './minimax';
2
+ export { DoubaoVideoProvider, DEFAULT_DOUBAO_VIDEO_URL, SEEDANCE_MODELS } from './doubao';
3
+ export { KlingVideoProvider, DEFAULT_KLING_VIDEO_URL } from './kling';
4
+ export { RunwayVideoProvider } from './runway';
5
+ export type { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RunwayVideoProvider = exports.DEFAULT_KLING_VIDEO_URL = exports.KlingVideoProvider = exports.SEEDANCE_MODELS = exports.DEFAULT_DOUBAO_VIDEO_URL = exports.DoubaoVideoProvider = exports.DEFAULT_MINIMAX_VIDEO_URL = exports.MiniMaxVideoProvider = void 0;
4
+ var minimax_1 = require("./minimax");
5
+ Object.defineProperty(exports, "MiniMaxVideoProvider", { enumerable: true, get: function () { return minimax_1.MiniMaxVideoProvider; } });
6
+ Object.defineProperty(exports, "DEFAULT_MINIMAX_VIDEO_URL", { enumerable: true, get: function () { return minimax_1.DEFAULT_MINIMAX_VIDEO_URL; } });
7
+ var doubao_1 = require("./doubao");
8
+ Object.defineProperty(exports, "DoubaoVideoProvider", { enumerable: true, get: function () { return doubao_1.DoubaoVideoProvider; } });
9
+ Object.defineProperty(exports, "DEFAULT_DOUBAO_VIDEO_URL", { enumerable: true, get: function () { return doubao_1.DEFAULT_DOUBAO_VIDEO_URL; } });
10
+ Object.defineProperty(exports, "SEEDANCE_MODELS", { enumerable: true, get: function () { return doubao_1.SEEDANCE_MODELS; } });
11
+ var kling_1 = require("./kling");
12
+ Object.defineProperty(exports, "KlingVideoProvider", { enumerable: true, get: function () { return kling_1.KlingVideoProvider; } });
13
+ Object.defineProperty(exports, "DEFAULT_KLING_VIDEO_URL", { enumerable: true, get: function () { return kling_1.DEFAULT_KLING_VIDEO_URL; } });
14
+ var runway_1 = require("./runway");
15
+ Object.defineProperty(exports, "RunwayVideoProvider", { enumerable: true, get: function () { return runway_1.RunwayVideoProvider; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/video-providers/index.ts"],"names":[],"mappings":";;;AAAA,qCAA4E;AAAnE,+GAAA,oBAAoB,OAAA;AAAE,oHAAA,yBAAyB,OAAA;AACxD,mCAA0F;AAAjF,6GAAA,mBAAmB,OAAA;AAAE,kHAAA,wBAAwB,OAAA;AAAE,yGAAA,eAAe,OAAA;AACvE,iCAAsE;AAA7D,2GAAA,kBAAkB,OAAA;AAAE,gHAAA,uBAAuB,OAAA;AACpD,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA"}
@@ -0,0 +1,27 @@
1
+ import { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
2
+ export declare const DEFAULT_KLING_VIDEO_URL = "https://api.klingai.com/v1/videos/text2video";
3
+ export declare const DEFAULT_KLING_VIDEO_QUERY_URL = "https://api.klingai.com/v1/videos/text2video";
4
+ /**
5
+ * 快手可灵视频生成 Provider (Kling)
6
+ *
7
+ * 支持模型:
8
+ * - kling-v1 (默认)
9
+ * - kling-v1-5
10
+ * - kling-v1-6
11
+ */
12
+ export declare class KlingVideoProvider implements VideoProvider {
13
+ name: string;
14
+ private apiKey;
15
+ private model;
16
+ private pollInterval;
17
+ private maxPollAttempts;
18
+ private verbose;
19
+ constructor(apiKey: string, model?: string, options?: {
20
+ pollInterval?: number;
21
+ maxPollAttempts?: number;
22
+ verbose?: boolean;
23
+ });
24
+ generateVideo(options: VideoGenerationOptions): Promise<VideoGenerationResult>;
25
+ private sleep;
26
+ }
27
+ //# sourceMappingURL=kling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kling.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/kling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvF,eAAO,MAAM,uBAAuB,iDAAiD,CAAC;AACtF,eAAO,MAAM,6BAA6B,iDAAiD,CAAC;AAE5F;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,IAAI,SAAiB;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAU;gBAGvB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAmB,EAC1B,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAS5E,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwHpF,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KlingVideoProvider = exports.DEFAULT_KLING_VIDEO_QUERY_URL = exports.DEFAULT_KLING_VIDEO_URL = void 0;
4
+ exports.DEFAULT_KLING_VIDEO_URL = 'https://api.klingai.com/v1/videos/text2video';
5
+ exports.DEFAULT_KLING_VIDEO_QUERY_URL = 'https://api.klingai.com/v1/videos/text2video';
6
+ /**
7
+ * 快手可灵视频生成 Provider (Kling)
8
+ *
9
+ * 支持模型:
10
+ * - kling-v1 (默认)
11
+ * - kling-v1-5
12
+ * - kling-v1-6
13
+ */
14
+ class KlingVideoProvider {
15
+ constructor(apiKey, model = 'kling-v1', options) {
16
+ this.name = 'kling-video';
17
+ this.apiKey = apiKey;
18
+ this.model = model;
19
+ this.pollInterval = options?.pollInterval || 5000;
20
+ this.maxPollAttempts = options?.maxPollAttempts || 120;
21
+ this.verbose = options?.verbose || false;
22
+ }
23
+ async generateVideo(options) {
24
+ const { prompt, duration = 5, aspectRatio = '16:9', } = options;
25
+ if (this.verbose) {
26
+ console.log(`🎬 [可灵] 开始生成视频...`);
27
+ console.log(` 模型: ${this.model}`);
28
+ console.log(` 时长: ${duration}s`);
29
+ console.log(` 宽高比: ${aspectRatio}`);
30
+ }
31
+ try {
32
+ // 1. 创建视频生成任务
33
+ const createResponse = await fetch(exports.DEFAULT_KLING_VIDEO_URL, {
34
+ method: 'POST',
35
+ headers: {
36
+ 'Authorization': `Bearer ${this.apiKey}`,
37
+ 'Content-Type': 'application/json',
38
+ },
39
+ body: JSON.stringify({
40
+ model: this.model,
41
+ prompt,
42
+ duration: String(duration),
43
+ aspect_ratio: aspectRatio,
44
+ mode: 'std', // std 或 pro
45
+ }),
46
+ });
47
+ if (!createResponse.ok) {
48
+ const errorText = await createResponse.text();
49
+ throw new Error(`创建视频任务失败: ${createResponse.status} - ${errorText}`);
50
+ }
51
+ const createResult = await createResponse.json();
52
+ if (createResult.code !== 0) {
53
+ throw new Error(`创建视频任务失败: ${createResult.message}`);
54
+ }
55
+ const taskId = createResult.data?.task_id;
56
+ if (!taskId) {
57
+ throw new Error('未返回任务 ID');
58
+ }
59
+ if (this.verbose) {
60
+ console.log(` 任务 ID: ${taskId}`);
61
+ console.log(` 等待视频生成...`);
62
+ }
63
+ // 2. 轮询任务状态
64
+ let attempts = 0;
65
+ while (attempts < this.maxPollAttempts) {
66
+ await this.sleep(this.pollInterval);
67
+ attempts++;
68
+ const queryResponse = await fetch(`${exports.DEFAULT_KLING_VIDEO_QUERY_URL}/${taskId}`, {
69
+ method: 'GET',
70
+ headers: {
71
+ 'Authorization': `Bearer ${this.apiKey}`,
72
+ },
73
+ });
74
+ if (!queryResponse.ok) {
75
+ continue;
76
+ }
77
+ const queryResult = await queryResponse.json();
78
+ if (this.verbose && attempts % 6 === 0) {
79
+ console.log(` 状态: ${queryResult.data?.task_status} (${attempts * this.pollInterval / 1000}s)`);
80
+ }
81
+ if (queryResult.data?.task_status === 'succeed') {
82
+ const videoUrl = queryResult.data.task_result?.videos?.[0]?.url;
83
+ if (!videoUrl) {
84
+ throw new Error('未返回视频 URL');
85
+ }
86
+ if (this.verbose) {
87
+ console.log(`✅ [可灵] 视频生成成功!`);
88
+ }
89
+ return {
90
+ success: true,
91
+ videoUrl,
92
+ taskId,
93
+ };
94
+ }
95
+ if (queryResult.data?.task_status === 'failed') {
96
+ throw new Error(`视频生成失败: ${queryResult.message || '未知错误'}`);
97
+ }
98
+ }
99
+ throw new Error(`视频生成超时(等待 ${this.maxPollAttempts * this.pollInterval / 1000}s)`);
100
+ }
101
+ catch (error) {
102
+ return {
103
+ success: false,
104
+ error: error.message,
105
+ };
106
+ }
107
+ }
108
+ sleep(ms) {
109
+ return new Promise(resolve => setTimeout(resolve, ms));
110
+ }
111
+ }
112
+ exports.KlingVideoProvider = KlingVideoProvider;
113
+ //# sourceMappingURL=kling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kling.js","sourceRoot":"","sources":["../../../src/core/video-providers/kling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
2
+ export declare const DEFAULT_MINIMAX_VIDEO_URL = "https://api.minimax.io/v1/video_generation";
3
+ export declare const DEFAULT_MINIMAX_VIDEO_QUERY_URL = "https://api.minimax.io/v1/query/video_generation";
4
+ export declare const DEFAULT_MINIMAX_FILE_URL = "https://api.minimax.io/v1/files/retrieve";
5
+ /**
6
+ * MiniMax 视频生成 Provider (Hailuo)
7
+ *
8
+ * 支持模型:
9
+ * - MiniMax-Hailuo-2.3 (默认)
10
+ * - MiniMax-Hailuo-02
11
+ * - T2V-01-Director
12
+ * - T2V-01
13
+ */
14
+ export declare class MiniMaxVideoProvider implements VideoProvider {
15
+ name: string;
16
+ private apiKey;
17
+ private model;
18
+ private pollInterval;
19
+ private maxPollAttempts;
20
+ private verbose;
21
+ constructor(apiKey: string, model?: string, options?: {
22
+ pollInterval?: number;
23
+ maxPollAttempts?: number;
24
+ verbose?: boolean;
25
+ });
26
+ generateVideo(options: VideoGenerationOptions): Promise<VideoGenerationResult>;
27
+ private getVideoUrl;
28
+ private sleep;
29
+ }
30
+ //# sourceMappingURL=minimax.d.ts.map