mulmocast 2.1.23 → 2.1.25
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.
- package/README.md +71 -5
- package/lib/actions/captions.js +13 -7
- package/lib/agents/image_genai_agent.js +14 -6
- package/lib/agents/movie_genai_agent.js +35 -19
- package/lib/cli/commands/tool/complete/builder.d.ts +8 -0
- package/lib/cli/commands/tool/complete/builder.js +23 -0
- package/lib/cli/commands/tool/complete/handler.d.ts +8 -0
- package/lib/cli/commands/tool/complete/handler.js +40 -0
- package/lib/cli/commands/tool/complete/index.d.ts +4 -0
- package/lib/cli/commands/tool/complete/index.js +4 -0
- package/lib/cli/commands/tool/index.js +2 -1
- package/lib/data/styles.d.ts +255 -0
- package/lib/data/styles.js +284 -0
- package/lib/methods/mulmo_presentation_style.d.ts +2 -0
- package/lib/tools/complete_script.d.ts +21 -0
- package/lib/tools/complete_script.js +47 -0
- package/lib/tools/create_mulmo_script_from_url.js +5 -3
- package/lib/tools/create_mulmo_script_interactively.js +3 -2
- package/lib/tools/story_to_script.js +3 -2
- package/lib/types/agent.d.ts +4 -0
- package/lib/types/provider2agent.d.ts +1 -1
- package/lib/types/provider2agent.js +8 -2
- package/lib/types/schema.d.ts +47 -9
- package/lib/types/schema.js +5 -1
- package/lib/utils/context.d.ts +25 -5
- package/package.json +2 -2
- package/scripts/test/minimum_beats_completed.json +45 -0
- package/scripts/test/test_caption_split_patterns.json +244 -0
- package/scripts/test/test_vertexai.json +21 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$mulmocast": {
|
|
3
|
+
"version": "1.1"
|
|
4
|
+
},
|
|
5
|
+
"lang": "ja",
|
|
6
|
+
"captionParams": {
|
|
7
|
+
"lang": "ja",
|
|
8
|
+
"styles": ["color: yellow"],
|
|
9
|
+
"captionSplit": "estimate",
|
|
10
|
+
"textSplit": {
|
|
11
|
+
"type": "delimiters",
|
|
12
|
+
"delimiters": ["。", "!", "?", ".", "!", "?"]
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"beats": [
|
|
16
|
+
{
|
|
17
|
+
"text": "まずは基本の自動分割を確認します。これは長めの文章です。句点で分割されます。さらに一文を追加します。最後は疑問文ですか?",
|
|
18
|
+
"image": {
|
|
19
|
+
"type": "textSlide",
|
|
20
|
+
"slide": {
|
|
21
|
+
"title": "Auto split (default)",
|
|
22
|
+
"bullets": ["Default delimiters", "Japanese + ASCII"]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"text": "手動分割が優先されることを確認します。区切り文字が存在しても自動分割は適用されません。",
|
|
28
|
+
"texts": ["手動分割が優先されます。区切り文字が存在しても、", "自動分割は適用されません。"],
|
|
29
|
+
"image": {
|
|
30
|
+
"type": "textSlide",
|
|
31
|
+
"slide": {
|
|
32
|
+
"title": "Manual texts override",
|
|
33
|
+
"bullets": ["texts[] wins", "No auto split"]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"text": "カスタム区切り文字の動作を確認します。縦棒とダッシュで分割します | このように — さらにこのように | 完了です。",
|
|
39
|
+
"captionParams": {
|
|
40
|
+
"captionSplit": "estimate",
|
|
41
|
+
"textSplit": {
|
|
42
|
+
"type": "delimiters",
|
|
43
|
+
"delimiters": ["|", "—"]
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"image": {
|
|
47
|
+
"type": "textSlide",
|
|
48
|
+
"slide": {
|
|
49
|
+
"title": "Custom delimiters",
|
|
50
|
+
"bullets": ["| and —", "Non-punctuation split"]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"text": "分割なしの動作を確認します。句読点があっても一つのキャプションとして表示されます。",
|
|
56
|
+
"captionParams": {
|
|
57
|
+
"captionSplit": "none",
|
|
58
|
+
"textSplit": { "type": "none" }
|
|
59
|
+
},
|
|
60
|
+
"image": {
|
|
61
|
+
"type": "textSlide",
|
|
62
|
+
"slide": {
|
|
63
|
+
"title": "captionSplit: none",
|
|
64
|
+
"bullets": ["No split", "Single caption"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"text": "区切り文字が空配列の場合は分割されないことを確認します。分割されていないことを確認します。",
|
|
70
|
+
"captionParams": {
|
|
71
|
+
"captionSplit": "estimate",
|
|
72
|
+
"textSplit": {
|
|
73
|
+
"type": "delimiters",
|
|
74
|
+
"delimiters": []
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"image": {
|
|
78
|
+
"type": "textSlide",
|
|
79
|
+
"slide": {
|
|
80
|
+
"title": "Empty delimiters",
|
|
81
|
+
"bullets": ["No split expected"]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"text": "混在する句読点と連続記号の挙動を確認します。英語記号...Yes!!日本語記号でも分割されるはずです!!本当でしょうか?",
|
|
87
|
+
"image": {
|
|
88
|
+
"type": "textSlide",
|
|
89
|
+
"slide": {
|
|
90
|
+
"title": "Repeated punctuation",
|
|
91
|
+
"bullets": ["Consecutive punctuation", "Mixed scripts"]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"text": "スタイル上書きの動作を確認します。このビートだけ文字色を変更します。",
|
|
97
|
+
"captionParams": {
|
|
98
|
+
"styles": ["color: cyan"]
|
|
99
|
+
},
|
|
100
|
+
"image": {
|
|
101
|
+
"type": "textSlide",
|
|
102
|
+
"slide": {
|
|
103
|
+
"title": "Style override",
|
|
104
|
+
"bullets": ["Override styles", "Color: cyan"]
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"text": "スタイルを空配列で上書きし、グローバルの色指定が消えることを確認します。",
|
|
110
|
+
"captionParams": {
|
|
111
|
+
"styles": []
|
|
112
|
+
},
|
|
113
|
+
"image": {
|
|
114
|
+
"type": "textSlide",
|
|
115
|
+
"slide": {
|
|
116
|
+
"title": "Style reset",
|
|
117
|
+
"bullets": ["styles: []", "Clear global styles"]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"text": "We verify the basic automatic splitting. This is a longer passage. It is split at sentence-ending punctuation. We add one more sentence! Is the last one a question?",
|
|
123
|
+
"image": {
|
|
124
|
+
"type": "textSlide",
|
|
125
|
+
"slide": {
|
|
126
|
+
"title": "Auto split (EN)",
|
|
127
|
+
"bullets": ["Default delimiters", "English text"]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"text": "We verify explicit English delimiters. It should split only on period, question, or exclamation. This comma, however, should not split.",
|
|
133
|
+
"captionParams": {
|
|
134
|
+
"captionSplit": "estimate",
|
|
135
|
+
"textSplit": {
|
|
136
|
+
"type": "delimiters",
|
|
137
|
+
"delimiters": [".", "?", "!"]
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"image": {
|
|
141
|
+
"type": "textSlide",
|
|
142
|
+
"slide": {
|
|
143
|
+
"title": "Auto split (EN explicit)",
|
|
144
|
+
"bullets": [".?! only", "Comma should not split"]
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"text": "We confirm that manual splits take precedence. Even if delimiters exist, automatic splitting is not applied.",
|
|
150
|
+
"texts": ["We confirm that manual splits take precedence. Even if delimiters exist,", "automatic splitting is not applied."],
|
|
151
|
+
"image": {
|
|
152
|
+
"type": "textSlide",
|
|
153
|
+
"slide": {
|
|
154
|
+
"title": "Manual texts override (EN)",
|
|
155
|
+
"bullets": ["texts[] wins", "No auto split"]
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"text": "We verify custom delimiters. We split with a vertical bar and a dash | like this — and also like this | done.",
|
|
161
|
+
"captionParams": {
|
|
162
|
+
"captionSplit": "estimate",
|
|
163
|
+
"textSplit": {
|
|
164
|
+
"type": "delimiters",
|
|
165
|
+
"delimiters": ["|", "—"]
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"image": {
|
|
169
|
+
"type": "textSlide",
|
|
170
|
+
"slide": {
|
|
171
|
+
"title": "Custom delimiters (EN)",
|
|
172
|
+
"bullets": ["| and —", "Non-punctuation split"]
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"text": "We confirm the no-split behavior. Even with punctuation, it is displayed as a single caption.",
|
|
178
|
+
"captionParams": {
|
|
179
|
+
"captionSplit": "none",
|
|
180
|
+
"textSplit": { "type": "none" }
|
|
181
|
+
},
|
|
182
|
+
"image": {
|
|
183
|
+
"type": "textSlide",
|
|
184
|
+
"slide": {
|
|
185
|
+
"title": "captionSplit: none (EN)",
|
|
186
|
+
"bullets": ["No split", "Single caption"]
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"text": "We confirm that an empty delimiter list does not split the text. We verify that it remains unsplit.",
|
|
192
|
+
"captionParams": {
|
|
193
|
+
"captionSplit": "estimate",
|
|
194
|
+
"textSplit": {
|
|
195
|
+
"type": "delimiters",
|
|
196
|
+
"delimiters": []
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"image": {
|
|
200
|
+
"type": "textSlide",
|
|
201
|
+
"slide": {
|
|
202
|
+
"title": "Empty delimiters (EN)",
|
|
203
|
+
"bullets": ["No split expected"]
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"text": "We check mixed punctuation and repeated marks. English symbols...Yes!! It should split with Japanese marks too!! Is that correct?",
|
|
209
|
+
"image": {
|
|
210
|
+
"type": "textSlide",
|
|
211
|
+
"slide": {
|
|
212
|
+
"title": "Repeated punctuation (EN)",
|
|
213
|
+
"bullets": ["Consecutive punctuation", "Mixed scripts"]
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"text": "We confirm style override behavior. Only this beat changes the text color.",
|
|
219
|
+
"captionParams": {
|
|
220
|
+
"styles": ["color: cyan"]
|
|
221
|
+
},
|
|
222
|
+
"image": {
|
|
223
|
+
"type": "textSlide",
|
|
224
|
+
"slide": {
|
|
225
|
+
"title": "Style override (EN)",
|
|
226
|
+
"bullets": ["Override styles", "Color: cyan"]
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"text": "We override styles with an empty array to confirm that global styles are cleared.",
|
|
232
|
+
"captionParams": {
|
|
233
|
+
"styles": []
|
|
234
|
+
},
|
|
235
|
+
"image": {
|
|
236
|
+
"type": "textSlide",
|
|
237
|
+
"slide": {
|
|
238
|
+
"title": "Style reset (EN)",
|
|
239
|
+
"bullets": ["styles: []", "Clear global styles"]
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
]
|
|
244
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../assets/schema.json",
|
|
3
|
+
"title": "Vertex AI Test",
|
|
4
|
+
"description": "Test Vertex AI integration",
|
|
5
|
+
"lang": "en",
|
|
6
|
+
"imageParams": {
|
|
7
|
+
"provider": "google",
|
|
8
|
+
"model": "imagen-4.0-generate-001",
|
|
9
|
+
"vertexai_project": "${GOOGLE_PROJECT_ID}",
|
|
10
|
+
"vertexai_location": "us-central1"
|
|
11
|
+
},
|
|
12
|
+
"speechParams": {
|
|
13
|
+
"provider": "mock"
|
|
14
|
+
},
|
|
15
|
+
"beats": [
|
|
16
|
+
{
|
|
17
|
+
"text": "Hello",
|
|
18
|
+
"imagePrompt": "A simple blue circle on white background"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|