mulmocast 0.0.7 â 0.0.9
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/assets/templates/akira_comic.json +28 -0
- package/assets/templates/children_book.json +13 -0
- package/assets/templates/comic_strips.json +14 -1
- package/assets/templates/drslump_comic.json +28 -0
- package/assets/templates/ghibli_comic.json +28 -0
- package/assets/templates/ghost_comic.json +35 -0
- package/assets/templates/onepiece_comic.json +28 -0
- package/assets/templates/sensei_and_taro.json +21 -0
- package/lib/actions/audio.js +2 -2
- package/lib/actions/captions.js +2 -2
- package/lib/actions/images.js +48 -6
- package/lib/actions/movie.d.ts +1 -1
- package/lib/actions/movie.js +13 -11
- package/lib/actions/pdf.js +6 -4
- package/lib/actions/translate.js +2 -2
- package/lib/agents/image_openai_agent.d.ts +1 -0
- package/lib/agents/image_openai_agent.js +15 -3
- package/lib/cli/bin.js +7 -0
- package/lib/cli/helpers.js +2 -1
- package/lib/tools/create_mulmo_script_from_url.js +2 -2
- package/lib/tools/create_mulmo_script_interactively.js +2 -2
- package/lib/tools/story_to_script.js +2 -2
- package/lib/types/schema.d.ts +1738 -228
- package/lib/types/schema.js +8 -2
- package/lib/utils/file.js +20 -9
- package/lib/utils/pdf.d.ts +1 -0
- package/lib/utils/pdf.js +5 -3
- package/lib/utils/preprocess.d.ts +50 -16
- package/package.json +10 -9
- package/scripts/templates/business.json +201 -0
- package/scripts/templates/children_book.json +90 -0
- package/scripts/templates/coding.json +130 -0
- package/scripts/templates/image_prompts_template.json +41 -0
- package/scripts/templates/sensei_and_taro.json +116 -0
- package/scripts/templates/text_only_template.json +35 -0
- package/assets/templates/ghibli_strips.json +0 -6
package/lib/types/schema.js
CHANGED
|
@@ -109,7 +109,9 @@ export const mulmoImageAssetSchema = z.union([
|
|
|
109
109
|
mulmoPdfMediaSchema,
|
|
110
110
|
mulmoImageMediaSchema,
|
|
111
111
|
mulmoSvgMediaSchema,
|
|
112
|
-
mulmoMovieMediaSchema
|
|
112
|
+
mulmoMovieMediaSchema.extend({
|
|
113
|
+
mixAudio: z.number().default(1.0),
|
|
114
|
+
}),
|
|
113
115
|
mulmoTextSlideMediaSchema,
|
|
114
116
|
mulmoChartMediaSchema,
|
|
115
117
|
mulmoMermaidMediaSchema,
|
|
@@ -128,12 +130,14 @@ const mulmoMidiMediaSchema = z
|
|
|
128
130
|
})
|
|
129
131
|
.strict();
|
|
130
132
|
export const mulmoAudioAssetSchema = z.union([mulmoAudioMediaSchema, mulmoMidiMediaSchema]);
|
|
133
|
+
const imageIdSchema = z.string();
|
|
131
134
|
export const mulmoImageParamsSchema = z
|
|
132
135
|
.object({
|
|
133
136
|
model: z.string().optional(), // default: provider specific
|
|
134
137
|
size: z.string().optional(), // default: provider specific
|
|
135
138
|
style: z.string().optional(), // optional image style
|
|
136
139
|
moderation: z.string().optional(), // optional image style
|
|
140
|
+
images: z.record(imageIdSchema, mulmoImageMediaSchema).optional(),
|
|
137
141
|
})
|
|
138
142
|
.strict();
|
|
139
143
|
export const textSlideParamsSchema = z
|
|
@@ -173,6 +177,7 @@ export const mulmoBeatSchema = z
|
|
|
173
177
|
audioParams: beatAudioParamsSchema.optional(), // beat specific parameters
|
|
174
178
|
speechOptions: speechOptionsSchema.optional(),
|
|
175
179
|
textSlideParams: textSlideParamsSchema.optional(),
|
|
180
|
+
imageNames: z.array(imageIdSchema).optional(), // list of image names to use for image generation. The default is all images in the imageParams.images.
|
|
176
181
|
imagePrompt: z.string().optional(), // specified or inserted by preprocessor
|
|
177
182
|
})
|
|
178
183
|
.strict();
|
|
@@ -231,7 +236,7 @@ export const mulmoReferenceSchema = z.object({
|
|
|
231
236
|
url: URLStringSchema,
|
|
232
237
|
title: z.string().optional(),
|
|
233
238
|
description: z.string().optional(),
|
|
234
|
-
type: z.union([z.literal("article"), z.literal("image"), z.literal("video"), z.literal("audio")]).default("article"),
|
|
239
|
+
type: z.union([z.literal("article"), z.literal("paper"), z.literal("image"), z.literal("video"), z.literal("audio")]).default("article"),
|
|
235
240
|
});
|
|
236
241
|
export const mulmoScriptSchema = mulmoPresentationStyleSchema
|
|
237
242
|
.extend({
|
|
@@ -305,6 +310,7 @@ export const mulmoScriptTemplateSchema = z
|
|
|
305
310
|
description: z.string(),
|
|
306
311
|
systemPrompt: z.string(),
|
|
307
312
|
scriptName: z.string().optional(),
|
|
313
|
+
presentationStyle: mulmoPresentationStyleSchema.optional(),
|
|
308
314
|
})
|
|
309
315
|
.strict();
|
|
310
316
|
export const mulmoStoryboardSceneSchema = z
|
package/lib/utils/file.js
CHANGED
|
@@ -18,13 +18,22 @@ export function readMulmoScriptFile(arg2, errorMessage) {
|
|
|
18
18
|
return null;
|
|
19
19
|
}
|
|
20
20
|
const scriptData = fs.readFileSync(scriptPath, "utf-8");
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
try {
|
|
22
|
+
const script = ([".yaml", ".yml"].includes(path.extname(scriptPath).toLowerCase()) ? yamlParse(scriptData) : JSON.parse(scriptData));
|
|
23
|
+
const parsedPath = path.parse(scriptPath);
|
|
24
|
+
return {
|
|
25
|
+
mulmoData: script,
|
|
26
|
+
mulmoDataPath: scriptPath,
|
|
27
|
+
fileName: parsedPath.name,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
catch (__error) {
|
|
31
|
+
if (errorMessage) {
|
|
32
|
+
GraphAILogger.info("read file format is broken.");
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
28
37
|
}
|
|
29
38
|
export const fetchMulmoScriptFile = async (url) => {
|
|
30
39
|
try {
|
|
@@ -120,10 +129,12 @@ export const readScriptTemplateFile = (scriptName) => {
|
|
|
120
129
|
export const readTemplatePrompt = (templateName) => {
|
|
121
130
|
const templatePath = getTemplateFilePath(templateName);
|
|
122
131
|
const templateData = fs.readFileSync(templatePath, "utf-8");
|
|
123
|
-
|
|
132
|
+
// NOTE: We don't want to schema parse the template here to eliminate default values.
|
|
133
|
+
const template = JSON.parse(templateData);
|
|
124
134
|
const script = (() => {
|
|
125
135
|
if (template.scriptName) {
|
|
126
|
-
|
|
136
|
+
const script = readScriptTemplateFile(template.scriptName);
|
|
137
|
+
return { ...script, ...(template.presentationStyle ?? {}) };
|
|
127
138
|
}
|
|
128
139
|
return undefined;
|
|
129
140
|
})();
|
package/lib/utils/pdf.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { PDFFont } from "pdf-lib";
|
|
|
2
2
|
export declare const fontSize = 12;
|
|
3
3
|
export declare const textMargin = 6;
|
|
4
4
|
export declare const drawSize: (fitWidth: boolean, expectWidth: number, expectHeight: number, origWidth: number, origHeight: number) => {
|
|
5
|
+
containerWidth: number;
|
|
5
6
|
drawWidth: number;
|
|
6
7
|
drawHeight: number;
|
|
7
8
|
};
|
package/lib/utils/pdf.js
CHANGED
|
@@ -6,6 +6,7 @@ export const drawSize = (fitWidth, expectWidth, expectHeight, origWidth, origHei
|
|
|
6
6
|
const scale = drawWidth / origWidth;
|
|
7
7
|
const drawHeight = origHeight * scale;
|
|
8
8
|
return {
|
|
9
|
+
containerWidth: expectWidth,
|
|
9
10
|
drawWidth,
|
|
10
11
|
drawHeight,
|
|
11
12
|
};
|
|
@@ -14,6 +15,7 @@ export const drawSize = (fitWidth, expectWidth, expectHeight, origWidth, origHei
|
|
|
14
15
|
const scale = drawHeight / origHeight;
|
|
15
16
|
const drawWidth = origWidth * scale;
|
|
16
17
|
return {
|
|
18
|
+
containerWidth: expectWidth,
|
|
17
19
|
drawWidth,
|
|
18
20
|
drawHeight,
|
|
19
21
|
};
|
|
@@ -37,10 +39,10 @@ export const wrapText = (text, font, fontSize, maxWidth) => {
|
|
|
37
39
|
const currentIsFull = isFullwidth(char);
|
|
38
40
|
const nextIsFull = nextChar && isFullwidth(nextChar);
|
|
39
41
|
const isBreakable = currentIsFull || (!currentIsFull && (char === " " || nextChar === " " || nextIsFull));
|
|
40
|
-
if (width > maxWidth &&
|
|
42
|
+
if (width > maxWidth && line) {
|
|
41
43
|
lines.push(line);
|
|
42
|
-
line =
|
|
43
|
-
buffer =
|
|
44
|
+
line = buffer;
|
|
45
|
+
buffer = "";
|
|
44
46
|
}
|
|
45
47
|
if (isBreakable || i === rawLine.length - 1) {
|
|
46
48
|
line += buffer;
|
|
@@ -101,21 +101,6 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
|
|
|
101
101
|
path: string;
|
|
102
102
|
kind: "path";
|
|
103
103
|
};
|
|
104
|
-
} | {
|
|
105
|
-
type: "movie";
|
|
106
|
-
source: {
|
|
107
|
-
url: string;
|
|
108
|
-
kind: "url";
|
|
109
|
-
} | {
|
|
110
|
-
kind: "base64";
|
|
111
|
-
data: string;
|
|
112
|
-
} | {
|
|
113
|
-
text: string;
|
|
114
|
-
kind: "text";
|
|
115
|
-
} | {
|
|
116
|
-
path: string;
|
|
117
|
-
kind: "path";
|
|
118
|
-
};
|
|
119
104
|
} | {
|
|
120
105
|
type: "textSlide";
|
|
121
106
|
slide: {
|
|
@@ -147,6 +132,22 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
|
|
|
147
132
|
} | {
|
|
148
133
|
type: "html_tailwind";
|
|
149
134
|
html: string | string[];
|
|
135
|
+
} | {
|
|
136
|
+
type: "movie";
|
|
137
|
+
source: {
|
|
138
|
+
url: string;
|
|
139
|
+
kind: "url";
|
|
140
|
+
} | {
|
|
141
|
+
kind: "base64";
|
|
142
|
+
data: string;
|
|
143
|
+
} | {
|
|
144
|
+
text: string;
|
|
145
|
+
kind: "text";
|
|
146
|
+
} | {
|
|
147
|
+
path: string;
|
|
148
|
+
kind: "path";
|
|
149
|
+
};
|
|
150
|
+
mixAudio: number;
|
|
150
151
|
} | undefined;
|
|
151
152
|
audio?: {
|
|
152
153
|
type: "audio";
|
|
@@ -172,6 +173,22 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
|
|
|
172
173
|
size?: string | undefined;
|
|
173
174
|
style?: string | undefined;
|
|
174
175
|
moderation?: string | undefined;
|
|
176
|
+
images?: Record<string, {
|
|
177
|
+
type: "image";
|
|
178
|
+
source: {
|
|
179
|
+
url: string;
|
|
180
|
+
kind: "url";
|
|
181
|
+
} | {
|
|
182
|
+
kind: "base64";
|
|
183
|
+
data: string;
|
|
184
|
+
} | {
|
|
185
|
+
text: string;
|
|
186
|
+
kind: "text";
|
|
187
|
+
} | {
|
|
188
|
+
path: string;
|
|
189
|
+
kind: "path";
|
|
190
|
+
};
|
|
191
|
+
}> | undefined;
|
|
175
192
|
} | undefined;
|
|
176
193
|
audioParams?: {
|
|
177
194
|
padding?: number | undefined;
|
|
@@ -179,6 +196,7 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
|
|
|
179
196
|
textSlideParams?: {
|
|
180
197
|
cssStyles: string | string[];
|
|
181
198
|
} | undefined;
|
|
199
|
+
imageNames?: string[] | undefined;
|
|
182
200
|
imagePrompt?: string | undefined;
|
|
183
201
|
}[];
|
|
184
202
|
lang?: string | undefined;
|
|
@@ -189,6 +207,22 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
|
|
|
189
207
|
size?: string | undefined;
|
|
190
208
|
style?: string | undefined;
|
|
191
209
|
moderation?: string | undefined;
|
|
210
|
+
images?: Record<string, {
|
|
211
|
+
type: "image";
|
|
212
|
+
source: {
|
|
213
|
+
url: string;
|
|
214
|
+
kind: "url";
|
|
215
|
+
} | {
|
|
216
|
+
kind: "base64";
|
|
217
|
+
data: string;
|
|
218
|
+
} | {
|
|
219
|
+
text: string;
|
|
220
|
+
kind: "text";
|
|
221
|
+
} | {
|
|
222
|
+
path: string;
|
|
223
|
+
kind: "path";
|
|
224
|
+
};
|
|
225
|
+
}> | undefined;
|
|
192
226
|
} | undefined;
|
|
193
227
|
textSlideParams?: {
|
|
194
228
|
cssStyles: string | string[];
|
|
@@ -196,7 +230,7 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
|
|
|
196
230
|
omitCaptions?: boolean | undefined;
|
|
197
231
|
description?: string | undefined;
|
|
198
232
|
references?: {
|
|
199
|
-
type: "image" | "audio" | "article" | "video";
|
|
233
|
+
type: "image" | "audio" | "article" | "paper" | "video";
|
|
200
234
|
url: string;
|
|
201
235
|
title?: string | undefined;
|
|
202
236
|
description?: string | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mulmocast",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/cli/bin.js",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"./lib",
|
|
12
|
+
"./scripts/templates",
|
|
12
13
|
"./assets/music/StarsBeyondEx.mp3",
|
|
13
14
|
"./assets/audio/silent300.mp3",
|
|
14
15
|
"./assets/audio/silent800.mp3",
|
|
@@ -51,22 +52,22 @@
|
|
|
51
52
|
"homepage": "https://github.com/receptron/mulmocast-cli#readme",
|
|
52
53
|
"dependencies": {
|
|
53
54
|
"@google-cloud/text-to-speech": "^6.1.0",
|
|
54
|
-
"@graphai/anthropic_agent": "^2.0.
|
|
55
|
+
"@graphai/anthropic_agent": "^2.0.2",
|
|
55
56
|
"@graphai/browserless_agent": "^2.0.0",
|
|
56
|
-
"@graphai/gemini_agent": "^
|
|
57
|
-
"@graphai/groq_agent": "^
|
|
57
|
+
"@graphai/gemini_agent": "^2.0.0",
|
|
58
|
+
"@graphai/groq_agent": "^2.0.0",
|
|
58
59
|
"@graphai/input_agents": "^1.0.1",
|
|
59
|
-
"@graphai/openai_agent": "^2.0.
|
|
60
|
-
"@graphai/stream_agent_filter": "^2.0.
|
|
61
|
-
"@graphai/vanilla": "^2.0.
|
|
62
|
-
"@graphai/vanilla_node_agents": "^2.0.
|
|
60
|
+
"@graphai/openai_agent": "^2.0.3",
|
|
61
|
+
"@graphai/stream_agent_filter": "^2.0.2",
|
|
62
|
+
"@graphai/vanilla": "^2.0.4",
|
|
63
|
+
"@graphai/vanilla_node_agents": "^2.0.1",
|
|
63
64
|
"@pdf-lib/fontkit": "^1.1.1",
|
|
64
65
|
"canvas": "^3.1.0",
|
|
65
66
|
"clipboardy": "^4.0.0",
|
|
66
67
|
"dotenv": "^16.4.7",
|
|
67
68
|
"fluent-ffmpeg": "^2.1.3",
|
|
68
69
|
"google-auth-library": "^9.15.1",
|
|
69
|
-
"graphai": "^2.0.
|
|
70
|
+
"graphai": "^2.0.5",
|
|
70
71
|
"inquirer": "^12.6.1",
|
|
71
72
|
"marked": "^15.0.11",
|
|
72
73
|
"ora": "^8.2.0",
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$mulmocast": {
|
|
3
|
+
"version": "1.0",
|
|
4
|
+
"credit": "closing"
|
|
5
|
+
},
|
|
6
|
+
"title": "Sample Title",
|
|
7
|
+
"references": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://www.somegreatwebsite.com/article/123",
|
|
10
|
+
"title": "Title of the article we are referencing",
|
|
11
|
+
"type": "article"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"lang": "en",
|
|
15
|
+
"beats": [
|
|
16
|
+
{
|
|
17
|
+
"text": "Today we're exploring a fascinating concept that has shaped some of the most innovative companies and leaders of our time: the Reality Distortion Field.",
|
|
18
|
+
"image": {
|
|
19
|
+
"type": "textSlide",
|
|
20
|
+
"slide": {
|
|
21
|
+
"title": "This is the title of the presentation"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"text": "This is a sample slide, which just displays the title and the presenter's name of this presentation.",
|
|
27
|
+
"image": {
|
|
28
|
+
"type": "textSlide",
|
|
29
|
+
"slide": {
|
|
30
|
+
"title": "This is the title of the presentation",
|
|
31
|
+
"subtitle": "Tom Johnson"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"text": "The evolution of humans is a complex journey that spans millions of years, shaped by biology, environment, and culture. Here's a high-level summary of the key stages in human evolution",
|
|
37
|
+
"image": {
|
|
38
|
+
"type": "textSlide",
|
|
39
|
+
"slide": {
|
|
40
|
+
"title": "Human Evolution",
|
|
41
|
+
"bullets": [
|
|
42
|
+
"Early Primates",
|
|
43
|
+
"Hominids and Hominins",
|
|
44
|
+
"Australopithecus",
|
|
45
|
+
"Genus Homo Emerges",
|
|
46
|
+
"Homo erectus and Migration",
|
|
47
|
+
"Neanderthals and Other Archaic Humans",
|
|
48
|
+
"Homo sapiens"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"text": "This is a table of items in the store.",
|
|
55
|
+
"image": {
|
|
56
|
+
"type": "markdown",
|
|
57
|
+
"markdown": [
|
|
58
|
+
"# Markdown Table Example",
|
|
59
|
+
"| Item | In Stock | Price |",
|
|
60
|
+
"| :---------------- | :------: | ----: |",
|
|
61
|
+
"| Python Hat | True | 23.99 |",
|
|
62
|
+
"| SQL Hat | True | 23.99 |",
|
|
63
|
+
"| Codecademy Tee | False | 19.99 |",
|
|
64
|
+
"| Codecademy Hoodie | False | 42.99 |"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"text": "This page shows the sales and profits of this company from January 2024 to June 2024.",
|
|
70
|
+
"image": {
|
|
71
|
+
"type": "chart",
|
|
72
|
+
"title": "Sales and Profits (from Jan to June)",
|
|
73
|
+
"chartData": {
|
|
74
|
+
"type": "bar",
|
|
75
|
+
"data": {
|
|
76
|
+
"labels": ["January", "February", "March", "April", "May", "June"],
|
|
77
|
+
"datasets": [
|
|
78
|
+
{
|
|
79
|
+
"label": "Revenue ($1000s)",
|
|
80
|
+
"data": [120, 135, 180, 155, 170, 190],
|
|
81
|
+
"backgroundColor": "rgba(54, 162, 235, 0.5)",
|
|
82
|
+
"borderColor": "rgba(54, 162, 235, 1)",
|
|
83
|
+
"borderWidth": 1
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"label": "Profit ($1000s)",
|
|
87
|
+
"data": [45, 52, 68, 53, 61, 73],
|
|
88
|
+
"backgroundColor": "rgba(75, 192, 192, 0.5)",
|
|
89
|
+
"borderColor": "rgba(75, 192, 192, 1)",
|
|
90
|
+
"borderWidth": 1
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"options": {
|
|
95
|
+
"responsive": true,
|
|
96
|
+
"animation": false
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"text": "This is a sample pie chart",
|
|
103
|
+
"image": {
|
|
104
|
+
"type": "chart",
|
|
105
|
+
"title": "A sample pie chart",
|
|
106
|
+
"chartData": {
|
|
107
|
+
"type": "pie",
|
|
108
|
+
"data": {
|
|
109
|
+
"labels": ["OpenAIã¨æčŗåŽļãŽåãå", "ãã¤ã¯ããŊãããŽåãå"],
|
|
110
|
+
"datasets": [
|
|
111
|
+
{
|
|
112
|
+
"data": [90, 10],
|
|
113
|
+
"backgroundColor": ["rgba(75, 192, 192, 0.5)", "rgba(54, 162, 235, 0.5)"],
|
|
114
|
+
"borderColor": ["rgba(75, 192, 192, 1)", "rgba(54, 162, 235, 1)"],
|
|
115
|
+
"borderWidth": 1
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"options": {
|
|
120
|
+
"responsive": true,
|
|
121
|
+
"animation": false,
|
|
122
|
+
"plugins": {
|
|
123
|
+
"legend": {
|
|
124
|
+
"position": "bottom"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"text": "Next, let's look at a diagram of our business process flow. This illustrates the key steps from product development to sales.",
|
|
133
|
+
"image": {
|
|
134
|
+
"type": "mermaid",
|
|
135
|
+
"title": "Business Process Flow",
|
|
136
|
+
"code": {
|
|
137
|
+
"kind": "text",
|
|
138
|
+
"text": "graph LR\n A[Market Research] --> B[Product Planning]\n B --> C[Development]\n C --> D[Testing]\n D --> E[Manufacturing]\n E --> F[Marketing]\n F --> G[Sales]\n G --> H[Customer Support]\n H --> A"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"text": "This is a tailwind html format.",
|
|
144
|
+
"image": {
|
|
145
|
+
"type": "html_tailwind",
|
|
146
|
+
"html": [
|
|
147
|
+
"<main class=\"flex-grow\">",
|
|
148
|
+
" <!-- Hero Section -->",
|
|
149
|
+
" <section class=\"bg-blue-600 text-white py-20\">",
|
|
150
|
+
" <div class=\"container mx-auto px-6 text-center\">",
|
|
151
|
+
" <h1 class=\"text-4xl md:text-5xl font-bold mb-4\">Welcome to Mulmocast</h1>",
|
|
152
|
+
" <p class=\"text-lg md:text-xl mb-8\">A modern web experience powered by Tailwind CSS</p>",
|
|
153
|
+
" <a href=\"#features\" class=\"bg-white text-blue-600 px-6 py-3 rounded-lg font-semibold shadow hover:bg-gray-100 transition\">",
|
|
154
|
+
" Learn More",
|
|
155
|
+
" </a>",
|
|
156
|
+
" </div>",
|
|
157
|
+
" </section>",
|
|
158
|
+
"",
|
|
159
|
+
" <!-- Features Section -->",
|
|
160
|
+
" <section id=\"features\" class=\"py-16 bg-gray-100\">",
|
|
161
|
+
" <div class=\"container mx-auto px-6\">",
|
|
162
|
+
" <div class=\"grid grid-cols-1 md:grid-cols-3 gap-8 text-center\">",
|
|
163
|
+
" <div>",
|
|
164
|
+
" <div class=\"text-blue-600 text-4xl mb-2\">âĄ</div>",
|
|
165
|
+
" <h3 class=\"text-xl font-semibold mb-2\">Fast</h3>",
|
|
166
|
+
" <p class=\"text-gray-600\">Built with performance in mind using modern tools.</p>",
|
|
167
|
+
" </div>",
|
|
168
|
+
" <div>",
|
|
169
|
+
" <div class=\"text-blue-600 text-4xl mb-2\">đ¨</div>",
|
|
170
|
+
" <h3 class=\"text-xl font-semibold mb-2\">Beautiful</h3>",
|
|
171
|
+
" <p class=\"text-gray-600\">Styled with Tailwind CSS for clean, responsive design.</p>",
|
|
172
|
+
" </div>",
|
|
173
|
+
" <div>",
|
|
174
|
+
" <div class=\"text-blue-600 text-4xl mb-2\">đ</div>",
|
|
175
|
+
" <h3 class=\"text-xl font-semibold mb-2\">Launch Ready</h3>",
|
|
176
|
+
" <p class=\"text-gray-600\">Easy to deploy and extend for your next big idea.</p>",
|
|
177
|
+
" </div>",
|
|
178
|
+
" </div>",
|
|
179
|
+
" </div>",
|
|
180
|
+
" </section>",
|
|
181
|
+
"</main>",
|
|
182
|
+
"",
|
|
183
|
+
"<!-- Footer -->",
|
|
184
|
+
"<footer class=\"bg-white text-gray-500 text-center py-6 border-t\">",
|
|
185
|
+
" 2025 Mulmocast.",
|
|
186
|
+
"</footer>"
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"text": "This is the image of the future of enterprise applications.",
|
|
192
|
+
"image": {
|
|
193
|
+
"type": "image",
|
|
194
|
+
"source": {
|
|
195
|
+
"kind": "url",
|
|
196
|
+
"url": "https://satoshi.blogs.com/mag2/May2025/enterprise_app.png"
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$mulmocast": {
|
|
3
|
+
"version": "1.0",
|
|
4
|
+
"credit": "closing"
|
|
5
|
+
},
|
|
6
|
+
"title": "æĄå¤Ēé",
|
|
7
|
+
"lang": "ja",
|
|
8
|
+
"beats": [
|
|
9
|
+
{
|
|
10
|
+
"text": "ãããããããããã¨ãããĢãããããã¨ãã°ããããäŊãã§ããžããããããããã¯åąąã¸čåããĢããã°ãããã¯åˇã¸æ´æŋ¯ãĢčĄããžããã",
|
|
11
|
+
"imagePrompt": "ččēãåąæ šãŽå¤ãæĨæŦåŽļåąãčŋããĢã¯æ¸
ãããĒåˇãæĩããčŖãĢã¯įˇčąããĒåąąãããããããããã¯éãæãŖãĻåąąã¸åããããã°ãããã¯æ´æŋ¯ãããæãŖãĻåˇã¸åããŖãĻãããæĨãŽįŠãããĒæĨåˇŽããéĸ¨æ¯ãį
§ãããĻããã"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"text": "ãã°ããããåˇã§æ´æŋ¯ãããĻããã¨ã䏿ĩãã大ããĒæĄãæĩããĻããžãããããžãããĒããĻ大ããĒæĄã§ããããã¨ãã°ãããã¯éŠããžããã",
|
|
15
|
+
"imagePrompt": "åˇã§æ´æŋ¯ãããã°ããããåˇéĸãĢæ ãéįŠēã¨įŊãé˛ã䏿ĩããæĩããĻããį°æ§ãĢ大ãããĻ鎎ãããĒčĩ¤ãæĄãéŠãã襨æ
ã§ãããčĻã¤ãããã°ããããå¨ããĢã¯æ´æŋ¯įŠã¨įŗã"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"text": "ãã°ãããã¯ããŽæĄãæãĄå¸°ããããããããã大ããĒæĄãčĻã¤ããžããããã¨č¨ããžãããäēäēēãæĄãåããã¨ããã¨ãä¸ããå
æ°ãĒįˇãŽåãįãžããžããã",
|
|
19
|
+
"imagePrompt": "åŽļãŽä¸ãčĩ¤ãåãéĢãæąãä¸ããĻãéŠãã¨åãŗãŽčĄ¨æ
ãæĩŽããšãčå¤ĢåŠĻã"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"text": "äēäēēã¯įˇãŽåããæĄå¤Ēéãã¨åäģããĻã大åãĢč˛ãĻãžãããæĄå¤Ēéã¯ããããã¨æéˇããã¨ãĻãåŧˇãåãĢãĒããžããã",
|
|
23
|
+
"imagePrompt": "æéãŽįĩéãį¤ēã4ãŗããŽéŖįļįģåãæåã¯čĩ¤ãĄãããæŦĄãĢåšŧå
ããããĻå°åš´ãæåžãĢčĨãᎿ§ã¸ã¨æéˇããæĄå¤ĒéãåæŽĩéã§ãããããã¨ãã°ããããææ
æˇąãčĻåŽãŖãĻãããæåžãŽįģåã§ã¯ããããžããæéˇããæĄå¤Ēéãæ¨ãæãĄä¸ããããéãįŗãéãã ãããĻåãŽåŧˇããį¤ēããĻããã"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"text": "ããæĨãéŦŧãåŗļããæĨãéŦŧããĄãæãčãããĻããã¨ãã芹ãčããæĄå¤Ēéã¯ããããããã¨ãã°ããããĢãéŦŧ鿞ģãĢčĄããžããã¨åããžããã",
|
|
27
|
+
"imagePrompt": "åŽļãŽä¸ãŽæĄå¤Ēéããããããã¨ãã°ããããįĒãŽå¤ã§ã¯æäēēããĄãææãŽčĄ¨æ
ã§éãåããé ããĢã¯įã¨į
ãčĻãããæąēæãĢæēãĄã襨æ
ãŽæĄå¤ĒéãįĢãĄä¸ããããããããã¨ãã°ããããĢčĒããããĻãããææ
Žã¨čĒããŽå
ĨãæˇˇããŖã襨æ
ãŽčå¤ĢåŠĻã"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"text": "ãã°ãããã¯æĄå¤ĒéãŽãããĢãæĨæŦä¸ãŽããŗã ãããäŊãŖãĻãããžããããããããã¯įĢæ´žãĒåã¨įįŠããããžããã",
|
|
31
|
+
"imagePrompt": "åŽļãŽä¸ããã°ããããå°æã§ããŗã ãããäŊããããããããæĄįŽąããåã¨éŽŽãããĒįįŠãåãåēããĻãããæēåãæ´ããæĄå¤ĒéãããŧããĢãŽä¸ãĢã¯å°ããĒå¸å
ãŋãĢããŗã ãããå
ãžããĻãããææĨãéåãéããĻé¨åąã渊ããį
§ãããĻããã"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"text": "ãããŖãĻããžããã¨č¨ãŖãĻãæĄå¤Ēéã¯ããŗã ãããæãŖãĻãéŦŧãåŗļã¸åãããžããã",
|
|
35
|
+
"imagePrompt": "åŽļãŽåã§åēįēããæĄå¤Ēéãč
°ãĢã¯ããŗã ãããŽå
ĨãŖãčĸã¨åãčä¸ãĢã¯å°ããĒæãčĻéããããããã¨ãã°ãããããããĻæäēēããĄãæĄå¤Ēéã¯čĒäŋĄãĢæēãĄã襨æ
ã§åæšãčĻã¤ããĻãããæé§ãŽä¸ãéã¯åąąã
ã¸ã¨įļããĻããã"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"text": "éä¸ãæĄå¤Ēéã¯įŦãĢåēäŧããžããããæĄå¤ĒéãããæĄå¤Ēéããããč
°ãĢã¤ããããŗã ãããä¸ã¤ããããĢä¸ãããĒãã¨įŦã¯č¨ããžããã",
|
|
39
|
+
"imagePrompt": "åąąéãé˛ãæĄå¤Ēéãæ¨ĒãĢã¯å¤§ããĒčļč˛ãŽįŦãįĢãŖãĻãããįŦã¯å°žãæ¯ããæåž
ãčžŧãã襨æ
ã§æĄå¤ĒéãčĻä¸ããĻãããå¨ããĢã¯æĨãŽčąã¨įˇčąããĒčĒįļãæĄå¤Ēéã¯įŦãĢ垎įŦãŋãããĻããã"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"text": "ããããä¸ã¤ãããããããŽäģŖããåŽļæĨãĢãĒããã ããã¨æĄå¤Ēéã¯č¨ããžãããįŦã¯åãã§ããŗã ãããéŖãšãæĄå¤ĒéãŽåŽļæĨãĢãĒããžããã",
|
|
43
|
+
"imagePrompt": "æĄå¤Ēéãããŗã ãããįŦãĢæ¸ĄããĻããæ§åãįŦãåŦããããĢããŗã ãããéŖãšãĻãããæĄå¤ĒéãŽčĄ¨æ
ã¯åĒããé ŧãããã违ãĢã¯åąąã¨åˇãé ããĢã¯éŦŧãåŗļãæãããé æ¯ã"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"text": "æŦĄãĢãæĄå¤Ēéã¨įŦã¯įŋãĢåēäŧããžãããįŋãããŗã ããã¨åŧãæããĢãæĄå¤ĒéãŽåŽļæĨãĢãĒããžããã",
|
|
47
|
+
"imagePrompt": "æŖŽãŽä¸ãŽéãæĄå¤Ēéã¨įŦãæ¨ãĢã¨ãžãįŋã¨čŠąããĻãããįŋã¯åĨŊåĨåŋããŖãąããŽčĄ¨æ
ã§æĄå¤ĒéãŽæãĢããããŗã ãããčĻãĻãããå¨ããĢã¯č˛ã¨ããŠããŽæ¨ã
ã¨čąãįŦã¯įŋãååĨŊįãĢčĻä¸ããĻããã"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"text": "ãããĢé˛ãã¨ãäģåēĻã¯ãã¸ãĢåēäŧããžããããã¸ãããŗã ãããããããæĄå¤ĒéãŽåŽļæĨãĢãĒããžããã",
|
|
51
|
+
"imagePrompt": "åąąãŽéããå ´æãįŠēéĢãčããĢãŠããĢãĒãã¸ãæĄå¤ĒéããĄãĢčŋãĨããĻããĻãããå°éĸãĢã¯æĄå¤ĒéãįŦãįŋãįĢãŖãĻãããįŠēãčĻä¸ããĻããããã¸ã¯įžããįžŊãåēããæĄå¤ĒéãŽããŗã ãããĢįŽãåããĻããã违ãĢã¯é大ãĒåąąã
ã¨æžãã éįŠēã"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"text": "ããããĻæĄå¤Ēéã¯ãįŦãįŋããã¸ãåŽļæĨãĢããĻãããããéŦŧãåŗļã¸ã¨åãããžããã",
|
|
55
|
+
"imagePrompt": "æĩˇãĢæĩŽããļéŦŧãåŗļãĢåããå°ããĒčšãčšãŽä¸ãĢã¯æĄå¤ĒéãįŦãįŋããã¸ãäšãŖãĻãããæĄå¤Ēéã¯įĢãŖãĻææŽãåããįŦã¯čšãŽåæšãčĻæŽããįŋã¯å¸ãæäŊãããã¸ã¯įŠēããčĻåŧĩããããĻãããčã
ããæŗĸã¨æé˛ãįĢãĄčžŧããä¸ãåŗļã¸ã¨čŋãĨãåŊŧããŽå§ŋãåŗļãĢã¯éēããå˛Šåąąã¨ä¸æ°åŗãĒåãčĻããã"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"text": "éŦŧãåŗļãĢįãã¨ããããĢã¯å¤§ããĒéããããžããããã¸ãéŖãã§æ§åãčĻãã¨ãä¸ã§ã¯éŦŧããĄã厴äŧãããĻããžããã",
|
|
59
|
+
"imagePrompt": "éŦŧãļåŗļãŽå¤§ããĒčĩ¤ãéãéãŽä¸įŠēãéŖãļãã¸ãéãŽåããå´ã§ã¯ãæ§ã
ãĒč˛ãŽéŦŧããĄãé
ãéŖ˛ãŋãč¸ããé¨ãã§ããæ§åãčĻãããéŦŧãŽä¸ãĢã¯č§ã1æŦã2æŦã3æŦãŽããŽãĒãŠæ§ã
ã厴äŧå ´ãŽå¨ããĢã¯įãã§ããåŽįŠãåąąįŠãŋãĢãĒãŖãĻãããéãŽæåãĢã¯æĄå¤ĒéãįŦãįŋãé ããĻæ§åãããããŖãĻããã"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"text": "ãããŧãããŋããĒæēåã¯ããããäģããéŦŧ鿞ģã īŧãã¨æĄå¤Ēéã¯č¨ããžããã",
|
|
63
|
+
"imagePrompt": "éŦŧãļåŗļãŽå
ĨãåŖčŋããå˛Šé°ãĢé ããæĄå¤Ēéã¨åŽļæĨããĄãæĄå¤Ēéã¯åãæããæąēæãĢæēãĄã襨æ
ã§äģ˛éããĄãĢčĒããããĻãããįŦã¯įããããįŋã¯æŖãæ§ãããã¸ã¯éãå´ãčĻããĻæĻãæēåãããĻãããå
¨åĄãįåŖãĒ襨æ
ã§æĄå¤ĒéãŽč¨čãĢčŗãåžããĻããã违ãĢã¯éŦŧãŽåã䏿°åŗãĢããŗãįĢãŖãĻããã"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"text": "æĄå¤ĒéããĄã¯åæĸãĢæĻããžãããįŦã¯éŦŧãŽčļŗãĢåãŋã¤ããįŋã¯éŦŧãŽéĢĒãåŧãŖåŧĩãããã¸ã¯éŦŧãŽįŽãã¤ã¤ããĻæģæããžããã",
|
|
67
|
+
"imagePrompt": "éŦŧãļåŗļãŽåãŽä¸ã§ãŽæŋããæĻéãˇãŧãŗãæ§ã
ãĒč˛ãŽéŦŧããĄãéŠãã¨æããŽčĄ¨æ
ã§æĻãŖãĻãããįŦã¯čĩ¤éŦŧãŽčļŗãĢåãŋã¤ããĻåããįŋã¯ééŦŧãŽéĢĒãåŧãŖåŧĩãŖãĻæˇˇäšąããããã¸ã¯įˇéŦŧãŽįŽãã¤ã¤ããĻãããä¸å¤Žã§ã¯æĄå¤Ēéãåãæ¯ãããéģč˛ãéŦŧã¨å¯žåŗããĻããã违ãĢã¯äģãŽéŦŧããĄãéãæãå§ŋããããæĻããŽįąæ°ã¨æˇˇäšąãįģéĸããŖãąããĢåēããŖãĻããã"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"text": "ãããĻæĄå¤Ēéã¯éŦŧãŽå¤§å°ãĢåããŖãĻčĄããžãããæŋããæĻããŽæĢãæĄå¤Ēéã¯éŦŧãŽå¤§å°ãåããžããã",
|
|
71
|
+
"imagePrompt": "åãŽåĨĨãčąĒč¯ãĒé¨åąã§ãŽæĄå¤Ēéã¨éŦŧãŽå¤§å°ã¨ãŽä¸é¨æãĄãéŦŧãŽå¤§å°ã¯åˇ¨å¤§ã§ãčĩ¤ãčãĢéč˛ãŽå
ã¨éãŽæŖæŖãæãŖãĻãããæĄå¤Ēéã¯å°ãããĒãããåæĸãĢåãæ§ããĻ寞åŗããĻãããé¨åąãŽå¨ããĢã¯åŽįŠãæŖãã°ããįĒããã¯æĻããčĻåŽãåŽļæĨããĄãŽå§ŋãčĻãããæąēåŽįãĒ䏿ãå ãããã¨ããæĄå¤Ēéã¨ãéŠããŽčĄ¨æ
ãæĩŽããšãéŦŧãŽå¤§å°ã"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"text": "ãããæĒããã¨ã¯ããžãããåŊã ãã¯ãåŠããã ãããã¨éŦŧããĄã¯éåããžããããããĻæããįãã åŽįŠãããšãĻåˇŽãåēããžããã",
|
|
75
|
+
"imagePrompt": "åēãĢé ãä¸ããĻåä¸åē§ããéŦŧãŽå¤§å°ã¨éŦŧããĄãååŠããæĄå¤Ēéãå ã
ã¨įĢãĄãåŽļæĨããĄãããŽæ¨ĒãĢčĒããããĢä¸Ļãã§ãããéŦŧããĄãŽåãĢã¯éé貥åŽãå¸ãįąŗäŋĩãĒãŠįãã åŽįŠãåąąã¨įŠãžããĻãããéŦŧããĄã¯æãã¨åžæãŽčĄ¨æ
ãæĩŽããšãĻãããæĄå¤ĒéãŽčĄ¨æ
ã¯åŗãããĒãããæ
æ˛æˇąããæããããã"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"text": "æĄå¤Ēéã¨åŽļæĨããĄã¯åŽįŠãæãŖãĻæãĢ帰ããžãããæäēēããĄã¯å¤§åãŗã§åŊŧããčŋããžããã",
|
|
79
|
+
"imagePrompt": "æãĢåąæããæĄå¤Ēéã¨åŽļæĨããĄãåŽįŠãéãļįŦãįŋããã¸ãæĄå¤Ēéã¯čĒããããĢæäēēããĄãĢæãæ¯ãŖãĻãããččĨįˇåĨŗãŽæäēēããĄãéãŽä¸Ąå´ãĢéãžããåãŗãŽčĄ¨æ
ã§čąãæãæ¯ãŖãĻčŋããĻããããããããã¨ãã°ããããæååã§æļãæĩããĒããæĄå¤ĒéãŽå¸°ããåž
ãŖãĻãããæĨãŽæããæĨåˇŽããæå
¨äŊãį
§ãããĻããã"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"text": "ãããããã¨ãã°ãããã¯æĄå¤ĒéãŽįĄäēãĒ帰ããåãŗãæąããããžããããããĻæã¯ããäēåēĻã¨éŦŧãĢčĨ˛ããããã¨ã¯ãããžããã§ããã",
|
|
83
|
+
"imagePrompt": "åŽļãŽåã§ãããããã¨ãã°ããããæĄå¤ĒéãæąããããĻããæåįãĒå ´éĸãåãŗãŽæļãæĩããããããã¨ãã°ããããįŦãįŋããã¸ã嚸ããããĢčĻåŽãŖãĻãããå¨ããĢã¯æäēēããĄãéãžããįĨįĻããĻãããåŽļãŽåãĢã¯åŽįŠãŽä¸é¨ãįŊŽããã违ãĢã¯åšŗåãĒæãŽéĸ¨æ¯ãåēããŖãĻããã夿Ĩãæ¸ŠããĒå
ãæããããæ´ããããĒé°å˛æ°ãäŊãåēããĻããã"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"text": "ããããĻæĄå¤Ēéã¨ãããããã¨ãã°ãããããããĻåŽļæĨããĄã¯åš¸ããĢæŽãããžããããã§ããããã§ããã",
|
|
87
|
+
"imagePrompt": "æãįĩãĄãåšŗåãĢãĒãŖãæãŽéĸ¨æ¯ãæĄå¤ĒéãŽåŽļã§ã¯ããããããã¨ãã°ããããį¸å´ã§ãčļãéŖ˛ãã§ãããåēã§ã¯æéˇããæĄå¤ĒéãįŦãįŋããã¸ã¨ä¸įˇãĢæĨŊããããĢéãããĻããã违ãĢã¯åŽãããį°ããŧã¨åšŗåãĒæãŽæ§åãæĄãŽæ¨ãčąãå˛ãããããŽä¸ã§įãįŦéĄã§æŽãããĻããã夿ŽããŽåĒããå
ãå
¨äŊãå
ãŋčžŧãŋãįŠčĒãŽåš¸ããĒįĩæĢãčąĄåž´ããĻããã"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|