mulmocast 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -76,7 +76,7 @@ export const imagePreprocessAgent = async (namedInputs) => {
76
76
  ...returnValue,
77
77
  // imagePath: isTypeMovie ? undefined : pluginPath,
78
78
  imagePath: isTypeMovie ? imagePath : pluginPath,
79
- movieFile: isTypeMovie ? pluginPath : undefined,
79
+ movieFile: isTypeMovie ? pluginPath : returnValue.movieFile,
80
80
  imageFromMovie: isTypeMovie,
81
81
  referenceImageForMovie: pluginPath,
82
82
  markdown,
@@ -2,7 +2,7 @@ import { readFileSync } from "fs";
2
2
  import { GraphAILogger, sleep } from "graphai";
3
3
  import { apiKeyMissingError, agentGenerationError, agentInvalidResponseError, imageAction, movieFileTarget, videoDurationTarget, hasCause, } from "../utils/error_cause.js";
4
4
  import { GoogleGenAI, PersonGeneration } from "@google/genai";
5
- import { getModelDuration } from "../utils/provider2agent.js";
5
+ import { getModelDuration, provider2MovieAgent } from "../utils/provider2agent.js";
6
6
  export const getAspectRatio = (canvasSize) => {
7
7
  if (canvasSize.width > canvasSize.height) {
8
8
  return "16:9";
@@ -17,8 +17,7 @@ export const getAspectRatio = (canvasSize) => {
17
17
  export const movieGenAIAgent = async ({ namedInputs, params, config, }) => {
18
18
  const { prompt, imagePath, movieFile } = namedInputs;
19
19
  const aspectRatio = getAspectRatio(params.canvasSize);
20
- const model = params.model ?? "veo-2.0-generate-001"; // "veo-3.0-generate-preview";
21
- // const duration = params.duration ?? 8;
20
+ const model = params.model ?? provider2MovieAgent.google.defaultModel;
22
21
  const apiKey = config?.apiKey;
23
22
  if (!apiKey) {
24
23
  throw new Error("Google GenAI API key is required (GEMINI_API_KEY)", {
@@ -102,7 +101,6 @@ const movieGenAIAgentInfo = {
102
101
  category: ["movie"],
103
102
  author: "Receptron Team",
104
103
  repository: "https://github.com/receptron/mulmocast-cli/",
105
- // source: "https://github.com/receptron/mulmocast-cli/blob/main/src/agents/image_google_agent.ts",
106
104
  license: "MIT",
107
105
  environmentVariables: [],
108
106
  };
@@ -685,6 +685,12 @@ export declare const mulmoMovieParamsSchema: z.ZodObject<{
685
685
  [x: string]: string;
686
686
  }>>>;
687
687
  model: z.ZodOptional<z.ZodString>;
688
+ fillOption: z.ZodOptional<z.ZodObject<{
689
+ style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
690
+ aspectFit: "aspectFit";
691
+ aspectFill: "aspectFill";
692
+ }>>>;
693
+ }, z.core.$strip>>;
688
694
  transition: z.ZodOptional<z.ZodObject<{
689
695
  type: z.ZodEnum<{
690
696
  fade: "fade";
@@ -692,12 +698,6 @@ export declare const mulmoMovieParamsSchema: z.ZodObject<{
692
698
  }>;
693
699
  duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
694
700
  }, z.core.$strip>>;
695
- fillOption: z.ZodOptional<z.ZodObject<{
696
- style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
697
- aspectFit: "aspectFit";
698
- aspectFill: "aspectFill";
699
- }>>>;
700
- }, z.core.$strip>>;
701
701
  }, z.core.$strict>;
702
702
  export declare const mulmoPresentationStyleSchema: z.ZodObject<{
703
703
  $mulmocast: z.ZodObject<{
@@ -766,6 +766,12 @@ export declare const mulmoPresentationStyleSchema: z.ZodObject<{
766
766
  [x: string]: string;
767
767
  }>>>;
768
768
  model: z.ZodOptional<z.ZodString>;
769
+ fillOption: z.ZodOptional<z.ZodObject<{
770
+ style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
771
+ aspectFit: "aspectFit";
772
+ aspectFill: "aspectFill";
773
+ }>>>;
774
+ }, z.core.$strip>>;
769
775
  transition: z.ZodOptional<z.ZodObject<{
770
776
  type: z.ZodEnum<{
771
777
  fade: "fade";
@@ -773,12 +779,6 @@ export declare const mulmoPresentationStyleSchema: z.ZodObject<{
773
779
  }>;
774
780
  duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
775
781
  }, z.core.$strip>>;
776
- fillOption: z.ZodOptional<z.ZodObject<{
777
- style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
778
- aspectFit: "aspectFit";
779
- aspectFill: "aspectFill";
780
- }>>>;
781
- }, z.core.$strip>>;
782
782
  }, z.core.$strict>>;
783
783
  soundEffectParams: z.ZodDefault<z.ZodOptional<z.ZodObject<{
784
784
  provider: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -902,6 +902,12 @@ export declare const mulmoScriptSchema: z.ZodObject<{
902
902
  [x: string]: string;
903
903
  }>>>;
904
904
  model: z.ZodOptional<z.ZodString>;
905
+ fillOption: z.ZodOptional<z.ZodObject<{
906
+ style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
907
+ aspectFit: "aspectFit";
908
+ aspectFill: "aspectFill";
909
+ }>>>;
910
+ }, z.core.$strip>>;
905
911
  transition: z.ZodOptional<z.ZodObject<{
906
912
  type: z.ZodEnum<{
907
913
  fade: "fade";
@@ -909,12 +915,6 @@ export declare const mulmoScriptSchema: z.ZodObject<{
909
915
  }>;
910
916
  duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
911
917
  }, z.core.$strip>>;
912
- fillOption: z.ZodOptional<z.ZodObject<{
913
- style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
914
- aspectFit: "aspectFit";
915
- aspectFill: "aspectFill";
916
- }>>>;
917
- }, z.core.$strip>>;
918
918
  }, z.core.$strict>>;
919
919
  soundEffectParams: z.ZodDefault<z.ZodOptional<z.ZodObject<{
920
920
  provider: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -1314,6 +1314,12 @@ export declare const mulmoStudioSchema: z.ZodObject<{
1314
1314
  [x: string]: string;
1315
1315
  }>>>;
1316
1316
  model: z.ZodOptional<z.ZodString>;
1317
+ fillOption: z.ZodOptional<z.ZodObject<{
1318
+ style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
1319
+ aspectFit: "aspectFit";
1320
+ aspectFill: "aspectFill";
1321
+ }>>>;
1322
+ }, z.core.$strip>>;
1317
1323
  transition: z.ZodOptional<z.ZodObject<{
1318
1324
  type: z.ZodEnum<{
1319
1325
  fade: "fade";
@@ -1321,12 +1327,6 @@ export declare const mulmoStudioSchema: z.ZodObject<{
1321
1327
  }>;
1322
1328
  duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1323
1329
  }, z.core.$strip>>;
1324
- fillOption: z.ZodOptional<z.ZodObject<{
1325
- style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
1326
- aspectFit: "aspectFit";
1327
- aspectFill: "aspectFill";
1328
- }>>>;
1329
- }, z.core.$strip>>;
1330
1330
  }, z.core.$strict>>;
1331
1331
  soundEffectParams: z.ZodDefault<z.ZodOptional<z.ZodObject<{
1332
1332
  provider: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -1662,6 +1662,12 @@ export declare const mulmoPromptTemplateSchema: z.ZodObject<{
1662
1662
  [x: string]: string;
1663
1663
  }>>>;
1664
1664
  model: z.ZodOptional<z.ZodString>;
1665
+ fillOption: z.ZodOptional<z.ZodObject<{
1666
+ style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
1667
+ aspectFit: "aspectFit";
1668
+ aspectFill: "aspectFill";
1669
+ }>>>;
1670
+ }, z.core.$strip>>;
1665
1671
  transition: z.ZodOptional<z.ZodObject<{
1666
1672
  type: z.ZodEnum<{
1667
1673
  fade: "fade";
@@ -1669,12 +1675,6 @@ export declare const mulmoPromptTemplateSchema: z.ZodObject<{
1669
1675
  }>;
1670
1676
  duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1671
1677
  }, z.core.$strip>>;
1672
- fillOption: z.ZodOptional<z.ZodObject<{
1673
- style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
1674
- aspectFit: "aspectFit";
1675
- aspectFill: "aspectFill";
1676
- }>>>;
1677
- }, z.core.$strip>>;
1678
1678
  }, z.core.$strict>>;
1679
1679
  soundEffectParams: z.ZodDefault<z.ZodOptional<z.ZodObject<{
1680
1680
  provider: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -1792,6 +1792,12 @@ export declare const mulmoPromptTemplateFileSchema: z.ZodObject<{
1792
1792
  [x: string]: string;
1793
1793
  }>>>;
1794
1794
  model: z.ZodOptional<z.ZodString>;
1795
+ fillOption: z.ZodOptional<z.ZodObject<{
1796
+ style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
1797
+ aspectFit: "aspectFit";
1798
+ aspectFill: "aspectFill";
1799
+ }>>>;
1800
+ }, z.core.$strip>>;
1795
1801
  transition: z.ZodOptional<z.ZodObject<{
1796
1802
  type: z.ZodEnum<{
1797
1803
  fade: "fade";
@@ -1799,12 +1805,6 @@ export declare const mulmoPromptTemplateFileSchema: z.ZodObject<{
1799
1805
  }>;
1800
1806
  duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1801
1807
  }, z.core.$strip>>;
1802
- fillOption: z.ZodOptional<z.ZodObject<{
1803
- style: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
1804
- aspectFit: "aspectFit";
1805
- aspectFill: "aspectFill";
1806
- }>>>;
1807
- }, z.core.$strip>>;
1808
1808
  }, z.core.$strict>>;
1809
1809
  soundEffectParams: z.ZodDefault<z.ZodOptional<z.ZodObject<{
1810
1810
  provider: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
@@ -278,6 +278,11 @@ export const mulmoLipSyncParamsSchema = z.object({
278
278
  provider: z.string().optional(), // lip sync provider
279
279
  model: z.string().optional(), // default: provider specific
280
280
  });
281
+ const movieParamsSchema = z.object({
282
+ provider: text2MovieProviderSchema.optional(),
283
+ model: z.string().optional(),
284
+ fillOption: mulmoFillOptionSchema.optional(), // for movie.ts
285
+ });
281
286
  export const mulmoBeatSchema = z
282
287
  .object({
283
288
  speaker: speakerIdSchema.optional(),
@@ -289,11 +294,8 @@ export const mulmoBeatSchema = z
289
294
  duration: z.number().optional().describe("Duration of the beat. Used only when the text is empty"),
290
295
  imageParams: mulmoBeatImageParamsSchema.optional(), // beat specific parameters
291
296
  audioParams: beatAudioParamsSchema.optional(), // beat specific parameters
292
- movieParams: z
293
- .object({
294
- provider: text2MovieProviderSchema.optional(),
295
- model: z.string().optional(),
296
- fillOption: mulmoFillOptionSchema.optional(), // for movie.ts
297
+ movieParams: movieParamsSchema
298
+ .extend({
297
299
  speed: z.number().optional().describe("Speed of the video. 1.0 is normal speed. 0.5 is half speed. 2.0 is double speed."), // for movie.ts
298
300
  })
299
301
  .optional(),
@@ -344,12 +346,9 @@ export const mulmoTransitionSchema = z.object({
344
346
  type: z.enum(["fade", "slideout_left"]),
345
347
  duration: z.number().min(0).max(2).optional().default(0.3), // transition duration in seconds
346
348
  });
347
- export const mulmoMovieParamsSchema = z
348
- .object({
349
- provider: text2MovieProviderSchema.optional(), // for agent
350
- model: z.string().optional(), // default: provider specific. for agent
349
+ export const mulmoMovieParamsSchema = movieParamsSchema
350
+ .extend({
351
351
  transition: mulmoTransitionSchema.optional(), // for movie.ts
352
- fillOption: mulmoFillOptionSchema.optional(), // for movie.ts
353
352
  })
354
353
  .strict();
355
354
  export const mulmoPresentationStyleSchema = z.object({
@@ -1,5 +1,5 @@
1
1
  import { type CallbackFunction } from "graphai";
2
- import { langSchema, localizedTextSchema, mulmoBeatSchema, mulmoScriptSchema, mulmoStudioSchema, mulmoStudioBeatSchema, mulmoStoryboardSchema, mulmoStoryboardSceneSchema, mulmoStudioMultiLingualSchema, mulmoStudioMultiLingualArraySchema, mulmoStudioMultiLingualDataSchema, mulmoStudioMultiLingualFileSchema, speakerDictionarySchema, speakerSchema, mulmoSpeechParamsSchema, mulmoImageParamsSchema, mulmoImageParamsImagesValueSchema, mulmoImageParamsImagesSchema, mulmoFillOptionSchema, mulmoMovieParamsSchema, textSlideParamsSchema, speechOptionsSchema, speakerDataSchema, mulmoCanvasDimensionSchema, mulmoPromptTemplateSchema, mulmoPromptTemplateFileSchema, text2ImageProviderSchema, text2HtmlImageProviderSchema, text2MovieProviderSchema, text2SpeechProviderSchema, mulmoPresentationStyleSchema, multiLingualTextsSchema, mulmoImageAssetSchema, mulmoMermaidMediaSchema, mulmoTextSlideMediaSchema, mulmoMarkdownMediaSchema, mulmoImageMediaSchema, mulmoChartMediaSchema, mediaSourceSchema, mediaSourceMermaidSchema, mulmoSessionStateSchema, mulmoOpenAIImageModelSchema, mulmoGoogleImageModelSchema, mulmoGoogleMovieModelSchema, mulmoReplicateMovieModelSchema, mulmoImagePromptMediaSchema } from "./schema.js";
2
+ import { langSchema, localizedTextSchema, mulmoBeatSchema, mulmoScriptSchema, mulmoStudioSchema, mulmoStudioBeatSchema, mulmoStoryboardSchema, mulmoStoryboardSceneSchema, mulmoStudioMultiLingualSchema, mulmoStudioMultiLingualArraySchema, mulmoStudioMultiLingualDataSchema, mulmoStudioMultiLingualFileSchema, speakerDictionarySchema, speakerSchema, mulmoSpeechParamsSchema, mulmoImageParamsSchema, mulmoImageParamsImagesValueSchema, mulmoImageParamsImagesSchema, mulmoFillOptionSchema, mulmoMovieParamsSchema, mulmoSoundEffectParamsSchema, mulmoLipSyncParamsSchema, textSlideParamsSchema, speechOptionsSchema, speakerDataSchema, mulmoCanvasDimensionSchema, mulmoPromptTemplateSchema, mulmoPromptTemplateFileSchema, text2ImageProviderSchema, text2HtmlImageProviderSchema, text2MovieProviderSchema, text2SpeechProviderSchema, mulmoPresentationStyleSchema, multiLingualTextsSchema, mulmoImageAssetSchema, mulmoMermaidMediaSchema, mulmoTextSlideMediaSchema, mulmoMarkdownMediaSchema, mulmoImageMediaSchema, mulmoChartMediaSchema, mediaSourceSchema, mediaSourceMermaidSchema, mulmoSessionStateSchema, mulmoOpenAIImageModelSchema, mulmoGoogleImageModelSchema, mulmoGoogleMovieModelSchema, mulmoReplicateMovieModelSchema, mulmoImagePromptMediaSchema } from "./schema.js";
3
3
  import { pdf_modes, pdf_sizes, storyToScriptGenerateMode } from "../utils/const.js";
4
4
  import type { LLM } from "../utils/provider2agent.js";
5
5
  import { z } from "zod";
@@ -37,6 +37,8 @@ export type MulmoStudioMultiLingualData = z.infer<typeof mulmoStudioMultiLingual
37
37
  export type MulmoStudioMultiLingualFile = z.infer<typeof mulmoStudioMultiLingualFileSchema>;
38
38
  export type MultiLingualTexts = z.infer<typeof multiLingualTextsSchema>;
39
39
  export type MulmoMovieParams = z.infer<typeof mulmoMovieParamsSchema>;
40
+ export type MulmoSoundEffectParams = z.infer<typeof mulmoSoundEffectParamsSchema>;
41
+ export type MulmoLipSyncParams = z.infer<typeof mulmoLipSyncParamsSchema>;
40
42
  export type MulmoOpenAIImageModel = z.infer<typeof mulmoOpenAIImageModelSchema>;
41
43
  export type MulmoGoogleImageModel = z.infer<typeof mulmoGoogleImageModelSchema>;
42
44
  export type MulmoGoogleMovieModel = z.infer<typeof mulmoGoogleMovieModelSchema>;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Wraps agent execution with standardized error handling
3
+ *
4
+ * @param agentName - Name of the agent for error reporting
5
+ * @param action - Action being performed (e.g., "audio", "image", "movie")
6
+ * @param target - Target of the action (e.g., "audioFile", "imageFile")
7
+ * @param suppressError - If true, returns error object instead of throwing
8
+ * @param fn - Async function to execute
9
+ * @returns Result of fn or error object if suppressError is true
10
+ */
11
+ export declare const wrapAgentError: <T>(agentName: string, action: string, target: string, suppressError: boolean | undefined, fn: () => Promise<T>) => Promise<T | {
12
+ error: unknown;
13
+ }>;
14
+ /**
15
+ * Validates that an API key is present, throwing an error if missing
16
+ *
17
+ * @param apiKey - API key to validate
18
+ * @param agentName - Name of the agent for error reporting
19
+ * @param action - Action being performed
20
+ * @param envVarName - Environment variable name for the API key
21
+ * @returns The validated API key
22
+ * @throws Error if API key is missing
23
+ */
24
+ export declare const requireApiKey: (apiKey: string | undefined, agentName: string, action: string, envVarName: string) => string;
@@ -0,0 +1,59 @@
1
+ import { GraphAILogger } from "graphai";
2
+ import { AuthenticationError, RateLimitError } from "openai";
3
+ import { agentIncorrectAPIKeyError, agentAPIRateLimitError, agentGenerationError, hasCause, } from "./error_cause.js";
4
+ /**
5
+ * Wraps agent execution with standardized error handling
6
+ *
7
+ * @param agentName - Name of the agent for error reporting
8
+ * @param action - Action being performed (e.g., "audio", "image", "movie")
9
+ * @param target - Target of the action (e.g., "audioFile", "imageFile")
10
+ * @param suppressError - If true, returns error object instead of throwing
11
+ * @param fn - Async function to execute
12
+ * @returns Result of fn or error object if suppressError is true
13
+ */
14
+ export const wrapAgentError = async (agentName, action, target, suppressError, fn) => {
15
+ try {
16
+ return await fn();
17
+ }
18
+ catch (error) {
19
+ if (suppressError) {
20
+ return { error };
21
+ }
22
+ GraphAILogger.info(error);
23
+ if (error instanceof AuthenticationError) {
24
+ throw new Error(`Failed: 401 Incorrect API key provided`, {
25
+ cause: agentIncorrectAPIKeyError(agentName, action, target),
26
+ });
27
+ }
28
+ if (error instanceof RateLimitError) {
29
+ throw new Error("You exceeded your current quota, please check your plan and billing details", {
30
+ cause: agentAPIRateLimitError(agentName, action, target),
31
+ });
32
+ }
33
+ if (hasCause(error)) {
34
+ throw error;
35
+ }
36
+ throw new Error(`Failed with ${agentName}`, {
37
+ cause: agentGenerationError(agentName, action, target),
38
+ });
39
+ }
40
+ };
41
+ /**
42
+ * Validates that an API key is present, throwing an error if missing
43
+ *
44
+ * @param apiKey - API key to validate
45
+ * @param agentName - Name of the agent for error reporting
46
+ * @param action - Action being performed
47
+ * @param envVarName - Environment variable name for the API key
48
+ * @returns The validated API key
49
+ * @throws Error if API key is missing
50
+ */
51
+ export const requireApiKey = (apiKey, agentName, action, envVarName) => {
52
+ if (!apiKey) {
53
+ const { apiKeyMissingError } = require("./error_cause.js");
54
+ throw new Error(`${envVarName} is required`, {
55
+ cause: apiKeyMissingError(agentName, action, envVarName),
56
+ });
57
+ }
58
+ return apiKey;
59
+ };
@@ -0,0 +1,12 @@
1
+ import type { AgentFunction, AgentFunctionInfo } from "graphai";
2
+ /**
3
+ * Creates standardized AgentFunctionInfo metadata for agents
4
+ *
5
+ * @param name - Agent name (e.g., "ttsOpenaiAgent")
6
+ * @param agent - Agent function implementation
7
+ * @param category - Agent categories (e.g., ["tts"], ["image"])
8
+ * @param description - Human-readable description
9
+ * @param environmentVariables - Required environment variables (e.g., ["OPENAI_API_KEY"])
10
+ * @returns AgentFunctionInfo with standardized metadata
11
+ */
12
+ export declare const createAgentInfo: <P = unknown, R = unknown, I = unknown, C = unknown>(name: string, agent: AgentFunction<P, R, I, C>, category: string[], description: string, environmentVariables?: string[]) => AgentFunctionInfo;
@@ -0,0 +1,23 @@
1
+ import { PROJECT_METADATA } from "./const.js";
2
+ /**
3
+ * Creates standardized AgentFunctionInfo metadata for agents
4
+ *
5
+ * @param name - Agent name (e.g., "ttsOpenaiAgent")
6
+ * @param agent - Agent function implementation
7
+ * @param category - Agent categories (e.g., ["tts"], ["image"])
8
+ * @param description - Human-readable description
9
+ * @param environmentVariables - Required environment variables (e.g., ["OPENAI_API_KEY"])
10
+ * @returns AgentFunctionInfo with standardized metadata
11
+ */
12
+ export const createAgentInfo = (name, agent, category, description, environmentVariables = []) => ({
13
+ name,
14
+ agent,
15
+ mock: agent,
16
+ samples: [],
17
+ description,
18
+ category,
19
+ author: PROJECT_METADATA.author,
20
+ repository: PROJECT_METADATA.repository,
21
+ license: PROJECT_METADATA.license,
22
+ environmentVariables,
23
+ });
@@ -255,13 +255,13 @@ export declare const createStudioData: (_mulmoScript: MulmoScript, fileName: str
255
255
  movieParams?: {
256
256
  provider?: string | undefined;
257
257
  model?: string | undefined;
258
+ fillOption?: {
259
+ style: "aspectFit" | "aspectFill";
260
+ } | undefined;
258
261
  transition?: {
259
262
  type: "fade" | "slideout_left";
260
263
  duration: number;
261
264
  } | undefined;
262
- fillOption?: {
263
- style: "aspectFit" | "aspectFill";
264
- } | undefined;
265
265
  } | undefined;
266
266
  lipSyncParams?: {
267
267
  provider?: string | undefined;
@@ -570,13 +570,13 @@ export declare const initializeContextFromFiles: (files: FileObject, raiseError:
570
570
  movieParams?: {
571
571
  provider?: string | undefined;
572
572
  model?: string | undefined;
573
+ fillOption?: {
574
+ style: "aspectFit" | "aspectFill";
575
+ } | undefined;
573
576
  transition?: {
574
577
  type: "fade" | "slideout_left";
575
578
  duration: number;
576
579
  } | undefined;
577
- fillOption?: {
578
- style: "aspectFit" | "aspectFill";
579
- } | undefined;
580
580
  } | undefined;
581
581
  lipSyncParams?: {
582
582
  provider?: string | undefined;
@@ -719,13 +719,13 @@ export declare const initializeContextFromFiles: (files: FileObject, raiseError:
719
719
  movieParams?: {
720
720
  provider?: string | undefined;
721
721
  model?: string | undefined;
722
+ fillOption?: {
723
+ style: "aspectFit" | "aspectFill";
724
+ } | undefined;
722
725
  transition?: {
723
726
  type: "fade" | "slideout_left";
724
727
  duration: number;
725
728
  } | undefined;
726
- fillOption?: {
727
- style: "aspectFit" | "aspectFill";
728
- } | undefined;
729
729
  } | undefined;
730
730
  lipSyncParams?: {
731
731
  provider?: string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mulmocast",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "lib/index.node.js",
@@ -74,7 +74,7 @@
74
74
  "homepage": "https://github.com/receptron/mulmocast-cli#readme",
75
75
  "dependencies": {
76
76
  "@google-cloud/text-to-speech": "^6.4.0",
77
- "@google/genai": "^1.29.0",
77
+ "@google/genai": "^1.29.1",
78
78
  "@graphai/anthropic_agent": "^2.0.11",
79
79
  "@graphai/browserless_agent": "^2.0.1",
80
80
  "@graphai/gemini_agent": "^2.0.1",
@@ -84,9 +84,9 @@
84
84
  "@graphai/stream_agent_filter": "^2.0.2",
85
85
  "@graphai/vanilla": "^2.0.12",
86
86
  "@graphai/vanilla_node_agents": "^2.0.4",
87
- "@inquirer/input": "^4.2.5",
88
- "@inquirer/select": "^4.4.0",
89
- "@modelcontextprotocol/sdk": "^1.21.1",
87
+ "@inquirer/input": "^4.3.0",
88
+ "@inquirer/select": "^4.4.1",
89
+ "@modelcontextprotocol/sdk": "^1.22.0",
90
90
  "@mozilla/readability": "^0.6.0",
91
91
  "@tavily/core": "^0.5.11",
92
92
  "archiver": "^7.0.1",
@@ -94,11 +94,11 @@
94
94
  "dotenv": "^17.2.3",
95
95
  "fluent-ffmpeg": "^2.1.3",
96
96
  "graphai": "^2.0.16",
97
- "jsdom": "^27.1.0",
97
+ "jsdom": "^27.2.0",
98
98
  "marked": "^17.0.0",
99
99
  "mulmocast-vision": "^1.0.4",
100
100
  "ora": "^9.0.0",
101
- "puppeteer": "^24.29.1",
101
+ "puppeteer": "^24.30.0",
102
102
  "replicate": "^1.3.1",
103
103
  "yaml": "^2.8.1",
104
104
  "yargs": "^18.0.0",
@@ -109,7 +109,7 @@
109
109
  "@types/archiver": "^7.0.0",
110
110
  "@types/fluent-ffmpeg": "^2.1.28",
111
111
  "@types/jsdom": "^27.0.0",
112
- "@types/yargs": "^17.0.34",
112
+ "@types/yargs": "^17.0.35",
113
113
  "eslint": "^9.39.1",
114
114
  "eslint-config-prettier": "^10.1.8",
115
115
  "eslint-plugin-prettier": "^5.5.4",
@@ -117,7 +117,7 @@
117
117
  "prettier": "^3.6.2",
118
118
  "tsx": "^4.20.6",
119
119
  "typescript": "^5.9.3",
120
- "typescript-eslint": "^8.46.3"
120
+ "typescript-eslint": "^8.46.4"
121
121
  },
122
122
  "engines": {
123
123
  "node": ">=20.0.0"
@@ -0,0 +1,56 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "movieParams": {
7
+ "provider": "google"
8
+ },
9
+ "lipSyncParams": {
10
+ "provider": "replicate",
11
+ "model": "bytedance/latentsync"
12
+ },
13
+ "canvasSize": {
14
+ "width": 1280,
15
+ "height": 720
16
+ },
17
+ "beats": [
18
+ {
19
+ "text": "Hello, I'm macoro",
20
+ "image": {
21
+ "type": "image",
22
+ "source": {
23
+ "kind": "url",
24
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/macoro.png"
25
+ }
26
+ },
27
+ "moviePrompt": "Jump and bounce",
28
+ "duration": 5
29
+ },
30
+ {
31
+ "text": "こんにちは、マコロです",
32
+ "image": {
33
+ "type": "image",
34
+ "source": {
35
+ "kind": "url",
36
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/macoro.png"
37
+ }
38
+ },
39
+ "enableLipSync": true,
40
+ "duration": 5
41
+ },
42
+ {
43
+ "text": "こんにちは、マコロです",
44
+ "image": {
45
+ "type": "image",
46
+ "source": {
47
+ "kind": "url",
48
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/explaining_concepts.png"
49
+ }
50
+ },
51
+ "moviePrompt": "Jump and bounce",
52
+ "enableLipSync": true,
53
+ "duration": 5
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1"
4
+ },
5
+ "lang": "en",
6
+ "movieParams": {
7
+ "provider": "google"
8
+ },
9
+ "canvasSize": {
10
+ "width": 720,
11
+ "height": 1280
12
+ },
13
+ "imageParams": {
14
+ "provider": "openai",
15
+ "model": "dall-e-3",
16
+ "style": "Photo realistic, cinematic style.",
17
+ "images": {
18
+ "optimus": {
19
+ "type": "image",
20
+ "source": {
21
+ "kind": "url",
22
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/optimus.png"
23
+ }
24
+ }
25
+ }
26
+ },
27
+ "beats": [
28
+ {
29
+ "text": "Image with both image and movie prompt",
30
+ "imagePrompt": "巨大なロケット「Starship」が発射台から打ち上がろうとしている様子。空には星と火星が浮かんでいる。",
31
+ "moviePrompt": "Startship lifts off.",
32
+ "duration": 5
33
+ },
34
+ {
35
+ "text": "Image with only movie prompt",
36
+ "moviePrompt": "Startship lifts off.",
37
+ "duration": 5
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "$mulmocast": {
3
+ "version": "1.1",
4
+ "credit": "closing"
5
+ },
6
+ "canvasSize": {
7
+ "width": 1536,
8
+ "height": 1024
9
+ },
10
+ "speechParams": {
11
+ "speakers": {
12
+ "Presenter": {
13
+ "displayName": {
14
+ "en": "Presenter"
15
+ },
16
+ "voiceId": "shimmer"
17
+ }
18
+ }
19
+ },
20
+ "imageParams": {
21
+ "provider": "openai",
22
+ "style": "<style>Vibrant 3D animation style inspired by K-pop aesthetics, with glossy, stylized characters. The overall visual style combines elements of modern animation, game cinematics, and fashion-forward character design, with sleek outlines, glowing effects, and a polished, cinematic finish.</style>",
23
+ "images": {
24
+ "min": {
25
+ "type": "image",
26
+ "source": {
27
+ "kind": "url",
28
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/characters/min_anime.png"
29
+ }
30
+ }
31
+ }
32
+ },
33
+ "movieParams": {
34
+ "provider": "replicate"
35
+ },
36
+ "soundEffectParams": {
37
+ "provider": "replicate"
38
+ },
39
+ "captionParams": {
40
+ "lang": "en",
41
+ "styles": ["font-size: 64px", "width: 90%", "padding-left: 5%", "padding-right: 5%"]
42
+ },
43
+ "audioParams": {
44
+ "padding": 0,
45
+ "introPadding": 0,
46
+ "closingPadding": 0,
47
+ "outroPadding": 0,
48
+ "bgm": {
49
+ "kind": "url",
50
+ "url": "https://raw.githubusercontent.com/receptron/mulmocast-media/refs/heads/main/music/finetuning_with_you.mp3"
51
+ },
52
+ "bgmVolume": 1,
53
+ "audioVolume": 0,
54
+ "suppressSpeech": true
55
+ },
56
+ "title": "Music Video",
57
+ "lang": "en",
58
+ "beats": [
59
+ {
60
+ "text": "Finetuning with you",
61
+ "moviePrompt": "The singer preparing to sing a song.",
62
+ "playGenMovieToEnd": true
63
+ }
64
+ ]
65
+ }