mulmocast 1.1.10 → 1.2.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 (42) hide show
  1. package/assets/templates/html.json +11 -0
  2. package/lib/actions/audio.js +4 -20
  3. package/lib/actions/image_agents.d.ts +1 -1
  4. package/lib/actions/image_references.js +3 -2
  5. package/lib/actions/images.js +10 -30
  6. package/lib/agents/image_genai_agent.d.ts +5 -0
  7. package/lib/agents/image_genai_agent.js +52 -0
  8. package/lib/agents/index.d.ts +4 -3
  9. package/lib/agents/index.js +4 -3
  10. package/lib/agents/media_mock_agent.js +24 -1
  11. package/lib/agents/movie_genai_agent.d.ts +9 -0
  12. package/lib/agents/movie_genai_agent.js +86 -0
  13. package/lib/cli/commands/tool/scripting/builder.d.ts +1 -1
  14. package/lib/cli/commands/tool/story_to_script/builder.d.ts +1 -1
  15. package/lib/cli/helpers.js +3 -1
  16. package/lib/methods/mulmo_beat.js +1 -1
  17. package/lib/types/agent.d.ts +7 -1
  18. package/lib/types/schema.d.ts +33 -33
  19. package/lib/types/schema.js +2 -2
  20. package/lib/utils/context.d.ts +5 -5
  21. package/lib/utils/file.d.ts +1 -0
  22. package/lib/utils/file.js +1 -0
  23. package/lib/utils/filters.js +7 -1
  24. package/lib/utils/inquirer.js +15 -22
  25. package/lib/utils/prompt.d.ts +1 -1
  26. package/lib/utils/prompt.js +1 -1
  27. package/lib/utils/provider2agent.d.ts +22 -1
  28. package/lib/utils/provider2agent.js +35 -8
  29. package/lib/utils/string.js +1 -0
  30. package/lib/utils/utils.d.ts +1 -1
  31. package/lib/utils/utils.js +4 -4
  32. package/package.json +8 -6
  33. package/scripts/test/test_genai.json +47 -0
  34. package/scripts/test/test_hello.json +0 -3
  35. package/scripts/test/test_hello_bgm_0.json +21 -0
  36. package/scripts/test/test_hello_caption.json +38 -0
  37. package/scripts/test/test_hello_caption.json~ +21 -0
  38. package/scripts/test/test_hello_image.json +42 -0
  39. package/scripts/test/test_hello_image.json~ +18 -0
  40. package/scripts/test/test_hello_nobgm.json +21 -0
  41. package/scripts/test/test_media_mock.json +245 -0
  42. package/scripts/test/test_replicate.json +21 -1
@@ -19,6 +19,12 @@ export declare const provider2TTSAgent: {
19
19
  defaultModel: string;
20
20
  models: string[];
21
21
  };
22
+ mock: {
23
+ agentName: string;
24
+ hasLimitedConcurrency: boolean;
25
+ defaultModel: string;
26
+ models: string[];
27
+ };
22
28
  };
