@mulmocast/slide 0.1.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/README.md +458 -0
- package/lib/actions/bundle.d.ts +3 -0
- package/lib/actions/bundle.d.ts.map +1 -0
- package/lib/actions/bundle.js +60 -0
- package/lib/actions/bundle.js.map +1 -0
- package/lib/actions/common.d.ts +21 -0
- package/lib/actions/common.d.ts.map +1 -0
- package/lib/actions/common.js +159 -0
- package/lib/actions/common.js.map +1 -0
- package/lib/actions/movie.d.ts +3 -0
- package/lib/actions/movie.d.ts.map +1 -0
- package/lib/actions/movie.js +58 -0
- package/lib/actions/movie.js.map +1 -0
- package/lib/actions/upload.d.ts +6 -0
- package/lib/actions/upload.d.ts.map +1 -0
- package/lib/actions/upload.js +172 -0
- package/lib/actions/upload.js.map +1 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +301 -0
- package/lib/cli.js.map +1 -0
- package/lib/convert/marp.d.ts +22 -0
- package/lib/convert/marp.d.ts.map +1 -0
- package/lib/convert/marp.js +375 -0
- package/lib/convert/marp.js.map +1 -0
- package/lib/convert/pdf.d.ts +14 -0
- package/lib/convert/pdf.d.ts.map +1 -0
- package/lib/convert/pdf.js +130 -0
- package/lib/convert/pdf.js.map +1 -0
- package/lib/convert/pptx.d.ts +13 -0
- package/lib/convert/pptx.d.ts.map +1 -0
- package/lib/convert/pptx.js +138 -0
- package/lib/convert/pptx.js.map +1 -0
- package/lib/utils/lang.d.ts +16 -0
- package/lib/utils/lang.d.ts.map +1 -0
- package/lib/utils/lang.js +37 -0
- package/lib/utils/lang.js.map +1 -0
- package/lib/utils/llm.d.ts +21 -0
- package/lib/utils/llm.d.ts.map +1 -0
- package/lib/utils/llm.js +200 -0
- package/lib/utils/llm.js.map +1 -0
- package/lib/utils/pdf.d.ts +37 -0
- package/lib/utils/pdf.d.ts.map +1 -0
- package/lib/utils/pdf.js +142 -0
- package/lib/utils/pdf.js.map +1 -0
- package/package.json +67 -0
- package/tools/keynote/extract.scpt +195 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.parseSlides = parseSlides;
|
|
41
|
+
exports.extractNotesFromSlide = extractNotesFromSlide;
|
|
42
|
+
exports.extractNotesFromSlides = extractNotesFromSlides;
|
|
43
|
+
exports.extractMarkdownFromSlide = extractMarkdownFromSlide;
|
|
44
|
+
exports.extractMarkdownFromSlides = extractMarkdownFromSlides;
|
|
45
|
+
exports.convertMarp = convertMarp;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const child_process_1 = require("child_process");
|
|
49
|
+
const mulmocast_1 = require("mulmocast");
|
|
50
|
+
const yargs_1 = __importDefault(require("yargs"));
|
|
51
|
+
const helpers_1 = require("yargs/helpers");
|
|
52
|
+
const lang_1 = require("../utils/lang");
|
|
53
|
+
const llm_1 = require("../utils/llm");
|
|
54
|
+
// Parse markdown content into slides (removes YAML front matter)
|
|
55
|
+
function parseSlides(content) {
|
|
56
|
+
// Split by slide separator
|
|
57
|
+
const slides = content.split(/\n---\n/);
|
|
58
|
+
// Remove YAML front matter (first section if it starts with ---)
|
|
59
|
+
if (slides.length > 0 && slides[0].trim().startsWith("---")) {
|
|
60
|
+
slides.shift();
|
|
61
|
+
}
|
|
62
|
+
return slides;
|
|
63
|
+
}
|
|
64
|
+
// Extract notes from a single slide
|
|
65
|
+
function extractNotesFromSlide(slideContent) {
|
|
66
|
+
const commentRegex = /<!--\s*([\s\S]*?)\s*-->/g;
|
|
67
|
+
const matches = [...slideContent.matchAll(commentRegex)].map((m) => m[1].trim());
|
|
68
|
+
return matches.join("\n");
|
|
69
|
+
}
|
|
70
|
+
// Extract speaker notes from parsed slides
|
|
71
|
+
function extractNotesFromSlides(slides) {
|
|
72
|
+
const notes = [];
|
|
73
|
+
for (const slide of slides) {
|
|
74
|
+
const slideNotes = extractNotesFromSlide(slide);
|
|
75
|
+
notes.push(slideNotes);
|
|
76
|
+
}
|
|
77
|
+
return notes;
|
|
78
|
+
}
|
|
79
|
+
// Extract markdown content from a single slide (removes HTML comments)
|
|
80
|
+
function extractMarkdownFromSlide(slideContent) {
|
|
81
|
+
// Remove HTML comments (speaker notes)
|
|
82
|
+
const slideWithoutNotes = slideContent.replace(/<!--\s*[\s\S]*?\s*-->/g, "");
|
|
83
|
+
// Split into lines, trim, and filter out empty lines
|
|
84
|
+
const lines = slideWithoutNotes
|
|
85
|
+
.split("\n")
|
|
86
|
+
.map((line) => line.trim())
|
|
87
|
+
.filter((line) => line.length > 0);
|
|
88
|
+
return lines;
|
|
89
|
+
}
|
|
90
|
+
// Extract markdown content from parsed slides
|
|
91
|
+
function extractMarkdownFromSlides(slides) {
|
|
92
|
+
const slideMarkdowns = [];
|
|
93
|
+
for (const slide of slides) {
|
|
94
|
+
slideMarkdowns.push(extractMarkdownFromSlide(slide));
|
|
95
|
+
}
|
|
96
|
+
return slideMarkdowns;
|
|
97
|
+
}
|
|
98
|
+
// Setup output directories
|
|
99
|
+
function setupOutputDirectories(basename, customOutputDir) {
|
|
100
|
+
const outputFolder = customOutputDir || path.join(process.cwd(), "scripts", basename);
|
|
101
|
+
const outputImagesFolder = path.join(outputFolder, "images");
|
|
102
|
+
// Create directories if they don't exist
|
|
103
|
+
if (!fs.existsSync(outputFolder)) {
|
|
104
|
+
fs.mkdirSync(outputFolder, { recursive: true });
|
|
105
|
+
}
|
|
106
|
+
if (!fs.existsSync(outputImagesFolder)) {
|
|
107
|
+
fs.mkdirSync(outputImagesFolder, { recursive: true });
|
|
108
|
+
}
|
|
109
|
+
// Clean existing PNG files
|
|
110
|
+
const files = fs.readdirSync(outputImagesFolder);
|
|
111
|
+
for (const file of files) {
|
|
112
|
+
if (file.endsWith(".png")) {
|
|
113
|
+
fs.unlinkSync(path.join(outputImagesFolder, file));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return outputFolder;
|
|
117
|
+
}
|
|
118
|
+
// Extract speaker notes from markdown file
|
|
119
|
+
function extractSpeakerNotes(markdownPath) {
|
|
120
|
+
const content = fs.readFileSync(markdownPath, "utf-8");
|
|
121
|
+
const slides = parseSlides(content);
|
|
122
|
+
return extractNotesFromSlides(slides);
|
|
123
|
+
}
|
|
124
|
+
// Render slides to images using Marp CLI
|
|
125
|
+
function renderSlidesToImages(markdownPath, outputFolder, themePath, allowLocalFiles = false) {
|
|
126
|
+
const imagesFolder = path.join(outputFolder, "images");
|
|
127
|
+
// Build Marp CLI command with optional theme and allow-local-files
|
|
128
|
+
const marpCommand = [
|
|
129
|
+
`npx @marp-team/marp-cli "${markdownPath}" -o "${imagesFolder}/slide.png" --images png`,
|
|
130
|
+
themePath ? `--theme "${themePath}"` : "",
|
|
131
|
+
allowLocalFiles ? "--allow-local-files" : "",
|
|
132
|
+
]
|
|
133
|
+
.filter(Boolean)
|
|
134
|
+
.join(" ");
|
|
135
|
+
// Execute Marp CLI to generate PNG images directly
|
|
136
|
+
try {
|
|
137
|
+
(0, child_process_1.execSync)(marpCommand, {
|
|
138
|
+
stdio: "inherit",
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error("Error: Failed to render Marp presentation to images", error);
|
|
143
|
+
console.error("Make sure @marp-team/marp-cli is installed");
|
|
144
|
+
throw new Error("Failed to render Marp presentation");
|
|
145
|
+
}
|
|
146
|
+
// Count generated images
|
|
147
|
+
const files = fs.readdirSync(imagesFolder);
|
|
148
|
+
const imageFiles = files.filter((f) => f.startsWith("slide.") && f.endsWith(".png"));
|
|
149
|
+
const slideCount = imageFiles.length;
|
|
150
|
+
// Rename generated images to match expected format (images.001.png, etc.)
|
|
151
|
+
renameGeneratedImages(imagesFolder, slideCount);
|
|
152
|
+
return slideCount;
|
|
153
|
+
}
|
|
154
|
+
// Rename Marp-generated images to expected format
|
|
155
|
+
function renameGeneratedImages(imagesFolder, slideCount) {
|
|
156
|
+
Array.from({ length: slideCount }, (_, i) => i + 1).forEach((i) => {
|
|
157
|
+
const marpFilename = `slide.${String(i).padStart(3, "0")}.png`;
|
|
158
|
+
const expectedFilename = `images.${String(i).padStart(3, "0")}.png`;
|
|
159
|
+
const marpPath = path.join(imagesFolder, marpFilename);
|
|
160
|
+
const expectedPath = path.join(imagesFolder, expectedFilename);
|
|
161
|
+
if (fs.existsSync(marpPath)) {
|
|
162
|
+
fs.renameSync(marpPath, expectedPath);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
// Generate MulmoScript JSON with image paths
|
|
167
|
+
function generateMulmoScriptImage(notes, slideCount, outputFolder, lang) {
|
|
168
|
+
const imagesFolder = path.join(outputFolder, "images");
|
|
169
|
+
// Align notes array length with slide count
|
|
170
|
+
while (notes.length < slideCount) {
|
|
171
|
+
notes.push("");
|
|
172
|
+
}
|
|
173
|
+
const beats = notes.slice(0, slideCount).map((note, index) => {
|
|
174
|
+
const slideNum = String(index + 1).padStart(3, "0");
|
|
175
|
+
const imagePath = path.join(imagesFolder, `images.${slideNum}.png`);
|
|
176
|
+
return {
|
|
177
|
+
text: note || "",
|
|
178
|
+
image: {
|
|
179
|
+
type: "image",
|
|
180
|
+
source: {
|
|
181
|
+
kind: "path",
|
|
182
|
+
path: imagePath,
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
const mulmocast = {
|
|
188
|
+
$mulmocast: {
|
|
189
|
+
version: "1.1",
|
|
190
|
+
credit: "closing",
|
|
191
|
+
},
|
|
192
|
+
lang,
|
|
193
|
+
beats,
|
|
194
|
+
};
|
|
195
|
+
// Validate mulmoScript
|
|
196
|
+
const result = mulmocast_1.mulmoScriptSchema.safeParse(mulmocast);
|
|
197
|
+
if (!result.success) {
|
|
198
|
+
console.error("MulmoScript validation failed:");
|
|
199
|
+
console.error(result.error.format());
|
|
200
|
+
throw new Error("Invalid MulmoScript generated");
|
|
201
|
+
}
|
|
202
|
+
const scriptPath = path.join(outputFolder, "mulmo_script.json");
|
|
203
|
+
fs.writeFileSync(scriptPath, JSON.stringify(result.data, null, 2), "utf-8");
|
|
204
|
+
return scriptPath;
|
|
205
|
+
}
|
|
206
|
+
// Extract markdown content from each slide in a file
|
|
207
|
+
function extractSlideMarkdown(markdownPath) {
|
|
208
|
+
const content = fs.readFileSync(markdownPath, "utf-8");
|
|
209
|
+
const slides = parseSlides(content);
|
|
210
|
+
return extractMarkdownFromSlides(slides);
|
|
211
|
+
}
|
|
212
|
+
// Generate MulmoScript JSON with Markdown
|
|
213
|
+
function generateMulmoScriptMarkdown(notes, slideMarkdowns, outputFolder, lang) {
|
|
214
|
+
// Align notes array length with slide count
|
|
215
|
+
while (notes.length < slideMarkdowns.length) {
|
|
216
|
+
notes.push("");
|
|
217
|
+
}
|
|
218
|
+
const beats = slideMarkdowns.map((markdown, index) => {
|
|
219
|
+
return {
|
|
220
|
+
text: notes[index] || "",
|
|
221
|
+
image: {
|
|
222
|
+
type: "markdown",
|
|
223
|
+
markdown,
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
});
|
|
227
|
+
const mulmocast = {
|
|
228
|
+
$mulmocast: {
|
|
229
|
+
version: "1.1",
|
|
230
|
+
credit: "closing",
|
|
231
|
+
},
|
|
232
|
+
lang,
|
|
233
|
+
beats,
|
|
234
|
+
};
|
|
235
|
+
// Validate mulmoScript
|
|
236
|
+
const result = mulmocast_1.mulmoScriptSchema.safeParse(mulmocast);
|
|
237
|
+
if (!result.success) {
|
|
238
|
+
console.error("MulmoScript (markdown) validation failed:");
|
|
239
|
+
console.error(result.error.format());
|
|
240
|
+
throw new Error("Invalid MulmoScript generated");
|
|
241
|
+
}
|
|
242
|
+
const scriptPath = path.join(outputFolder, "mulmo_script-markdown.json");
|
|
243
|
+
fs.writeFileSync(scriptPath, JSON.stringify(result.data, null, 2), "utf-8");
|
|
244
|
+
return scriptPath;
|
|
245
|
+
}
|
|
246
|
+
// Cleanup temporary files
|
|
247
|
+
function cleanupTempFiles(outputFolder) {
|
|
248
|
+
const tempFolder = path.join(outputFolder, ".temp");
|
|
249
|
+
if (fs.existsSync(tempFolder)) {
|
|
250
|
+
fs.rmSync(tempFolder, { recursive: true, force: true });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Main conversion function (exported for use by movie command)
|
|
254
|
+
async function convertMarp(options) {
|
|
255
|
+
const inputPath = path.resolve(options.inputPath);
|
|
256
|
+
const themePath = options.themePath ? path.resolve(options.themePath) : undefined;
|
|
257
|
+
const allowLocalFiles = options.allowLocalFiles ?? false;
|
|
258
|
+
const lang = (0, lang_1.resolveLang)(options.lang);
|
|
259
|
+
const generateText = options.generateText ?? false;
|
|
260
|
+
if (!fs.existsSync(inputPath)) {
|
|
261
|
+
throw new Error(`File not found: ${inputPath}`);
|
|
262
|
+
}
|
|
263
|
+
if (!inputPath.endsWith(".md")) {
|
|
264
|
+
throw new Error("Input file must be a .md (Markdown) file");
|
|
265
|
+
}
|
|
266
|
+
if (themePath && !fs.existsSync(themePath)) {
|
|
267
|
+
throw new Error(`Theme file not found: ${themePath}`);
|
|
268
|
+
}
|
|
269
|
+
console.log("Starting Marp to MulmoScript conversion...\n");
|
|
270
|
+
console.log(`Input file: ${inputPath}`);
|
|
271
|
+
if (themePath) {
|
|
272
|
+
console.log(`Custom theme: ${themePath}`);
|
|
273
|
+
}
|
|
274
|
+
if (allowLocalFiles) {
|
|
275
|
+
console.log(`Allow local files: enabled`);
|
|
276
|
+
}
|
|
277
|
+
// Get basename from input file
|
|
278
|
+
const basename = path.basename(inputPath, ".md");
|
|
279
|
+
// Setup output directories
|
|
280
|
+
const outputFolder = setupOutputDirectories(basename, options.outputDir);
|
|
281
|
+
console.log(`Output directory: ${outputFolder}`);
|
|
282
|
+
// Extract speaker notes
|
|
283
|
+
const notes = extractSpeakerNotes(inputPath);
|
|
284
|
+
console.log(`Extracted ${notes.length} speaker notes`);
|
|
285
|
+
// Render to images
|
|
286
|
+
console.log("Rendering slides to images...");
|
|
287
|
+
const slideCount = renderSlidesToImages(inputPath, outputFolder, themePath, allowLocalFiles);
|
|
288
|
+
console.log(`Rendered ${slideCount} slides`);
|
|
289
|
+
// Extract markdown for markdown format
|
|
290
|
+
console.log("Extracting slide markdown...");
|
|
291
|
+
const slideMarkdowns = extractSlideMarkdown(inputPath);
|
|
292
|
+
console.log(`Extracted ${slideMarkdowns.length} slide markdowns`);
|
|
293
|
+
// Generate text using LLM if requested
|
|
294
|
+
if (generateText) {
|
|
295
|
+
console.log("Generating narration text with LLM...");
|
|
296
|
+
const slides = slideMarkdowns.map((markdown, index) => ({
|
|
297
|
+
index,
|
|
298
|
+
markdown,
|
|
299
|
+
existingText: notes[index] || "",
|
|
300
|
+
}));
|
|
301
|
+
const generatedTexts = await (0, llm_1.generateTextFromMarkdown)({
|
|
302
|
+
slides,
|
|
303
|
+
lang,
|
|
304
|
+
title: basename,
|
|
305
|
+
});
|
|
306
|
+
for (const generated of generatedTexts) {
|
|
307
|
+
if (generated.index < notes.length) {
|
|
308
|
+
notes[generated.index] = generated.text;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
notes.push(generated.text);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
console.log(`Generated text for ${generatedTexts.length} slides`);
|
|
315
|
+
}
|
|
316
|
+
// Generate both MulmoScript formats
|
|
317
|
+
console.log("Generating MulmoScript JSON files...");
|
|
318
|
+
const mulmoScriptPath = generateMulmoScriptImage(notes, slideCount, outputFolder, lang);
|
|
319
|
+
console.log(`✓ Created ${mulmoScriptPath} (PNG format)`);
|
|
320
|
+
const markdownScriptPath = generateMulmoScriptMarkdown(notes, slideMarkdowns, outputFolder, lang);
|
|
321
|
+
console.log(`✓ Created ${markdownScriptPath} (Markdown format)`);
|
|
322
|
+
// Cleanup
|
|
323
|
+
cleanupTempFiles(outputFolder);
|
|
324
|
+
console.log(`\n✓ Successfully generated MulmoScript with ${slideCount} slides`);
|
|
325
|
+
return {
|
|
326
|
+
mulmoScriptPath,
|
|
327
|
+
markdownScriptPath,
|
|
328
|
+
slideCount,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
async function main() {
|
|
332
|
+
const argv = await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
333
|
+
.usage("Usage: $0 <marp-file.md> [options]")
|
|
334
|
+
.command("$0 <file>", "Convert Marp markdown to MulmoScript", (yargs) => {
|
|
335
|
+
return yargs.positional("file", {
|
|
336
|
+
describe: "Marp markdown file to convert",
|
|
337
|
+
type: "string",
|
|
338
|
+
demandOption: true,
|
|
339
|
+
});
|
|
340
|
+
})
|
|
341
|
+
.options({
|
|
342
|
+
...lang_1.langOption,
|
|
343
|
+
theme: {
|
|
344
|
+
type: "string",
|
|
345
|
+
description: "Path to custom theme CSS file",
|
|
346
|
+
},
|
|
347
|
+
"allow-local-files": {
|
|
348
|
+
type: "boolean",
|
|
349
|
+
description: "Allow local file access in Marp",
|
|
350
|
+
default: false,
|
|
351
|
+
},
|
|
352
|
+
g: {
|
|
353
|
+
alias: "generate-text",
|
|
354
|
+
type: "boolean",
|
|
355
|
+
description: "Generate narration text using LLM",
|
|
356
|
+
default: false,
|
|
357
|
+
},
|
|
358
|
+
})
|
|
359
|
+
.help()
|
|
360
|
+
.parse();
|
|
361
|
+
await convertMarp({
|
|
362
|
+
inputPath: argv.file,
|
|
363
|
+
lang: argv.l,
|
|
364
|
+
themePath: argv.theme,
|
|
365
|
+
allowLocalFiles: argv["allow-local-files"],
|
|
366
|
+
generateText: argv.g,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
if (require.main === module) {
|
|
370
|
+
main().catch((error) => {
|
|
371
|
+
console.error("\n✗ Error:", error instanceof Error ? error.message : String(error));
|
|
372
|
+
process.exit(1);
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=marp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marp.js","sourceRoot":"","sources":["../../src/convert/marp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { type SupportedLang } from "../utils/lang";
|
|
3
|
+
export interface ConvertPdfOptions {
|
|
4
|
+
inputPath: string;
|
|
5
|
+
outputDir?: string;
|
|
6
|
+
lang?: SupportedLang;
|
|
7
|
+
generateText?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ConvertPdfResult {
|
|
10
|
+
mulmoScriptPath: string;
|
|
11
|
+
slideCount: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function convertPdf(options: ConvertPdfOptions): Promise<ConvertPdfResult>;
|
|
14
|
+
//# sourceMappingURL=pdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../src/convert/pdf.ts"],"names":[],"mappings":";AAMA,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAQ5E,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0DtF"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.convertPdf = convertPdf;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const yargs_1 = __importDefault(require("yargs"));
|
|
44
|
+
const helpers_1 = require("yargs/helpers");
|
|
45
|
+
const lang_1 = require("../utils/lang");
|
|
46
|
+
const pdf_1 = require("../utils/pdf");
|
|
47
|
+
async function convertPdf(options) {
|
|
48
|
+
const { inputPath, lang, generateText = false } = options;
|
|
49
|
+
const resolvedLang = (0, lang_1.resolveLang)(lang);
|
|
50
|
+
const pdfFile = path.resolve(inputPath);
|
|
51
|
+
if (!fs.existsSync(pdfFile)) {
|
|
52
|
+
throw new Error(`File not found: ${pdfFile}`);
|
|
53
|
+
}
|
|
54
|
+
const basename = path.basename(pdfFile, ".pdf");
|
|
55
|
+
const outputDir = options.outputDir || path.join("scripts", basename);
|
|
56
|
+
const imagesDir = path.join(outputDir, "images");
|
|
57
|
+
// Create output directories
|
|
58
|
+
if (!fs.existsSync(outputDir)) {
|
|
59
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
console.log(`Converting ${pdfFile} to ${outputDir}/`);
|
|
62
|
+
// Convert PDF to PNG images
|
|
63
|
+
console.log("Converting PDF to images...");
|
|
64
|
+
const { slideCount } = (0, pdf_1.convertPdfToImages)({
|
|
65
|
+
pdfPath: pdfFile,
|
|
66
|
+
imagesDir,
|
|
67
|
+
basename,
|
|
68
|
+
});
|
|
69
|
+
// Extract text from PDF if generating narration
|
|
70
|
+
const extractedTexts = [];
|
|
71
|
+
if (generateText) {
|
|
72
|
+
console.log("Extracting text from PDF...");
|
|
73
|
+
const pageTexts = await (0, pdf_1.extractTextFromPdf)(pdfFile);
|
|
74
|
+
pageTexts.forEach((page) => {
|
|
75
|
+
extractedTexts[page.pageNumber] = page.text;
|
|
76
|
+
});
|
|
77
|
+
console.log(`Extracted text from ${pageTexts.length} pages`);
|
|
78
|
+
}
|
|
79
|
+
// Build MulmoScript
|
|
80
|
+
const { mulmoScript } = await (0, pdf_1.buildMulmoScriptFromImages)({
|
|
81
|
+
slideCount,
|
|
82
|
+
imagesDir,
|
|
83
|
+
basename,
|
|
84
|
+
lang: resolvedLang,
|
|
85
|
+
extractedTexts,
|
|
86
|
+
generateText,
|
|
87
|
+
title: basename,
|
|
88
|
+
});
|
|
89
|
+
// Write MulmoScript to JSON file
|
|
90
|
+
const jsonPath = path.join(outputDir, "mulmo_script.json");
|
|
91
|
+
(0, pdf_1.writeMulmoScript)(mulmoScript, jsonPath);
|
|
92
|
+
return {
|
|
93
|
+
mulmoScriptPath: jsonPath,
|
|
94
|
+
slideCount,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async function main() {
|
|
98
|
+
const argv = await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
99
|
+
.usage("Usage: $0 <pdf-file> [options]")
|
|
100
|
+
.command("$0 <file>", "Convert PDF to MulmoScript", (yargs) => {
|
|
101
|
+
return yargs.positional("file", {
|
|
102
|
+
describe: "PDF file to convert",
|
|
103
|
+
type: "string",
|
|
104
|
+
demandOption: true,
|
|
105
|
+
});
|
|
106
|
+
})
|
|
107
|
+
.options({
|
|
108
|
+
...lang_1.langOption,
|
|
109
|
+
g: {
|
|
110
|
+
alias: "generate-text",
|
|
111
|
+
type: "boolean",
|
|
112
|
+
description: "Generate narration text using LLM",
|
|
113
|
+
default: false,
|
|
114
|
+
},
|
|
115
|
+
})
|
|
116
|
+
.help()
|
|
117
|
+
.parse();
|
|
118
|
+
await convertPdf({
|
|
119
|
+
inputPath: argv.file,
|
|
120
|
+
lang: argv.l,
|
|
121
|
+
generateText: argv.g,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (require.main === module) {
|
|
125
|
+
main().catch((error) => {
|
|
126
|
+
console.error("Error:", error.message);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/convert/pdf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type SupportedLang } from "../utils/lang";
|
|
2
|
+
export interface ConvertPptxOptions {
|
|
3
|
+
inputPath: string;
|
|
4
|
+
outputDir?: string;
|
|
5
|
+
lang?: SupportedLang;
|
|
6
|
+
generateText?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface ConvertPptxResult {
|
|
9
|
+
mulmoScriptPath: string;
|
|
10
|
+
slideCount: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function convertPptx(options: ConvertPptxOptions): Promise<ConvertPptxResult>;
|
|
13
|
+
//# sourceMappingURL=pptx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pptx.d.ts","sourceRoot":"","sources":["../../src/convert/pptx.ts"],"names":[],"mappings":"AAMA,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAG5E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoEzF"}
|