mulmocast 2.2.0 → 2.2.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 (49) hide show
  1. package/assets/schemas/html_prompt.json +60 -0
  2. package/assets/schemas/mulmo_script.json +283 -0
  3. package/assets/slide_themes/corporate.json +18 -0
  4. package/assets/slide_themes/creative.json +18 -0
  5. package/assets/slide_themes/dark.json +18 -0
  6. package/assets/slide_themes/minimal.json +18 -0
  7. package/assets/slide_themes/pop.json +18 -0
  8. package/assets/slide_themes/warm.json +18 -0
  9. package/assets/styles/akira_comic.json +22 -0
  10. package/assets/styles/ani.json +43 -0
  11. package/assets/styles/children_book.json +13 -0
  12. package/assets/styles/comic_strips.json +13 -0
  13. package/assets/styles/drslump_comic.json +22 -0
  14. package/assets/styles/ghibli_comic.json +22 -0
  15. package/assets/styles/ghibli_shorts.json +28 -0
  16. package/assets/styles/ghost_comic.json +29 -0
  17. package/assets/styles/leda.json +29 -0
  18. package/assets/styles/onepiece_comic.json +22 -0
  19. package/assets/styles/slide_corporate.json +30 -0
  20. package/assets/styles/slide_creative.json +30 -0
  21. package/assets/styles/slide_dark.json +30 -0
  22. package/assets/styles/slide_minimal.json +30 -0
  23. package/assets/styles/slide_pop.json +30 -0
  24. package/assets/styles/slide_warm.json +30 -0
  25. package/lib/data/index.d.ts +2 -0
  26. package/lib/data/index.js +2 -0
  27. package/lib/data/slideStyles.d.ts +206 -0
  28. package/lib/data/slideStyles.js +206 -0
  29. package/lib/data/slideThemes.d.ts +134 -0
  30. package/lib/data/slideThemes.js +134 -0
  31. package/lib/slide/layouts/columns.js +3 -4
  32. package/lib/slide/layouts/comparison.js +3 -5
  33. package/lib/slide/layouts/grid.js +1 -1
  34. package/lib/slide/layouts/stats.js +20 -7
  35. package/lib/slide/layouts/timeline.js +17 -4
  36. package/lib/slide/render.d.ts +1 -1
  37. package/lib/slide/render.js +5 -1
  38. package/lib/slide/schema.d.ts +1 -0
  39. package/lib/slide/schema.js +1 -0
  40. package/lib/types/schema.d.ts +4 -0
  41. package/lib/types/slide.d.ts +1 -0
  42. package/lib/types/slide.js +1 -0
  43. package/lib/utils/context.d.ts +2 -0
  44. package/lib/utils/image_plugins/slide.js +4 -2
  45. package/package.json +14 -4
  46. package/scripts/test/test_slide_image_ref_en.json +2 -1
  47. package/scripts/test/test_slide_image_ref_gemini_en.json +289 -0
  48. package/scripts/test/test_slide_image_ref_gemini_en.json~ +289 -0
  49. package/scripts/test/test_tts_speed.json +252 -0