23
29
  export declare const provider2ImageAgent: {
24
30
  openai: {
@@ -31,6 +37,11 @@ export declare const provider2ImageAgent: {
31
37
  defaultModel: string;
32
38
  models: string[];
33
39
  };
40
+ mock: {
41
+ agentName: string;
42
+ defaultModel: string;
43
+ models: string[];
44
+ };
34
45
  };
35
46
  export type ReplicateModel = `${string}/${string}`;
36
47
  export declare const provider2MovieAgent: {
@@ -50,6 +61,11 @@ export declare const provider2MovieAgent: {
50
61
  defaultModel: string;
51
62
  models: string[];
52
63
  };
64
+ mock: {
65
+ agentName: string;
66
+ defaultModel: string;
67
+ models: string[];
68
+ };
53
69
  };
54
70
  export declare const provider2SoundEffectAgent: {
55
71
  replicate: {
@@ -77,7 +93,7 @@ export declare const provider2LipSyncAgent: {
77
93
  export declare const provider2LLMAgent: {
78
94
  readonly openai: {
79
95
  readonly agentName: "openAIAgent";
80
- readonly defaultModel: "gpt-4o";
96
+ readonly defaultModel: "gpt-5";
81
97
  readonly max_tokens: 8192;
82
98
  };
83
99
  readonly anthropic: {
@@ -95,6 +111,11 @@ export declare const provider2LLMAgent: {
95
111
  readonly defaultModel: "llama3-8b-8192";
96
112
  readonly max_tokens: 4096;
97
113
  };
114
+ readonly mock: {
115
+ readonly agentName: "mediaMockAgent";
116
+ readonly defaultModel: "mock";
117
+ readonly max_tokens: 4096;
118
+ };
98
119
  };
99
120
  export declare const defaultProviders: {
100
121
  tts: keyof typeof provider2TTSAgent;
@@ -22,6 +22,12 @@ export const provider2TTSAgent = {
22
22
  // https://elevenlabs.io/docs/models
23
23
  models: ["eleven_multilingual_v2", "eleven_turbo_v2_5", "eleven_turbo_v2", "eleven_flash_v2_5", "eleven_flash_v2"],
24
24
  },
25
+ mock: {
26
+ agentName: "mediaMockAgent",
27
+ hasLimitedConcurrency: true,
28
+ defaultModel: "mock-model",
29
+ models: ["mock-model"],
30
+ },
25
31
  };
26
32
  export const provider2ImageAgent = {
27
33
  openai: {
@@ -30,9 +36,14 @@ export const provider2ImageAgent = {
30
36
  models: ["dall-e-3", "gpt-image-1"],
31
37
  },
32
38
  google: {
33
- agentName: "imageGoogleAgent",
34
- defaultModel: "imagen-3.0-fast-generate-001",
35
- models: ["imagen-3.0-fast-generate-001", "imagen-3.0-generate-002", "imagen-3.0-capability-001"],
39
+ agentName: "imageGenAIAgent",
40
+ defaultModel: "imagen-4.0-generate-preview-06-06",
41
+ models: ["imagen-3.0-generate-002", "imagen-4.0-generate-preview-06-06", "imagen-4.0-ultra-generate-preview-06-06"],
42
+ },
43
+ mock: {
44
+ agentName: "mediaMockAgent",
45
+ defaultModel: "mock-model",
46
+ models: ["mock-model"],
36
47
  },
37
48
  };
38
49
  export const provider2MovieAgent = {
@@ -50,6 +61,7 @@ export const provider2MovieAgent = {
50
61
  "google/veo-3-fast",
51
62
  "minimax/video-01",
52
63
  "minimax/hailuo-02",
64
+ "minimax/hailuo-02-fast",
53
65
  "pixverse/pixverse-v4.5",
54
66
  "wan-video/wan-2.2-i2v-480p-fast",
55
67
  "wan-video/wan-2.2-t2v-480p-fast",
@@ -89,12 +101,12 @@ export const provider2MovieAgent = {
89
101
  },
90
102
  "google/veo-3": {
91
103
  durations: [8],
92
- start_image: undefined,
104
+ start_image: "image",
93
105
  price_per_sec: 0.75,
94
106
  },
95
107
  "google/veo-3-fast": {
96
108
  durations: [8],
97
- start_image: undefined,
109
+ start_image: "image",
98
110
  price_per_sec: 0.4,
99
111
  },
100
112
  "minimax/video-01": {
@@ -107,6 +119,11 @@ export const provider2MovieAgent = {
107
119
  start_image: "first_frame_image",
108
120
  price_per_sec: 0.08,
109
121
  },
122
+ "minimax/hailuo-02-fast": {
123
+ durations: [6, 10], // NOTE: 512P
124
+ start_image: "first_frame_image",
125
+ price_per_sec: 0.0166,
126
+ },
110
127
  "pixverse/pixverse-v4.5": {
111
128
  durations: [5, 8],
112
129
  start_image: "image",
@@ -126,10 +143,15 @@ export const provider2MovieAgent = {
126
143
  },
127
144
  },
128
145
  google: {
129
- agentName: "movieGoogleAgent",
146
+ agentName: "movieGenAIAgent",
130
147
  defaultModel: "veo-2.0-generate-001",
131
148
  models: ["veo-2.0-generate-001"],
132
149
  },
150
+ mock: {
151
+ agentName: "mediaMockAgent",
152
+ defaultModel: "mock-model",
153
+ models: ["mock-model"],
154
+ },
133
155
  };
134
156
  export const provider2SoundEffectAgent = {
135
157
  replicate: {
@@ -184,7 +206,7 @@ export const provider2LipSyncAgent = {
184
206
  export const provider2LLMAgent = {
185
207
  openai: {
186
208
  agentName: "openAIAgent",
187
- defaultModel: "gpt-4o",
209
+ defaultModel: "gpt-5",
188
210
  max_tokens: 8192,
189
211
  },
190
212
  anthropic: {
@@ -202,6 +224,11 @@ export const provider2LLMAgent = {
202
224
  defaultModel: "llama3-8b-8192",
203
225
  max_tokens: 4096,
204
226
  },
227
+ mock: {
228
+ agentName: "mediaMockAgent",
229
+ defaultModel: "mock",
230
+ max_tokens: 4096,
231
+ },
205
232
  };
206
233
  export const defaultProviders = {
207
234
  tts: "openai",
@@ -213,4 +240,4 @@ export const defaultProviders = {
213
240
  lipSync: "replicate",
214
241
  };
215
242
  export const llm = Object.keys(provider2LLMAgent);
216
- export const htmlLLMProvider = ["openai", "anthropic"];
243
+ export const htmlLLMProvider = ["openai", "anthropic", "mock"];
@@ -46,6 +46,7 @@ export const replacementsJa = [
46
46
  { from: "Groq", to: "グロック" },
47
47
  { from: "TSMC", to: "ティーエスエムシー" },
48
48
  { from: "NVIDIA", to: "エヌビディア" },
49
+ { from: "PER", to: "ピーイーアール" },
49
50
  { from: "1つ", to: "ひとつ" },
50
51
  { from: "2つ", to: "ふたつ" },
51
52
  { from: "3つ", to: "みっつ" },
@@ -2,7 +2,7 @@ import type { ConfigDataDictionary, DefaultConfigData } from "graphai";
2
2
  import { MulmoBeat, MulmoStudioMultiLingualData } from "../types/index.js";
3
3
  import type { LLM } from "./provider2agent.js";
4
4
  export declare const llmPair: (_llm?: LLM, _model?: string) => {
5
- agent: "openAIAgent" | "anthropicAgent" | "geminiAgent" | "groqAgent";
5
+ agent: "mediaMockAgent" | "openAIAgent" | "anthropicAgent" | "geminiAgent" | "groqAgent";
6
6
  model: string;
7
7
  max_tokens: 8192 | 4096;
8
8
  };
@@ -54,8 +54,8 @@ export const settings2GraphAIConfig = (settings, env) => {
54
54
  apiKey: getKey("IMAGE", "OPENAI_API_KEY"),
55
55
  baseURL: getKey("IMAGE", "OPENAI_BASE_URL"),
56
56
  },
57
- imageGoogleAgent: {
58
- projectId: getKey("IMAGE", "GOOGLE_PROJECT_ID"),
57
+ imageGenAIAgent: {
58
+ apiKey: getKey("IMAGE", "GEMINI_API_KEY"),
59
59
  },
60
60
  anthropicAgent: {
61
61
  apiKey: getKey("LLM", "ANTHROPIC_API_TOKEN"),
@@ -63,8 +63,8 @@ export const settings2GraphAIConfig = (settings, env) => {
63
63
  movieReplicateAgent: {
64
64
  apiKey: getKey("MOVIE", "REPLICATE_API_TOKEN"),
65
65
  },
66
- movieGoogleAgent: {
67
- projectId: getKey("MOVIE", "GOOGLE_PROJECT_ID"),
66
+ movieGenAIAgent: {
67
+ apiKey: getKey("MOVIE", "GEMINI_API_KEY"),
68
68
  },
69
69
  ttsNijivoiceAgent: {
70
70
  apiKey: getKey("TTS", "NIJIVOICE_API_KEY"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mulmocast",
3
- "version": "1.1.10",
3
+ "version": "1.2.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "lib/index.node.js",
@@ -66,15 +66,18 @@
66
66
  "homepage": "https://github.com/receptron/mulmocast-cli#readme",
67
67
  "dependencies": {
68
68
  "@google-cloud/text-to-speech": "^6.2.0",
69
+ "@google/genai": "^1.13.0",
69
70
  "@graphai/anthropic_agent": "^2.0.5",
70
71
  "@graphai/browserless_agent": "^2.0.1",
71
72
  "@graphai/gemini_agent": "^2.0.0",
72
73
  "@graphai/groq_agent": "^2.0.0",
73
- "@graphai/input_agents": "^1.0.1",
74
+ "@graphai/input_agents": "^1.0.2",
74
75
  "@graphai/openai_agent": "^2.0.3",
75
76
  "@graphai/stream_agent_filter": "^2.0.2",
76
77
  "@graphai/vanilla": "^2.0.6",
77
78
  "@graphai/vanilla_node_agents": "^2.0.1",
79
+ "@inquirer/input": "^4.2.1",
80
+ "@inquirer/select": "^4.3.1",
78
81
  "@modelcontextprotocol/sdk": "^1.15.1",
79
82
  "@tavily/core": "^0.5.9",
80
83
  "canvas": "^3.1.2",
@@ -83,12 +86,11 @@
83
86
  "fluent-ffmpeg": "^2.1.3",
84
87
  "google-auth-library": "^10.1.0",
85
88
  "graphai": "^2.0.13",
86
- "inquirer": "^12.9.0",
87
89
  "marked": "^16.1.2",
88
90
  "ora": "^8.2.0",
89
- "puppeteer": "^24.15.0",
91
+ "puppeteer": "^24.16.0",
90
92
  "replicate": "^1.0.1",
91
- "yaml": "^2.8.0",
93
+ "yaml": "^2.8.1",
92
94
  "yargs": "^18.0.0",
93
95
  "zod": "^3.25.76",
94
96
  "zod-to-json-schema": "^3.24.6"
@@ -101,7 +103,7 @@
101
103
  "@types/yargs": "^17.0.33",
102
104
  "eslint": "^9.32.0",
103
105
  "eslint-config-prettier": "^10.1.8",
104
- "eslint-plugin-prettier": "^5.5.3",
106
+ "eslint-plugin-prettier": "^5.5.4",
105
107
  "eslint-plugin-sonarjs": "^3.0.4",
106
108
  "prettier": "^3.6.2",
107
109
  "ts-node": "^10.9.2",
@@ -0,0 +1,47 @@
1
+ {
2
+ "$mulmocast": { "version": "1.1" },
3
+ "imageParams": {
4
+ "provider": "google",
5
+ "style": "<style>Photo realistic.</style>"
6
+ },
7
+ "movieParams": {
8
+ "provider": "google"
9
+ },
10
+ "lang": "en",
11
+ "beats": [
12
+ {
13
+ "id": "imagen_3",
14
+ "text": "image generated by imagen-3",
15
+ "imagePrompt": "a woman is walking through a busy Tokyo street at night, she is wearing dark sunglasses",
16
+ "imageParams": {
17
+ "model": "imagen-3.0-generate-002"
18
+ }
19
+ },
20
+ {
21
+ "id": "imagen_4",
22
+ "text": "image generated by imagen-4",
23
+ "imagePrompt": "a woman is walking through a busy Tokyo street at night, she is wearing dark sunglasses"
24
+ },
25
+ {
26
+ "id": "imagen_4_ultra",
27
+ "text": "image generated by imagen-4",
28
+ "imagePrompt": "a woman is walking through a busy Tokyo street at night, she is wearing dark sunglasses",
29
+ "imageParams": {
30
+ "model": "imagen-4.0-ultra-generate-preview-06-06"
31
+ }
32
+ },
33
+ {
34
+ "id": "genai_veo2",
35
+ "text": "movie generated by veo2",
36
+ "duration": 5,
37
+ "moviePrompt": "a woman is walking through a busy Tokyo street at night, she is wearing dark sunglasses"
38
+ },
39
+ {
40
+ "id": "genai_veo2_image",
41
+ "text": "movie generated by veo2 with image",
42
+ "duration": 5,
43
+ "imagePrompt": "a woman is walking through a busy Tokyo street at night, she is wearing dark sunglasses",
44
+ "moviePrompt": "a woman takes a selfie with her phone"
45
+ }
46
+ ]
47
+ }
@@ -2,9 +2,6 @@
2
2
  "$mulmocast": {
3
3
  "version": "1.1"
4
4
  },
5
- "audioParams": {
6
- "bgmVolume": 0
7
- },
8
5
  "lang": "en",
9
6
  "beats": [
10
7
  {
@@ -0,0 +1,21 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "audioParams": {
6
+ "bgmVolume": 0
7
+ },
8
+ "lang": "en",
9
+ "beats": [
10
+ {
11
+ "text": "Hello World",
12
+ "image": {
13
+ "type": "textSlide",
14
+ "slide": {
15
+ "title": "Hello World",
16
+ "bullets": ["Hello", "World"]
17
+ }
18
+ }
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "captionParams": {
7
+ "lang": "en"
8
+ },
9
+ "movieParams": {
10
+ "provider": "mock"
11
+ },
12
+ "speechParams": {
13
+ "speakers": {
14
+ "Presenter": {
15
+ "displayName": {
16
+ "en": "Presenter"
17
+ },
18
+ "voiceId": "ae42d8b0-0c4b-4289-95b7-cf988569af36",
19
+ "provider": "mock"
20
+ }
21
+ }
22
+ },
23
+ "imageParams": {
24
+ "provider": "mock"
25
+ },
26
+ "beats": [
27
+ {
28
+ "text": "Hello World",
29
+ "image": {
30
+ "type": "textSlide",
31
+ "slide": {
32
+ "title": "Hello World",
33
+ "bullets": ["Hello", "World"]
34
+ }
35
+ }
36
+ }
37
+ ]
38
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "captionParams": {
7
+ "lang": "en"
8
+ },
9
+ "beats": [
10
+ {
11
+ "text": "Hello World",
12
+ "image": {
13
+ "type": "textSlide",
14
+ "slide": {
15
+ "title": "Hello World",
16
+ "bullets": ["Hello", "World"]
17
+ }
18
+ }
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "movieParams": {
7
+ "provider": "mock"
8
+ },
9
+ "speechParams": {
10
+ "speakers": {
11
+ "Presenter": {
12
+ "displayName": {
13
+ "en": "Presenter"
14
+ },
15
+ "voiceId": "ae42d8b0-0c4b-4289-95b7-cf988569af36",
16
+ "provider": "mock"
17
+ }
18
+ }
19
+ },
20
+ "htmlImageParams": {
21
+ "provider": "mock"
22
+ },
23
+ "imageParams": {
24
+ "provider": "mock"
25
+ },
26
+ "beats": [
27
+ {
28
+ "text": "Hello World"
29
+ },
30
+ {
31
+ "text": "Hello World",
32
+ "moviePrompt": "fire"
33
+ },
34
+ {
35
+ "text": "Hello World",
36
+ "htmlPrompt": {
37
+ "prompt": "fire",
38
+ "data": []
39
+ }
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "beats": [
7
+ {
8
+ "text": "Hello World",
9
+ "image": {
10
+ "type": "textSlide",
11
+ "slide": {
12
+ "title": "Hello World",
13
+ "bullets": ["Hello", "World"]
14
+ }
15
+ }
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "audioParams": {
7
+ "bgmVolume": 0
8
+ },
9
+ "beats": [
10
+ {
11
+ "text": "Hello World",
12
+ "image": {
13
+ "type": "textSlide",
14
+ "slide": {
15
+ "title": "Hello World",
16
+ "bullets": ["Hello", "World"]
17
+ }
18
+ }
19
+ }
20
+ ]
21
+ }