mulmocast 2.12.1 → 2.14.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 (40) hide show
  1. package/assets/schemas/mulmo_script.json +297 -0
  2. package/lib/actions/avatar.d.ts +37 -0
  3. package/lib/actions/avatar.js +176 -0
  4. package/lib/actions/image_agents.js +9 -9
  5. package/lib/actions/index.d.ts +1 -0
  6. package/lib/actions/index.js +1 -0
  7. package/lib/actions/movie.d.ts +1 -0
  8. package/lib/actions/movie.js +40 -2
  9. package/lib/agents/combine_audio_files_agent.js +2 -2
  10. package/lib/cli/commands/movie/handler.js +2 -2
  11. package/lib/index.remotion.d.ts +3 -0
  12. package/lib/index.remotion.js +4 -0
  13. package/lib/mcp/server.js +3 -3
  14. package/lib/methods/mulmo_beat.d.ts +1 -0
  15. package/lib/methods/mulmo_beat.js +3 -0
  16. package/lib/methods/mulmo_beat_node.d.ts +1 -0
  17. package/lib/methods/mulmo_presentation_style.d.ts +5 -1
  18. package/lib/methods/mulmo_presentation_style.js +8 -0
  19. package/lib/types/schema.d.ts +466 -4
  20. package/lib/types/schema.js +77 -0
  21. package/lib/types/type.d.ts +7 -1
  22. package/lib/utils/context.d.ts +178 -0
  23. package/lib/utils/image_plugins/index.js +2 -0
  24. package/lib/utils/image_plugins/remotion.d.ts +17 -0
  25. package/lib/utils/image_plugins/remotion.js +202 -0
  26. package/lib/utils/remotion/claude_prompt.d.ts +33 -0
  27. package/lib/utils/remotion/claude_prompt.js +111 -0
  28. package/lib/utils/remotion/claude_runner.d.ts +4 -0
  29. package/lib/utils/remotion/claude_runner.js +47 -0
  30. package/lib/utils/remotion/commit_files.d.ts +11 -0
  31. package/lib/utils/remotion/commit_files.js +37 -0
  32. package/lib/utils/remotion/packages.d.ts +5 -0
  33. package/lib/utils/remotion/packages.js +20 -0
  34. package/lib/utils/remotion/render.d.ts +20 -0
  35. package/lib/utils/remotion/render.js +65 -0
  36. package/lib/utils/remotion/system_prompt.d.ts +4 -0
  37. package/lib/utils/remotion/system_prompt.js +66 -0
  38. package/package.json +112 -20
  39. package/scripts/test/test_avatar.json +46 -0
  40. package/scripts/test/test_remotion.json +38 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mulmocast",
3
- "version": "2.12.1",
3
+ "version": "2.14.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "lib/index.node.js",
@@ -16,6 +16,10 @@
16
16
  "./data": {
17
17
  "default": "./lib/data/index.js"
18
18
  },
19
+ "./remotion": {
20
+ "types": "./lib/index.remotion.d.ts",
21
+ "default": "./lib/index.remotion.js"
22
+ },
19
23
  "./assets/*": "./assets/*",
20
24
  "./scripts/*": "./scripts/*",
