@mulmocast/slide 0.4.1 → 0.5.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 (36) 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 +172 -0
  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 +56 -10
  7. package/lib/actions/extend-scaffold.d.ts +2 -2
  8. package/lib/actions/extend-scaffold.d.ts.map +1 -1
  9. package/lib/actions/extend-scaffold.js +3 -3
  10. package/lib/actions/extend-scaffold.js.map +1 -1
  11. package/lib/actions/extend-validate.js +3 -3
  12. package/lib/actions/extend-validate.js.map +1 -1
  13. package/lib/actions/md-to-extended.d.ts +54 -0
  14. package/lib/actions/md-to-extended.d.ts.map +1 -0
  15. package/lib/actions/md-to-extended.js +176 -0
  16. package/lib/actions/md-to-extended.js.map +1 -0
  17. package/lib/actions/narrate.d.ts.map +1 -1
  18. package/lib/actions/narrate.js +6 -6
  19. package/lib/actions/narrate.js.map +1 -1
  20. package/lib/actions/preview.js +1 -1
  21. package/lib/actions/preview.js.map +1 -1
  22. package/lib/cli.js +26 -6
  23. package/lib/cli.js.map +1 -1
  24. package/lib/convert/marp.js +1 -1
  25. package/lib/convert/marp.js.map +1 -1
  26. package/lib/convert/movie.d.ts.map +1 -1
  27. package/lib/convert/movie.js +2 -2
  28. package/lib/convert/movie.js.map +1 -1
  29. package/lib/utils/markdown-parser.d.ts +28 -0
  30. package/lib/utils/markdown-parser.d.ts.map +1 -0
  31. package/lib/utils/markdown-parser.js +215 -0
  32. package/lib/utils/markdown-parser.js.map +1 -0
  33. package/package.json +12 -12
  34. package/lib/vue/assets/index-D6am8L57.css +0 -1
  35. package/lib/vue/assets/index-xq-ZNfmX.js +0 -2
  36. package/lib/vue/index.html +0 -13
@@ -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
  }
