@mulmocast/slide 0.5.0 → 0.6.0

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 (94) hide show
  1. package/.claude/skills/extend/SKILL.md +6 -6
  2. package/.claude/skills/extend/references/extended-script-schema.md +5 -5
  3. package/.claude/skills/md-to-mulmo/SKILL.md +8 -8
  4. package/.claude/skills/narrate/SKILL.md +8 -8
  5. package/.claude/skills/narrate/references/extended-script-schema.md +5 -5
  6. package/README.md +187 -27
  7. package/lib/actions/bundle.d.ts.map +1 -1
  8. package/lib/actions/bundle.js +10 -0
  9. package/lib/actions/bundle.js.map +1 -1
  10. package/lib/actions/extend-merge.d.ts +2 -0
  11. package/lib/actions/extend-merge.d.ts.map +1 -0
  12. package/lib/actions/extend-merge.js +22 -0
  13. package/lib/actions/extend-merge.js.map +1 -0
  14. package/lib/actions/extend-scaffold.d.ts +2 -2
  15. package/lib/actions/extend-scaffold.d.ts.map +1 -1
  16. package/lib/actions/extend-scaffold.js +3 -3
  17. package/lib/actions/extend-scaffold.js.map +1 -1
  18. package/lib/actions/extend-validate.js +3 -3
  19. package/lib/actions/extend-validate.js.map +1 -1
  20. package/lib/actions/md-to-extended.d.ts +7 -7
  21. package/lib/actions/md-to-extended.d.ts.map +1 -1
  22. package/lib/actions/md-to-extended.js +20 -20
  23. package/lib/actions/md-to-extended.js.map +1 -1
  24. package/lib/actions/narrate.d.ts +1 -1
  25. package/lib/actions/narrate.d.ts.map +1 -1
  26. package/lib/actions/narrate.js +12 -14
  27. package/lib/actions/narrate.js.map +1 -1
  28. package/lib/actions/pipeline.d.ts +13 -0
  29. package/lib/actions/pipeline.d.ts.map +1 -0
  30. package/lib/actions/pipeline.js +78 -0
  31. package/lib/actions/pipeline.js.map +1 -0
  32. package/lib/actions/preview.js +1 -1
  33. package/lib/actions/preview.js.map +1 -1
  34. package/lib/cli/action-commands.d.ts +3 -0
  35. package/lib/cli/action-commands.d.ts.map +1 -0
  36. package/lib/cli/action-commands.js +144 -0
  37. package/lib/cli/action-commands.js.map +1 -0
  38. package/lib/cli/convert-commands.d.ts +3 -0
  39. package/lib/cli/convert-commands.d.ts.map +1 -0
  40. package/lib/cli/convert-commands.js +190 -0
  41. package/lib/cli/convert-commands.js.map +1 -0
  42. package/lib/cli/extend-commands.d.ts +3 -0
  43. package/lib/cli/extend-commands.d.ts.map +1 -0
  44. package/lib/cli/extend-commands.js +41 -0
  45. package/lib/cli/extend-commands.js.map +1 -0
  46. package/lib/cli/index.d.ts +3 -0
  47. package/lib/cli/index.d.ts.map +1 -0
  48. package/lib/cli/index.js +31 -0
  49. package/lib/cli/index.js.map +1 -0
  50. package/lib/cli/misc-commands.d.ts +3 -0
  51. package/lib/cli/misc-commands.d.ts.map +1 -0
  52. package/lib/cli/misc-commands.js +86 -0
  53. package/lib/cli/misc-commands.js.map +1 -0
  54. package/lib/cli/options.d.ts +194 -0
  55. package/lib/cli/options.d.ts.map +1 -0
  56. package/lib/cli/options.js +125 -0
  57. package/lib/cli/options.js.map +1 -0
  58. package/lib/cli.js +86 -29
  59. package/lib/cli.js.map +1 -1
  60. package/lib/convert/marp.js +1 -1
  61. package/lib/convert/marp.js.map +1 -1
  62. package/lib/convert/movie.d.ts.map +1 -1
  63. package/lib/convert/movie.js +2 -2
  64. package/lib/convert/movie.js.map +1 -1
  65. package/lib/utils/extended-bundle-merge.d.ts +6 -0
  66. package/lib/utils/extended-bundle-merge.d.ts.map +1 -0
  67. package/lib/utils/extended-bundle-merge.js +71 -0
  68. package/lib/utils/extended-bundle-merge.js.map +1 -0
  69. package/lib/vue/assets/index-BZu3TPGe.js +115 -0
  70. package/lib/vue/assets/index-DyeW2SiG.css +1 -0
  71. package/lib/vue/index.html +3 -3
  72. package/lib/vue/openai-chat.d.ts +12 -0
  73. package/lib/vue/openai-chat.d.ts.map +1 -0
  74. package/lib/vue/openai-chat.js +85 -0
  75. package/lib/vue/openai-chat.js.map +1 -0
  76. package/package.json +31 -27
  77. package/lib/convert/pdfvision.d.ts +0 -14
  78. package/lib/convert/pdfvision.d.ts.map +0 -1
  79. package/lib/convert/pdfvision.js +0 -247
  80. package/lib/convert/pdfvision.js.map +0 -1
  81. package/lib/utils/document-analysis.d.ts +0 -43
  82. package/lib/utils/document-analysis.d.ts.map +0 -1
  83. package/lib/utils/document-analysis.js +0 -118
  84. package/lib/utils/document-analysis.js.map +0 -1
  85. package/lib/utils/narration-generator.d.ts +0 -14
  86. package/lib/utils/narration-generator.d.ts.map +0 -1
  87. package/lib/utils/narration-generator.js +0 -68
  88. package/lib/utils/narration-generator.js.map +0 -1
  89. package/lib/utils/vision-provider.d.ts +0 -12
  90. package/lib/utils/vision-provider.d.ts.map +0 -1
  91. package/lib/utils/vision-provider.js +0 -105
  92. package/lib/utils/vision-provider.js.map +0 -1
  93. package/lib/vue/assets/index-D6am8L57.css +0 -1
  94. package/lib/vue/assets/index-xq-ZNfmX.js +0 -2
@@ -1,6 +1,6 @@
1
- # /extend - MulmoScript to ExtendedScript Conversion
1
+ # /extend - MulmoScript to ExtendedMulmoScript Conversion
2
2
 
3
- Convert a MulmoScript JSON into an ExtendedScript by adding `scriptMeta` and `beats[].meta` metadata fields. The metadata is used by mulmocast-preprocessor's AI features (summarize, query).
3
+ Convert a MulmoScript JSON into an ExtendedMulmoScript by adding `scriptMeta` and `beats[].meta` metadata fields. The metadata is used by mulmocast-preprocessor's AI features (summarize, query).
4
4
 
5
5
  ## Invocation
6
6
 
@@ -14,9 +14,9 @@ This project uses multiple CLI tools. Do NOT confuse them:
14
14
 
15
15
  | Command | Package | Purpose | Input |
16
16
  |---------|---------|---------|-------|
17
- | `mulmo-slide` (or `yarn cli`) | `@mulmocast/slide` | Convert source files to MulmoScript, scaffold ExtendedScript | Presentation files (.pdf, .pptx, .md, .key) |
17
+ | `mulmo-slide` (or `yarn cli`) | `@mulmocast/slide` | Convert source files to MulmoScript, scaffold ExtendedMulmoScript | Presentation files (.pdf, .pptx, .md, .key) |
18
18
  | `mulmo` | `mulmocast` | Generate movie/PDF/audio from MulmoScript | `{basename}.json` |
19
- | `mulmocast-preprocessor` | `mulmocast-preprocessor` | Convert ExtendedScript → MulmoScript, query, summarize | `extended_script.json` |
19
+ | `mulmocast-preprocessor` | `mulmocast-preprocessor` | Convert ExtendedMulmoScript → MulmoScript, query, summarize | `extended_script.json` |
20
20
 
21
21
  **IMPORTANT**: `mulmo-slide movie` and `mulmo movie` are DIFFERENT commands. Use `npx mulmo movie` (not `mulmo-slide`) when generating video from a MulmoScript JSON.
22
22
 
@@ -101,7 +101,7 @@ Based on the analysis, generate:
101
101
  - If the beat's `text` field is empty and `extracted_texts.json` is available, generate a concise narration text based on the extracted text. The narration should be a natural spoken summary of the slide content, NOT a verbatim copy of the extracted text.
102
102
  - If the beat already has `text`, preserve it as-is.
103
103
 
104
- ### Step 4: Build ExtendedScript
104
+ ### Step 4: Build ExtendedMulmoScript
105
105
 
106
106
  1. Start with the original MulmoScript (preserve ALL existing fields exactly)
107
107
  2. Add `scriptMeta` at the top level
@@ -117,7 +117,7 @@ Based on the analysis, generate:
117
117
  2. Write the JSON with 2-space indentation
118
118
  3. Run `{cli} extend validate <output_path>` to validate against the schema
119
119
  4. If validation fails, fix the errors and re-write the file, then validate again
120
- 5. Generate MulmoScript from ExtendedScript using the preprocessor:
120
+ 5. Generate MulmoScript from ExtendedMulmoScript using the preprocessor:
121
121
  ```bash
122
122
  npx mulmocast-preprocessor scripts/{basename}/extended_script.json -o scripts/{basename}/{basename}.json
123
123
  ```
@@ -1,6 +1,6 @@
1
- # ExtendedScript Schema Reference
1
+ # ExtendedMulmoScript Schema Reference
2
2
 
3
- This document defines the ExtendedScript format used by `mulmocast-preprocessor`.
3
+ This document defines the ExtendedMulmoScript format used by `mulmocast-preprocessor`.
4
4
  Canonical source: `@mulmocast/extended-types` npm package (`mulmocast-plus/packages/mulmocast-extended-types/src/index.ts`)
5
5
 
6
6
  ## Type Definitions
@@ -33,7 +33,7 @@ Profile-specific content overrides (not generated by `/extend`).
33
33
  }
34
34
  ```
35
35
 
36
- ### ExtendedBeat
36
+ ### ExtendedMulmoBeat
37
37
 
38
38
  A beat with optional `variants` and `meta` fields (extends MulmoBeat).
39
39
 
@@ -99,14 +99,14 @@ Profile display information (not generated by `/extend`).
99
99
  }
100
100
  ```
101
101
 
102
- ### ExtendedScript
102
+ ### ExtendedMulmoScript
103
103
 
104
104
  The top-level type (extends MulmoScript).
105
105
 
106
106
  ```typescript
107
107
  {
108
108
  // ... all MulmoScript fields preserved ...
109
- beats: ExtendedBeat[]; // Beats with meta
109
+ beats: ExtendedMulmoBeat[]; // Beats with meta
110
110
  outputProfiles?: Record<string, OutputProfile>; // Profile definitions
111
111
  scriptMeta?: ScriptMeta; // Script-level metadata
112
112
  }
@@ -1,6 +1,6 @@
1
- # /md-to-mulmo - Markdown to ExtendedScript Conversion
1
+ # /md-to-mulmo - Markdown to ExtendedMulmoScript Conversion
2
2
 
3
- Convert a structured markdown document into an ExtendedScript with intelligent beat allocation, narration, metadata, and variant support for detailed/short output profiles.
3
+ Convert a structured markdown document into an ExtendedMulmoScript with intelligent beat allocation, narration, metadata, and variant support for detailed/short output profiles.
4
4
 
5
5
  ## Invocation
6
6
 
@@ -12,9 +12,9 @@ Convert a structured markdown document into an ExtendedScript with intelligent b
12
12
 
13
13
  | Command | Package | Purpose | Input |
14
14
  |---------|---------|---------|-------|
15
- | `mulmo-slide` (or `yarn cli`) | `@mulmocast/slide` | Convert source files, parse markdown, assemble ExtendedScript | `.md`, `.pdf`, `.pptx`, etc. |
15
+ | `mulmo-slide` (or `yarn cli`) | `@mulmocast/slide` | Convert source files, parse markdown, assemble ExtendedMulmoScript | `.md`, `.pdf`, `.pptx`, etc. |
16
16
  | `mulmo` | `mulmocast` | Generate movie/PDF/audio from MulmoScript | `{basename}.json` |
17
- | `mulmocast-preprocessor` | `mulmocast-preprocessor` | Convert ExtendedScript → MulmoScript, query, summarize | `extended_script.json` |
17
+ | `mulmocast-preprocessor` | `mulmocast-preprocessor` | Convert ExtendedMulmoScript → MulmoScript, query, summarize | `extended_script.json` |
18
18
 
19
19
  ### CLI prefix for mulmo-slide
20
20
 
@@ -37,7 +37,7 @@ Run the parse-md command to extract document structure and generate JSON Schemas
37
37
 
38
38
  This produces in `scripts/{basename}/`:
39
39
  - `parsed_structure.json` — structured markdown sections with typed elements
40
- - `extended-script.schema.json` — ExtendedScript JSON Schema (generated from Zod every run)
40
+ - `extended-script.schema.json` — ExtendedMulmoScript JSON Schema (generated from Zod every run)
41
41
  - `presentation-plan.schema.json` — intermediate format JSON Schema
42
42
 
43
43
  ### Step 2: Read Inputs
@@ -131,7 +131,7 @@ Write this to `scripts/{basename}/presentation_plan.json`.
131
131
 
132
132
  ### Step 4: Assemble and Validate
133
133
 
134
- Run the assemble command to convert the plan to ExtendedScript:
134
+ Run the assemble command to convert the plan to ExtendedMulmoScript:
135
135
 
136
136
  ```bash
137
137
  {cli} assemble-extended scripts/{basename}/presentation_plan.json
@@ -140,14 +140,14 @@ Run the assemble command to convert the plan to ExtendedScript:
140
140
  This:
141
141
  - Validates the plan against the JSON Schema (z.fromJSONSchema)
142
142
  - Converts `isCore`/`shortNarration` → `variants`/`outputProfiles`
143
- - Validates the result against ExtendedScript schema
143
+ - Validates the result against ExtendedMulmoScript schema
144
144
  - Outputs `scripts/{basename}/extended_script.json`
145
145
 
146
146
  If validation fails, fix the plan and re-run.
147
147
 
148
148
  ### Step 5: Post-processing
149
149
 
150
- Generate MulmoScript from ExtendedScript:
150
+ Generate MulmoScript from ExtendedMulmoScript:
151
151
 
152
152
  ```bash
153
153
  npx mulmocast-preprocessor scripts/{basename}/extended_script.json -o scripts/{basename}/{basename}.json
@@ -1,6 +1,6 @@
1
- # /narrate - Source File to Narrated ExtendedScript
1
+ # /narrate - Source File to Narrated ExtendedMulmoScript
2
2
 
3
- Convert any supported source file (PDF, PPTX, Markdown, Keynote) into a validated ExtendedScript with AI-generated narration and metadata. This is the main entry point for the full pipeline.
3
+ Convert any supported source file (PDF, PPTX, Markdown, Keynote) into a validated ExtendedMulmoScript with AI-generated narration and metadata. This is the main entry point for the full pipeline.
4
4
 
5
5
  ## Invocation
6
6
 
@@ -16,9 +16,9 @@ This project uses multiple CLI tools. Do NOT confuse them:
16
16
 
17
17
  | Command | Package | Purpose | Input |
18
18
  |---------|---------|---------|-------|
19
- | `mulmo-slide` (or `yarn cli`) | `@mulmocast/slide` | Convert source files to MulmoScript, scaffold ExtendedScript | Presentation files (.pdf, .pptx, .md, .key) |
19
+ | `mulmo-slide` (or `yarn cli`) | `@mulmocast/slide` | Convert source files to MulmoScript, scaffold ExtendedMulmoScript | Presentation files (.pdf, .pptx, .md, .key) |
20
20
  | `mulmo` | `mulmocast` | Generate movie/PDF/audio from MulmoScript | `{basename}.json` |
21
- | `mulmocast-preprocessor` | `mulmocast-preprocessor` | Convert ExtendedScript → MulmoScript, query, summarize | `extended_script.json` |
21
+ | `mulmocast-preprocessor` | `mulmocast-preprocessor` | Convert ExtendedMulmoScript → MulmoScript, query, summarize | `extended_script.json` |
22
22
 
23
23
  **IMPORTANT**: `mulmo-slide movie` and `mulmo movie` are DIFFERENT commands. Use `npx mulmo movie` (not `mulmo-slide`) when generating video from a MulmoScript JSON.
24
24
 
@@ -35,9 +35,9 @@ Use this prefix (referred to as `{cli}` below) for `mulmo-slide` CLI calls in th
35
35
 
36
36
  ## Instructions
37
37
 
38
- ### Step 1: Scaffold ExtendedScript
38
+ ### Step 1: Scaffold ExtendedMulmoScript
39
39
 
40
- Run the narrate CLI with `--scaffold-only` to convert the source and create the ExtendedScript skeleton in one step:
40
+ Run the narrate CLI with `--scaffold-only` to convert the source and create the ExtendedMulmoScript skeleton in one step:
41
41
 
42
42
  ```bash
43
43
  {cli} narrate <file> --scaffold-only
@@ -106,7 +106,7 @@ Based on the analysis, generate:
106
106
  - `context`: Background info for AI query/summarize. Be substantive — don't just restate the slide
107
107
  - `expectedQuestions`: 1-3 natural audience questions
108
108
 
109
- ### Step 5: Build and Write ExtendedScript
109
+ ### Step 5: Build and Write ExtendedMulmoScript
110
110
 
111
111
  1. Start with the original MulmoScript (preserve ALL existing fields)
112
112
  2. Add `scriptMeta` at the top level
@@ -135,7 +135,7 @@ Display a summary:
135
135
  Then show the user the next steps they can take:
136
136
 
137
137
  ```
138
- ExtendedScript is ready! Here's what you can do next:
138
+ ExtendedMulmoScript is ready! Here's what you can do next:
139
139
 
140
140
  ## Query the content interactively
141
141
  npx mulmocast-preprocessor query scripts/{basename}/extended_script.json -i
@@ -1,6 +1,6 @@
1
- # ExtendedScript Schema Reference
1
+ # ExtendedMulmoScript Schema Reference
2
2
 
3
- This document defines the ExtendedScript format used by `mulmocast-preprocessor`.
3
+ This document defines the ExtendedMulmoScript format used by `mulmocast-preprocessor`.
4
4
  Canonical source: `@mulmocast/extended-types` npm package (`mulmocast-plus/packages/mulmocast-extended-types/src/index.ts`)
5
5
 
6
6
  ## Type Definitions
@@ -33,7 +33,7 @@ Profile-specific content overrides (not generated by `/extend`).
33
33
  }
34
34
  ```
35
35
 
36
- ### ExtendedBeat
36
+ ### ExtendedMulmoBeat
37
37
 
38
38
  A beat with optional `variants` and `meta` fields (extends MulmoBeat).
39
39
 
@@ -99,14 +99,14 @@ Profile display information (not generated by `/extend`).
99
99
  }
100
100
  ```
101
101
 
102
- ### ExtendedScript
102
+ ### ExtendedMulmoScript
103
103
 
104
104
  The top-level type (extends MulmoScript).
105
105
 
106
106
  ```typescript
107
107
  {
108
108
  // ... all MulmoScript fields preserved ...
109
- beats: ExtendedBeat[]; // Beats with meta
109
+ beats: ExtendedMulmoBeat[]; // Beats with meta
110
110
  outputProfiles?: Record<string, OutputProfile>; // Profile definitions
111
111
  scriptMeta?: ScriptMeta; // Script-level metadata
112
112
  }