21
25
  "./tools/complete_script": {
@@ -92,56 +96,144 @@
92
96
  "dependencies": {
93
97
  "@google-cloud/text-to-speech": "^6.4.1",
94
98
  "@google/genai": "^2.17.1",
95
- "@graphai/anthropic_agent": "^2.0.12",
96
- "@graphai/browserless_agent": "^2.0.3",
97
- "@graphai/gemini_agent": "^2.0.5",
98
- "@graphai/groq_agent": "^2.0.2",
99
+ "@graphai/anthropic_agent": "^2.1.0",
100
+ "@graphai/browserless_agent": "^2.0.4",
101
+ "@graphai/gemini_agent": "^2.1.0",
102
+ "@graphai/groq_agent": "^2.1.0",
99
103
  "@graphai/input_agents": "^1.0.2",
100
- "@graphai/openai_agent": "^2.0.9",
104
+ "@graphai/openai_agent": "^2.1.0",
101
105
  "@graphai/stream_agent_filter": "^2.0.3",
102
106
  "@graphai/vanilla": "^2.0.12",
103
107
  "@graphai/vanilla_node_agents": "^2.0.4",
104
- "@inquirer/input": "^5.1.6",
105
- "@inquirer/select": "^5.2.5",
106
- "@modelcontextprotocol/sdk": "^1.29.0",
108
+ "@inquirer/input": "^5.1.7",
109
+ "@inquirer/select": "^5.2.6",
110
+ "@modelcontextprotocol/sdk": "^1.32.1",
107
111
  "@modernized/fluent-ffmpeg": "^1.0.3",
108
112
  "@mozilla/readability": "^0.6.0",
109
113
  "@mulmocast/deck": "^2.0.2",
110
- "@tavily/core": "^0.7.10",
114
+ "@tavily/core": "^0.7.13",
111
115
  "archiver": "^8.0.0",
112
116
  "clipboardy": "^5.3.2",
113
117
  "dotenv": "^17.4.2",
114
118
  "graphai": "^2.0.18",
115
119
  "js-tiktoken": "^1.0.21",
116
120
  "jsdom": "^29.1.1",
117
- "marked": "^18.0.13",
121
+ "marked": "^18.1.0",
118
122
  "mulmocast-vision": "^1.0.12",
119
123
  "ora": "^9.4.1",
120
- "puppeteer": "^25.11.0",
124
+ "puppeteer": "^25.12.0",
121
125
  "replicate": "^1.4.0",
122
126
  "yaml": "^2.9.1",
123
- "yargs": "^18.1.0",
127
+ "yargs": "^18.2.0",
124
128
  "zod": "^4.6.5"
125
129
  },
126
130
  "devDependencies": {
127
131
  "@eslint/js": "^10.0.1",
132
+ "@react-three/fiber": "^9.8.1",
128
133
  "@receptron/test_utils": "^2.0.3",
134
+ "@remotion/bundler": "^4.0.533",
135
+ "@remotion/effects": "^4.0.533",
136
+ "@remotion/layout-utils": "^4.0.533",
137
+ "@remotion/motion-blur": "^4.0.533",
138
+ "@remotion/noise": "^4.0.533",
139
+ "@remotion/paths": "^4.0.533",
140
+ "@remotion/renderer": "^4.0.533",
141
+ "@remotion/shapes": "^4.0.533",
142
+ "@remotion/three": "^4.0.533",
143
+ "@remotion/transitions": "^4.0.533",
129
144
  "@types/archiver": "^8.0.0",
130
145
  "@types/jsdom": "^28.0.3",
131
- "@types/node": "^22.20.2",
146
+ "@types/node": "^26.6.4",
132
147
  "@types/yargs": "^17.0.35",
148
+ "avatarscript": "^0.2.1",
133
149
  "cross-env": "^10.1.0",
134
150
  "esbuild": "^0.28.2",
135
- "eslint": "^10.11.0",
151
+ "eslint": "^10.12.0",
136
152
  "eslint-config-prettier": "^10.1.8",
137
153
  "eslint-plugin-import": "^2.32.0",
138
154
  "eslint-plugin-prettier": "^5.5.6",
139
- "eslint-plugin-sonarjs": "^4.2.1",
140
- "globals": "^17.12.0",
141
- "prettier": "^3.9.8",
142
- "tsx": "^4.23.13",
155
+ "eslint-plugin-sonarjs": "^4.2.2",
156
+ "globals": "^17.13.0",
157
+ "prettier": "^3.9.9",
158
+ "react": "^19.2.0",
159
+ "react-dom": "^19.2.0",
160
+ "remotion": "^4.0.533",
161
+ "three": "^0.186.1",
162
+ "tsx": "^4.23.15",
143
163
  "typescript": "6.0.3",
144
- "typescript-eslint": "^8.70.0"
164
+ "typescript-eslint": "^8.71.1"
165
+ },
166
+ "peerDependencies": {
167
+ "@react-three/fiber": "^9.8.1",
168
+ "@remotion/bundler": "^4.0.533",
169
+ "@remotion/effects": "^4.0.533",
170
+ "@remotion/layout-utils": "^4.0.533",
171
+ "@remotion/motion-blur": "^4.0.533",
172
+ "@remotion/noise": "^4.0.533",
173
+ "@remotion/paths": "^4.0.533",
174
+ "@remotion/renderer": "^4.0.533",
175
+ "@remotion/shapes": "^4.0.533",
176
+ "@remotion/three": "^4.0.533",
177
+ "@remotion/transitions": "^4.0.533",
178
+ "avatarscript": "^0.2.1",
179
+ "onnxruntime-node": "^1.30.0",
180
+ "react": "^19.2.0",
181
+ "react-dom": "^19.2.0",
182
+ "remotion": "^4.0.533",
183
+ "three": "^0.186.1"
184
+ },
185
+ "peerDependenciesMeta": {
186
+ "@react-three/fiber": {
187
+ "optional": true
188
+ },
189
+ "@remotion/bundler": {
190
+ "optional": true
191
+ },
192
+ "@remotion/effects": {
193
+ "optional": true
194
+ },
195
+ "@remotion/layout-utils": {
196
+ "optional": true
197
+ },
198
+ "@remotion/motion-blur": {
199
+ "optional": true
200
+ },
201
+ "@remotion/noise": {
202
+ "optional": true
203
+ },
204
+ "@remotion/paths": {
205
+ "optional": true
206
+ },
207
+ "@remotion/renderer": {
208
+ "optional": true
209
+ },
210
+ "@remotion/shapes": {
211
+ "optional": true
212
+ },
213
+ "@remotion/three": {
214
+ "optional": true
215
+ },
216
+ "@remotion/transitions": {
217
+ "optional": true
218
+ },
219
+ "avatarscript": {
220
+ "optional": true
221
+ },
222
+ "onnxruntime-node": {
223
+ "optional": true
224
+ },
225
+ "react": {
226
+ "optional": true
227
+ },
228
+ "react-dom": {
229
+ "optional": true
230
+ },
231
+ "remotion": {
232
+ "optional": true
233
+ },
234
+ "three": {
235
+ "optional": true
236
+ }
145
237
  },
146
238
  "engines": {
147
239
  "node": ">=22.0.0"
@@ -0,0 +1,46 @@
1
+ {
2
+ "$mulmocast": { "version": "1.1" },
3
+ "lang": "ja",
4
+ "title": "Talking avatar over slides",
5
+ "description": "Needs mesh-avatar-studio checked out next to this repository (for its sample avatar), and npm packages avatarscript and onnxruntime-node.",
6
+ "avatarParams": { "position": { "x": "82%", "y": "100%", "scale": "62%" } },
7
+ "speechParams": {
8
+ "speakers": {
9
+ "Miko": {
10
+ "provider": "openai",
11
+ "voiceId": "coral",
12
+ "displayName": { "ja": "ミコ" },
13
+ "avatar": { "source": "../../../mesh-avatar-studio/samples/miko-qipao" }
14
+ }
15
+ }
16
+ },
17
+ "beats": [
18
+ {
19
+ "speaker": "Miko",
20
+ "text": "みなさん、こんにちは!今日は、スライドの上でしゃべるアバターを紹介します。",
21
+ "image": { "type": "markdown", "markdown": ["# Talking avatars", "", "- MulmoScript + AvatarScript", "- スライドの上でアバターが話す"] },
22
+ "avatarParams": { "emotion": "happy", "motions": [{ "motion": "nod", "at": "こんにちは" }] }
23
+ },
24
+ {
25
+ "speaker": "Miko",
26
+ "text": "位置と大きさは、台本全体で決めておいて、ビートごとに変えられます。このスライドでは、大きくなっています。",
27
+ "image": { "type": "markdown", "markdown": ["# Position and size", "", "- 台本全体: `avatarParams.position`", "- ビートごとに上書き"] },
28
+ "avatarParams": { "emotion": "relaxed", "position": { "x": "76%", "scale": "82%" }, "motions": [{ "motion": "tilt", "at": "大きく" }] }
29
+ },
30
+ {
31
+ "speaker": "Miko",
32
+ "text": "こちらでは、左側に小さく移動しました。",
33
+ "image": {
34
+ "type": "markdown",
35
+ "markdown": ["# Moved", "", "```json", "\"avatarParams\": {", " \"position\": { \"x\": \"18%\", \"scale\": \"48%\" }", "}", "```"]
36
+ },
37
+ "avatarParams": { "emotion": "surprised", "position": { "x": "18%", "scale": "48%" }, "motions": [{ "motion": "surprise" }] }
38
+ },
39
+ {
40
+ "speaker": "Miko",
41
+ "text": "最後は、元の位置に戻ります。それでは、始めましょう!",
42
+ "image": { "type": "markdown", "markdown": ["# Let's start"] },
43
+ "avatarParams": { "emotion": "happy" }
44
+ }
45
+ ]
46
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "ja",
6
+ "title": "Remotion beat sample",
7
+ "description": "Each beat's scene is written by Claude Code (claude -p) as a Remotion component. Needs Claude Code installed and logged in, and the optional packages listed in docs/remotion.md.",
8
+ "speechParams": {
9
+ "speakers": {
10
+ "Presenter": {
11
+ "provider": "openai",
12
+ "voiceId": "shimmer",
13
+ "displayName": {
14
+ "ja": "プレゼンター"
15
+ }
16
+ }
17
+ }
18
+ },
19
+ "beats": [
20
+ {
21
+ "speaker": "Presenter",
22
+ "text": "MulmoCast は、台本から音声と画像を作り、ひとつの動画にまとめます。",
23
+ "image": {
24
+ "type": "remotion",
25
+ "prompt": "中央に「MulmoCast」のタイトルが現れ、その下に「台本」→「音声・画像」→「動画」の3つの箱が左から順に現れ、矢印でつながる。背景は濃紺のグラデーション。日本語で表示する。"
26
+ }
27
+ },
28
+ {
29
+ "speaker": "Presenter",
30
+ "text": "この場面の映像は、Claude Code が Remotion のコードとして書きました。",
31
+ "image": {
32
+ "type": "remotion",
33
+ "prompt": "黒い背景に、コードエディタ風の枠が現れ、TSX のコードが一行ずつタイプされていく。最後に枠が縮んで右下に移り、中央に「Claude Code × Remotion」の文字が大きく現れる。",
34
+ "fps": 30
35
+ }
36
+ }
37
+ ]
38
+ }