mulmocast 2.1.12 → 2.1.14
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/ani.json +5 -9
- package/assets/templates/leda.json +35 -0
- package/lib/actions/bundle.js +15 -14
- package/lib/data/promptTemplates.d.ts +67 -25
- package/lib/data/promptTemplates.js +55 -8
- package/lib/data/templateDataSet.d.ts +1 -0
- package/lib/data/templateDataSet.js +5 -1
- package/package.json +1 -1
|
@@ -12,17 +12,11 @@
|
|
|
12
12
|
"model": "bytedance/seedance-1-lite"
|
|
13
13
|
},
|
|
14
14
|
"speechParams": {
|
|
15
|
-
"provider": "openai",
|
|
16
15
|
"speakers": {
|
|
17
16
|
"Presenter": {
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"ja": {
|
|
22
|
-
"provider": "nijivoice",
|
|
23
|
-
"voiceId": "9d9ed276-49ee-443a-bc19-26e6136d05f0"
|
|
24
|
-
}
|
|
25
|
-
}
|
|
17
|
+
"provider": "gemini",
|
|
18
|
+
"voiceId": "Leda",
|
|
19
|
+
"speechOptions": { "instruction": "Speak in a slightly high-pitched, curt tone with sudden flustered shifts—like a tsundere anime girl." }
|
|
26
20
|
}
|
|
27
21
|
}
|
|
28
22
|
},
|
|
@@ -37,6 +31,8 @@
|
|
|
37
31
|
"height": 1536
|
|
38
32
|
},
|
|
39
33
|
"imageParams": {
|
|
34
|
+
"provider": "google",
|
|
35
|
+
"model": "gemini-2.5-flash-image",
|
|
40
36
|
"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>",
|
|
41
37
|
"images": {
|
|
42
38
|
"ani": {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Presentation by Leda",
|
|
3
|
+
"description": "Template for presentation with Gemini voice Leda.",
|
|
4
|
+
"systemPrompt": "",
|
|
5
|
+
"presentationStyle": {
|
|
6
|
+
"$mulmocast": {
|
|
7
|
+
"version": "1.1",
|
|
8
|
+
"credit": "closing"
|
|
9
|
+
},
|
|
10
|
+
"speechParams": {
|
|
11
|
+
"speakers": {
|
|
12
|
+
"Presenter": {
|
|
13
|
+
"provider": "gemini",
|
|
14
|
+
"voiceId": "Leda",
|
|
15
|
+
"speechOptions": { "instruction": "Speak like a professional news presenter." }
|
|
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
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"scriptName": "image_prompts_template.json"
|
|
35
|
+
}
|
package/lib/actions/bundle.js
CHANGED
|
@@ -15,19 +15,19 @@ const downloadFile = async (url, destPath) => {
|
|
|
15
15
|
const buffer = await response.arrayBuffer();
|
|
16
16
|
fs.writeFileSync(destPath, Buffer.from(buffer));
|
|
17
17
|
};
|
|
18
|
-
const processBgm = async (bgm,
|
|
18
|
+
const processBgm = async (bgm, outDir, baseDir, zipper) => {
|
|
19
19
|
if (!bgm) {
|
|
20
20
|
return undefined;
|
|
21
21
|
}
|
|
22
22
|
if (bgm.kind === "path") {
|
|
23
23
|
// Local file path
|
|
24
|
-
const sourcePath = path.resolve(bgm.path);
|
|
24
|
+
const sourcePath = path.resolve(baseDir, bgm.path);
|
|
25
25
|
if (!fs.existsSync(sourcePath)) {
|
|
26
26
|
GraphAILogger.log(`BGM file not found: ${sourcePath}`);
|
|
27
27
|
return undefined;
|
|
28
28
|
}
|
|
29
29
|
const fileName = path.basename(bgm.path);
|
|
30
|
-
const destPath = path.resolve(
|
|
30
|
+
const destPath = path.resolve(outDir, fileName);
|
|
31
31
|
fs.copyFileSync(sourcePath, destPath);
|
|
32
32
|
zipper.addFile(sourcePath, fileName);
|
|
33
33
|
return fileName;
|
|
@@ -35,7 +35,7 @@ const processBgm = async (bgm, dir, zipper) => {
|
|
|
35
35
|
else if (bgm.kind === "url") {
|
|
36
36
|
// URL download
|
|
37
37
|
const fileName = path.basename(new URL(bgm.url).pathname) || "bgm.mp3";
|
|
38
|
-
const destPath = path.resolve(
|
|
38
|
+
const destPath = path.resolve(outDir, fileName);
|
|
39
39
|
await downloadFile(bgm.url, destPath);
|
|
40
40
|
zipper.addFile(destPath);
|
|
41
41
|
return fileName;
|
|
@@ -54,9 +54,10 @@ const imageSourceMappings = [
|
|
|
54
54
|
];
|
|
55
55
|
export const mulmoViewerBundle = async (context) => {
|
|
56
56
|
const isZip = true;
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
const outDir = context.fileDirs.outDirPath;
|
|
58
|
+
const baseDir = context.fileDirs.baseDirPath;
|
|
59
|
+
mkdir(outDir);
|
|
60
|
+
const zipper = new ZipBuilder(path.resolve(outDir, zipFileName));
|
|
60
61
|
// text
|
|
61
62
|
const resultJson = [];
|
|
62
63
|
context.studio.script.beats.forEach((beat, index) => {
|
|
@@ -76,12 +77,12 @@ export const mulmoViewerBundle = async (context) => {
|
|
|
76
77
|
}
|
|
77
78
|
if (fileName === "silent300.mp3") {
|
|
78
79
|
// Download from GitHub URL
|
|
79
|
-
const destPath = path.resolve(
|
|
80
|
+
const destPath = path.resolve(outDir, fileName);
|
|
80
81
|
await downloadFile(silentMp3, destPath);
|
|
81
82
|
zipper.addFile(destPath, fileName);
|
|
82
83
|
}
|
|
83
84
|
else if (fs.existsSync(audio)) {
|
|
84
|
-
fs.copyFileSync(audio, path.resolve(
|
|
85
|
+
fs.copyFileSync(audio, path.resolve(outDir, fileName));
|
|
85
86
|
zipper.addFile(audio, fileName);
|
|
86
87
|
}
|
|
87
88
|
}
|
|
@@ -95,7 +96,7 @@ export const mulmoViewerBundle = async (context) => {
|
|
|
95
96
|
if (typeof value === "string") {
|
|
96
97
|
data[source] = path.basename(value);
|
|
97
98
|
if (fs.existsSync(value)) {
|
|
98
|
-
fs.copyFileSync(value, path.resolve(
|
|
99
|
+
fs.copyFileSync(value, path.resolve(outDir, path.basename(value)));
|
|
99
100
|
zipper.addFile(value);
|
|
100
101
|
}
|
|
101
102
|
}
|
|
@@ -110,7 +111,7 @@ export const mulmoViewerBundle = async (context) => {
|
|
|
110
111
|
data.videoWithAudioSource === undefined &&
|
|
111
112
|
data.duration) {
|
|
112
113
|
const file = `silent_${index}.mp3`;
|
|
113
|
-
const audioFile = path.resolve(
|
|
114
|
+
const audioFile = path.resolve(outDir, file);
|
|
114
115
|
await createSilentAudio(audioFile, data.duration);
|
|
115
116
|
zipper.addFile(audioFile);
|
|
116
117
|
data.audioSources.ja = file;
|
|
@@ -126,10 +127,10 @@ export const mulmoViewerBundle = async (context) => {
|
|
|
126
127
|
});
|
|
127
128
|
});
|
|
128
129
|
// BGM
|
|
129
|
-
const bgmFileName = await processBgm(context.studio?.script.audioParams?.bgm,
|
|
130
|
+
const bgmFileName = await processBgm(context.studio?.script.audioParams?.bgm, outDir, baseDir, zipper);
|
|
130
131
|
const bundleData = { beats: resultJson, bgmSource: bgmFileName, title: context.studio.script.title };
|
|
131
|
-
fs.writeFileSync(path.resolve(
|
|
132
|
-
zipper.addFile(path.resolve(
|
|
132
|
+
fs.writeFileSync(path.resolve(outDir, viewJsonFileName), JSON.stringify(bundleData, null, 2));
|
|
133
|
+
zipper.addFile(path.resolve(outDir, viewJsonFileName));
|
|
133
134
|
if (isZip) {
|
|
134
135
|
await zipper.finalize();
|
|
135
136
|
}
|
|
@@ -36,8 +36,8 @@ export declare const promptTemplates: ({
|
|
|
36
36
|
"[CHARACTER_2_ID]"?: undefined;
|
|
37
37
|
};
|
|
38
38
|
style: string;
|
|
39
|
-
provider?: undefined;
|
|
40
39
|
model?: undefined;
|
|
40
|
+
provider?: undefined;
|
|
41
41
|
};
|
|
42
42
|
movieParams: {
|
|
43
43
|
provider: string;
|
|
@@ -54,7 +54,6 @@ export declare const promptTemplates: ({
|
|
|
54
54
|
};
|
|
55
55
|
provider: string;
|
|
56
56
|
voiceId: string;
|
|
57
|
-
lang?: undefined;
|
|
58
57
|
speechOptions?: undefined;
|
|
59
58
|
};
|
|
60
59
|
Announcer?: undefined;
|
|
@@ -106,9 +105,9 @@ export declare const promptTemplates: ({
|
|
|
106
105
|
"[CHARACTER_1_ID]"?: undefined;
|
|
107
106
|
"[CHARACTER_2_ID]"?: undefined;
|
|
108
107
|
};
|
|
108
|
+
model: string;
|
|
109
|
+
provider: string;
|
|
109
110
|
style: string;
|
|
110
|
-
provider?: undefined;
|
|
111
|
-
model?: undefined;
|
|
112
111
|
};
|
|
113
112
|
movieParams: {
|
|
114
113
|
model: string;
|
|
@@ -120,12 +119,6 @@ export declare const promptTemplates: ({
|
|
|
120
119
|
speechParams: {
|
|
121
120
|
speakers: {
|
|
122
121
|
Presenter: {
|
|
123
|
-
lang: {
|
|
124
|
-
ja: {
|
|
125
|
-
provider: string;
|
|
126
|
-
voiceId: string;
|
|
127
|
-
};
|
|
128
|
-
};
|
|
129
122
|
provider: string;
|
|
130
123
|
speechOptions: {
|
|
131
124
|
instruction: string;
|
|
@@ -199,7 +192,6 @@ export declare const promptTemplates: ({
|
|
|
199
192
|
};
|
|
200
193
|
provider: string;
|
|
201
194
|
voiceId: string;
|
|
202
|
-
lang?: undefined;
|
|
203
195
|
speechOptions?: undefined;
|
|
204
196
|
};
|
|
205
197
|
Announcer?: undefined;
|
|
@@ -236,8 +228,8 @@ export declare const promptTemplates: ({
|
|
|
236
228
|
imageParams: {
|
|
237
229
|
style: string;
|
|
238
230
|
images?: undefined;
|
|
239
|
-
provider?: undefined;
|
|
240
231
|
model?: undefined;
|
|
232
|
+
provider?: undefined;
|
|
241
233
|
};
|
|
242
234
|
movieParams: {
|
|
243
235
|
provider: string;
|
|
@@ -254,7 +246,6 @@ export declare const promptTemplates: ({
|
|
|
254
246
|
};
|
|
255
247
|
provider: string;
|
|
256
248
|
voiceId: string;
|
|
257
|
-
lang?: undefined;
|
|
258
249
|
speechOptions?: undefined;
|
|
259
250
|
};
|
|
260
251
|
Announcer?: undefined;
|
|
@@ -304,8 +295,8 @@ export declare const promptTemplates: ({
|
|
|
304
295
|
"[CHARACTER_2_ID]"?: undefined;
|
|
305
296
|
};
|
|
306
297
|
style: string;
|
|
307
|
-
provider?: undefined;
|
|
308
298
|
model?: undefined;
|
|
299
|
+
provider?: undefined;
|
|
309
300
|
};
|
|
310
301
|
movieParams: {
|
|
311
302
|
provider: string;
|
|
@@ -322,7 +313,6 @@ export declare const promptTemplates: ({
|
|
|
322
313
|
};
|
|
323
314
|
provider: string;
|
|
324
315
|
voiceId: string;
|
|
325
|
-
lang?: undefined;
|
|
326
316
|
speechOptions?: undefined;
|
|
327
317
|
};
|
|
328
318
|
Announcer?: undefined;
|
|
@@ -390,7 +380,6 @@ export declare const promptTemplates: ({
|
|
|
390
380
|
};
|
|
391
381
|
provider: string;
|
|
392
382
|
voiceId: string;
|
|
393
|
-
lang?: undefined;
|
|
394
383
|
speechOptions?: undefined;
|
|
395
384
|
};
|
|
396
385
|
Announcer?: undefined;
|
|
@@ -446,8 +435,8 @@ export declare const promptTemplates: ({
|
|
|
446
435
|
"[CHARACTER_2_ID]"?: undefined;
|
|
447
436
|
};
|
|
448
437
|
style: string;
|
|
449
|
-
provider?: undefined;
|
|
450
438
|
model?: undefined;
|
|
439
|
+
provider?: undefined;
|
|
451
440
|
};
|
|
452
441
|
movieParams: {
|
|
453
442
|
provider: string;
|
|
@@ -464,7 +453,6 @@ export declare const promptTemplates: ({
|
|
|
464
453
|
};
|
|
465
454
|
provider: string;
|
|
466
455
|
voiceId: string;
|
|
467
|
-
lang?: undefined;
|
|
468
456
|
speechOptions?: undefined;
|
|
469
457
|
};
|
|
470
458
|
Announcer?: undefined;
|
|
@@ -476,6 +464,63 @@ export declare const promptTemplates: ({
|
|
|
476
464
|
scriptName: string;
|
|
477
465
|
systemPrompt: string;
|
|
478
466
|
title: string;
|
|
467
|
+
} | {
|
|
468
|
+
description: string;
|
|
469
|
+
filename: string;
|
|
470
|
+
presentationStyle: {
|
|
471
|
+
$mulmocast: {
|
|
472
|
+
credit: string;
|
|
473
|
+
version: string;
|
|
474
|
+
};
|
|
475
|
+
audioParams: {
|
|
476
|
+
audioVolume: number;
|
|
477
|
+
bgm: {
|
|
478
|
+
kind: string;
|
|
479
|
+
url: string;
|
|
480
|
+
};
|
|
481
|
+
bgmVolume: number;
|
|
482
|
+
closingPadding: number;
|
|
483
|
+
introPadding: number;
|
|
484
|
+
outroPadding: number;
|
|
485
|
+
padding: number;
|
|
486
|
+
suppressSpeech: boolean;
|
|
487
|
+
};
|
|
488
|
+
canvasSize: {
|
|
489
|
+
height: number;
|
|
490
|
+
width: number;
|
|
491
|
+
};
|
|
492
|
+
imageParams: {
|
|
493
|
+
model: string;
|
|
494
|
+
provider: string;
|
|
495
|
+
images?: undefined;
|
|
496
|
+
style?: undefined;
|
|
497
|
+
};
|
|
498
|
+
movieParams: {
|
|
499
|
+
provider: string;
|
|
500
|
+
model?: undefined;
|
|
501
|
+
};
|
|
502
|
+
soundEffectParams: {
|
|
503
|
+
provider: string;
|
|
504
|
+
};
|
|
505
|
+
speechParams: {
|
|
506
|
+
speakers: {
|
|
507
|
+
Presenter: {
|
|
508
|
+
provider: string;
|
|
509
|
+
speechOptions: {
|
|
510
|
+
instruction: string;
|
|
511
|
+
};
|
|
512
|
+
voiceId: string;
|
|
513
|
+
displayName?: undefined;
|
|
514
|
+
};
|
|
515
|
+
Announcer?: undefined;
|
|
516
|
+
Student?: undefined;
|
|
517
|
+
Teacher?: undefined;
|
|
518
|
+
};
|
|
519
|
+
};
|
|
520
|
+
};
|
|
521
|
+
scriptName: string;
|
|
522
|
+
systemPrompt: string;
|
|
523
|
+
title: string;
|
|
479
524
|
} | {
|
|
480
525
|
description: string;
|
|
481
526
|
filename: string;
|
|
@@ -501,8 +546,8 @@ export declare const promptTemplates: ({
|
|
|
501
546
|
imageParams: {
|
|
502
547
|
style: string;
|
|
503
548
|
images?: undefined;
|
|
504
|
-
provider?: undefined;
|
|
505
549
|
model?: undefined;
|
|
550
|
+
provider?: undefined;
|
|
506
551
|
};
|
|
507
552
|
movieParams: {
|
|
508
553
|
provider: string;
|
|
@@ -566,8 +611,8 @@ export declare const promptTemplates: ({
|
|
|
566
611
|
imageParams: {
|
|
567
612
|
style: string;
|
|
568
613
|
images?: undefined;
|
|
569
|
-
provider?: undefined;
|
|
570
614
|
model?: undefined;
|
|
615
|
+
provider?: undefined;
|
|
571
616
|
};
|
|
572
617
|
movieParams: {
|
|
573
618
|
provider: string;
|
|
@@ -584,7 +629,6 @@ export declare const promptTemplates: ({
|
|
|
584
629
|
};
|
|
585
630
|
provider: string;
|
|
586
631
|
voiceId: string;
|
|
587
|
-
lang?: undefined;
|
|
588
632
|
speechOptions?: undefined;
|
|
589
633
|
};
|
|
590
634
|
Announcer?: undefined;
|
|
@@ -634,8 +678,8 @@ export declare const promptTemplates: ({
|
|
|
634
678
|
optimus?: undefined;
|
|
635
679
|
};
|
|
636
680
|
style: string;
|
|
637
|
-
provider?: undefined;
|
|
638
681
|
model?: undefined;
|
|
682
|
+
provider?: undefined;
|
|
639
683
|
};
|
|
640
684
|
movieParams: {
|
|
641
685
|
provider: string;
|
|
@@ -652,7 +696,6 @@ export declare const promptTemplates: ({
|
|
|
652
696
|
};
|
|
653
697
|
provider: string;
|
|
654
698
|
voiceId: string;
|
|
655
|
-
lang?: undefined;
|
|
656
699
|
speechOptions?: undefined;
|
|
657
700
|
};
|
|
658
701
|
Announcer?: undefined;
|
|
@@ -692,8 +735,8 @@ export declare const promptTemplates: ({
|
|
|
692
735
|
imageParams: {
|
|
693
736
|
style: string;
|
|
694
737
|
images?: undefined;
|
|
695
|
-
provider?: undefined;
|
|
696
738
|
model?: undefined;
|
|
739
|
+
provider?: undefined;
|
|
697
740
|
};
|
|
698
741
|
movieParams: {
|
|
699
742
|
provider: string;
|
|
@@ -710,7 +753,6 @@ export declare const promptTemplates: ({
|
|
|
710
753
|
};
|
|
711
754
|
provider: string;
|
|
712
755
|
voiceId: string;
|
|
713
|
-
lang?: undefined;
|
|
714
756
|
speechOptions?: undefined;
|
|
715
757
|
};
|
|
716
758
|
Announcer?: undefined;
|
|
@@ -89,6 +89,8 @@ export const promptTemplates = [
|
|
|
89
89
|
type: "image",
|
|
90
90
|
},
|
|
91
91
|
},
|
|
92
|
+
model: "gemini-2.5-flash-image",
|
|
93
|
+
provider: "google",
|
|
92
94
|
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>",
|
|
93
95
|
},
|
|
94
96
|
movieParams: {
|
|
@@ -101,17 +103,11 @@ export const promptTemplates = [
|
|
|
101
103
|
speechParams: {
|
|
102
104
|
speakers: {
|
|
103
105
|
Presenter: {
|
|
104
|
-
|
|
105
|
-
ja: {
|
|
106
|
-
provider: "nijivoice",
|
|
107
|
-
voiceId: "9d9ed276-49ee-443a-bc19-26e6136d05f0",
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
provider: "openai",
|
|
106
|
+
provider: "gemini",
|
|
111
107
|
speechOptions: {
|
|
112
108
|
instruction: "Speak in a slightly high-pitched, curt tone with sudden flustered shifts—like a tsundere anime girl.",
|
|
113
109
|
},
|
|
114
|
-
voiceId: "
|
|
110
|
+
voiceId: "Leda",
|
|
115
111
|
},
|
|
116
112
|
},
|
|
117
113
|
},
|
|
@@ -642,6 +638,57 @@ export const promptTemplates = [
|
|
|
642
638
|
systemPrompt: "Another AI will generate images for each beat based on the image prompt of that beat. Movie prompts must be written in English. Mention the reference in one of beats, if it exists. Use the JSON below as a template.",
|
|
643
639
|
title: "Plain Image Prompt",
|
|
644
640
|
},
|
|
641
|
+
{
|
|
642
|
+
description: "Template for presentation with Gemini voice Leda.",
|
|
643
|
+
filename: "leda",
|
|
644
|
+
presentationStyle: {
|
|
645
|
+
$mulmocast: {
|
|
646
|
+
credit: "closing",
|
|
647
|
+
version: "1.1",
|
|
648
|
+
},
|
|
649
|
+
audioParams: {
|
|
650
|
+
audioVolume: 1,
|
|
651
|
+
bgm: {
|
|
652
|
+
kind: "url",
|
|
653
|
+
url: "https://github.com/receptron/mulmocast-media/raw/refs/heads/main/bgms/morning001.mp3",
|
|
654
|
+
},
|
|
655
|
+
bgmVolume: 0.2,
|
|
656
|
+
closingPadding: 0.8,
|
|
657
|
+
introPadding: 1,
|
|
658
|
+
outroPadding: 1,
|
|
659
|
+
padding: 0.3,
|
|
660
|
+
suppressSpeech: false,
|
|
661
|
+
},
|
|
662
|
+
canvasSize: {
|
|
663
|
+
height: 1536,
|
|
664
|
+
width: 1024,
|
|
665
|
+
},
|
|
666
|
+
imageParams: {
|
|
667
|
+
model: "gemini-2.5-flash-image",
|
|
668
|
+
provider: "google",
|
|
669
|
+
},
|
|
670
|
+
movieParams: {
|
|
671
|
+
provider: "replicate",
|
|
672
|
+
},
|
|
673
|
+
soundEffectParams: {
|
|
674
|
+
provider: "replicate",
|
|
675
|
+
},
|
|
676
|
+
speechParams: {
|
|
677
|
+
speakers: {
|
|
678
|
+
Presenter: {
|
|
679
|
+
provider: "gemini",
|
|
680
|
+
speechOptions: {
|
|
681
|
+
instruction: "Speak like a professional news presenter.",
|
|
682
|
+
},
|
|
683
|
+
voiceId: "Leda",
|
|
684
|
+
},
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
},
|
|
688
|
+
scriptName: "image_prompts_template.json",
|
|
689
|
+
systemPrompt: "",
|
|
690
|
+
title: "Presentation by Leda",
|
|
691
|
+
},
|
|
645
692
|
{
|
|
646
693
|
description: "Template for One Piece style comic presentation.",
|
|
647
694
|
filename: "onepiece_comic",
|
|
@@ -5,7 +5,7 @@ export const templateDataSet = {
|
|
|
5
5
|
"```",
|
|
6
6
|
ani: "言葉づかいは思いっきりツンデレにして。Another AI will generate comic for each beat based on the image prompt of that beat. You don't need to specify the style of the image, just describe the scene. Mention the reference in one of beats, if it exists. Use the JSON below as a template. Create appropriate amount of beats, and make sure the beats are coherent and flow well.\n" +
|
|
7
7
|
"```JSON\n" +
|
|
8
|
-
`{"$mulmocast":{"version":"1.1","credit":"closing"},"title":"[TITLE: Brief, engaging title for the topic]","lang":"en","references":[{"url":"[SOURCE_URL: URL of the source material]","title":"[SOURCE_TITLE: Title of the referenced article, or paper]","type":"[SOURCE_TYPE: article, paper]"}],"beats":[{"text":"[OPENING_BEAT: Introduce the topic with a hook. Reference the source material and set up why this topic matters. Usually 2-3 sentences that grab attention and provide context.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[MAIN_CONCEPT: Define or explain the core concept/idea. This should be the central focus of your narrative. Keep it clear and accessible.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_1: Additional context, examples, or elaboration that helps illustrate the main concept. This could include how it works, why it's important, or real-world applications.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_2: Continue with more examples, deeper explanation, or different aspects of the topic if needed.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[ADDITIONAL_BEATS: Add more beats as necessary to fully explore the topic. Complex topics may require 6-10+ beats to cover adequately. Each beat should advance the narrative or provide valuable information.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[CONCLUSION/IMPACT: Wrap up with the significance, implications, or key takeaway. Help the audience understand why this matters to them.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"}],"movieParams":{"provider":"replicate","model":"bytedance/seedance-1-lite"},"speechParams":{"
|
|
8
|
+
`{"$mulmocast":{"version":"1.1","credit":"closing"},"title":"[TITLE: Brief, engaging title for the topic]","lang":"en","references":[{"url":"[SOURCE_URL: URL of the source material]","title":"[SOURCE_TITLE: Title of the referenced article, or paper]","type":"[SOURCE_TYPE: article, paper]"}],"beats":[{"text":"[OPENING_BEAT: Introduce the topic with a hook. Reference the source material and set up why this topic matters. Usually 2-3 sentences that grab attention and provide context.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[MAIN_CONCEPT: Define or explain the core concept/idea. This should be the central focus of your narrative. Keep it clear and accessible.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_1: Additional context, examples, or elaboration that helps illustrate the main concept. This could include how it works, why it's important, or real-world applications.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_2: Continue with more examples, deeper explanation, or different aspects of the topic if needed.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[ADDITIONAL_BEATS: Add more beats as necessary to fully explore the topic. Complex topics may require 6-10+ beats to cover adequately. Each beat should advance the narrative or provide valuable information.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[CONCLUSION/IMPACT: Wrap up with the significance, implications, or key takeaway. Help the audience understand why this matters to them.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"}],"movieParams":{"provider":"replicate","model":"bytedance/seedance-1-lite"},"speechParams":{"speakers":{"Presenter":{"provider":"gemini","voiceId":"Leda","speechOptions":{"instruction":"Speak in a slightly high-pitched, curt tone with sudden flustered shifts—like a tsundere anime girl."}}}},"audioParams":{"bgm":{"kind":"url","url":"https://github.com/receptron/mulmocast-media/raw/refs/heads/main/bgms/morning001.mp3"}},"canvasSize":{"width":1024,"height":1536},"imageParams":{"provider":"google","model":"gemini-2.5-flash-image","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>","images":{"ani":{"type":"image","source":{"kind":"url","url":"https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/ani.png"}}}}}\n` +
|
|
9
9
|
"```",
|
|
10
10
|
business: "Use textSlides, markdown, mermaid, or chart to show slides. Extract image links in the article (from <img> tag) to reuse them in the presentation. Mention the reference in one of beats, if it exists. Use the JSON below as a template. chartData is the data for Chart.js\n" +
|
|
11
11
|
"```JSON\n" +
|
|
@@ -55,6 +55,10 @@ export const templateDataSet = {
|
|
|
55
55
|
"```JSON\n" +
|
|
56
56
|
`{"$mulmocast":{"version":"1.1","credit":"closing"},"title":"[TITLE: Brief, engaging title for the topic]","lang":"en","references":[{"url":"[SOURCE_URL: URL of the source material]","title":"[SOURCE_TITLE: Title of the referenced article, or paper]","type":"[SOURCE_TYPE: article, paper]"}],"beats":[{"text":"[OPENING_BEAT: Introduce the topic with a hook. Reference the source material and set up why this topic matters. Usually 2-3 sentences that grab attention and provide context.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[MAIN_CONCEPT: Define or explain the core concept/idea. This should be the central focus of your narrative. Keep it clear and accessible.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_1: Additional context, examples, or elaboration that helps illustrate the main concept. This could include how it works, why it's important, or real-world applications.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_2: Continue with more examples, deeper explanation, or different aspects of the topic if needed.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[ADDITIONAL_BEATS: Add more beats as necessary to fully explore the topic. Complex topics may require 6-10+ beats to cover adequately. Each beat should advance the narrative or provide valuable information.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[CONCLUSION/IMPACT: Wrap up with the significance, implications, or key takeaway. Help the audience understand why this matters to them.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"}],"canvasSize":{"width":1536,"height":1024}}\n` +
|
|
57
57
|
"```",
|
|
58
|
+
leda: "\n" +
|
|
59
|
+
"```JSON\n" +
|
|
60
|
+
`{"$mulmocast":{"version":"1.1","credit":"closing"},"title":"[TITLE: Brief, engaging title for the topic]","lang":"en","references":[{"url":"[SOURCE_URL: URL of the source material]","title":"[SOURCE_TITLE: Title of the referenced article, or paper]","type":"[SOURCE_TYPE: article, paper]"}],"beats":[{"text":"[OPENING_BEAT: Introduce the topic with a hook. Reference the source material and set up why this topic matters. Usually 2-3 sentences that grab attention and provide context.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[MAIN_CONCEPT: Define or explain the core concept/idea. This should be the central focus of your narrative. Keep it clear and accessible.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_1: Additional context, examples, or elaboration that helps illustrate the main concept. This could include how it works, why it's important, or real-world applications.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_2: Continue with more examples, deeper explanation, or different aspects of the topic if needed.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[ADDITIONAL_BEATS: Add more beats as necessary to fully explore the topic. Complex topics may require 6-10+ beats to cover adequately. Each beat should advance the narrative or provide valuable information.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[CONCLUSION/IMPACT: Wrap up with the significance, implications, or key takeaway. Help the audience understand why this matters to them.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"}],"speechParams":{"speakers":{"Presenter":{"provider":"gemini","voiceId":"Leda","speechOptions":{"instruction":"Speak like a professional news presenter."}}}},"audioParams":{"bgm":{"kind":"url","url":"https://github.com/receptron/mulmocast-media/raw/refs/heads/main/bgms/morning001.mp3"}},"canvasSize":{"width":1024,"height":1536},"imageParams":{"provider":"google","model":"gemini-2.5-flash-image"}}\n` +
|
|
61
|
+
"```",
|
|
58
62
|
onepiece_comic: "Another AI will generate images for each beat based on the image prompt of that beat. Mention the reference in one of beats, if it exists. Use the JSON below as a template.\n" +
|
|
59
63
|
"```JSON\n" +
|
|
60
64
|
`{"$mulmocast":{"version":"1.1","credit":"closing"},"title":"[TITLE: Brief, engaging title for the topic]","lang":"en","references":[{"url":"[SOURCE_URL: URL of the source material]","title":"[SOURCE_TITLE: Title of the referenced article, or paper]","type":"[SOURCE_TYPE: article, paper]"}],"beats":[{"text":"[OPENING_BEAT: Introduce the topic with a hook. Reference the source material and set up why this topic matters. Usually 2-3 sentences that grab attention and provide context.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[MAIN_CONCEPT: Define or explain the core concept/idea. This should be the central focus of your narrative. Keep it clear and accessible.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_1: Additional context, examples, or elaboration that helps illustrate the main concept. This could include how it works, why it's important, or real-world applications.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[SUPPORTING_DETAIL_2: Continue with more examples, deeper explanation, or different aspects of the topic if needed.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[ADDITIONAL_BEATS: Add more beats as necessary to fully explore the topic. Complex topics may require 6-10+ beats to cover adequately. Each beat should advance the narrative or provide valuable information.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"},{"text":"[CONCLUSION/IMPACT: Wrap up with the significance, implications, or key takeaway. Help the audience understand why this matters to them.]","imagePrompt":"[IMAGE_PROMPT: A prompt for the image to be generated for this beat.]"}],"canvasSize":{"width":1536,"height":1024},"imageParams":{"style":"<style>One Piece aesthetic.</style>","images":{"presenter":{"type":"image","source":{"kind":"url","url":"https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/onepiece_presenter.png"}}}}}\n` +
|