mulmocast 2.9.0 → 2.9.2

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 (127) hide show
  1. package/lib/actions/movie.d.ts +2 -9
  2. package/lib/actions/movie.js +149 -147
  3. package/lib/agents/image_google_agent.d.ts +5 -0
  4. package/lib/agents/image_google_agent.js +86 -0
  5. package/lib/agents/movie_google_agent.d.ts +9 -0
  6. package/lib/agents/movie_google_agent.js +122 -0
  7. package/lib/agents/mulmo_prompts_agent.d.ts +7 -0
  8. package/lib/agents/mulmo_prompts_agent.js +37 -0
  9. package/lib/agents/prompts_data.d.ts +15 -0
  10. package/lib/agents/prompts_data.js +16 -0
  11. package/lib/agents/tts_nijivoice_agent.d.ts +5 -0
  12. package/lib/agents/tts_nijivoice_agent.js +69 -0
  13. package/lib/agents/validate_mulmo_script_agent.d.ts +17 -0
  14. package/lib/agents/validate_mulmo_script_agent.js +34 -0
  15. package/lib/cli/args.d.ts +15 -0
  16. package/lib/cli/args.js +62 -0
  17. package/lib/cli/bin.js +0 -0
  18. package/lib/cli/cli.d.ts +17 -0
  19. package/lib/cli/cli.js +117 -0
  20. package/lib/cli/run.d.ts +2 -0
  21. package/lib/cli/run.js +3 -0
  22. package/lib/cli/tool-args.d.ts +16 -0
  23. package/lib/cli/tool-args.js +64 -0
  24. package/lib/cli/tool-cli.d.ts +2 -0
  25. package/lib/cli/tool-cli.js +32 -0
  26. package/lib/cli/tool_commands/prompt/builder.d.ts +4 -0
  27. package/lib/cli/tool_commands/prompt/builder.js +11 -0
  28. package/lib/cli/tool_commands/prompt/handler.d.ts +4 -0
  29. package/lib/cli/tool_commands/prompt/handler.js +14 -0
  30. package/lib/cli/tool_commands/prompt/index.d.ts +4 -0
  31. package/lib/cli/tool_commands/prompt/index.js +4 -0
  32. package/lib/cli/tool_commands/schema/builder.d.ts +2 -0
  33. package/lib/cli/tool_commands/schema/builder.js +3 -0
  34. package/lib/cli/tool_commands/schema/handler.d.ts +2 -0
  35. package/lib/cli/tool_commands/schema/handler.js +12 -0
  36. package/lib/cli/tool_commands/schema/index.d.ts +4 -0
  37. package/lib/cli/tool_commands/schema/index.js +4 -0
  38. package/lib/cli/tool_commands/scripting/builder.d.ts +20 -0
  39. package/lib/cli/tool_commands/scripting/builder.js +63 -0
  40. package/lib/cli/tool_commands/scripting/handler.d.ts +12 -0
  41. package/lib/cli/tool_commands/scripting/handler.js +36 -0
  42. package/lib/cli/tool_commands/scripting/index.d.ts +4 -0
  43. package/lib/cli/tool_commands/scripting/index.js +4 -0
  44. package/lib/index.d.ts +8 -0
  45. package/lib/index.js +8 -0
  46. package/lib/methods/mulmo_beat.d.ts +3 -0
  47. package/lib/methods/mulmo_beat.js +17 -0
  48. package/lib/methods/mulmo_beat_node.d.ts +3 -0
  49. package/lib/methods/mulmo_presentation_style.d.ts +5 -1
  50. package/lib/methods/mulmo_presentation_style.js +43 -1
  51. package/lib/methods/mulmo_script_template.d.ts +4 -0
  52. package/lib/methods/mulmo_script_template.js +6 -0
  53. package/lib/methods/mulmo_studio.d.ts +8 -0
  54. package/lib/methods/mulmo_studio.js +25 -0
  55. package/lib/methods/mulmo_studio_context.d.ts +6 -1
  56. package/lib/methods/mulmo_studio_context.js +36 -1
  57. package/lib/slide/blocks.d.ts +13 -0
  58. package/lib/slide/blocks.js +251 -0
  59. package/lib/slide/index.d.ts +6 -0
  60. package/lib/slide/index.js +7 -0
  61. package/lib/slide/layouts/big_quote.d.ts +2 -0
  62. package/lib/slide/layouts/big_quote.js +19 -0
  63. package/lib/slide/layouts/columns.d.ts +2 -0
  64. package/lib/slide/layouts/columns.js +53 -0
  65. package/lib/slide/layouts/comparison.d.ts +2 -0
  66. package/lib/slide/layouts/comparison.js +25 -0
  67. package/lib/slide/layouts/funnel.d.ts +2 -0
  68. package/lib/slide/layouts/funnel.js +25 -0
  69. package/lib/slide/layouts/grid.d.ts +2 -0
  70. package/lib/slide/layouts/grid.js +38 -0
  71. package/lib/slide/layouts/index.d.ts +3 -0
  72. package/lib/slide/layouts/index.js +46 -0
  73. package/lib/slide/layouts/matrix.d.ts +2 -0
  74. package/lib/slide/layouts/matrix.js +53 -0
  75. package/lib/slide/layouts/split.d.ts +2 -0
  76. package/lib/slide/layouts/split.js +51 -0
  77. package/lib/slide/layouts/stats.d.ts +2 -0
  78. package/lib/slide/layouts/stats.js +23 -0
  79. package/lib/slide/layouts/table.d.ts +2 -0
  80. package/lib/slide/layouts/table.js +10 -0
  81. package/lib/slide/layouts/timeline.d.ts +2 -0
  82. package/lib/slide/layouts/timeline.js +27 -0
  83. package/lib/slide/layouts/title.d.ts +2 -0
  84. package/lib/slide/layouts/title.js +19 -0
  85. package/lib/slide/layouts/waterfall.d.ts +2 -0
  86. package/lib/slide/layouts/waterfall.js +63 -0
  87. package/lib/slide/render.d.ts +17 -0
  88. package/lib/slide/render.js +101 -0
  89. package/lib/slide/schema.d.ts +9309 -0
  90. package/lib/slide/schema.js +434 -0
  91. package/lib/slide/utils.d.ts +76 -0
  92. package/lib/slide/utils.js +243 -0
  93. package/lib/tools/prompt.d.ts +1 -0
  94. package/lib/tools/prompt.js +18 -0
  95. package/lib/tools/seed.d.ts +3 -0
  96. package/lib/tools/seed.js +211 -0
  97. package/lib/tools/seed_from_url.d.ts +3 -0
  98. package/lib/tools/seed_from_url.js +188 -0
  99. package/lib/types/slide.d.ts +9309 -0
  100. package/lib/types/slide.js +434 -0
  101. package/lib/utils/assets.d.ts +18 -0
  102. package/lib/utils/assets.js +101 -0
  103. package/lib/utils/cli.d.ts +1 -0
  104. package/lib/utils/cli.js +15 -0
  105. package/lib/utils/const.d.ts +12 -0
  106. package/lib/utils/const.js +12 -0
  107. package/lib/utils/filters.js +11 -2
  108. package/lib/utils/image_preprocess.d.ts +14 -0
  109. package/lib/utils/image_preprocess.js +52 -0
  110. package/lib/utils/markdown.d.ts +3 -0
  111. package/lib/utils/markdown.js +42 -0
  112. package/lib/utils/pdf.d.ts +9 -0
  113. package/lib/utils/pdf.js +77 -0
  114. package/lib/utils/preprocess.d.ts +343 -0
  115. package/lib/utils/preprocess.js +58 -0
  116. package/lib/utils/provider2agent.d.ts +141 -0
  117. package/lib/utils/provider2agent.js +267 -0
  118. package/lib/utils/text_hash.d.ts +1 -0
  119. package/lib/utils/text_hash.js +4 -0
  120. package/package.json +8 -8
  121. package/scripts/test/test_voice_over_transition_no_audio.json +71 -0
  122. package/lib/utils/sdk_timeout.d.ts +0 -3
  123. package/lib/utils/sdk_timeout.js +0 -7
  124. package/scripts/test/test_captions_2.json~ +0 -278
  125. package/scripts/test/test_en_portrait.json~ +0 -31
  126. package/scripts/test/test_slide_image_ref_gemini_en.json~ +0 -289
  127. package/scripts/test/test_vertexai.json~ +0 -21