package/README.md CHANGED
@@ -1,7 +1,22 @@
1
1
  [![npm version](https://badge.fury.io/js/%40mulmocast%2Fslide.svg)](https://badge.fury.io/js/%40mulmocast%2Fslide)
2
2
  # MulmoCast-Slides
3
3
 
4
- A collection of tools to convert presentation files into MulmoScript format, enabling automated narration and processing of slide decks.
4
+ Convert presentations (PPTX, PDF, Markdown, Keynote) and videos into **narrated movies** or **interactive web viewer bundles**.
5
+
6
+ | Input | Output | Command |
7
+ |-------|--------|---------|
8
+ | PPTX / PDF / Markdown / Keynote | Narrated video (.mp4) | `mulmo-slide movie <file> -g -l ja` |
9
+ | PPTX / PDF / Markdown / Keynote | Web viewer bundle | `mulmo-slide bundle <file> -g -l ja` |
10
+ | Video (.mp4, .webm, etc.) | Transcribed & translated bundle | `mulmo-slide transcribe <file>` |
11
+
12
+ ```bash
13
+ # Generate a narrated video from slides
14
+ mulmo-slide movie presentation.pptx -g -l ja
15
+
16
+ # Generate a web viewer bundle and preview in browser
17
+ mulmo-slide bundle presentation.pptx -g -l ja
18
+ mulmo-slide preview
19
+ ```
5
20
 
6
21
  ## Overview
7
22
 
@@ -135,17 +150,18 @@ Commands:
135
150
  mulmo-slide pptx <file> Convert PowerPoint to MulmoScript
136
151
  mulmo-slide pdf <file> Convert PDF to MulmoScript
137
152
  mulmo-slide keynote <file> Convert Keynote to MulmoScript (macOS only)
153
+ mulmo-slide transcribe <file> Transcribe video to MulmoScript with translations and TTS
138
154
  mulmo-slide movie <file> Generate movie from presentation
139
155
  mulmo-slide bundle <file> Generate MulmoViewer bundle from presentation
140
- mulmo-slide narrate <file> Generate narrated ExtendedScript (full pipeline)
156
+ mulmo-slide narrate <file> Generate narrated ExtendedMulmoScript (full pipeline)
141
157
  mulmo-slide extend init Install Claude Code skills (/narrate, /extend)
142
- mulmo-slide extend validate Validate ExtendedScript JSON against schema
143
- mulmo-slide extend scaffold Create ExtendedScript skeleton from MulmoScript
158
+ mulmo-slide extend validate Validate ExtendedMulmoScript JSON against schema
159
+ mulmo-slide extend scaffold Create ExtendedMulmoScript skeleton from MulmoScript
144
160
  mulmo-slide parse-md <file> Parse markdown structure for LLM presentation planning
145
- mulmo-slide assemble-extended <file> Assemble ExtendedScript from presentation plan
161
+ mulmo-slide assemble-extended <file> Assemble ExtendedMulmoScript from presentation plan
146
162
  ```
147
163
 
148
- The `convert` command auto-detects file format by extension (.pptx, .md, .key, .pdf).
164
+ The `convert` command auto-detects file format by extension (.pptx, .md, .key, .pdf, .mp4, .mov, .mkv, .webm, .avi).
149
165
 
150
166
  For development, you can also use yarn commands:
151
167
 
@@ -513,6 +529,27 @@ This command:
513
529
  **Output:**
514
530
  - `output/<basename>/` - Bundle files for MulmoViewer
515
531
 
532
+ ## Previewing Bundles (Web Viewer)
533
+
534
+ Preview generated bundles in the browser using the built-in Vue 3 web viewer.
535
+
536
+ ```bash
537
+ # Production preview (npm global install)
538
+ mulmo-slide preview
539
+ mulmo-slide preview 8080 # custom port
540
+
541
+ # Development mode (hot reload)
542
+ yarn dev
543
+ ```
544
+
545
+ Opens http://localhost:3000 and automatically discovers bundles from the `output/` directory.
546
+
547
+ **Features:**
548
+ - Slide display with narration playback
549
+ - Audio / text language switching (multilingual support)
550
+ - Recording mode: record via microphone → Whisper transcription → edit text → save
551
+ - AI Q&A chat: ask questions about the presentation content (GPT-4o-mini, requires `VITE_OPENAI_API_KEY` in `.env`)
552
+
516
553
  ## Language Setting
517
554
 
518
555
  All converters support setting the language for the generated MulmoScript.
@@ -564,7 +601,7 @@ mulmo-slide bundle presentation.pptx -f -g
564
601
 
565
602
  ## Narrate CLI
566
603
 
567
- Generate a narrated ExtendedScript from any supported source file in one command. This automates the full pipeline: conversion to MulmoScript, LLM-based narration and metadata generation, and validation.
604
+ Generate a narrated ExtendedMulmoScript from any supported source file in one command. This automates the full pipeline: conversion to MulmoScript, LLM-based narration and metadata generation, and validation.
568
605
 
569
606
  **Usage:**
570
607
 
@@ -584,7 +621,7 @@ yarn narrate samples/sample.pdf --scaffold-only
584
621
 
585
622
  **Options:**
586
623
  - `-l, --lang` - Language for narration (en, ja, fr, de)
587
- - `--scaffold-only` - Only create ExtendedScript skeleton (no LLM). Useful as preparation for Claude Code `/narrate` analysis
624
+ - `--scaffold-only` - Only create ExtendedMulmoScript skeleton (no LLM). Useful as preparation for Claude Code `/narrate` analysis
588
625
  - `-f, --force` - Force regenerate MulmoScript even if it exists
589
626
  - `-s, --separator` - Slide separator mode (for Markdown files)
590
627
  - `--mermaid` - Convert mermaid code blocks (for Markdown files)
@@ -593,7 +630,7 @@ yarn narrate samples/sample.pdf --scaffold-only
593
630
 
594
631
  ### Extend Scaffold
595
632
 
596
- Create an ExtendedScript skeleton from an existing MulmoScript without any LLM calls. This adds beat IDs, empty metadata fields, and imports extracted texts as notes.
633
+ Create an ExtendedMulmoScript skeleton from an existing MulmoScript without any LLM calls. This adds beat IDs, empty metadata fields, and imports extracted texts as notes.
597
634
 
598
635
  ```bash
599
636
  mulmo-slide extend scaffold scripts/<basename>/<basename>.json
@@ -602,15 +639,15 @@ mulmo-slide extend scaffold scripts/<basename>/<basename>.json
602
639
  yarn cli extend scaffold scripts/<basename>/<basename>.json
603
640
  ```
604
641
 
605
- ## Markdown to ExtendedScript (LLM-assisted)
642
+ ## Markdown to ExtendedMulmoScript (LLM-assisted)
606
643
 
607
- Convert a structured markdown document into an ExtendedScript with intelligent beat allocation, narration, and metadata. This is a multi-step process using the `/md-to-mulmo` Claude Code skill.
644
+ Convert a structured markdown document into an ExtendedMulmoScript with intelligent beat allocation, narration, and metadata. This is a multi-step process using the `/md-to-mulmo` Claude Code skill.
608
645
 
609
646
  ### Pipeline Overview
610
647
 
611
648
  1. **Parse** (`parse-md`): Extract document structure and generate JSON Schemas
612
649
  2. **Plan** (LLM via `/md-to-mulmo` skill): Create presentation plan with beat allocation
613
- 3. **Assemble** (`assemble-extended`): Convert plan to ExtendedScript with variants
650
+ 3. **Assemble** (`assemble-extended`): Convert plan to ExtendedMulmoScript with variants
614
651
 
615
652
  ### Usage
616
653
 
@@ -620,20 +657,20 @@ mulmo-slide parse-md path/to/document.md
620
657
 
621
658
  # Step 2: Use /md-to-mulmo skill in Claude Code (creates presentation_plan.json)
622
659
 
623
- # Step 3: Assemble ExtendedScript from plan
660
+ # Step 3: Assemble ExtendedMulmoScript from plan
624
661
  mulmo-slide assemble-extended scripts/{basename}/presentation_plan.json
625
662
 
626
- # Step 4: Generate MulmoScript from ExtendedScript
663
+ # Step 4: Generate MulmoScript from ExtendedMulmoScript
627
664
  npx mulmocast-preprocessor scripts/{basename}/extended_script.json -o scripts/{basename}/{basename}.json
628
665
  ```
629
666
 
630
667
  **Output of `parse-md`:**
631
668
  - `scripts/{basename}/parsed_structure.json` — structured markdown sections
632
- - `scripts/{basename}/extended-script.schema.json` — ExtendedScript JSON Schema
669
+ - `scripts/{basename}/extended-script.schema.json` — ExtendedMulmoScript JSON Schema
633
670
  - `scripts/{basename}/presentation-plan.schema.json` — intermediate plan schema
634
671
 
635
672
  **Output of `assemble-extended`:**
636
- - `scripts/{basename}/extended_script.json` — validated ExtendedScript with output profiles
673
+ - `scripts/{basename}/extended_script.json` — validated ExtendedMulmoScript with output profiles
637
674
 
638
675
  ### Setup
639
676
 
@@ -649,7 +686,7 @@ Then use `/md-to-mulmo path/to/document.md` in Claude Code.
649
686
 
650
687
  > **Tip:** If you don't need interactive analysis and want a fully automated pipeline, use the [Narrate CLI](#narrate-cli) instead (`mulmo-slide narrate <file>`). It runs the full pipeline with OpenAI GPT-4o without requiring Claude Code.
651
688
 
652
- The `/narrate` skill converts any supported source file into a narrated ExtendedScript in one step. It handles the full pipeline: conversion, narration generation, metadata, and validation.
689
+ The `/narrate` skill converts any supported source file into a narrated ExtendedMulmoScript in one step. It handles the full pipeline: conversion, narration generation, metadata, and validation.
653
690
 
654
691
  ### Setup
655
692
 
@@ -702,9 +739,9 @@ npx mulmocast-preprocessor scripts/{basename}/extended_script.json -o scripts/{b
702
739
  npx mulmo movie scripts/{basename}/{basename}.json
703
740
  ```
704
741
 
705
- ### Validating ExtendedScript
742
+ ### Validating ExtendedMulmoScript
706
743
 
707
- Validate an ExtendedScript JSON file against the schema:
744
+ Validate an ExtendedMulmoScript JSON file against the schema:
708
745
 
709
746
  ```bash
710
747
  mulmo-slide extend validate scripts/simple_text/extended_script.json
@@ -730,16 +767,139 @@ If you already have a MulmoScript and just want to add metadata:
730
767
 
731
768
  ## Output Structure
732
769
 
733
- All tools generate MulmoScript output in `scripts/<basename>/` with a unified structure:
770
+ This tool generates files in two directories: `scripts/` for intermediate data (MulmoScript, metadata) and `output/` for final deliverables (movies, bundles). The `<basename>` is derived from the input filename without extension (e.g., `presentation.pptx` → `presentation`).
771
+
772
+ ### `scripts/<basename>/` — Intermediate Files
773
+
774
+ Generated by conversion commands (`convert`, `marp`, `pptx`, `pdf`, `keynote`, `markdown`, `transcribe`) and narration/metadata commands (`narrate`, `extend`, `parse-md`, `assemble-extended`).
775
+
776
+ #### Conversion Output
777
+
778
+ | File | Generated by | Description |
779
+ |------|-------------|-------------|
780
+ | `<basename>.json` | All converters | **MulmoScript** — the core JSON format pairing slides with narration text |
781
+ | `<basename>-markdown.json` | `marp` only | MulmoScript using Markdown content instead of PNG images |
782
+ | `images/` | `marp`, `pptx`, `pdf`, `keynote` | Slide images as PNG files |
783
+ | `images/<basename>-0.png`, `-1.png`, ... | `pptx`, `pdf`, `keynote` | One PNG per slide/page (zero-indexed) |
784
+ | `images/images.001.png`, `.002.png`, ... | `marp` | One PNG per slide (one-indexed, Marp naming convention) |
785
+ | `<basename>.pdf` | `pptx` | Intermediate PDF created by LibreOffice during PPTX→PNG conversion |
786
+ | `extracted_texts.json` | `pdf` | Array of raw text extracted from each PDF page (used by `/extend` and `narrate` for metadata) |
787
+
788
+ #### Video Transcription Output (`transcribe` / `convert` with video files)
789
+
790
+ The video transcription pipeline splits a video by silence detection, transcribes each segment with OpenAI Whisper, and optionally generates a multi-language bundle.
791
+
792
+ | File | Description |
793
+ |------|-------------|
794
+ | `<basename>.json` | MulmoScript with `type: "movie"` beats referencing video segments |
795
+ | `1.mp4`, `2.mp4`, ... | Split video segments (one per detected segment) |
796
+ | `1.mp3`, `2.mp3`, ... | Extracted audio from each video segment (used for Whisper transcription) |
797
+ | `1.jpg`, `2.jpg`, ... | Thumbnail images from each video segment (first frame) |
798
+
799
+ When bundle generation is enabled (default), additional files are created in `output/<basename>/<basename>/`:
800
+
801
+ | File | Description |
802
+ |------|-------------|
803
+ | `mulmo_view.json` | Viewer data with multi-language text and audio references |
804
+ | `1.mp4`, `2.mp4`, ... | Video segments (copied from scripts) |
805
+ | `1.mp3`, `2.mp3`, ... | Source language audio (copied from scripts) |
806
+ | `1.jpg`, `2.jpg`, ... | Thumbnails (copied from scripts) |
807
+ | `<N>_<lang>.mp3` | TTS audio for translated text (e.g., `1_ja.mp3`, `2_ja.mp3`) |
808
+
809
+ #### Narration & Metadata Output
810
+
811
+ | File | Generated by | Description |
812
+ |------|-------------|-------------|
813
+ | `extended_script.json` | `narrate`, `extend scaffold`, `assemble-extended` | **ExtendedMulmoScript** — MulmoScript enriched with `scriptMeta`, `beats[].meta`, output profiles, and variants |
814
+ | `analysis.json` | `narrate` (LLM mode) | LLM analysis of slide content used during narration generation |
734
815
 
816
+ #### Markdown-to-ExtendedMulmoScript Pipeline (`parse-md` → `/md-to-mulmo` → `assemble-extended`)
817
+
818
+ | File | Generated by | Description |
819
+ |------|-------------|-------------|
820
+ | `parsed_structure.json` | `parse-md` | Structured representation of the markdown document (sections, elements, hierarchy) |
821
+ | `extended-script.schema.json` | `parse-md` | JSON Schema for ExtendedMulmoScript (generated from Zod, for LLM reference) |
822
+ | `presentation-plan.schema.json` | `parse-md` | JSON Schema for the intermediate presentation plan format |
823
+ | `presentation_plan.json` | `/md-to-mulmo` skill (LLM) | Presentation plan with beat allocation, narration, and core/optional flags |
824
+
825
+ ### `output/<basename>/` — Final Deliverables
826
+
827
+ Generated by `movie`, `bundle`, and `publish` commands.
828
+
829
+ #### Top-Level Files (generated by `mulmocast` library)
830
+
831
+ | File | Generated by | Description |
832
+ |------|-------------|-------------|
833
+ | `<basename>_<lang>.mp4` | `movie` | Final narrated video (e.g., `sample_ja.mp4`) |
834
+ | `<basename>_<lang>.mp3` | `movie`, `bundle` | Concatenated audio for the entire presentation in one language |
835
+ | `<basename>_studio.json` | `movie`, `bundle` | Studio data (timing, beat metadata) used by mulmocast internally |
836
+ | `<basename>_lang.json` | `bundle` | Multi-language translation data for the viewer |
837
+
838
+ #### `output/<basename>/<basename>/` — Bundle Directory
839
+
840
+ Contains all files needed for MulmoViewer. Generated by `bundle` (and used by `upload`/`publish`).
841
+
842
+ | File / Directory | Description |
843
+ |-----------------|-------------|
844
+ | `mulmo_view.json` | **Viewer data** — beats with audio/image references, metadata, output profiles. This is the main file the viewer reads |
845
+ | `images.001.png`, `.002.png`, ... | Slide images for the viewer |
846
+ | `beat-1.png`, `beat-2.png`, ... | Rendered slide images (for markdown-based presentations) |
847
+ | `mulmo_credit.png` | MulmoCast credit image (auto-generated) |
848
+ | `<basename>_<hash>_<lang>.mp3` | Per-beat audio files (hash identifies the text content, lang is `ja`/`en`/etc.) |
849
+ | `silent300.mp3` | Short silent audio clip used for padding between beats |
850
+
851
+ #### `output/<basename>/audio/<basename>/` and `output/<basename>/images/<basename>/`
852
+
853
+ Working directories used by `mulmocast` during generation. Contents are the same audio and image files that end up in the bundle directory.
854
+
855
+ ### `extend merge` — Updates Existing Bundle
856
+
857
+ The `extend merge` command reads `scripts/<basename>/extended_script.json` and merges its metadata (beat IDs, `meta`, `scriptMeta`, `outputProfiles`, `variants`) into the existing `output/<basename>/<basename>/mulmo_view.json`. No new files are created.
858
+
859
+ ### Example: Presentation Pipeline
860
+
861
+ ```bash
862
+ # 1. Convert PPTX → MulmoScript
863
+ mulmo-slide pptx presentation.pptx -g -l ja
864
+
865
+ # Files created:
866
+ # scripts/presentation/presentation.json (MulmoScript)
867
+ # scripts/presentation/images/ (slide PNGs)
868
+ # scripts/presentation/presentation.pdf (intermediate)
869
+
870
+ # 2. Generate ExtendedMulmoScript with narration
871
+ mulmo-slide narrate presentation.pptx --scaffold-only
872
+
873
+ # Files created:
874
+ # scripts/presentation/extended_script.json (ExtendedMulmoScript)
875
+
876
+ # 3. Generate bundle for MulmoViewer
877
+ mulmo-slide bundle presentation.pptx -g -l ja
878
+
879
+ # Files created:
880
+ # output/presentation/presentation/mulmo_view.json
881
+ # output/presentation/presentation/*.mp3 (per-beat audio)
882
+ # output/presentation/presentation/*.png (slide images)
883
+ # output/presentation/presentation_ja.mp3 (concatenated audio)
884
+ # output/presentation/presentation_studio.json
735
885
  ```
736
- scripts/<basename>/
737
- ├── images/
738
- │ ├── <basename>-0.png (or images.001.png for Marp)
739
- │ ├── <basename>-1.png (or images.002.png for Marp)
740
- │ └── ...
741
- ├── <basename>.json # MulmoScript (all formats)
742
- └── <basename>-markdown.json # Marp only: Markdown format
886
+
887
+ ### Example: Video Transcription Pipeline
888
+
889
+ ```bash
890
+ # Transcribe video with Japanese translation
891
+ mulmo-slide transcribe talk.mp4 --target-langs=ja
892
+
893
+ # Files created in scripts/talk/:
894
+ # talk.json (MulmoScript with movie beats)
895
+ # 1.mp4, 2.mp4, ... (split video segments)
896
+ # 1.mp3, 2.mp3, ... (extracted audio per segment)
897
+ # 1.jpg, 2.jpg, ... (thumbnail per segment)
898
+ #
899
+ # Files created in output/talk/talk/ (bundle):
900
+ # mulmo_view.json (viewer data with ja/en text + audio)
901
+ # 1.mp4, 2.mp4, ... (video segments)
902
+ # 1_ja.mp3, 2_ja.mp3, ... (Japanese TTS audio)
743
903
  ```
744
904
 
745
905
  ## License
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/actions/bundle.ts"],"names":[],"mappings":";AAOA,wBAAsB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB9F"}
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/actions/bundle.ts"],"names":[],"mappings":";AASA,wBAAsB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC9F"}
@@ -1,8 +1,10 @@
1
1
  #!/usr/bin/env tsx
2
+ import * as path from "path";
2
3
  import { audio, images, translate, mulmoViewerBundle, bundleTargetLang } from "mulmocast";
3
4
  import yargs from "yargs";
4
5
  import { hideBin } from "yargs/helpers";
5
6
  import { initializeContext, runAction } from "./common.js";
7
+ import { mergeExtendedMetadata } from "../utils/extended-bundle-merge.js";
6
8
  export async function runMulmoBundle(mulmoScriptPath, outputDir) {
7
9
  console.log(`\nGenerating bundle with mulmo...`);
8
10
  console.log(` Input: ${mulmoScriptPath}`);
@@ -21,6 +23,14 @@ export async function runMulmoBundle(mulmoScriptPath, outputDir) {
21
23
  current.context = await images(current.context);
22
24
  console.log(" Creating bundle...");
23
25
  await mulmoViewerBundle(current.context, { skipZip: true });
26
+ const scriptsDir = path.dirname(path.resolve(mulmoScriptPath));
27
+ const bundleSubDir = path.resolve(outputDir, current.context.studio.filename);
28
+ try {
29
+ mergeExtendedMetadata(bundleSubDir, scriptsDir);
30
+ }
31
+ catch (e) {
32
+ console.warn(" Warning: failed to merge extended metadata:", e.message);
33
+ }
24
34
  }
25
35
  async function main() {
26
36
  const argv = await yargs(hideBin(process.argv))
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/actions/bundle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/actions/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runExtendMerge(basename: string): void;
2
+ //# sourceMappingURL=extend-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend-merge.d.ts","sourceRoot":"","sources":["../../src/actions/extend-merge.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsBrD"}
@@ -0,0 +1,22 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { mergeExtendedMetadata } from "../utils/extended-bundle-merge.js";
4
+ export function runExtendMerge(basename) {
5
+ const scriptsDir = path.join("scripts", basename);
6
+ const extendedPath = path.join(scriptsDir, "extended_script.json");
7
+ if (!fs.existsSync(extendedPath)) {
8
+ console.error(`✗ Not found: ${extendedPath}`);
9
+ process.exit(1);
10
+ }
11
+ const bundleDir = path.join("output", basename, basename);
12
+ const viewJsonPath = path.join(bundleDir, "mulmo_view.json");
13
+ if (!fs.existsSync(viewJsonPath)) {
14
+ console.error(`✗ Not found: ${viewJsonPath}`);
15
+ console.error(` Run 'mulmo-slide bundle' first to generate the bundle.`);
16
+ process.exit(1);
17
+ }
18
+ mergeExtendedMetadata(bundleDir, scriptsDir);
19
+ console.log(`✓ Merged extended metadata into ${viewJsonPath}`);
20
+ console.log(` Source: ${extendedPath}`);
21
+ }
22
+ //# sourceMappingURL=extend-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend-merge.js","sourceRoot":"","sources":["../../src/actions/extend-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAE7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,mCAAmC,YAAY,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { MulmoScript } from "@mulmocast/types";
2
- import type { ExtendedScript } from "@mulmocast/extended-types";
3
- export declare const scaffoldExtendedScript: (mulmoScript: MulmoScript, extractedTexts: string[] | null) => ExtendedScript;
2
+ import type { ExtendedMulmoScript } from "@mulmocast/extended-types";
3
+ export declare const scaffoldExtendedMulmoScript: (mulmoScript: MulmoScript, extractedTexts: string[] | null) => ExtendedMulmoScript;
4
4
  export declare const runExtendScaffold: (filePath: string) => void;
5
5
  //# sourceMappingURL=extend-scaffold.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extend-scaffold.d.ts","sourceRoot":"","sources":["../../src/actions/extend-scaffold.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAA0B,MAAM,2BAA2B,CAAC;AAsBxF,eAAO,MAAM,sBAAsB,GACjC,aAAa,WAAW,EACxB,gBAAgB,MAAM,EAAE,GAAG,IAAI,KAC9B,cAWF,CAAC;AAgCF,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,IAiBpD,CAAC"}
1
+ {"version":3,"file":"extend-scaffold.d.ts","sourceRoot":"","sources":["../../src/actions/extend-scaffold.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAA+B,MAAM,2BAA2B,CAAC;AAyBlG,eAAO,MAAM,2BAA2B,GACtC,aAAa,WAAW,EACxB,gBAAgB,MAAM,EAAE,GAAG,IAAI,KAC9B,mBAWF,CAAC;AAgCF,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,IAiBpD,CAAC"}