mulmocast 2.6.4 → 2.6.5
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.
|
@@ -7,12 +7,13 @@ import { agentGenerationError, imageReferenceAction, imageFileTarget, movieFileT
|
|
|
7
7
|
// public api
|
|
8
8
|
// Application may call this function directly to generate reference image.
|
|
9
9
|
export const generateReferenceImage = async (inputs) => {
|
|
10
|
-
const { context, key, index, image, force } = inputs;
|
|
10
|
+
const { context, key, index, image, referenceImagePath, force } = inputs;
|
|
11
11
|
const imagePath = getReferenceImagePath(context, key, "png");
|
|
12
12
|
// generate image
|
|
13
13
|
const imageAgentInfo = MulmoPresentationStyleMethods.getImageAgentInfo(context.presentationStyle);
|
|
14
14
|
const prompt = `${image.prompt}\n${imageAgentInfo.imageParams.style || ""}`;
|
|
15
15
|
GraphAILogger.info(`Generating reference image for ${key}: ${prompt}`);
|
|
16
|
+
const referenceImages = referenceImagePath ? [referenceImagePath] : undefined;
|
|
16
17
|
const image_graph_data = {
|
|
17
18
|
version: 0.5,
|
|
18
19
|
nodes: {
|
|
@@ -22,6 +23,7 @@ export const generateReferenceImage = async (inputs) => {
|
|
|
22
23
|
inputs: {
|
|
23
24
|
media: "image",
|
|
24
25
|
prompt,
|
|
26
|
+
referenceImages,
|
|
25
27
|
cache: {
|
|
26
28
|
force: [context.force, force ?? false],
|
|
27
29
|
file: imagePath,
|
|
@@ -58,12 +60,14 @@ export const getMediaRefs = async (context) => {
|
|
|
58
60
|
}
|
|
59
61
|
const imageRefs = {};
|
|
60
62
|
const movieRefs = {};
|
|
63
|
+
// Stage 1: resolve non-referencing entries (image, imagePrompt without referenceImageName, movie)
|
|
61
64
|
await Promise.all(Object.keys(images)
|
|
62
65
|
.sort()
|
|
63
66
|
.map(async (key, index) => {
|
|
64
67
|
const image = images[key];
|
|
65
|
-
if (image.type === "imagePrompt") {
|
|
66
|
-
|
|
68
|
+
if (image.type === "imagePrompt" && !image.referenceImageName) {
|
|
69
|
+
const refPath = image.referenceImage ? await MulmoMediaSourceMethods.imageReference(image.referenceImage, context, key) : undefined;
|
|
70
|
+
imageRefs[key] = await generateReferenceImage({ context, key, index, image, referenceImagePath: refPath, force: false });
|
|
67
71
|
}
|
|
68
72
|
else if (image.type === "image") {
|
|
69
73
|
imageRefs[key] = await MulmoMediaSourceMethods.imageReference(image.source, context, key);
|
|
@@ -72,10 +76,23 @@ export const getMediaRefs = async (context) => {
|
|
|
72
76
|
movieRefs[key] = await resolveMovieReference(image, context, key);
|
|
73
77
|
}
|
|
74
78
|
}));
|
|
79
|
+
// Stage 2: resolve imagePrompt with referenceImageName (depends on Stage 1 results)
|
|
80
|
+
await Promise.all(Object.keys(images)
|
|
81
|
+
.sort()
|
|
82
|
+
.map(async (key, index) => {
|
|
83
|
+
const image = images[key];
|
|
84
|
+
if (image.type === "imagePrompt" && image.referenceImageName) {
|
|
85
|
+
const refPath = imageRefs[image.referenceImageName];
|
|
86
|
+
if (!refPath) {
|
|
87
|
+
GraphAILogger.warn(`imagePrompt "${key}": referenceImageName "${image.referenceImageName}" not found in imageRefs — generating without reference`);
|
|
88
|
+
}
|
|
89
|
+
imageRefs[key] = await generateReferenceImage({ context, key, index, image, referenceImagePath: refPath, force: false });
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
75
92
|
return { imageRefs, movieRefs };
|
|
76
93
|
};
|
|
77
|
-
const resolveMovieReference = async (
|
|
78
|
-
return MulmoMediaSourceMethods.imageReference(
|
|
94
|
+
const resolveMovieReference = async (media, context, key) => {
|
|
95
|
+
return MulmoMediaSourceMethods.imageReference(media.source, context, key);
|
|
79
96
|
};
|
|
80
97
|
const generateReferenceMovie = async (inputs) => {
|
|
81
98
|
const { context, key, index, moviePrompt, imagePath } = inputs;
|
|
@@ -124,17 +141,19 @@ const generateReferenceMovie = async (inputs) => {
|
|
|
124
141
|
const resolveLocalRefs = async (context, images, beatIndex, globalImageRefs) => {
|
|
125
142
|
const localImageRefs = {};
|
|
126
143
|
const localMovieRefs = {};
|
|
127
|
-
// Stage 1: image, imagePrompt, movie (parallel)
|
|
144
|
+
// Stage 1: image, imagePrompt (without referenceImageName), movie (parallel)
|
|
128
145
|
await Promise.all(Object.keys(images)
|
|
129
146
|
.sort()
|
|
130
147
|
.map(async (key, i) => {
|
|
131
148
|
const entry = images[key];
|
|
132
|
-
if (entry.type === "imagePrompt") {
|
|
149
|
+
if (entry.type === "imagePrompt" && !entry.referenceImageName) {
|
|
150
|
+
const refPath = entry.referenceImage ? await MulmoMediaSourceMethods.imageReference(entry.referenceImage, context, key) : undefined;
|
|
133
151
|
localImageRefs[key] = await generateReferenceImage({
|
|
134
152
|
context,
|
|
135
153
|
key,
|
|
136
154
|
index: beatIndex * 100 + i,
|
|
137
155
|
image: entry,
|
|
156
|
+
referenceImagePath: refPath,
|
|
138
157
|
});
|
|
139
158
|
}
|
|
140
159
|
else if (entry.type === "image") {
|
|
@@ -144,20 +163,39 @@ const resolveLocalRefs = async (context, images, beatIndex, globalImageRefs) =>
|
|
|
144
163
|
localMovieRefs[key] = await resolveMovieReference(entry, context, key);
|
|
145
164
|
}
|
|
146
165
|
}));
|
|
147
|
-
// Stage 2:
|
|
166
|
+
// Stage 2: imagePrompt with referenceImageName (depends on Stage 1)
|
|
167
|
+
const combinedImageRefsForImagePrompt = { ...globalImageRefs, ...localImageRefs };
|
|
168
|
+
await Promise.all(Object.keys(images)
|
|
169
|
+
.sort()
|
|
170
|
+
.map(async (key, i) => {
|
|
171
|
+
const entry = images[key];
|
|
172
|
+
if (entry.type === "imagePrompt" && entry.referenceImageName) {
|
|
173
|
+
const refPath = combinedImageRefsForImagePrompt[entry.referenceImageName];
|
|
174
|
+
if (!refPath) {
|
|
175
|
+
GraphAILogger.warn(`imagePrompt "${key}": referenceImageName "${entry.referenceImageName}" not found — generating without reference`);
|
|
176
|
+
}
|
|
177
|
+
localImageRefs[key] = await generateReferenceImage({
|
|
178
|
+
context,
|
|
179
|
+
key,
|
|
180
|
+
index: beatIndex * 100 + i,
|
|
181
|
+
image: entry,
|
|
182
|
+
referenceImagePath: refPath,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}));
|
|
186
|
+
// Stage 3: moviePrompt (imageName references imageRefs only)
|
|
148
187
|
const combinedImageRefs = { ...globalImageRefs, ...localImageRefs };
|
|
149
188
|
await Promise.all(Object.keys(images)
|
|
150
189
|
.sort()
|
|
151
190
|
.map(async (key, i) => {
|
|
152
191
|
const entry = images[key];
|
|
153
192
|
if (entry.type === "moviePrompt") {
|
|
154
|
-
const
|
|
155
|
-
const refImagePath = mp.imageName ? combinedImageRefs[mp.imageName] : undefined;
|
|
193
|
+
const refImagePath = entry.imageName ? combinedImageRefs[entry.imageName] : undefined;
|
|
156
194
|
localMovieRefs[key] = await generateReferenceMovie({
|
|
157
195
|
context,
|
|
158
196
|
key,
|
|
159
197
|
index: beatIndex * 100 + i,
|
|
160
|
-
moviePrompt:
|
|
198
|
+
moviePrompt: entry,
|
|
161
199
|
imagePath: refImagePath,
|
|
162
200
|
});
|
|
163
201
|
}
|
package/lib/types/schema.d.ts
CHANGED
|
@@ -3075,6 +3075,17 @@ export declare const mulmoImagePromptMediaSchema: z.ZodObject<{
|
|
|
3075
3075
|
width: z.ZodNumber;
|
|
3076
3076
|
height: z.ZodNumber;
|
|
3077
3077
|
}, z.core.$strict>>;
|
|
3078
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
3079
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3080
|
+
kind: z.ZodLiteral<"url">;
|
|
3081
|
+
url: z.ZodURL;
|
|
3082
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3083
|
+
kind: z.ZodLiteral<"base64">;
|
|
3084
|
+
data: z.ZodString;
|
|
3085
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3086
|
+
kind: z.ZodLiteral<"path">;
|
|
3087
|
+
path: z.ZodString;
|
|
3088
|
+
}, z.core.$strict>], "kind">>;
|
|
3078
3089
|
}, z.core.$strict>;
|
|
3079
3090
|
export declare const mulmoImageParamsImagesValueSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
3080
3091
|
type: z.ZodLiteral<"image">;
|
|
@@ -3095,6 +3106,17 @@ export declare const mulmoImageParamsImagesValueSchema: z.ZodUnion<readonly [z.Z
|
|
|
3095
3106
|
width: z.ZodNumber;
|
|
3096
3107
|
height: z.ZodNumber;
|
|
3097
3108
|
}, z.core.$strict>>;
|
|
3109
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
3110
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3111
|
+
kind: z.ZodLiteral<"url">;
|
|
3112
|
+
url: z.ZodURL;
|
|
3113
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3114
|
+
kind: z.ZodLiteral<"base64">;
|
|
3115
|
+
data: z.ZodString;
|
|
3116
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3117
|
+
kind: z.ZodLiteral<"path">;
|
|
3118
|
+
path: z.ZodString;
|
|
3119
|
+
}, z.core.$strict>], "kind">>;
|
|
3098
3120
|
}, z.core.$strict>, z.ZodObject<{
|
|
3099
3121
|
type: z.ZodLiteral<"movie">;
|
|
3100
3122
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -3131,6 +3153,17 @@ export declare const mulmoImageParamsImagesSchema: z.ZodRecord<z.ZodString, z.Zo
|
|
|
3131
3153
|
width: z.ZodNumber;
|
|
3132
3154
|
height: z.ZodNumber;
|
|
3133
3155
|
}, z.core.$strict>>;
|
|
3156
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
3157
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3158
|
+
kind: z.ZodLiteral<"url">;
|
|
3159
|
+
url: z.ZodURL;
|
|
3160
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3161
|
+
kind: z.ZodLiteral<"base64">;
|
|
3162
|
+
data: z.ZodString;
|
|
3163
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3164
|
+
kind: z.ZodLiteral<"path">;
|
|
3165
|
+
path: z.ZodString;
|
|
3166
|
+
}, z.core.$strict>], "kind">>;
|
|
3134
3167
|
}, z.core.$strict>, z.ZodObject<{
|
|
3135
3168
|
type: z.ZodLiteral<"movie">;
|
|
3136
3169
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -3219,6 +3252,17 @@ export declare const mulmoImageParamsSchema: z.ZodObject<{
|
|
|
3219
3252
|
width: z.ZodNumber;
|
|
3220
3253
|
height: z.ZodNumber;
|
|
3221
3254
|
}, z.core.$strict>>;
|
|
3255
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
3256
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3257
|
+
kind: z.ZodLiteral<"url">;
|
|
3258
|
+
url: z.ZodURL;
|
|
3259
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3260
|
+
kind: z.ZodLiteral<"base64">;
|
|
3261
|
+
data: z.ZodString;
|
|
3262
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
3263
|
+
kind: z.ZodLiteral<"path">;
|
|
3264
|
+
path: z.ZodString;
|
|
3265
|
+
}, z.core.$strict>], "kind">>;
|
|
3222
3266
|
}, z.core.$strict>, z.ZodObject<{
|
|
3223
3267
|
type: z.ZodLiteral<"movie">;
|
|
3224
3268
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -6591,6 +6635,17 @@ export declare const mulmoBeatSchema: z.ZodObject<{
|
|
|
6591
6635
|
width: z.ZodNumber;
|
|
6592
6636
|
height: z.ZodNumber;
|
|
6593
6637
|
}, z.core.$strict>>;
|
|
6638
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
6639
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
6640
|
+
kind: z.ZodLiteral<"url">;
|
|
6641
|
+
url: z.ZodURL;
|
|
6642
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
6643
|
+
kind: z.ZodLiteral<"base64">;
|
|
6644
|
+
data: z.ZodString;
|
|
6645
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
6646
|
+
kind: z.ZodLiteral<"path">;
|
|
6647
|
+
path: z.ZodString;
|
|
6648
|
+
}, z.core.$strict>], "kind">>;
|
|
6594
6649
|
}, z.core.$strict>, z.ZodObject<{
|
|
6595
6650
|
type: z.ZodLiteral<"movie">;
|
|
6596
6651
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -6722,6 +6777,17 @@ export declare const mulmoPresentationStyleSchema: z.ZodObject<{
|
|
|
6722
6777
|
width: z.ZodNumber;
|
|
6723
6778
|
height: z.ZodNumber;
|
|
6724
6779
|
}, z.core.$strict>>;
|
|
6780
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
6781
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
6782
|
+
kind: z.ZodLiteral<"url">;
|
|
6783
|
+
url: z.ZodURL;
|
|
6784
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
6785
|
+
kind: z.ZodLiteral<"base64">;
|
|
6786
|
+
data: z.ZodString;
|
|
6787
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
6788
|
+
kind: z.ZodLiteral<"path">;
|
|
6789
|
+
path: z.ZodString;
|
|
6790
|
+
}, z.core.$strict>], "kind">>;
|
|
6725
6791
|
}, z.core.$strict>, z.ZodObject<{
|
|
6726
6792
|
type: z.ZodLiteral<"movie">;
|
|
6727
6793
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -7207,6 +7273,17 @@ export declare const mulmoScriptSchema: z.ZodObject<{
|
|
|
7207
7273
|
width: z.ZodNumber;
|
|
7208
7274
|
height: z.ZodNumber;
|
|
7209
7275
|
}, z.core.$strict>>;
|
|
7276
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
7277
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
7278
|
+
kind: z.ZodLiteral<"url">;
|
|
7279
|
+
url: z.ZodURL;
|
|
7280
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
7281
|
+
kind: z.ZodLiteral<"base64">;
|
|
7282
|
+
data: z.ZodString;
|
|
7283
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
7284
|
+
kind: z.ZodLiteral<"path">;
|
|
7285
|
+
path: z.ZodString;
|
|
7286
|
+
}, z.core.$strict>], "kind">>;
|
|
7210
7287
|
}, z.core.$strict>, z.ZodObject<{
|
|
7211
7288
|
type: z.ZodLiteral<"movie">;
|
|
7212
7289
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -10567,6 +10644,17 @@ export declare const mulmoScriptSchema: z.ZodObject<{
|
|
|
10567
10644
|
width: z.ZodNumber;
|
|
10568
10645
|
height: z.ZodNumber;
|
|
10569
10646
|
}, z.core.$strict>>;
|
|
10647
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
10648
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
10649
|
+
kind: z.ZodLiteral<"url">;
|
|
10650
|
+
url: z.ZodURL;
|
|
10651
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
10652
|
+
kind: z.ZodLiteral<"base64">;
|
|
10653
|
+
data: z.ZodString;
|
|
10654
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
10655
|
+
kind: z.ZodLiteral<"path">;
|
|
10656
|
+
path: z.ZodString;
|
|
10657
|
+
}, z.core.$strict>], "kind">>;
|
|
10570
10658
|
}, z.core.$strict>, z.ZodObject<{
|
|
10571
10659
|
type: z.ZodLiteral<"movie">;
|
|
10572
10660
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -10773,6 +10861,17 @@ export declare const mulmoStudioSchema: z.ZodObject<{
|
|
|
10773
10861
|
width: z.ZodNumber;
|
|
10774
10862
|
height: z.ZodNumber;
|
|
10775
10863
|
}, z.core.$strict>>;
|
|
10864
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
10865
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
10866
|
+
kind: z.ZodLiteral<"url">;
|
|
10867
|
+
url: z.ZodURL;
|
|
10868
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
10869
|
+
kind: z.ZodLiteral<"base64">;
|
|
10870
|
+
data: z.ZodString;
|
|
10871
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
10872
|
+
kind: z.ZodLiteral<"path">;
|
|
10873
|
+
path: z.ZodString;
|
|
10874
|
+
}, z.core.$strict>], "kind">>;
|
|
10776
10875
|
}, z.core.$strict>, z.ZodObject<{
|
|
10777
10876
|
type: z.ZodLiteral<"movie">;
|
|
10778
10877
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -14133,6 +14232,17 @@ export declare const mulmoStudioSchema: z.ZodObject<{
|
|
|
14133
14232
|
width: z.ZodNumber;
|
|
14134
14233
|
height: z.ZodNumber;
|
|
14135
14234
|
}, z.core.$strict>>;
|
|
14235
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
14236
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
14237
|
+
kind: z.ZodLiteral<"url">;
|
|
14238
|
+
url: z.ZodURL;
|
|
14239
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14240
|
+
kind: z.ZodLiteral<"base64">;
|
|
14241
|
+
data: z.ZodString;
|
|
14242
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14243
|
+
kind: z.ZodLiteral<"path">;
|
|
14244
|
+
path: z.ZodString;
|
|
14245
|
+
}, z.core.$strict>], "kind">>;
|
|
14136
14246
|
}, z.core.$strict>, z.ZodObject<{
|
|
14137
14247
|
type: z.ZodLiteral<"movie">;
|
|
14138
14248
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -14275,6 +14385,17 @@ export declare const mulmoPromptTemplateSchema: z.ZodObject<{
|
|
|
14275
14385
|
width: z.ZodNumber;
|
|
14276
14386
|
height: z.ZodNumber;
|
|
14277
14387
|
}, z.core.$strict>>;
|
|
14388
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
14389
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
14390
|
+
kind: z.ZodLiteral<"url">;
|
|
14391
|
+
url: z.ZodURL;
|
|
14392
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14393
|
+
kind: z.ZodLiteral<"base64">;
|
|
14394
|
+
data: z.ZodString;
|
|
14395
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14396
|
+
kind: z.ZodLiteral<"path">;
|
|
14397
|
+
path: z.ZodString;
|
|
14398
|
+
}, z.core.$strict>], "kind">>;
|
|
14278
14399
|
}, z.core.$strict>, z.ZodObject<{
|
|
14279
14400
|
type: z.ZodLiteral<"movie">;
|
|
14280
14401
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -14754,6 +14875,17 @@ export declare const mulmoPromptTemplateFileSchema: z.ZodObject<{
|
|
|
14754
14875
|
width: z.ZodNumber;
|
|
14755
14876
|
height: z.ZodNumber;
|
|
14756
14877
|
}, z.core.$strict>>;
|
|
14878
|
+
referenceImageName: z.ZodOptional<z.ZodString>;
|
|
14879
|
+
referenceImage: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
14880
|
+
kind: z.ZodLiteral<"url">;
|
|
14881
|
+
url: z.ZodURL;
|
|
14882
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14883
|
+
kind: z.ZodLiteral<"base64">;
|
|
14884
|
+
data: z.ZodString;
|
|
14885
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14886
|
+
kind: z.ZodLiteral<"path">;
|
|
14887
|
+
path: z.ZodString;
|
|
14888
|
+
}, z.core.$strict>], "kind">>;
|
|
14757
14889
|
}, z.core.$strict>, z.ZodObject<{
|
|
14758
14890
|
type: z.ZodLiteral<"movie">;
|
|
14759
14891
|
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
package/lib/types/schema.js
CHANGED
|
@@ -344,6 +344,8 @@ export const mulmoImagePromptMediaSchema = z
|
|
|
344
344
|
type: z.literal("imagePrompt"),
|
|
345
345
|
prompt: z.string().min(1),
|
|
346
346
|
canvasSize: z.object({ width: z.number(), height: z.number() }).strict().optional(),
|
|
347
|
+
referenceImageName: imageIdSchema.optional().describe("Reference another imageRefs key as input for image generation"),
|
|
348
|
+
referenceImage: mediaSourceSchema.optional().describe("Direct source (path/url/base64) as reference image for generation"),
|
|
347
349
|
})
|
|
348
350
|
.strict();
|
|
349
351
|
export const mulmoImageParamsImagesValueSchema = z.union([
|
package/lib/utils/context.d.ts
CHANGED
|
@@ -89,6 +89,17 @@ export declare const createStudioData: (_mulmoScript: MulmoScript, fileName: str
|
|
|
89
89
|
width: number;
|
|
90
90
|
height: number;
|
|
91
91
|
} | undefined;
|
|
92
|
+
referenceImageName?: string | undefined;
|
|
93
|
+
referenceImage?: {
|
|
94
|
+
kind: "url";
|
|
95
|
+
url: string;
|
|
96
|
+
} | {
|
|
97
|
+
kind: "base64";
|
|
98
|
+
data: string;
|
|
99
|
+
} | {
|
|
100
|
+
kind: "path";
|
|
101
|
+
path: string;
|
|
102
|
+
} | undefined;
|
|
92
103
|
}> | undefined;
|
|
93
104
|
backgroundImage?: string | {
|
|
94
105
|
source: {
|
|
@@ -2072,6 +2083,17 @@ export declare const createStudioData: (_mulmoScript: MulmoScript, fileName: str
|
|
|
2072
2083
|
width: number;
|
|
2073
2084
|
height: number;
|
|
2074
2085
|
} | undefined;
|
|
2086
|
+
referenceImageName?: string | undefined;
|
|
2087
|
+
referenceImage?: {
|
|
2088
|
+
kind: "url";
|
|
2089
|
+
url: string;
|
|
2090
|
+
} | {
|
|
2091
|
+
kind: "base64";
|
|
2092
|
+
data: string;
|
|
2093
|
+
} | {
|
|
2094
|
+
kind: "path";
|
|
2095
|
+
path: string;
|
|
2096
|
+
} | undefined;
|
|
2075
2097
|
}> | undefined;
|
|
2076
2098
|
imageNames?: string[] | undefined;
|
|
2077
2099
|
imagePrompt?: string | undefined;
|
|
@@ -2294,6 +2316,17 @@ export declare const initializeContextFromFiles: (files: FileObject, raiseError:
|
|
|
2294
2316
|
width: number;
|
|
2295
2317
|
height: number;
|
|
2296
2318
|
} | undefined;
|
|
2319
|
+
referenceImageName?: string | undefined;
|
|
2320
|
+
referenceImage?: {
|
|
2321
|
+
kind: "url";
|
|
2322
|
+
url: string;
|
|
2323
|
+
} | {
|
|
2324
|
+
kind: "base64";
|
|
2325
|
+
data: string;
|
|
2326
|
+
} | {
|
|
2327
|
+
kind: "path";
|
|
2328
|
+
path: string;
|
|
2329
|
+
} | undefined;
|
|
2297
2330
|
}> | undefined;
|
|
2298
2331
|
backgroundImage?: string | {
|
|
2299
2332
|
source: {
|
|
@@ -4277,6 +4310,17 @@ export declare const initializeContextFromFiles: (files: FileObject, raiseError:
|
|
|
4277
4310
|
width: number;
|
|
4278
4311
|
height: number;
|
|
4279
4312
|
} | undefined;
|
|
4313
|
+
referenceImageName?: string | undefined;
|
|
4314
|
+
referenceImage?: {
|
|
4315
|
+
kind: "url";
|
|
4316
|
+
url: string;
|
|
4317
|
+
} | {
|
|
4318
|
+
kind: "base64";
|
|
4319
|
+
data: string;
|
|
4320
|
+
} | {
|
|
4321
|
+
kind: "path";
|
|
4322
|
+
path: string;
|
|
4323
|
+
} | undefined;
|
|
4280
4324
|
}> | undefined;
|
|
4281
4325
|
imageNames?: string[] | undefined;
|
|
4282
4326
|
imagePrompt?: string | undefined;
|
|
@@ -4506,6 +4550,17 @@ export declare const initializeContextFromFiles: (files: FileObject, raiseError:
|
|
|
4506
4550
|
width: number;
|
|
4507
4551
|
height: number;
|
|
4508
4552
|
} | undefined;
|
|
4553
|
+
referenceImageName?: string | undefined;
|
|
4554
|
+
referenceImage?: {
|
|
4555
|
+
kind: "url";
|
|
4556
|
+
url: string;
|
|
4557
|
+
} | {
|
|
4558
|
+
kind: "base64";
|
|
4559
|
+
data: string;
|
|
4560
|
+
} | {
|
|
4561
|
+
kind: "path";
|
|
4562
|
+
path: string;
|
|
4563
|
+
} | undefined;
|
|
4509
4564
|
}> | undefined;
|
|
4510
4565
|
backgroundImage?: string | {
|
|
4511
4566
|
source: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mulmocast",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.node.js",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"homepage": "https://github.com/receptron/mulmocast-cli#readme",
|
|
89
89
|
"dependencies": {
|
|
90
90
|
"@google-cloud/text-to-speech": "^6.4.0",
|
|
91
|
-
"@google/genai": "^1.
|
|
91
|
+
"@google/genai": "^1.46.0",
|
|
92
92
|
"@graphai/anthropic_agent": "^2.0.12",
|
|
93
93
|
"@graphai/browserless_agent": "^2.0.2",
|
|
94
94
|
"@graphai/gemini_agent": "^2.0.5",
|
|
@@ -108,11 +108,11 @@
|
|
|
108
108
|
"dotenv": "^17.3.1",
|
|
109
109
|
"fluent-ffmpeg": "^2.1.3",
|
|
110
110
|
"graphai": "^2.0.16",
|
|
111
|
-
"jsdom": "^29.0.
|
|
112
|
-
"marked": "^17.0.
|
|
111
|
+
"jsdom": "^29.0.1",
|
|
112
|
+
"marked": "^17.0.5",
|
|
113
113
|
"mulmocast-vision": "^1.0.9",
|
|
114
114
|
"ora": "^9.3.0",
|
|
115
|
-
"puppeteer": "^24.
|
|
115
|
+
"puppeteer": "^24.40.0",
|
|
116
116
|
"replicate": "^1.4.0",
|
|
117
117
|
"yaml": "^2.8.2",
|
|
118
118
|
"yargs": "^18.0.0",
|
|
@@ -123,10 +123,10 @@
|
|
|
123
123
|
"@receptron/test_utils": "^2.0.3",
|
|
124
124
|
"@types/archiver": "^7.0.0",
|
|
125
125
|
"@types/fluent-ffmpeg": "^2.1.28",
|
|
126
|
-
"@types/jsdom": "^28.0.
|
|
126
|
+
"@types/jsdom": "^28.0.1",
|
|
127
127
|
"@types/yargs": "^17.0.35",
|
|
128
128
|
"cross-env": "^10.1.0",
|
|
129
|
-
"eslint": "^10.0
|
|
129
|
+
"eslint": "^10.1.0",
|
|
130
130
|
"eslint-config-prettier": "^10.1.8",
|
|
131
131
|
"eslint-plugin-prettier": "^5.5.5",
|
|
132
132
|
"eslint-plugin-sonarjs": "^4.0.2",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$mulmocast": { "version": "1.1" },
|
|
3
|
+
"title": "Image Prompt Reference Tests",
|
|
4
|
+
"lang": "en",
|
|
5
|
+
"canvasSize": { "width": 1280, "height": 720 },
|
|
6
|
+
"imageParams": {
|
|
7
|
+
"images": {
|
|
8
|
+
"base_photo": {
|
|
9
|
+
"type": "image",
|
|
10
|
+
"source": { "kind": "url", "url": "https://images.unsplash.com/photo-1557682250-33bd709cbe85?w=1280&h=720&fit=crop" }
|
|
11
|
+
},
|
|
12
|
+
"from_prompt": {
|
|
13
|
+
"type": "imagePrompt",
|
|
14
|
+
"prompt": "A beautiful mountain landscape at sunset, photorealistic"
|
|
15
|
+
},
|
|
16
|
+
"stylized_by_name": {
|
|
17
|
+
"type": "imagePrompt",
|
|
18
|
+
"prompt": "Transform this image into a watercolor painting style",
|
|
19
|
+
"referenceImageName": "base_photo"
|
|
20
|
+
},
|
|
21
|
+
"stylized_by_source": {
|
|
22
|
+
"type": "imagePrompt",
|
|
23
|
+
"prompt": "Create an anime version of this gradient background",
|
|
24
|
+
"referenceImage": { "kind": "url", "url": "https://images.unsplash.com/photo-1557682250-33bd709cbe85?w=1280&h=720&fit=crop" }
|
|
25
|
+
},
|
|
26
|
+
"chained_ref": {
|
|
27
|
+
"type": "imagePrompt",
|
|
28
|
+
"prompt": "Add snow-capped peaks to this mountain scene",
|
|
29
|
+
"referenceImageName": "from_prompt"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"beats": [
|
|
34
|
+
{
|
|
35
|
+
"text": "Pattern 1: imagePrompt without reference (baseline)",
|
|
36
|
+
"imagePrompt": "A simple landscape",
|
|
37
|
+
"imageNames": ["from_prompt"]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"text": "Pattern 2: referenceImageName — reference another imageRefs key",
|
|
41
|
+
"imagePrompt": "A simple landscape",
|
|
42
|
+
"imageNames": ["stylized_by_name"]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"text": "Pattern 3: referenceImage — direct source",
|
|
46
|
+
"imagePrompt": "A simple landscape",
|
|
47
|
+
"imageNames": ["stylized_by_source"]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"text": "Pattern 4: chained reference — imagePrompt referencing another imagePrompt",
|
|
51
|
+
"imagePrompt": "A simple landscape",
|
|
52
|
+
"imageNames": ["chained_ref"]
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|