@@ -0,0 +1,60 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "$mulmocast": {
5
+ "type": "object",
6
+ "properties": {
7
+ "version": {
8
+ "type": "string",
9
+ "const": "1.0"
10
+ }
11
+ },
12
+ "required": ["version"],
13
+ "additionalProperties": false
14
+ },
15
+ "canvasSize": {
16
+ "type": "object",
17
+ "properties": {
18
+ "width": { "type": "number" },
19
+ "height": { "type": "number" }
20
+ },
21
+ "required": ["width", "height"],
22
+ "additionalProperties": false,
23
+ "default": { "width": 1280, "height": 720 }
24
+ },
25
+ "htmlImageParams": {
26
+ "type": "object",
27
+ "properties": {
28
+ "provider": { "enum": ["anthropic"] }
29
+ },
30
+ "required": ["provider"],
31
+ "additionalProperties": false,
32
+ "default": { "provider": "anthropic" }
33
+ },
34
+ "title": { "type": "string" },
35
+ "description": { "type": "string" },
36
+ "lang": { "type": "string" },
37
+ "beats": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "object",
41
+ "properties": {
42
+ "text": { "type": "string", "default": "" },
43
+ "htmlPrompt": {
44
+ "type": "object",
45
+ "properties": {
46
+ "prompt": { "type": "string" }
47
+ },
48
+ "required": ["prompt"],
49
+ "additionalProperties": false
50
+ }
51
+ },
52
+ "required": ["text", "htmlPrompt"],
53
+ "additionalProperties": false
54
+ },
55
+ "minItems": 1
56
+ }
57
+ },
58
+ "required": ["$mulmocast", "beats"],
59
+ "additionalProperties": false
60
+ }
@@ -0,0 +1,283 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "$mulmocast": {
5
+ "type": "object",
6
+ "properties": {
7
+ "version": {
8
+ "type": "string",
9
+ "const": "1.0"
10
+ },
11
+ "credit": {
12
+ "type": "string",
13
+ "const": "closing"
14
+ }
15
+ },
16
+ "required": ["version"],
17
+ "additionalProperties": false
18
+ },
19
+ "canvasSize": {
20
+ "type": "object",
21
+ "properties": {
22
+ "width": { "type": "number" },
23
+ "height": { "type": "number" }
24
+ },
25
+ "required": ["width", "height"],
26
+ "additionalProperties": false,
27
+ "default": { "width": 1280, "height": 720 }
28
+ },
29
+ "speechParams": {
30
+ "type": "object",
31
+ "properties": {
32
+ "provider": {
33
+ "type": "string",
34
+ "enum": ["openai", "google", "elevenlabs"],
35
+ "default": "openai"
36
+ },
37
+ "speakers": {
38
+ "type": "object",
39
+ "additionalProperties": {
40
+ "type": "object",
41
+ "properties": {
42
+ "displayName": {
43
+ "type": "object",
44
+ "additionalProperties": { "type": "string" }
45
+ },
46
+ "voiceId": { "type": "string" },
47
+ "speechOptions": {
48
+ "type": "object",
49
+ "properties": {
50
+ "speed": { "type": "number" },
51
+ "instruction": { "type": "string" }
52
+ },
53
+ "additionalProperties": false
54
+ },
55
+ "provider": {
56
+ "type": "string",
57
+ "enum": ["openai", "google", "elevenlabs"]
58
+ }
59
+ },
60
+ "required": ["voiceId"],
61
+ "additionalProperties": false
62
+ }
63
+ }
64
+ },
65
+ "required": ["speakers"],
66
+ "additionalProperties": false
67
+ },
68
+ "imageParams": {
69
+ "type": "object",
70
+ "properties": {
71
+ "model": { "type": "string" },
72
+ "style": { "type": "string" },
73
+ "moderation": { "type": "string" },
74
+ "provider": {
75
+ "type": "string",
76
+ "enum": ["openai", "google"],
77
+ "default": "openai"
78
+ }
79
+ },
80
+ "additionalProperties": false
81
+ },
82
+ "movieParams": {
83
+ "type": "object",
84
+ "properties": {
85
+ "provider": {
86
+ "type": "string",
87
+ "enum": ["openai", "google", "replicate"],
88
+ "default": "google"
89
+ },
90
+ "model": { "type": "string" },
91
+ "transition": {
92
+ "type": "object",
93
+ "properties": {
94
+ "type": {
95
+ "type": "string",
96
+ "enum": ["fade", "slideout_left"]
97
+ },
98
+ "duration": {
99
+ "type": "number",
100
+ "minimum": 0,
101
+ "maximum": 2,
102
+ "default": 0.3
103
+ }
104
+ },
105
+ "required": ["type"],
106
+ "additionalProperties": false
107
+ },
108
+ "fillOption": {
109
+ "type": "object",
110
+ "properties": {
111
+ "style": {
112
+ "type": "string",
113
+ "enum": ["aspectFit", "aspectFill"],
114
+ "default": "aspectFit"
115
+ }
116
+ },
117
+ "additionalProperties": false
118
+ }
119
+ },
120
+ "additionalProperties": false
121
+ },
122
+ "htmlImageParams": {
123
+ "type": "object",
124
+ "properties": {
125
+ "model": { "type": "string" },
126
+ "provider": {
127
+ "type": "string",
128
+ "enum": ["openai", "anthropic"],
129
+ "default": "openai"
130
+ }
131
+ },
132
+ "additionalProperties": false
133
+ },
134
+ "textSlideParams": {
135
+ "type": "object",
136
+ "properties": {
137
+ "cssStyles": {
138
+ "anyOf": [
139
+ { "type": "string" },
140
+ {
141
+ "type": "array",
142
+ "items": { "type": "string" }
143
+ }
144
+ ]
145
+ }
146
+ },
147
+ "required": ["cssStyles"],
148
+ "additionalProperties": false
149
+ },
150
+ "captionParams": {
151
+ "type": "object",
152
+ "properties": {
153
+ "lang": { "type": "string" },
154
+ "styles": {
155
+ "type": "array",
156
+ "items": { "type": "string" },
157
+ "default": []
158
+ }
159
+ },
160
+ "additionalProperties": false
161
+ },
162
+ "audioParams": {
163
+ "type": "object",
164
+ "properties": {
165
+ "padding": { "type": "number", "default": 0.3 },
166
+ "introPadding": { "type": "number", "default": 1 },
167
+ "closingPadding": { "type": "number", "default": 0.8 },
168
+ "outroPadding": { "type": "number", "default": 1 },
169
+ "bgmVolume": { "type": "number", "default": 0.2 },
170
+ "audioVolume": { "type": "number", "default": 1 }
171
+ },
172
+ "additionalProperties": false
173
+ },
174
+ "title": { "type": "string" },
175
+ "description": { "type": "string" },
176
+ "references": {
177
+ "type": "array",
178
+ "items": {
179
+ "type": "object",
180
+ "properties": {
181
+ "url": { "type": "string", "format": "uri" },
182
+ "title": { "type": "string" },
183
+ "description": { "type": "string" },
184
+ "type": {
185
+ "type": "string",
186
+ "enum": ["article", "paper", "image", "video", "audio"],
187
+ "default": "article"
188
+ }
189
+ },
190
+ "required": ["url"],
191
+ "additionalProperties": false
192
+ }
193
+ },
194
+ "lang": { "type": "string" },
195
+ "beats": {
196
+ "type": "array",
197
+ "items": {
198
+ "type": "object",
199
+ "properties": {
200
+ "speaker": { "type": "string", "default": "Presenter" },
201
+ "text": { "type": "string", "default": "" },
202
+ "id": { "type": "string" },
203
+ "description": { "type": "string" },
204
+ "image": {
205
+ "anyOf": [
206
+ {
207
+ "type": "object",
208
+ "properties": {
209
+ "type": { "type": "string", "const": "markdown" },
210
+ "markdown": {
211
+ "anyOf": [{ "type": "string" }, { "type": "array", "items": { "type": "string" } }]
212
+ }
213
+ },
214
+ "required": ["type", "markdown"],
215
+ "additionalProperties": false
216
+ },
217
+ {
218
+ "type": "object",
219
+ "properties": {
220
+ "type": { "type": "string", "const": "textSlide" },
221
+ "slide": {
222
+ "type": "object",
223
+ "properties": {
224
+ "title": { "type": "string" },
225
+ "subtitle": { "type": "string" },
226
+ "bullets": {
227
+ "type": "array",
228
+ "items": { "type": "string" }
229
+ }
230
+ },
231
+ "required": ["title"],
232
+ "additionalProperties": false
233
+ }
234
+ },
235
+ "required": ["type", "slide"],
236
+ "additionalProperties": false
237
+ }
238
+ ]
239
+ },
240
+ "audio": {
241
+ "type": "object",
242
+ "properties": {
243
+ "type": { "type": "string", "const": "audio" },
244
+ "source": {
245
+ "anyOf": [
246
+ {
247
+ "type": "object",
248
+ "properties": {
249
+ "kind": { "type": "string", "const": "url" },
250
+ "url": { "type": "string", "format": "uri" }
251
+ },
252
+ "required": ["kind", "url"],
253
+ "additionalProperties": false
254
+ },
255
+ {
256
+ "type": "object",
257
+ "properties": {
258
+ "kind": { "type": "string", "const": "path" },
259
+ "path": { "type": "string" }
260
+ },
261
+ "required": ["kind", "path"],
262
+ "additionalProperties": false
263
+ }
264
+ ]
265
+ }
266
+ },
267
+ "required": ["type", "source"],
268
+ "additionalProperties": false
269
+ },
270
+ "duration": { "type": "number" },
271
+ "imagePrompt": { "type": "string" },
272
+ "moviePrompt": { "type": "string" }
273
+ },
274
+ "additionalProperties": false
275
+ },
276
+ "minItems": 1
277
+ },
278
+ "imagePath": { "type": "string" },
279
+ "__test_invalid__": { "type": "boolean" }
280
+ },
281
+ "required": ["$mulmocast", "beats"],
282
+ "additionalProperties": false
283
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "colors": {
3
+ "bg": "F8FAFC",
4
+ "bgCard": "FFFFFF",
5
+ "bgCardAlt": "F1F5F9",
6
+ "text": "0F172A",
7
+ "textMuted": "475569",
8
+ "textDim": "94A3B8",
9
+ "primary": "2563EB",
10
+ "accent": "7C3AED",
11
+ "success": "16A34A",
12
+ "warning": "EA580C",
13
+ "danger": "DC2626",
14
+ "info": "0891B2",
15
+ "highlight": "DB2777"
16
+ },
17
+ "fonts": { "title": "Georgia", "body": "Helvetica", "mono": "Menlo" }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "colors": {
3
+ "bg": "1C1917",
4
+ "bgCard": "292524",
5
+ "bgCardAlt": "3D3733",
6
+ "text": "FAFAF9",
7
+ "textMuted": "D6D3D1",
8
+ "textDim": "A8A29E",
9
+ "primary": "F43F5E",
10
+ "accent": "FB923C",
11
+ "success": "4ADE80",
12
+ "warning": "FBBF24",
13
+ "danger": "EF4444",
14
+ "info": "38BDF8",
15
+ "highlight": "E879F9"
16
+ },
17
+ "fonts": { "title": "Georgia", "body": "Helvetica", "mono": "Consolas" }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "colors": {
3
+ "bg": "0F172A",
4
+ "bgCard": "1E293B",
5
+ "bgCardAlt": "334155",
6
+ "text": "F8FAFC",
7
+ "textMuted": "CBD5E1",
8
+ "textDim": "64748B",
9
+ "primary": "3B82F6",
10
+ "accent": "8B5CF6",
11
+ "success": "22C55E",
12
+ "warning": "F59E0B",
13
+ "danger": "EF4444",
14
+ "info": "14B8A6",
15
+ "highlight": "EC4899"
16
+ },
17
+ "fonts": { "title": "Georgia", "body": "Calibri", "mono": "Consolas" }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "colors": {
3
+ "bg": "F8FAFC",
4
+ "bgCard": "FFFFFF",
5
+ "bgCardAlt": "F1F5F9",
6
+ "text": "0F172A",
7
+ "textMuted": "475569",
8
+ "textDim": "94A3B8",
9
+ "primary": "2563EB",
10
+ "accent": "7C3AED",
11
+ "success": "059669",
12
+ "warning": "D97706",
13
+ "danger": "DC2626",
14
+ "info": "0891B2",
15
+ "highlight": "DB2777"
16
+ },
17
+ "fonts": { "title": "Trebuchet MS", "body": "Calibri", "mono": "Consolas" }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "colors": {
3
+ "bg": "FFF0F5",
4
+ "bgCard": "FFFFFF",
5
+ "bgCardAlt": "FDE8EF",
6
+ "text": "1A1A2E",
7
+ "textMuted": "4A4A6A",
8
+ "textDim": "9090B0",
9
+ "primary": "E91E63",
10
+ "accent": "7C3AED",
11
+ "success": "10B981",
12
+ "warning": "F59E0B",
13
+ "danger": "EF4444",
14
+ "info": "06B6D4",
15
+ "highlight": "F97316"
16
+ },
17
+ "fonts": { "title": "Georgia", "body": "Calibri", "mono": "Consolas" }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "colors": {
3
+ "bg": "FFFBEB",
4
+ "bgCard": "FFFFFF",
5
+ "bgCardAlt": "FEF3C7",
6
+ "text": "1C1917",
7
+ "textMuted": "57534E",
8
+ "textDim": "A8A29E",
9
+ "primary": "EA580C",
10
+ "accent": "D946EF",
11
+ "success": "16A34A",
12
+ "warning": "CA8A04",
13
+ "danger": "DC2626",
14
+ "info": "0284C7",
15
+ "highlight": "E11D48"
16
+ },
17
+ "fonts": { "title": "Georgia", "body": "Calibri", "mono": "Consolas" }
18
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1536,
8
+ "height": 1024
9
+ },
10
+ "imageParams": {
11
+ "style": "<style>AKIRA aesthetic.</style>",
12
+ "images": {
13
+ "girl": {
14
+ "type": "image",
15
+ "source": {
16
+ "kind": "url",
17
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/akira_presenter.png"
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "movieParams": {
7
+ "provider": "replicate",
8
+ "model": "bytedance/seedance-1-lite"
9
+ },
10
+ "speechParams": {
11
+ "speakers": {
12
+ "Presenter": {
13
+ "provider": "gemini",
14
+ "voiceId": "Leda",
15
+ "speechOptions": { "instruction": "Speak in a slightly high-pitched, curt tone with sudden flustered shifts—like a tsundere anime girl." }
16
+ }
17
+ }
18
+ },
19
+ "audioParams": {
20
+ "bgm": {
21
+ "kind": "url",
22
+ "url": "https://github.com/receptron/mulmocast-media/raw/refs/heads/main/bgms/morning001.mp3"
23
+ }
24
+ },
25
+ "canvasSize": {
26
+ "width": 1024,
27
+ "height": 1536
28
+ },
29
+ "imageParams": {
30
+ "provider": "google",
31
+ "model": "gemini-2.5-flash-image",
32
+ "style": "<style>A highly polished 2D digital illustration in anime and manga style, featuring clean linework, soft shading, vivid colors, and expressive facial detailing. The composition emphasizes clarity and visual impact with a minimalistic background and a strong character focus. The lighting is even and bright, giving the image a crisp and energetic feel, reminiscent of high-quality character art used in Japanese visual novels or mobile games.</style>",
33
+ "images": {
34
+ "ani": {
35
+ "type": "image",
36
+ "source": {
37
+ "kind": "url",
38
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/ani.png"
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1536,
8
+ "height": 1024
9
+ },
10
+ "imageParams": {
11
+ "style": "A hand-drawn style illustration with a warm, nostalgic atmosphere. The background is rich with natural scenery—lush forests, cloudy skies, and traditional Japanese architecture. Characters have expressive eyes, soft facial features, and are portrayed with gentle lighting and subtle shading. The color palette is muted yet vivid, using earthy tones and watercolor-like textures. The overall scene feels magical and peaceful, with a sense of quiet wonder and emotional depth, reminiscent of classic 1980s and 1990s Japanese animation."
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1536,
8
+ "height": 1024
9
+ },
10
+ "imageParams": {
11
+ "style": "<style>A multi panel comic strips. 1990s American workplace humor. Clean, minimalist line art with muted colors. One character is a nerdy office worker with glasses</style>"
12
+ }
13
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1536,
8
+ "height": 1024
9
+ },
10
+ "imageParams": {
11
+ "style": "<style>Dragon Ball/Dr. Slump aesthetic.</style>",
12
+ "images": {
13
+ "girl": {
14
+ "type": "image",
15
+ "source": {
16
+ "kind": "url",
17
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/slump_presenter.png"
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1536,
8
+ "height": 1024
9
+ },
10
+ "imageParams": {
11
+ "style": "<style>Ghibli style</style>",
12
+ "images": {
13
+ "presenter": {
14
+ "type": "image",
15
+ "source": {
16
+ "kind": "url",
17
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/ghibli_presenter.png"
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1024,
8
+ "height": 1536
9
+ },
10
+ "speechParams": {
11
+ "provider": "openai",
12
+ "speakers": {
13
+ "Presenter": { "voiceId": "shimmer", "speechOptions": { "instruction": "speak very fast" } }
14
+ }
15
+ },
16
+ "imageParams": {
17
+ "style": "<style>Ghibli style</style>",
18
+ "images": {
19
+ "presenter": {
20
+ "type": "image",
21
+ "source": {
22
+ "kind": "url",
23
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/ghibli_presenter.jpg"
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1536,
8
+ "height": 1024
9
+ },
10
+ "imageParams": {
11
+ "style": "<style>Ghost in the shell aesthetic.</style>",
12
+ "images": {
13
+ "presenter": {
14
+ "type": "image",
15
+ "source": {
16
+ "kind": "url",
17
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/ghost_presenter.png"
18
+ }
19
+ },
20
+ "optimus": {
21
+ "type": "image",
22
+ "source": {
23
+ "kind": "url",
24
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/optimus.png"
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }