mulmocast 0.1.7 → 1.1.1

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.
Files changed (75) hide show
  1. package/assets/templates/akira_comic.json +1 -1
  2. package/assets/templates/ani.json +3 -3
  3. package/assets/templates/ani_ja.json +4 -5
  4. package/assets/templates/characters.json +1 -1
  5. package/assets/templates/children_book.json +1 -1
  6. package/assets/templates/comic_strips.json +1 -1
  7. package/assets/templates/drslump_comic.json +1 -1
  8. package/assets/templates/ghibli_comic.json +1 -1
  9. package/assets/templates/ghibli_image_only.json +1 -1
  10. package/assets/templates/ghibli_shorts.json +2 -3
  11. package/assets/templates/ghost_comic.json +1 -1
  12. package/assets/templates/onepiece_comic.json +1 -1
  13. package/assets/templates/portrait_movie.json +1 -1
  14. package/assets/templates/realistic_movie.json +1 -1
  15. package/assets/templates/sensei_and_taro.json +4 -5
  16. package/assets/templates/shorts.json +1 -1
  17. package/assets/templates/trailer.json +1 -1
  18. package/lib/actions/audio.js +6 -7
  19. package/lib/actions/image_agents.d.ts +46 -76
  20. package/lib/actions/image_agents.js +18 -3
  21. package/lib/actions/images.js +65 -4
  22. package/lib/actions/movie.js +3 -2
  23. package/lib/agents/index.d.ts +3 -1
  24. package/lib/agents/index.js +3 -1
  25. package/lib/agents/lipsync_replicate_agent.d.ts +5 -0
  26. package/lib/agents/lipsync_replicate_agent.js +57 -0
  27. package/lib/agents/movie_replicate_agent.js +17 -5
  28. package/lib/agents/sound_effect_replicate_agent.d.ts +5 -0
  29. package/lib/agents/sound_effect_replicate_agent.js +59 -0
  30. package/lib/data/index.d.ts +2 -0
  31. package/lib/data/index.js +2 -0
  32. package/lib/data/promptTemplates.d.ts +695 -0
  33. package/lib/data/promptTemplates.js +957 -0
  34. package/lib/data/scriptTemplates.d.ts +233 -0
  35. package/lib/data/scriptTemplates.js +580 -0
  36. package/lib/index.browser.d.ts +2 -1
  37. package/lib/index.browser.js +2 -1
  38. package/lib/mcp/server.js +2 -2
  39. package/lib/methods/index.d.ts +1 -0
  40. package/lib/methods/index.js +1 -0
  41. package/lib/methods/mulmo_presentation_style.d.ts +18 -5
  42. package/lib/methods/mulmo_presentation_style.js +31 -20
  43. package/lib/methods/mulmo_script.d.ts +4 -0
  44. package/lib/methods/mulmo_script.js +31 -0
  45. package/lib/tools/story_to_script.js +2 -2
  46. package/lib/types/agent.d.ts +19 -0
  47. package/lib/types/schema.d.ts +628 -246
  48. package/lib/types/schema.js +31 -12
  49. package/lib/types/type.d.ts +2 -3
  50. package/lib/utils/assets.d.ts +18 -0
  51. package/lib/utils/assets.js +101 -0
  52. package/lib/utils/context.d.ts +40 -12
  53. package/lib/utils/context.js +3 -1
  54. package/lib/utils/file.d.ts +12 -4
  55. package/lib/utils/file.js +48 -24
  56. package/lib/utils/preprocess.d.ts +30 -11
  57. package/lib/utils/preprocess.js +7 -5
  58. package/lib/utils/provider2agent.d.ts +30 -1
  59. package/lib/utils/provider2agent.js +86 -0
  60. package/lib/utils/utils.js +6 -0
  61. package/package.json +8 -4
  62. package/scripts/templates/business.json +1 -1
  63. package/scripts/templates/children_book.json +1 -1
  64. package/scripts/templates/coding.json +1 -1
  65. package/scripts/templates/html.json +1 -1
  66. package/scripts/templates/image_prompt_only_template.json +1 -1
  67. package/scripts/templates/image_prompts_template.json +1 -1
  68. package/scripts/templates/image_refs.json +1 -1
  69. package/scripts/templates/movie_prompts_no_text_template.json +1 -1
  70. package/scripts/templates/movie_prompts_template.json +1 -1
  71. package/scripts/templates/presentation.json +1 -1
  72. package/scripts/templates/sensei_and_taro.json +1 -1
  73. package/scripts/templates/shorts_template.json +1 -1
  74. package/scripts/templates/text_only_template.json +1 -1
  75. package/scripts/templates/voice_over.json +1 -1
@@ -1,5 +1,5 @@
1
- import { MulmoStudio, MulmoScript } from "../types/index.js";
2
- export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, currentStudio: MulmoStudio | undefined, fileName: string, videoCaption?: string) => {
1
+ import { MulmoStudio, MulmoScript, MulmoPresentationStyle } from "../types/index.js";
2
+ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, currentStudio: MulmoStudio | undefined, fileName: string, videoCaption?: string, presentationStyle?: MulmoPresentationStyle | null) => {
3
3
  beats: {
4
4
  duration?: number | undefined;
5
5
  startAt?: number | undefined;
@@ -11,6 +11,8 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
11
11
  audioFile?: string | undefined;
12
12
  imageFile?: string | undefined;
13
13
  movieFile?: string | undefined;
14
+ soundEffectFile?: string | undefined;
15
+ lipSyncFile?: string | undefined;
14
16
  captionFile?: string | undefined;
15
17
  }[];
16
18
  script: {
@@ -72,8 +74,12 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
72
74
  duration: number;
73
75
  } | undefined;
74
76
  };
77
+ soundEffectParams: {
78
+ provider?: string | undefined;
79
+ model?: string | undefined;
80
+ };
75
81
  $mulmocast: {
76
- version: "1.0";
82
+ version: "1.1";
77
83
  credit?: "closing" | undefined;
78
84
  };
79
85
  canvasSize: {
@@ -81,10 +87,10 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
81
87
  height: number;
82
88
  };
83
89
  speechParams: {
84
- provider: string;
85
90
  speakers: Record<string, {
86
91
  voiceId: string;
87
92
  displayName?: Record<string, string> | undefined;
93
+ isDefault?: boolean | undefined;
88
94
  speechOptions?: {
89
95
  speed?: number | undefined;
90
96
  instruction?: string | undefined;
@@ -92,16 +98,9 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
92
98
  provider?: string | undefined;
93
99
  model?: string | undefined;
94
100
  }>;
95
- model?: string | undefined;
96
101
  };
97
102
  beats: {
98
103
  text: string;
99
- speaker: string;
100
- duration?: number | undefined;
101
- speechOptions?: {
102
- speed?: number | undefined;
103
- instruction?: string | undefined;
104
- } | undefined;
105
104
  image?: {
106
105
  type: "markdown";
107
106
  markdown: string | string[];
@@ -206,6 +205,11 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
206
205
  type: "voice_over";
207
206
  startAt?: number | undefined;
208
207
  } | undefined;
208
+ duration?: number | undefined;
209
+ speechOptions?: {
210
+ speed?: number | undefined;
211
+ instruction?: string | undefined;
212
+ } | undefined;
209
213
  id?: string | undefined;
210
214
  audio?: {
211
215
  type: "audio";
@@ -227,6 +231,7 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
227
231
  source: string;
228
232
  } | undefined;
229
233
  imagePrompt?: string | undefined;
234
+ speaker?: string | undefined;
230
235
  description?: string | undefined;
231
236
  imageParams?: {
232
237
  provider: string;
@@ -265,6 +270,14 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
265
270
  style: "aspectFit" | "aspectFill";
266
271
  } | undefined;
267
272
  } | undefined;
273
+ soundEffectParams?: {
274
+ provider?: string | undefined;
275
+ model?: string | undefined;
276
+ } | undefined;
277
+ lipSyncParams?: {
278
+ provider?: string | undefined;
279
+ model?: string | undefined;
280
+ } | undefined;
268
281
  htmlImageParams?: {
269
282
  model?: string | undefined;
270
283
  } | undefined;
@@ -277,16 +290,22 @@ export declare const createOrUpdateStudioData: (_mulmoScript: MulmoScript, curre
277
290
  } | undefined;
278
291
  imageNames?: string[] | undefined;
279
292
  moviePrompt?: string | undefined;
293
+ soundEffectPrompt?: string | undefined;
280
294
  htmlPrompt?: {
281
295
  prompt: string;
282
296
  data?: any;
283
297
  images?: Record<string, any> | undefined;
284
298
  systemPrompt?: string | undefined;
285
299
  } | undefined;
300
+ enableLipSync?: boolean | undefined;
286
301
  }[];
287
302
  lang?: string | undefined;
288
303
  title?: string | undefined;
289
304
  description?: string | undefined;
305
+ lipSyncParams?: {
306
+ provider?: string | undefined;
307
+ model?: string | undefined;
308
+ } | undefined;
290
309
  htmlImageParams?: {
291
310
  provider: string;
292
311
  model?: string | undefined;
@@ -1,5 +1,6 @@
1
1
  import { GraphAILogger } from "graphai";
2
- import { mulmoScriptSchema, mulmoStudioSchema, mulmoCaptionParamsSchema } from "../types/index.js";
2
+ import { mulmoStudioSchema, mulmoCaptionParamsSchema } from "../types/index.js";
3
+ import { MulmoPresentationStyleMethods, MulmoScriptMethods } from "../methods/index.js";
3
4
  const rebuildStudio = (currentStudio, mulmoScript, fileName) => {
4
5
  const isTest = process.env.NODE_ENV === "test";
5
6
  const parsed = isTest && currentStudio ? { data: mulmoStudioSchema.parse(currentStudio), success: true, error: null } : mulmoStudioSchema.safeParse(currentStudio);
@@ -36,15 +37,16 @@ const mulmoCredit = (speaker) => {
36
37
  },
37
38
  };
38
39
  };
39
- export const createOrUpdateStudioData = (_mulmoScript, currentStudio, fileName, videoCaption) => {
40
- const mulmoScript = _mulmoScript.__test_invalid__ ? _mulmoScript : mulmoScriptSchema.parse(_mulmoScript); // validate and insert default value
40
+ export const createOrUpdateStudioData = (_mulmoScript, currentStudio, fileName, videoCaption, presentationStyle) => {
41
+ const mulmoScript = _mulmoScript.__test_invalid__ ? _mulmoScript : MulmoScriptMethods.validate(_mulmoScript); // validate and insert default value
41
42
  const studio = rebuildStudio(currentStudio, mulmoScript, fileName);
42
43
  // TODO: Move this code out of this function later
43
44
  // Addition cloing credit
44
45
  if (mulmoScript.$mulmocast.credit === "closing") {
45
- mulmoScript.beats.push(mulmoCredit(mulmoScript.beats[0].speaker)); // First speaker
46
+ const defaultSpeaker = MulmoPresentationStyleMethods.getDefaultSpeaker(presentationStyle ?? studio.script);
47
+ mulmoScript.beats.push(mulmoCredit(mulmoScript.beats[0].speaker ?? defaultSpeaker)); // First speaker
46
48
  }
47
- studio.script = mulmoScriptSchema.parse(mulmoScript); // update the script
49
+ studio.script = MulmoScriptMethods.validate(mulmoScript); // update the script
48
50
  studio.beats = studio.script.beats.map((_, index) => studio.beats[index] ?? {});
49
51
  if (videoCaption) {
50
52
  studio.script.captionParams = mulmoCaptionParamsSchema.parse({
@@ -32,11 +32,18 @@ export declare const provider2ImageAgent: {
32
32
  models: string[];
33
33
  };
34
34
  };
35
+ export type ReplicateModel = `${string}/${string}`;
35
36
  export declare const provider2MovieAgent: {
36
37
  replicate: {
37
38
  agentName: string;
38
- defaultModel: `${string}/${string}`;
39
+ defaultModel: ReplicateModel;
39
40
  models: string[];
41
+ modelParams: Record<ReplicateModel, {
42
+ durations: number[];
43
+ start_image: string | undefined;
44
+ last_image?: string;
45
+ price_per_sec: number;
46
+ }>;
40
47
  };
41
48
  google: {
42
49
  agentName: string;
@@ -44,6 +51,26 @@ export declare const provider2MovieAgent: {
44
51
  models: string[];
45
52
  };
46
53
  };
54
+ export declare const provider2SoundEffectAgent: {
55
+ replicate: {
56
+ agentName: string;
57
+ defaultModel: ReplicateModel;
58
+ models: ReplicateModel[];
59
+ modelParams: Record<ReplicateModel, {
60
+ identifier?: `${string}/${string}:${string}`;
61
+ }>;
62
+ };
63
+ };
64
+ export declare const provider2LipSyncAgent: {
65
+ replicate: {
66
+ agentName: string;
67
+ defaultModel: ReplicateModel;
68
+ models: ReplicateModel[];
69
+ modelParams: Record<ReplicateModel, {
70
+ identifier?: `${string}/${string}:${string}`;
71
+ }>;
72
+ };
73
+ };
47
74
  export declare const provider2LLMAgent: {
48
75
  readonly openai: {
49
76
  readonly agentName: "openAIAgent";
@@ -72,6 +99,8 @@ export declare const defaultProviders: {
72
99
  text2movie: keyof typeof provider2MovieAgent;
73
100
  text2Html: keyof typeof provider2LLMAgent;
74
101
  llm: keyof typeof provider2LLMAgent;
102
+ soundEffect: keyof typeof provider2SoundEffectAgent;
103
+ lipSync: keyof typeof provider2LipSyncAgent;
75
104
  };
76
105
  export declare const llm: (keyof typeof provider2LLMAgent)[];
77
106
  export type LLM = keyof typeof provider2LLMAgent;
@@ -51,6 +51,66 @@ export const provider2MovieAgent = {
51
51
  "minimax/hailuo-02",
52
52
  "pixverse/pixverse-v4.5",
53
53
  ],
54
+ modelParams: {
55
+ "bytedance/seedance-1-lite": {
56
+ durations: [5, 10],
57
+ start_image: "image",
58
+ last_image: "last_frame_image",
59
+ price_per_sec: 0.036, // in USD
60
+ },
61
+ "bytedance/seedance-1-pro": {
62
+ durations: [5, 10],
63
+ start_image: "image",
64
+ last_image: "last_frame_image",
65
+ price_per_sec: 0.15,
66
+ },
67
+ "kwaivgi/kling-v1.6-pro": {
68
+ durations: [5, 10],
69
+ start_image: "start_image",
70
+ price_per_sec: 0.095,
71
+ },
72
+ "kwaivgi/kling-v2.1": {
73
+ durations: [5, 10],
74
+ start_image: "start_image",
75
+ price_per_sec: 0.05,
76
+ },
77
+ "kwaivgi/kling-v2.1-master": {
78
+ durations: [5, 10],
79
+ start_image: "start_image",
80
+ price_per_sec: 0.28,
81
+ },
82
+ "google/veo-2": {
83
+ durations: [5, 6, 7, 8],
84
+ start_image: "image",
85
+ price_per_sec: 0.5,
86
+ },
87
+ "google/veo-3": {
88
+ durations: [8],
89
+ start_image: undefined,
90
+ price_per_sec: 0.75,
91
+ },
92
+ "google/veo-3-fast": {
93
+ durations: [8],
94
+ start_image: undefined,
95
+ price_per_sec: 0.4,
96
+ },
97
+ "minimax/video-01": {
98
+ durations: [6],
99
+ start_image: "first_frame_image",
100
+ price_per_sec: 0.5,
101
+ },
102
+ "minimax/hailuo-02": {
103
+ durations: [6], // NOTE: 10 for only 720p
104
+ start_image: "first_frame_image",
105
+ price_per_sec: 0.08,
106
+ },
107
+ "pixverse/pixverse-v4.5": {
108
+ durations: [5, 8],
109
+ start_image: "image",
110
+ last_image: "last_frame_image",
111
+ price_per_sec: 0.12,
112
+ },
113
+ },
54
114
  },
55
115
  google: {
56
116
  agentName: "movieGoogleAgent",
@@ -58,6 +118,30 @@ export const provider2MovieAgent = {
58
118
  models: ["veo-2.0-generate-001"],
59
119
  },
60
120
  };
121
+ export const provider2SoundEffectAgent = {
122
+ replicate: {
123
+ agentName: "soundEffectReplicateAgent",
124
+ defaultModel: "zsxkib/mmaudio",
125
+ models: ["zsxkib/mmaudio"],
126
+ modelParams: {
127
+ "zsxkib/mmaudio": {
128
+ identifier: "zsxkib/mmaudio:62871fb59889b2d7c13777f08deb3b36bdff88f7e1d53a50ad7694548a41b484",
129
+ },
130
+ },
131
+ },
132
+ };
133
+ export const provider2LipSyncAgent = {
134
+ replicate: {
135
+ agentName: "lipSyncReplicateAgent",
136
+ defaultModel: "bytedance/latentsync",
137
+ models: ["bytedance/latentsync"],
138
+ modelParams: {
139
+ "bytedance/latentsync": {
140
+ identifier: "bytedance/latentsync:637ce1919f807ca20da3a448ddc2743535d2853649574cd52a933120e9b9e293",
141
+ },
142
+ },
143
+ },
144
+ };
61
145
  // : Record<LLM, { agent: string; defaultModel: string; max_tokens: number }>
62
146
  export const provider2LLMAgent = {
63
147
  openai: {
@@ -87,6 +171,8 @@ export const defaultProviders = {
87
171
  text2movie: "replicate",
88
172
  text2Html: "openai",
89
173
  llm: "openai",
174
+ soundEffect: "replicate",
175
+ lipSync: "replicate",
90
176
  };
91
177
  export const llm = Object.keys(provider2LLMAgent);
92
178
  export const htmlLLMProvider = ["openai", "anthropic"];
@@ -73,6 +73,12 @@ export const settings2GraphAIConfig = (settings, env) => {
73
73
  ttsElevenlabsAgent: {
74
74
  apiKey: getKey("TTS", "ELEVENLABS_API_KEY"),
75
75
  },
76
+ soundEffectReplicateAgent: {
77
+ apiKey: getKey("SOUND_EFFECT", "REPLICATE_API_TOKEN"),
78
+ },
79
+ lipSyncReplicateAgent: {
80
+ apiKey: getKey("LIPSYNC", "REPLICATE_API_TOKEN"),
81
+ },
76
82
  // TODO
77
83
  // browserlessAgent
78
84
  // ttsGoogleAgent
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mulmocast",
3
- "version": "0.1.7",
3
+ "version": "1.1.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "lib/index.node.js",
@@ -12,6 +12,9 @@
12
12
  "./browser": {
13
13
  "types": "./lib/index.browser.d.ts",
14
14
  "default": "./lib/index.browser.js"
15
+ },
16
+ "./data": {
17
+ "default": "./lib/data/index.js"
15
18
  }
16
19
  },
17
20
  "bin": {
@@ -48,6 +51,7 @@
48
51
  "latest": "yarn upgrade-interactive --latest",
49
52
  "format": "prettier --write '{src,scripts,assets/templates,assets/styles,draft,ideason,scripts_mag2,proto,test,graphai,output,docs/scripts}/**/*.{ts,json,yaml}'",
50
53
  "deep_research": "npx tsx ./src/tools/deep_research.ts",
54
+ "template": "npx tsx batch/template2tsobject.ts",
51
55
  "fake_data": "npx tsx test/fake/sample.ts",
52
56
  "mcp_server": "npx tsx ./src/mcp/server.ts"
53
57
  },
@@ -73,14 +77,14 @@
73
77
  "@tavily/core": "^0.5.9",
74
78
  "canvas": "^3.1.2",
75
79
  "clipboardy": "^4.0.0",
76
- "dotenv": "^17.2.0",
80
+ "dotenv": "^17.2.1",
77
81
  "fluent-ffmpeg": "^2.1.3",
78
82
  "google-auth-library": "^10.1.0",
79
83
  "graphai": "^2.0.13",
80
84
  "inquirer": "^12.7.0",
81
85
  "marked": "^16.1.1",
82
86
  "ora": "^8.2.0",
83
- "puppeteer": "^24.14.0",
87
+ "puppeteer": "^24.15.0",
84
88
  "replicate": "^1.0.1",
85
89
  "yaml": "^2.8.0",
86
90
  "yargs": "^18.0.0",
@@ -93,7 +97,7 @@
93
97
  "@receptron/test_utils": "^2.0.0",
94
98
  "@types/fluent-ffmpeg": "^2.1.26",
95
99
  "@types/yargs": "^17.0.33",
96
- "eslint": "^9.31.0",
100
+ "eslint": "^9.32.0",
97
101
  "eslint-config-prettier": "^10.1.8",
98
102
  "eslint-plugin-prettier": "^5.5.3",
99
103
  "eslint-plugin-sonarjs": "^3.0.4",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "Sample Title",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "桃太郎",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "Sample Title",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "references": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "[TITLE: Brief, engaging title for the topic]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "[TITLE: Brief, engaging title for the topic]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0"
3
+ "version": "1.1"
4
4
  },
5
5
  "title": "[TITLE OF THE PRESENTAITON OR STORY]",
6
6
  "imageParams": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "[TITLE: Brief, engaging title for the topic]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "[TITLE: Brief, engaging title for the topic]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "htmlImageParams": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "韓国の戒厳令とその日本への影響",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0"
3
+ "version": "1.1"
4
4
  },
5
5
  "title": "[TITLE: Brief, engaging title for the topic]",
6
6
  "lang": "en",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0",
3
+ "version": "1.1",
4
4
  "credit": "closing"
5
5
  },
6
6
  "title": "[TITLE: Brief, engaging title for the topic]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$mulmocast": {
3
- "version": "1.0"
3
+ "version": "1.1"
4
4
  },
5
5
  "title": "Voice Over Test",
6
6
  "captionParams": {