@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.
- package/.claude/skills/extend/SKILL.md +6 -6
- package/.claude/skills/extend/references/extended-script-schema.md +5 -5
- package/.claude/skills/md-to-mulmo/SKILL.md +8 -8
- package/.claude/skills/narrate/SKILL.md +8 -8
- package/.claude/skills/narrate/references/extended-script-schema.md +5 -5
- package/README.md +187 -27
- package/lib/actions/bundle.d.ts.map +1 -1
- package/lib/actions/bundle.js +10 -0
- package/lib/actions/bundle.js.map +1 -1
- package/lib/actions/extend-merge.d.ts +2 -0
- package/lib/actions/extend-merge.d.ts.map +1 -0
- package/lib/actions/extend-merge.js +22 -0
- package/lib/actions/extend-merge.js.map +1 -0
- package/lib/actions/extend-scaffold.d.ts +2 -2
- package/lib/actions/extend-scaffold.d.ts.map +1 -1
- package/lib/actions/extend-scaffold.js +3 -3
- package/lib/actions/extend-scaffold.js.map +1 -1
- package/lib/actions/extend-validate.js +3 -3
- package/lib/actions/extend-validate.js.map +1 -1
- package/lib/actions/md-to-extended.d.ts +7 -7
- package/lib/actions/md-to-extended.d.ts.map +1 -1
- package/lib/actions/md-to-extended.js +20 -20
- package/lib/actions/md-to-extended.js.map +1 -1
- package/lib/actions/narrate.d.ts +1 -1
- package/lib/actions/narrate.d.ts.map +1 -1
- package/lib/actions/narrate.js +12 -14
- package/lib/actions/narrate.js.map +1 -1
- package/lib/actions/pipeline.d.ts +13 -0
- package/lib/actions/pipeline.d.ts.map +1 -0
- package/lib/actions/pipeline.js +78 -0
- package/lib/actions/pipeline.js.map +1 -0
- package/lib/actions/preview.js +1 -1
- package/lib/actions/preview.js.map +1 -1
- package/lib/cli/action-commands.d.ts +3 -0
- package/lib/cli/action-commands.d.ts.map +1 -0
- package/lib/cli/action-commands.js +144 -0
- package/lib/cli/action-commands.js.map +1 -0
- package/lib/cli/convert-commands.d.ts +3 -0
- package/lib/cli/convert-commands.d.ts.map +1 -0
- package/lib/cli/convert-commands.js +190 -0
- package/lib/cli/convert-commands.js.map +1 -0
- package/lib/cli/extend-commands.d.ts +3 -0
- package/lib/cli/extend-commands.d.ts.map +1 -0
- package/lib/cli/extend-commands.js +41 -0
- package/lib/cli/extend-commands.js.map +1 -0
- package/lib/cli/index.d.ts +3 -0
- package/lib/cli/index.d.ts.map +1 -0
- package/lib/cli/index.js +31 -0
- package/lib/cli/index.js.map +1 -0
- package/lib/cli/misc-commands.d.ts +3 -0
- package/lib/cli/misc-commands.d.ts.map +1 -0
- package/lib/cli/misc-commands.js +86 -0
- package/lib/cli/misc-commands.js.map +1 -0
- package/lib/cli/options.d.ts +194 -0
- package/lib/cli/options.d.ts.map +1 -0
- package/lib/cli/options.js +125 -0
- package/lib/cli/options.js.map +1 -0
- package/lib/cli.js +86 -29
- package/lib/cli.js.map +1 -1
- package/lib/convert/marp.js +1 -1
- package/lib/convert/marp.js.map +1 -1
- package/lib/convert/movie.d.ts.map +1 -1
- package/lib/convert/movie.js +2 -2
- package/lib/convert/movie.js.map +1 -1
- package/lib/utils/extended-bundle-merge.d.ts +6 -0
- package/lib/utils/extended-bundle-merge.d.ts.map +1 -0
- package/lib/utils/extended-bundle-merge.js +71 -0
- package/lib/utils/extended-bundle-merge.js.map +1 -0
- package/lib/vue/assets/index-BZu3TPGe.js +115 -0
- package/lib/vue/assets/index-DyeW2SiG.css +1 -0
- package/lib/vue/index.html +3 -3
- package/lib/vue/openai-chat.d.ts +12 -0
- package/lib/vue/openai-chat.d.ts.map +1 -0
- package/lib/vue/openai-chat.js +85 -0
- package/lib/vue/openai-chat.js.map +1 -0
- package/package.json +31 -27
- package/lib/convert/pdfvision.d.ts +0 -14
- package/lib/convert/pdfvision.d.ts.map +0 -1
- package/lib/convert/pdfvision.js +0 -247
- package/lib/convert/pdfvision.js.map +0 -1
- package/lib/utils/document-analysis.d.ts +0 -43
- package/lib/utils/document-analysis.d.ts.map +0 -1
- package/lib/utils/document-analysis.js +0 -118
- package/lib/utils/document-analysis.js.map +0 -1
- package/lib/utils/narration-generator.d.ts +0 -14
- package/lib/utils/narration-generator.d.ts.map +0 -1
- package/lib/utils/narration-generator.js +0 -68
- package/lib/utils/narration-generator.js.map +0 -1
- package/lib/utils/vision-provider.d.ts +0 -12
- package/lib/utils/vision-provider.d.ts.map +0 -1
- package/lib/utils/vision-provider.js +0 -105
- package/lib/utils/vision-provider.js.map +0 -1
- package/lib/vue/assets/index-D6am8L57.css +0 -1
- package/lib/vue/assets/index-xq-ZNfmX.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# /extend - MulmoScript to
|
|
1
|
+
# /extend - MulmoScript to ExtendedMulmoScript Conversion
|
|
2
2
|
|
|
3
|
-
Convert a MulmoScript JSON into an
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
#
|
|
1
|
+
# ExtendedMulmoScript Schema Reference
|
|
2
2
|
|
|
3
|
-
This document defines the
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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:
|
|
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
|
|
1
|
+
# /md-to-mulmo - Markdown to ExtendedMulmoScript Conversion
|
|
2
2
|
|
|
3
|
-
Convert a structured markdown document into an
|
|
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
|
|
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
|
|
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` —
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1
|
+
# /narrate - Source File to Narrated ExtendedMulmoScript
|
|
2
2
|
|
|
3
|
-
Convert any supported source file (PDF, PPTX, Markdown, Keynote) into a validated
|
|
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
|
|
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
|
|
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
|
|
38
|
+
### Step 1: Scaffold ExtendedMulmoScript
|
|
39
39
|
|
|
40
|
-
Run the narrate CLI with `--scaffold-only` to convert the source and create the
|
|
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
|
|
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
|
-
|
|
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
|
-
#
|
|
1
|
+
# ExtendedMulmoScript Schema Reference
|
|
2
2
|
|
|
3
|
-
This document defines the
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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:
|
|
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
|
[](https://badge.fury.io/js/%40mulmocast%2Fslide)
|
|
2
2
|
# MulmoCast-Slides
|
|
3
3
|
|
|
4
|
-
|
|
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
|
|
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
|
|
143
|
-
mulmo-slide extend scaffold Create
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
642
|
+
## Markdown to ExtendedMulmoScript (LLM-assisted)
|
|
606
643
|
|
|
607
|
-
Convert a structured markdown document into an
|
|
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
|
|
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
|
|
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
|
|
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` —
|
|
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
|
|
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
|
|
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
|
|
742
|
+
### Validating ExtendedMulmoScript
|
|
706
743
|
|
|
707
|
-
Validate an
|
|
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
|
-
|
|
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
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
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":";
|
|
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"}
|
package/lib/actions/bundle.js
CHANGED
|
@@ -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":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC1F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/actions/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 {
|
|
3
|
-
export declare const
|
|
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,
|
|
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"}
|