@@ -0,0 +1,141 @@
1
+ export declare const provider2TTSAgent: {
2
+ nijivoice: {
3
+ agentName: string;
4
+ hasLimitedConcurrency: boolean;
5
+ };
6
+ openai: {
7
+ agentName: string;
8
+ hasLimitedConcurrency: boolean;
9
+ defaultModel: string;
10
+ defaultVoice: string;
11
+ };
12
+ google: {
13
+ agentName: string;
14
+ hasLimitedConcurrency: boolean;
15
+ };
16
+ elevenlabs: {
17
+ agentName: string;
18
+ hasLimitedConcurrency: boolean;
19
+ defaultModel: string;
20
+ models: string[];
21
+ };
22
+ mock: {
23
+ agentName: string;
24
+ hasLimitedConcurrency: boolean;
25
+ defaultModel: string;
26
+ models: string[];
27
+ };
28
+ };
29
+ export declare const provider2ImageAgent: {
30
+ openai: {
31
+ agentName: string;
32
+ defaultModel: string;
33
+ models: string[];
34
+ };
35
+ google: {
36
+ agentName: string;
37
+ defaultModel: string;
38
+ models: string[];
39
+ };
40
+ replicate: {
41
+ agentName: string;
42
+ defaultModel: string;
43
+ models: string[];
44
+ };
45
+ mock: {
46
+ agentName: string;
47
+ defaultModel: string;
48
+ models: string[];
49
+ };
50
+ };
51
+ export type ReplicateModel = `${string}/${string}`;
52
+ export declare const provider2MovieAgent: {
53
+ replicate: {
54
+ agentName: string;
55
+ defaultModel: ReplicateModel;
56
+ models: string[];
57
+ modelParams: Record<ReplicateModel, {
58
+ durations: number[];
59
+ start_image: string | undefined;
60
+ last_image?: string;
61
+ price_per_sec: number;
62
+ }>;
63
+ };
64
+ google: {
65
+ agentName: string;
66
+ defaultModel: string;
67
+ models: string[];
68
+ };
69
+ mock: {
70
+ agentName: string;
71
+ defaultModel: string;
72
+ models: string[];
73
+ };
74
+ };
75
+ export declare const provider2SoundEffectAgent: {
76
+ replicate: {
77
+ agentName: string;
78
+ defaultModel: ReplicateModel;
79
+ models: ReplicateModel[];
80
+ modelParams: Record<ReplicateModel, {
81
+ identifier?: `${string}/${string}:${string}`;
82
+ }>;
83
+ };
84
+ };
85
+ export declare const provider2LipSyncAgent: {
86
+ replicate: {
87
+ agentName: string;
88
+ defaultModel: ReplicateModel;
89
+ models: ReplicateModel[];
90
+ modelParams: Record<ReplicateModel, {
91
+ identifier?: `${string}/${string}:${string}` | `${string}/${string}`;
92
+ video?: string;
93
+ audio: string;
94
+ image?: string;
95
+ }>;
96
+ };
97
+ };
98
+ export declare const provider2LLMAgent: {
99
+ readonly openai: {
100
+ readonly agentName: "openAIAgent";
101
+ readonly defaultModel: "gpt-5";
102
+ readonly max_tokens: 8192;
103
+ readonly models: readonly ["gpt-5", "gpt-5-nano", "gpt-5-mini", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "o3", "o3-mini", "o3-pro", "o1", "o1-pro", "gpt-4o", "gpt-4o-mini"];
104
+ };
105
+ readonly anthropic: {
106
+ readonly agentName: "anthropicAgent";
107
+ readonly defaultModel: "claude-3-7-sonnet-20250219";
108
+ readonly max_tokens: 8192;
109
+ readonly models: readonly ["claude-opus-4-1-20250805", "claude-opus-4-20250514", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219", "claude-3-haiku-20240307"];
110
+ };
111
+ readonly gemini: {
112
+ readonly agentName: "geminiAgent";
113
+ readonly defaultModel: "gemini-2.5-flash";
114
+ readonly max_tokens: 8192;
115
+ readonly models: readonly ["gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite", "gemini-2.0-flash"];
116
+ };
117
+ readonly groq: {
118
+ readonly agentName: "groqAgent";
119
+ readonly defaultModel: "llama-3.1-8b-instant";
120
+ readonly max_tokens: 4096;
121
+ readonly models: readonly ["llama-3.1-8b-instant", "llama-3.3-70b-versatile", "deepseek-r1-distill-llama-70b", "openai/gpt-oss-120b", "openai/gpt-oss-20b"];
122
+ };
123
+ readonly mock: {
124
+ readonly agentName: "mediaMockAgent";
125
+ readonly defaultModel: "mock";
126
+ readonly max_tokens: 4096;
127
+ readonly models: readonly ["mock"];
128
+ };
129
+ };
130
+ export declare const defaultProviders: {
131
+ tts: keyof typeof provider2TTSAgent;
132
+ text2image: keyof typeof provider2ImageAgent;
133
+ text2movie: keyof typeof provider2MovieAgent;
134
+ text2Html: keyof typeof provider2LLMAgent;
135
+ llm: keyof typeof provider2LLMAgent;
136
+ soundEffect: keyof typeof provider2SoundEffectAgent;
137
+ lipSync: keyof typeof provider2LipSyncAgent;
138
+ };
139
+ export declare const llm: (keyof typeof provider2LLMAgent)[];
140
+ export type LLM = keyof typeof provider2LLMAgent;
141
+ export declare const htmlLLMProvider: string[];
@@ -0,0 +1,267 @@
1
+ // node & browser
2
+ export const provider2TTSAgent = {
3
+ nijivoice: {
4
+ agentName: "ttsNijivoiceAgent",
5
+ hasLimitedConcurrency: true,
6
+ },
7
+ openai: {
8
+ agentName: "ttsOpenaiAgent",
9
+ hasLimitedConcurrency: false,
10
+ defaultModel: "gpt-4o-mini-tts",
11
+ defaultVoice: "shimmer",
12
+ },
13
+ google: {
14
+ agentName: "ttsGoogleAgent",
15
+ hasLimitedConcurrency: false,
16
+ },
17
+ elevenlabs: {
18
+ agentName: "ttsElevenlabsAgent",
19
+ hasLimitedConcurrency: true,
20
+ defaultModel: "eleven_multilingual_v2",
21
+ // Models | ElevenLabs Documentation
22
+ // https://elevenlabs.io/docs/models
23
+ models: ["eleven_multilingual_v2", "eleven_turbo_v2_5", "eleven_turbo_v2", "eleven_flash_v2_5", "eleven_flash_v2"],
24
+ },
25
+ mock: {
26
+ agentName: "mediaMockAgent",
27
+ hasLimitedConcurrency: true,
28
+ defaultModel: "mock-model",
29
+ models: ["mock-model"],
30
+ },
31
+ };
32
+ export const provider2ImageAgent = {
33
+ openai: {
34
+ agentName: "imageOpenaiAgent",
35
+ defaultModel: "gpt-image-1",
36
+ models: ["dall-e-3", "gpt-image-1"],
37
+ },
38
+ google: {
39
+ agentName: "imageGenAIAgent",
40
+ defaultModel: "gemini-2.5-flash-image-preview",
41
+ models: ["imagen-3.0-generate-002", "imagen-4.0-generate-preview-06-06", "imagen-4.0-ultra-generate-preview-06-06", "gemini-2.5-flash-image-preview"],
42
+ },
43
+ replicate: {
44
+ agentName: "imageReplicateAgent",
45
+ defaultModel: "bytedance/seedream-4",
46
+ models: ["bytedance/seedream-4", "qwen/qwen-image"],
47
+ },
48
+ mock: {
49
+ agentName: "mediaMockAgent",
50
+ defaultModel: "mock-model",
51
+ models: ["mock-model"],
52
+ },
53
+ };
54
+ export const provider2MovieAgent = {
55
+ replicate: {
56
+ agentName: "movieReplicateAgent",
57
+ defaultModel: "bytedance/seedance-1-lite",
58
+ models: [
59
+ "bytedance/seedance-1-lite",
60
+ "bytedance/seedance-1-pro",
61
+ "kwaivgi/kling-v1.6-pro",
62
+ "kwaivgi/kling-v2.1",
63
+ "kwaivgi/kling-v2.1-master",
64
+ "google/veo-2",
65
+ "google/veo-3",
66
+ "google/veo-3-fast",
67
+ "minimax/video-01",
68
+ "minimax/hailuo-02",
69
+ "minimax/hailuo-02-fast",
70
+ "pixverse/pixverse-v4.5",
71
+ "wan-video/wan-2.2-i2v-480p-fast",
72
+ "wan-video/wan-2.2-t2v-480p-fast",
73
+ ],
74
+ modelParams: {
75
+ "bytedance/seedance-1-lite": {
76
+ durations: [5, 10],
77
+ start_image: "image",
78
+ last_image: "last_frame_image",
79
+ price_per_sec: 0.036, // in USD
80
+ },
81
+ "bytedance/seedance-1-pro": {
82
+ durations: [5, 10],
83
+ start_image: "image",
84
+ last_image: "last_frame_image",
85
+ price_per_sec: 0.15,
86
+ },
87
+ "kwaivgi/kling-v1.6-pro": {
88
+ durations: [5, 10],
89
+ start_image: "start_image",
90
+ price_per_sec: 0.095,
91
+ },
92
+ "kwaivgi/kling-v2.1": {
93
+ durations: [5, 10],
94
+ start_image: "start_image",
95
+ price_per_sec: 0.05,
96
+ },
97
+ "kwaivgi/kling-v2.1-master": {
98
+ durations: [5, 10],
99
+ start_image: "start_image",
100
+ price_per_sec: 0.28,
101
+ },
102
+ "google/veo-2": {
103
+ durations: [5, 6, 7, 8],
104
+ start_image: "image",
105
+ price_per_sec: 0.5,
106
+ },
107
+ "google/veo-3": {
108
+ durations: [8],
109
+ start_image: "image",
110
+ price_per_sec: 0.75,
111
+ },
112
+ "google/veo-3-fast": {
113
+ durations: [8],
114
+ start_image: "image",
115
+ price_per_sec: 0.4,
116
+ },
117
+ "minimax/video-01": {
118
+ durations: [6],
119
+ start_image: "first_frame_image",
120
+ price_per_sec: 0.5,
121
+ },
122
+ "minimax/hailuo-02": {
123
+ durations: [6], // NOTE: 10 for only 720p
124
+ start_image: "first_frame_image",
125
+ price_per_sec: 0.08,
126
+ },
127
+ "minimax/hailuo-02-fast": {
128
+ durations: [6, 10], // NOTE: 512P
129
+ start_image: "first_frame_image",
130
+ price_per_sec: 0.0166,
131
+ },
132
+ "pixverse/pixverse-v4.5": {
133
+ durations: [5, 8],
134
+ start_image: "image",
135
+ last_image: "last_frame_image",
136
+ price_per_sec: 0.12,
137
+ },
138
+ "wan-video/wan-2.2-i2v-480p-fast": {
139
+ durations: [5],
140
+ start_image: "image",
141
+ price_per_sec: 0.012,
142
+ },
143
+ "wan-video/wan-2.2-t2v-480p-fast": {
144
+ durations: [5],
145
+ start_image: undefined,
146
+ price_per_sec: 0.012,
147
+ },
148
+ },
149
+ },
150
+ google: {
151
+ agentName: "movieGenAIAgent",
152
+ defaultModel: "veo-2.0-generate-001",
153
+ models: ["veo-2.0-generate-001", "veo-3.0-generate-preview"],
154
+ },
155
+ mock: {
156
+ agentName: "mediaMockAgent",
157
+ defaultModel: "mock-model",
158
+ models: ["mock-model"],
159
+ },
160
+ };
161
+ export const provider2SoundEffectAgent = {
162
+ replicate: {
163
+ agentName: "soundEffectReplicateAgent",
164
+ defaultModel: "zsxkib/mmaudio",
165
+ models: ["zsxkib/mmaudio"],
166
+ modelParams: {
167
+ "zsxkib/mmaudio": {
168
+ identifier: "zsxkib/mmaudio:62871fb59889b2d7c13777f08deb3b36bdff88f7e1d53a50ad7694548a41b484",
169
+ },
170
+ },
171
+ },
172
+ };
173
+ export const provider2LipSyncAgent = {
174
+ replicate: {
175
+ agentName: "lipSyncReplicateAgent",
176
+ defaultModel: "bytedance/omni-human",
177
+ models: ["bytedance/latentsync", "tmappdev/lipsync", "bytedance/omni-human"],
178
+ modelParams: {
179
+ "bytedance/latentsync": {
180
+ identifier: "bytedance/latentsync:637ce1919f807ca20da3a448ddc2743535d2853649574cd52a933120e9b9e293",
181
+ video: "video",
182
+ audio: "audio",
183
+ },
184
+ "tmappdev/lipsync": {
185
+ identifier: "tmappdev/lipsync:c54ce2fe673ea59b857b91250b3d71a2cd304a78f2370687632805c8405fbf4c",
186
+ video: "video_input",
187
+ audio: "audio_input",
188
+ },
189
+ "bytedance/omni-human": {
190
+ identifier: "bytedance/omni-human",
191
+ image: "image",
192
+ audio: "audio",
193
+ price_per_sec: 0.14,
194
+ },
195
+ /* NOTE: This model does not work with large base64 urls.
196
+ "sync/lipsync-2": {
197
+ video: "video",
198
+ audio: "audio",
199
+ },
200
+ */
201
+ /* NOTE: This model does not work well for some unknown reason.
202
+ "kwaivgi/kling-lip-sync": {
203
+ video: "video_url",
204
+ audio: "audio_file",
205
+ },
206
+ */
207
+ },
208
+ },
209
+ };
210
+ // : Record<LLM, { agent: string; defaultModel: string; max_tokens: number }>
211
+ export const provider2LLMAgent = {
212
+ openai: {
213
+ agentName: "openAIAgent",
214
+ defaultModel: "gpt-5",
215
+ max_tokens: 8192,
216
+ models: [
217
+ "gpt-5",
218
+ "gpt-5-nano",
219
+ "gpt-5-mini",
220
+ "gpt-4.1",
221
+ "gpt-4.1-mini",
222
+ "gpt-4.1-nano",
223
+ "o3",
224
+ "o3-mini",
225
+ "o3-pro",
226
+ "o1",
227
+ "o1-pro",
228
+ "gpt-4o",
229
+ "gpt-4o-mini",
230
+ ],
231
+ },
232
+ anthropic: {
233
+ agentName: "anthropicAgent",
234
+ defaultModel: "claude-3-7-sonnet-20250219",
235
+ max_tokens: 8192,
236
+ models: ["claude-opus-4-1-20250805", "claude-opus-4-20250514", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219", "claude-3-haiku-20240307"],
237
+ },
238
+ gemini: {
239
+ agentName: "geminiAgent",
240
+ defaultModel: "gemini-2.5-flash",
241
+ max_tokens: 8192,
242
+ models: ["gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite", "gemini-2.0-flash"],
243
+ },
244
+ groq: {
245
+ agentName: "groqAgent",
246
+ defaultModel: "llama-3.1-8b-instant",
247
+ max_tokens: 4096,
248
+ models: ["llama-3.1-8b-instant", "llama-3.3-70b-versatile", "deepseek-r1-distill-llama-70b", "openai/gpt-oss-120b", "openai/gpt-oss-20b"],
249
+ },
250
+ mock: {
251
+ agentName: "mediaMockAgent",
252
+ defaultModel: "mock",
253
+ max_tokens: 4096,
254
+ models: ["mock"],
255
+ },
256
+ };
257
+ export const defaultProviders = {
258
+ tts: "openai",
259
+ text2image: "openai",
260
+ text2movie: "replicate",
261
+ text2Html: "openai",
262
+ llm: "openai",
263
+ soundEffect: "replicate",
264
+ lipSync: "replicate",
265
+ };
266
+ export const llm = Object.keys(provider2LLMAgent);
267
+ export const htmlLLMProvider = ["openai", "anthropic", "mock"];
@@ -0,0 +1 @@
1
+ export declare const text2hash: (input: string) => string;
@@ -0,0 +1,4 @@
1
+ import * as crypto from "crypto";
2
+ export const text2hash = (input) => {
3
+ return crypto.createHash("sha256").update(input).digest("hex");
4
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mulmocast",
3
- "version": "2.9.0",
3
+ "version": "2.9.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "lib/index.node.js",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "resolutions": {
27
27
  "minimatch": "^10.2.5",
28
- "tar": "7.5.20",
28
+ "tar": "7.5.22",
29
29
  "yauzl": "^3.4.0"
30
30
  },
31
31
  "bin": {
@@ -89,7 +89,7 @@
89
89
  "homepage": "https://github.com/receptron/mulmocast-cli#readme",
90
90
  "dependencies": {
91
91
  "@google-cloud/text-to-speech": "^6.4.1",
92
- "@google/genai": "^2.12.0",
92
+ "@google/genai": "^2.13.0",
93
93
  "@graphai/anthropic_agent": "^2.0.12",
94
94
  "@graphai/browserless_agent": "^2.0.3",
95
95
  "@graphai/gemini_agent": "^2.0.5",
@@ -107,12 +107,12 @@
107
107
  "@mulmocast/deck": "^1.1.0",
108
108
  "@tavily/core": "^0.7.6",
109
109
  "archiver": "^8.0.0",
110
- "clipboardy": "^5.3.1",
110
+ "clipboardy": "^5.3.2",
111
111
  "dotenv": "^17.4.2",
112
112
  "graphai": "^2.0.18",
113
113
  "js-tiktoken": "^1.0.21",
114
114
  "jsdom": "^29.1.1",
115
- "marked": "^18.0.6",
115
+ "marked": "^18.0.7",
116
116
  "mulmocast-vision": "^1.0.12",
117
117
  "ora": "^9.4.1",
118
118
  "puppeteer": "^25.3.0",
@@ -128,16 +128,16 @@
128
128
  "@types/jsdom": "^28.0.3",
129
129
  "@types/yargs": "^17.0.35",
130
130
  "cross-env": "^10.1.0",
131
- "eslint": "^10.7.0",
131
+ "eslint": "^10.8.0",
132
132
  "eslint-config-prettier": "^10.1.8",
133
133
  "eslint-plugin-import": "^2.32.0",
134
134
  "eslint-plugin-prettier": "^5.5.6",
135
135
  "eslint-plugin-sonarjs": "^4.2.0",
136
136
  "globals": "^17.7.0",
137
- "prettier": "^3.9.5",
137
+ "prettier": "^3.9.6",
138
138
  "tsx": "^4.23.1",
139
139
  "typescript": "6.0.3",
140
- "typescript-eslint": "^8.64.0"
140
+ "typescript-eslint": "^8.65.0"
141
141
  },
142
142
  "engines": {
143
143
  "node": ">=22.0.0"
@@ -0,0 +1,71 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "title": "VoiceOver Transition Test",
7
+ "movieParams": {
8
+ "transition": {
9
+ "type": "fade",
10
+ "duration": 1.0
11
+ }
12
+ },
13
+ "beats": [
14
+ {
15
+ "speaker": "Presenter",
16
+ "text": "",
17
+ "duration": 3.0,
18
+ "image": {
19
+ "type": "image",
20
+ "source": {
21
+ "kind": "path",
22
+ "path": "../../assets/images/mulmocast_credit.png"
23
+ }
24
+ }
25
+ },
26
+ {
27
+ "speaker": "Presenter",
28
+ "text": "",
29
+ "duration": 2.0,
30
+ "image": {
31
+ "type": "voice_over"
32
+ }
33
+ },
34
+ {
35
+ "speaker": "Presenter",
36
+ "text": "",
37
+ "duration": 3.0,
38
+ "image": {
39
+ "type": "textSlide",
40
+ "slide": {
41
+ "title": "Fade after a voice_over"
42
+ }
43
+ }
44
+ },
45
+ {
46
+ "speaker": "Presenter",
47
+ "text": "",
48
+ "duration": 2.0,
49
+ "image": {
50
+ "type": "voice_over"
51
+ }
52
+ },
53
+ {
54
+ "speaker": "Presenter",
55
+ "text": "",
56
+ "duration": 3.0,
57
+ "movieParams": {
58
+ "transition": {
59
+ "type": "wipeleft",
60
+ "duration": 1.0
61
+ }
62
+ },
63
+ "image": {
64
+ "type": "textSlide",
65
+ "slide": {
66
+ "title": "Wipe after a voice_over"
67
+ }
68
+ }
69
+ }
70
+ ]
71
+ }
@@ -1,3 +0,0 @@
1
- export declare const GENAI_REQUEST_TIMEOUT_MS = 120000;
2
- export declare const REPLICATE_RUN_TIMEOUT_MS = 600000;
3
- export declare const VIDEO_POLL_TIMEOUT_MS = 1200000;
@@ -1,7 +0,0 @@
1
- // Timeout budgets for provider SDK calls (OpenAI has its own in openai_client.ts).
2
- // Generous safety nets against a stalled connection or a never-completing
3
- // operation — NOT tight deadlines. A stall becomes a rejection so the caller's
4
- // GraphAI `retry` can recover instead of hanging forever.
5
- export const GENAI_REQUEST_TIMEOUT_MS = 120_000; // per @google/genai API call (kick-off / each poll)
6
- export const REPLICATE_RUN_TIMEOUT_MS = 600_000; // whole replicate.run() job (video models run minutes)
7
- export const VIDEO_POLL_TIMEOUT_MS = 1_200_000; // wall-clock cap for a long-running Veo video operation