@@ -0,0 +1,172 @@
1
+ # /md-to-mulmo - Markdown to ExtendedMulmoScript Conversion
2
+
3
+ Convert a structured markdown document into an ExtendedMulmoScript with intelligent beat allocation, narration, metadata, and variant support for detailed/short output profiles.
4
+
5
+ ## Invocation
6
+
7
+ ```
8
+ /md-to-mulmo <markdown file path>
9
+ ```
10
+
11
+ ## CLI Commands Overview
12
+
13
+ | Command | Package | Purpose | Input |
14
+ |---------|---------|---------|-------|
15
+ | `mulmo-slide` (or `yarn cli`) | `@mulmocast/slide` | Convert source files, parse markdown, assemble ExtendedMulmoScript | `.md`, `.pdf`, `.pptx`, etc. |
16
+ | `mulmo` | `mulmocast` | Generate movie/PDF/audio from MulmoScript | `{basename}.json` |
17
+ | `mulmocast-preprocessor` | `mulmocast-preprocessor` | Convert ExtendedMulmoScript → MulmoScript, query, summarize | `extended_script.json` |
18
+
19
+ ### CLI prefix for mulmo-slide
20
+
21
+ Determine the correct CLI command prefix:
22
+ - If `package.json` exists in the project root and its `name` is `"@mulmocast/slide"` → use `yarn cli`
23
+ - Otherwise → use `npx mulmo-slide`
24
+ - NEVER create a `package.json` for this purpose
25
+
26
+ Use this prefix (referred to as `{cli}` below) for all `mulmo-slide` CLI calls.
27
+
28
+ ## Instructions
29
+
30
+ ### Step 1: Parse Markdown and Generate Schemas
31
+
32
+ Run the parse-md command to extract document structure and generate JSON Schemas:
33
+
34
+ ```bash
35
+ {cli} parse-md <markdown file>
36
+ ```
37
+
38
+ This produces in `scripts/{basename}/`:
39
+ - `parsed_structure.json` — structured markdown sections with typed elements
40
+ - `extended-script.schema.json` — ExtendedMulmoScript JSON Schema (generated from Zod every run)
41
+ - `presentation-plan.schema.json` — intermediate format JSON Schema
42
+
43
+ ### Step 2: Read Inputs
44
+
45
+ Use the Read tool to read:
46
+
47
+ 1. `scripts/{basename}/parsed_structure.json`
48
+ 2. `scripts/{basename}/presentation-plan.schema.json`
49
+ 3. The original markdown file (for full context)
50
+
51
+ ### Step 3: Create Presentation Plan
52
+
53
+ Analyze the parsed structure and create `presentation_plan.json` conforming to the plan schema.
54
+
55
+ **Key decisions to make:**
56
+
57
+ 1. **Beat allocation** (sections ≠ beats):
58
+ - Multiple sections can be consolidated into one beat
59
+ - One dense section can be split across multiple beats
60
+ - Aim for 8-15 beats for a typical document
61
+ - Each beat should be a coherent, presentable unit
62
+
63
+ 2. **Slide content** (`slideMarkdown`):
64
+ - Concise, presentation-ready markdown for the visual slide
65
+ - NOT a copy of the source — distill to key points, headings, bullet lists
66
+ - Include tables, mermaid diagrams, code blocks when they are the focus
67
+ - Each slide should be understandable at a glance
68
+
69
+ 3. **Narration** (`narration`):
70
+ - Natural spoken language explaining the slide content
71
+ - Add context and insight beyond what's on the slide
72
+ - Write in the document's language (specified by `lang`)
73
+
74
+ 4. **Core vs optional** (`isCore` / `shortNarration`):
75
+ - `isCore: true`: Essential beats included in ALL output profiles
76
+ - `isCore: false`: Detailed-only beats, skipped in short version
77
+ - `shortNarration`: Condensed narration for short profile (null = skip beat in short)
78
+ - Typical: 60-70% core, 30-40% optional
79
+ - Introduction and conclusion beats should always be core
80
+
81
+ 5. **Script metadata** (`scriptMeta`):
82
+ - `audience`: Target audience
83
+ - `goals`: 2-4 learning objectives
84
+ - `keywords`: 5-10 main keywords
85
+ - `background`: Theme overview
86
+ - `references`: Extract URLs from source, categorize as web/code/document/video
87
+ - `faq`: 2-4 questions with answers
88
+
89
+ 6. **Beat metadata** (`meta`):
90
+ - `section`: Logical section (lowercase-kebab-case, consecutive beats with same section stay grouped)
91
+ - `tags`: Content type tags (intro, overview, definition, example, code, diagram, data, table, comparison, summary, conclusion)
92
+ - `context`: Background info for AI features — most important field. Add supplementary information beyond what's in the slide.
93
+ - `keywords`: 2-5 beat-specific terms
94
+ - `expectedQuestions`: 1-3 audience questions
95
+
96
+ **Output format:**
97
+
98
+ ```json
99
+ {
100
+ "lang": "ja",
101
+ "title": "Presentation Title",
102
+ "scriptMeta": {
103
+ "audience": "...",
104
+ "goals": ["..."],
105
+ "keywords": ["..."],
106
+ "background": "...",
107
+ "references": [{ "type": "web", "url": "...", "title": "..." }],
108
+ "faq": [{ "question": "...", "answer": "..." }]
109
+ },
110
+ "beats": [
111
+ {
112
+ "id": "beat-1",
113
+ "sourceSections": ["sec-0", "sec-1"],
114
+ "slideMarkdown": "# Introduction\n\n- Key point 1\n- Key point 2",
115
+ "narration": "Full narration text...",
116
+ "shortNarration": "Condensed version...",
117
+ "isCore": true,
118
+ "meta": {
119
+ "section": "introduction",
120
+ "tags": ["intro"],
121
+ "context": "Background info...",
122
+ "keywords": ["term1"],
123
+ "expectedQuestions": ["Why is this important?"]
124
+ }
125
+ }
126
+ ]
127
+ }
128
+ ```
129
+
130
+ Write this to `scripts/{basename}/presentation_plan.json`.
131
+
132
+ ### Step 4: Assemble and Validate
133
+
134
+ Run the assemble command to convert the plan to ExtendedMulmoScript:
135
+
136
+ ```bash
137
+ {cli} assemble-extended scripts/{basename}/presentation_plan.json
138
+ ```
139
+
140
+ This:
141
+ - Validates the plan against the JSON Schema (z.fromJSONSchema)
142
+ - Converts `isCore`/`shortNarration` → `variants`/`outputProfiles`
143
+ - Validates the result against ExtendedMulmoScript schema
144
+ - Outputs `scripts/{basename}/extended_script.json`
145
+
146
+ If validation fails, fix the plan and re-run.
147
+
148
+ ### Step 5: Post-processing
149
+
150
+ Generate MulmoScript from ExtendedMulmoScript:
151
+
152
+ ```bash
153
+ npx mulmocast-preprocessor scripts/{basename}/extended_script.json -o scripts/{basename}/{basename}.json
154
+ ```
155
+
156
+ ### Step 6: Summary
157
+
158
+ Display to the user:
159
+ - Total beats, core beats, optional beats
160
+ - Sections identified
161
+ - Output profiles available (detailed, short)
162
+ - File paths for extended_script.json and {basename}.json
163
+ - Next steps (e.g., `npx mulmo movie scripts/{basename}/{basename}.json`)
164
+
165
+ ## Quality Guidelines
166
+
167
+ - **slideMarkdown**: Presentation-ready, not a dump of the source. Think "what would go on a slide."
168
+ - **narration**: Natural spoken language. Add insight beyond the slide text.
169
+ - **context field**: Most important metadata. Don't restate the slide — add background, related concepts, real-world examples.
170
+ - **section naming**: lowercase-kebab-case, consistent across beats.
171
+ - **isCore judgment**: Introduction, key findings, and conclusion are always core. Examples, deep-dives, and supplementary content can be optional.
172
+ - **shortNarration**: If a core beat needs the same text in both profiles, omit shortNarration (it defaults to the full narration).
@@ -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,3 +1,4 @@
1
+ [![npm version](https://badge.fury.io/js/%40mulmocast%2Fslide.svg)](https://badge.fury.io/js/%40mulmocast%2Fslide)
1
2
  # MulmoCast-Slides
2
3
 
3
4
  A collection of tools to convert presentation files into MulmoScript format, enabling automated narration and processing of slide decks.
@@ -136,10 +137,12 @@ Commands:
136
137
  mulmo-slide keynote <file> Convert Keynote to MulmoScript (macOS only)
137
138
  mulmo-slide movie <file> Generate movie from presentation
138
139
  mulmo-slide bundle <file> Generate MulmoViewer bundle from presentation
139
- mulmo-slide narrate <file> Generate narrated ExtendedScript (full pipeline)
140
+ mulmo-slide narrate <file> Generate narrated ExtendedMulmoScript (full pipeline)
140
141
  mulmo-slide extend init Install Claude Code skills (/narrate, /extend)
141
- mulmo-slide extend validate Validate ExtendedScript JSON against schema
142
- mulmo-slide extend scaffold Create ExtendedScript skeleton from MulmoScript
142
+ mulmo-slide extend validate Validate ExtendedMulmoScript JSON against schema
143
+ mulmo-slide extend scaffold Create ExtendedMulmoScript skeleton from MulmoScript
144
+ mulmo-slide parse-md <file> Parse markdown structure for LLM presentation planning
145
+ mulmo-slide assemble-extended <file> Assemble ExtendedMulmoScript from presentation plan
143
146
  ```
144
147
 
145
148
  The `convert` command auto-detects file format by extension (.pptx, .md, .key, .pdf).
@@ -561,7 +564,7 @@ mulmo-slide bundle presentation.pptx -f -g
561
564
 
562
565
  ## Narrate CLI
563
566
 
564
- 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.
567
+ 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.
565
568
 
566
569
  **Usage:**
567
570
 
@@ -581,7 +584,7 @@ yarn narrate samples/sample.pdf --scaffold-only
581
584
 
582
585
  **Options:**
583
586
  - `-l, --lang` - Language for narration (en, ja, fr, de)
584
- - `--scaffold-only` - Only create ExtendedScript skeleton (no LLM). Useful as preparation for Claude Code `/narrate` analysis
587
+ - `--scaffold-only` - Only create ExtendedMulmoScript skeleton (no LLM). Useful as preparation for Claude Code `/narrate` analysis
585
588
  - `-f, --force` - Force regenerate MulmoScript even if it exists
586
589
  - `-s, --separator` - Slide separator mode (for Markdown files)
587
590
  - `--mermaid` - Convert mermaid code blocks (for Markdown files)
@@ -590,7 +593,7 @@ yarn narrate samples/sample.pdf --scaffold-only
590
593
 
591
594
  ### Extend Scaffold
592
595
 
593
- 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.
596
+ 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.
594
597
 
595
598
  ```bash
596
599
  mulmo-slide extend scaffold scripts/<basename>/<basename>.json
@@ -599,11 +602,54 @@ mulmo-slide extend scaffold scripts/<basename>/<basename>.json
599
602
  yarn cli extend scaffold scripts/<basename>/<basename>.json
600
603
  ```
601
604
 
605
+ ## Markdown to ExtendedMulmoScript (LLM-assisted)
606
+
607
+ 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
+
609
+ ### Pipeline Overview
610
+
611
+ 1. **Parse** (`parse-md`): Extract document structure and generate JSON Schemas
612
+ 2. **Plan** (LLM via `/md-to-mulmo` skill): Create presentation plan with beat allocation
613
+ 3. **Assemble** (`assemble-extended`): Convert plan to ExtendedMulmoScript with variants
614
+
615
+ ### Usage
616
+
617
+ ```bash
618
+ # Step 1: Parse markdown and generate schemas
619
+ mulmo-slide parse-md path/to/document.md
620
+
621
+ # Step 2: Use /md-to-mulmo skill in Claude Code (creates presentation_plan.json)
622
+
623
+ # Step 3: Assemble ExtendedMulmoScript from plan
624
+ mulmo-slide assemble-extended scripts/{basename}/presentation_plan.json
625
+
626
+ # Step 4: Generate MulmoScript from ExtendedMulmoScript
627
+ npx mulmocast-preprocessor scripts/{basename}/extended_script.json -o scripts/{basename}/{basename}.json
628
+ ```
629
+
630
+ **Output of `parse-md`:**
631
+ - `scripts/{basename}/parsed_structure.json` — structured markdown sections
632
+ - `scripts/{basename}/extended-script.schema.json` — ExtendedMulmoScript JSON Schema
633
+ - `scripts/{basename}/presentation-plan.schema.json` — intermediate plan schema
634
+
635
+ **Output of `assemble-extended`:**
636
+ - `scripts/{basename}/extended_script.json` — validated ExtendedMulmoScript with output profiles
637
+
638
+ ### Setup
639
+
640
+ Install the Claude Code skill:
641
+
642
+ ```bash
643
+ mulmo-slide extend init
644
+ ```
645
+
646
+ Then use `/md-to-mulmo path/to/document.md` in Claude Code.
647
+
602
648
  ## Narrate: Source File to Narrated Video (Claude Code Skill)
603
649
 
604
650
  > **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.
605
651
 
606
- 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.
652
+ 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.
607
653
 
608
654
  ### Setup
609
655
 
@@ -656,9 +702,9 @@ npx mulmocast-preprocessor scripts/{basename}/extended_script.json -o scripts/{b
656
702
  npx mulmo movie scripts/{basename}/{basename}.json
657
703
  ```
658
704
 
659
- ### Validating ExtendedScript
705
+ ### Validating ExtendedMulmoScript
660
706
 
661
- Validate an ExtendedScript JSON file against the schema:
707
+ Validate an ExtendedMulmoScript JSON file against the schema:
662
708
 
663
709
  ```bash
664
710
  mulmo-slide extend validate scripts/simple_text/extended_script.json
@@ -698,4 +744,4 @@ scripts/<basename>/
698
744
 
699
745
  ## License
700
746
 
701
- MIT
747
+ MIT
@@ -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"}
@@ -18,7 +18,7 @@ const addBeatMeta = (beats, extractedTexts) => {
18
18
  return { ...beat, meta };
19
19
  });
20
20
  };
21
- export const scaffoldExtendedScript = (mulmoScript, extractedTexts) => {
21
+ export const scaffoldExtendedMulmoScript = (mulmoScript, extractedTexts) => {
22
22
  const beats = addBeatMeta(addBeatIds(mulmoScript.beats), extractedTexts);
23
23
  // Set defaults first so the spread preserves existing values
24
24
  // (JSON may include scriptMeta/outputProfiles not in MulmoScript type)
@@ -36,7 +36,7 @@ const buildSummary = (mulmoScript, result, outputPath) => ({
36
36
  outputPath,
37
37
  });
38
38
  const printSummary = (summary) => {
39
- console.log(`\n✓ Scaffolded ExtendedScript: ${summary.outputPath}`);
39
+ console.log(`\n✓ Scaffolded ExtendedMulmoScript: ${summary.outputPath}`);
40
40
  console.log(` Beats: ${summary.beatCount}`);
41
41
  if (summary.idsAdded > 0) {
42
42
  console.log(` IDs added: ${summary.idsAdded}`);
@@ -55,7 +55,7 @@ export const runExtendScaffold = (filePath) => {
55
55
  const mulmoScript = readJsonFile(resolvedPath);
56
56
  const dir = path.dirname(resolvedPath);
57
57
  const extractedTexts = loadExtractedTexts(dir);
58
- const result = scaffoldExtendedScript(mulmoScript, extractedTexts);
58
+ const result = scaffoldExtendedMulmoScript(mulmoScript, extractedTexts);
59
59
  const outputPath = path.join(dir, "extended_script.json");
60
60
  writeJsonFile(outputPath, result);
61
61
  printSummary(buildSummary(mulmoScript, result, outputPath));
@@ -1 +1 @@
1
- {"version":3,"file":"extend-scaffold.js","sourceRoot":"","sources":["../../src/actions/extend-scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extend-scaffold.js","sourceRoot":"","sources":["../../src/actions/extend-scaffold.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as fs from "fs";
2
2
  import * as path from "path";
3
- import { extendedScriptSchema } from "@mulmocast/extended-types";
3
+ import { extendedMulmoScriptSchema } from "@mulmocast/extended-types";
4
4
  import { formatZodError } from "./common.js";
5
5
  const summarizeScript = (data) => {
6
6
  const script = data;
@@ -32,14 +32,14 @@ export const runExtendValidate = (filePath) => {
32
32
  console.error(`Failed to parse JSON: ${message}`);
33
33
  process.exit(1);
34
34
  }
35
- const result = extendedScriptSchema.safeParse(data);
35
+ const result = extendedMulmoScriptSchema.safeParse(data);
36
36
  if (!result.success) {
37
37
  console.error(`\n✗ Validation failed: ${resolvedPath}\n`);
38
38
  console.error(formatZodError(result.error));
39
39
  process.exit(1);
40
40
  }
41
41
  const summary = summarizeScript(data);
42
- console.log(`\n✓ Valid ExtendedScript: ${resolvedPath}`);
42
+ console.log(`\n✓ Valid ExtendedMulmoScript: ${resolvedPath}`);
43
43
  console.log(` Beats: ${summary.beatCount}`);
44
44
  console.log(` ScriptMeta: ${summary.hasScriptMeta ? "yes" : "no"}`);
45
45
  console.log(` Meta coverage: ${summary.metaCoverage}%`);
@@ -1 +1 @@
1
- {"version":3,"file":"extend-validate.js","sourceRoot":"","sources":["../../src/actions/extend-validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extend-validate.js","sourceRoot":"","sources":["../../src/actions/extend-validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAS7C,MAAM,eAAe,GAAG,CAAC,IAAa,EAAqB,EAAE;IAC3D,MAAM,MAAM,GAAG,IAA+B,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;IACxD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG;QACf,GAAG,IAAI,GAAG,CACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,IAA4C,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAC3F;KACU,CAAC;IAEd,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;QAClC,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAQ,EAAE;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,YAAY,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,kCAAkC,YAAY,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Markdown → ExtendedMulmoScript pipeline
3
+ *
4
+ * Step 1: Generate JSON Schema from Zod (every run) + parse markdown
5
+ * Step 3: Assemble ExtendedMulmoScript from presentation plan
6
+ * Step 4: Validate against ExtendedMulmoScript schema
7
+ *
8
+ * Step 2 (LLM presentation planning) is handled by the /md-to-mulmo skill.
9
+ */
10
+ import type { ExtendedMulmoScript } from "@mulmocast/extended-types";
11
+ interface BeatPlan {
12
+ id: string;
13
+ sourceSections: string[];
14
+ slideMarkdown: string;
15
+ narration: string;
16
+ shortNarration?: string | null;
17
+ isCore: boolean;
18
+ meta: {
19
+ tags?: string[];
20
+ section?: string;
21
+ context?: string;
22
+ keywords?: string[];
23
+ expectedQuestions?: string[];
24
+ };
25
+ }
26
+ interface PresentationPlan {
27
+ lang: string;
28
+ title?: string;
29
+ scriptMeta: Record<string, unknown>;
30
+ beats: BeatPlan[];
31
+ }
32
+ export declare const generateSchemas: (outputDir: string) => {
33
+ extendedSchemaPath: string;
34
+ planSchemaPath: string;
35
+ };
36
+ export declare const runParseMd: (inputPath: string) => void;
37
+ export declare const assembleExtendedMulmoScript: (plan: PresentationPlan) => ExtendedMulmoScript;
38
+ export declare const validateExtendedMulmoScript: (data: unknown) => {
39
+ success: true;
40
+ data: ExtendedMulmoScript;
41
+ } | {
42
+ success: false;
43
+ errors: string;
44
+ };
45
+ export declare const validatePresentationPlan: (data: unknown) => {
46
+ success: true;
47
+ data: PresentationPlan;
48
+ } | {
49
+ success: false;
50
+ errors: string;
51
+ };
52
+ export declare const runAssembleExtended: (inputPath: string) => void;
53
+ export {};
54
+ //# sourceMappingURL=md-to-extended.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-extended.d.ts","sourceRoot":"","sources":["../../src/actions/md-to-extended.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,2BAA2B,CAAC;AAMnC,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;CACH;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AASD,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,KAChB;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAWtD,CAAC;AAIF,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,KAAG,IAkC9C,CAAC;AAkCF,eAAO,MAAM,2BAA2B,GAAI,MAAM,gBAAgB,KAAG,mBA+BpE,CAAC;AAIF,eAAO,MAAM,2BAA2B,GACtC,MAAM,OAAO,KACZ;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAMjF,CAAC;AASF,eAAO,MAAM,wBAAwB,GACnC,MAAM,OAAO,KACZ;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAO9E,CAAC;AAIF,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,KAAG,IA+CvD,CAAC"}