@bendyline/squisq-cli 1.1.5 → 1.1.6
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/dist/api.d.ts +45 -14
- package/dist/api.js +393 -304
- package/dist/api.js.map +1 -1
- package/dist/index.d.ts +2 -12
- package/dist/index.js +722 -20
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/__tests__/convert.test.d.ts +0 -7
- package/dist/__tests__/convert.test.d.ts.map +0 -1
- package/dist/__tests__/convert.test.js +0 -127
- package/dist/__tests__/convert.test.js.map +0 -1
- package/dist/__tests__/html-export.test.d.ts +0 -8
- package/dist/__tests__/html-export.test.d.ts.map +0 -1
- package/dist/__tests__/html-export.test.js +0 -126
- package/dist/__tests__/html-export.test.js.map +0 -1
- package/dist/__tests__/readInput.test.d.ts +0 -5
- package/dist/__tests__/readInput.test.d.ts.map +0 -1
- package/dist/__tests__/readInput.test.js +0 -120
- package/dist/__tests__/readInput.test.js.map +0 -1
- package/dist/api.d.ts.map +0 -1
- package/dist/commands/convert.d.ts +0 -15
- package/dist/commands/convert.d.ts.map +0 -1
- package/dist/commands/convert.js +0 -264
- package/dist/commands/convert.js.map +0 -1
- package/dist/commands/video.d.ts +0 -12
- package/dist/commands/video.d.ts.map +0 -1
- package/dist/commands/video.js +0 -122
- package/dist/commands/video.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/util/detectFfmpeg.d.ts +0 -15
- package/dist/util/detectFfmpeg.d.ts.map +0 -1
- package/dist/util/detectFfmpeg.js +0 -29
- package/dist/util/detectFfmpeg.js.map +0 -1
- package/dist/util/nativeEncoder.d.ts +0 -27
- package/dist/util/nativeEncoder.d.ts.map +0 -1
- package/dist/util/nativeEncoder.js +0 -106
- package/dist/util/nativeEncoder.js.map +0 -1
- package/dist/util/readInput.d.ts +0 -31
- package/dist/util/readInput.d.ts.map +0 -1
- package/dist/util/readInput.js +0 -142
- package/dist/util/readInput.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readInput.test.js","sourceRoot":"","sources":["../../src/__tests__/readInput.test.ts"],"names":[],"mappings":"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"}
|
package/dist/api.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAM9E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,kCAAkC;AAClC,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IAEnB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,mDAAmD;IACnD,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,gDAAgD;IAChD,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAErC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IAEnB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA8L/B;AAmID,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qCAAqC;AACrC,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxF"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* convert command
|
|
3
|
-
*
|
|
4
|
-
* Reads a markdown file, ZIP/DBK container, or folder and exports to
|
|
5
|
-
* all supported formats: DOCX, PPTX, PDF, HTML, and container ZIP (.dbk).
|
|
6
|
-
*
|
|
7
|
-
* Supports optional --theme and --transform flags to apply a squisq theme
|
|
8
|
-
* and/or transform style before exporting.
|
|
9
|
-
*
|
|
10
|
-
* Usage:
|
|
11
|
-
* squisq convert <input> [--output-dir <dir>] [--formats <list>] [--theme <id>] [--transform <style>]
|
|
12
|
-
*/
|
|
13
|
-
import type { Command } from 'commander';
|
|
14
|
-
export declare function registerConvertCommand(program: Command): void;
|
|
15
|
-
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB7D"}
|
package/dist/commands/convert.js
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* convert command
|
|
3
|
-
*
|
|
4
|
-
* Reads a markdown file, ZIP/DBK container, or folder and exports to
|
|
5
|
-
* all supported formats: DOCX, PPTX, PDF, HTML, and container ZIP (.dbk).
|
|
6
|
-
*
|
|
7
|
-
* Supports optional --theme and --transform flags to apply a squisq theme
|
|
8
|
-
* and/or transform style before exporting.
|
|
9
|
-
*
|
|
10
|
-
* Usage:
|
|
11
|
-
* squisq convert <input> [--output-dir <dir>] [--formats <list>] [--theme <id>] [--transform <style>]
|
|
12
|
-
*/
|
|
13
|
-
import { writeFile, mkdir } from 'node:fs/promises';
|
|
14
|
-
import { dirname, basename, extname, join, resolve } from 'node:path';
|
|
15
|
-
import { readInput } from '../util/readInput.js';
|
|
16
|
-
const ALL_FORMATS = ['docx', 'pptx', 'pdf', 'html', 'htmlzip', 'epub', 'dbk'];
|
|
17
|
-
function parseFormats(value) {
|
|
18
|
-
const requested = value.split(',').map((s) => s.trim().toLowerCase());
|
|
19
|
-
const valid = [];
|
|
20
|
-
for (const r of requested) {
|
|
21
|
-
if (ALL_FORMATS.includes(r)) {
|
|
22
|
-
valid.push(r);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
console.warn(`Unknown format "${r}" — skipping. Valid: ${ALL_FORMATS.join(', ')}`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
if (valid.length === 0) {
|
|
29
|
-
throw new Error(`No valid formats specified. Valid: ${ALL_FORMATS.join(', ')}`);
|
|
30
|
-
}
|
|
31
|
-
return valid;
|
|
32
|
-
}
|
|
33
|
-
export function registerConvertCommand(program) {
|
|
34
|
-
program
|
|
35
|
-
.command('convert')
|
|
36
|
-
.description('Convert a markdown document to DOCX, PPTX, PDF, HTML, and DBK container formats')
|
|
37
|
-
.argument('<input>', 'Path to .md file, .zip/.dbk container, or folder')
|
|
38
|
-
.option('-o, --output-dir <dir>', 'Output directory (default: same as input)')
|
|
39
|
-
.option('-f, --formats <list>', `Comma-separated formats to produce (default: all). Valid: ${ALL_FORMATS.join(', ')}`)
|
|
40
|
-
.option('-t, --theme <id>', 'Squisq theme ID to apply (e.g., documentary, cinematic, bold)')
|
|
41
|
-
.option('--transform <style>', 'Transform style to apply before export (e.g., documentary, magazine, minimal)')
|
|
42
|
-
.action(async (inputPath, opts) => {
|
|
43
|
-
try {
|
|
44
|
-
await runConvert(inputPath, opts);
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
48
|
-
console.error(`Error: ${message}`);
|
|
49
|
-
process.exitCode = 1;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
async function runConvert(inputPath, opts) {
|
|
54
|
-
const resolvedInput = resolve(inputPath);
|
|
55
|
-
// Determine which formats to produce
|
|
56
|
-
const formats = opts.formats ? parseFormats(opts.formats) : [...ALL_FORMATS];
|
|
57
|
-
// Determine output directory and base filename
|
|
58
|
-
const outputDir = opts.outputDir ? resolve(opts.outputDir) : dirname(resolvedInput);
|
|
59
|
-
const inputBasename = basename(resolvedInput);
|
|
60
|
-
const inputExt = extname(inputBasename);
|
|
61
|
-
const baseName = inputExt ? inputBasename.slice(0, -inputExt.length) : inputBasename;
|
|
62
|
-
// Ensure output directory exists
|
|
63
|
-
await mkdir(outputDir, { recursive: true });
|
|
64
|
-
// Validate theme and transform IDs
|
|
65
|
-
if (opts.theme) {
|
|
66
|
-
const { getAvailableThemes } = await import('@bendyline/squisq/schemas');
|
|
67
|
-
const themes = getAvailableThemes();
|
|
68
|
-
if (!themes.includes(opts.theme)) {
|
|
69
|
-
throw new Error(`Unknown theme "${opts.theme}". Available: ${themes.join(', ')}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (opts.transform) {
|
|
73
|
-
const { getTransformStyleIds } = await import('@bendyline/squisq/transform');
|
|
74
|
-
const styles = getTransformStyleIds();
|
|
75
|
-
if (!styles.includes(opts.transform)) {
|
|
76
|
-
throw new Error(`Unknown transform style "${opts.transform}". Available: ${styles.join(', ')}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
console.error(`Reading: ${resolvedInput}`);
|
|
80
|
-
const result = await readInput(resolvedInput);
|
|
81
|
-
const { container } = result;
|
|
82
|
-
if (!result.markdownDoc) {
|
|
83
|
-
throw new Error('Convert command requires a markdown document. JSON Doc input is not supported for convert — use the video command instead.');
|
|
84
|
-
}
|
|
85
|
-
// Apply transform if requested
|
|
86
|
-
let exportMarkdownDoc = result.markdownDoc;
|
|
87
|
-
if (opts.transform) {
|
|
88
|
-
exportMarkdownDoc = await applyTransformToMarkdown(result.markdownDoc, container, opts.transform, opts.theme);
|
|
89
|
-
console.error(` Applied transform: ${opts.transform}`);
|
|
90
|
-
}
|
|
91
|
-
const themeId = opts.theme;
|
|
92
|
-
for (const format of formats) {
|
|
93
|
-
const outPath = join(outputDir, `${baseName}.${format}`);
|
|
94
|
-
switch (format) {
|
|
95
|
-
case 'docx': {
|
|
96
|
-
const { markdownDocToDocx } = await import('@bendyline/squisq-formats/docx');
|
|
97
|
-
const buf = await markdownDocToDocx(exportMarkdownDoc, { themeId });
|
|
98
|
-
await writeFile(outPath, Buffer.from(buf));
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
case 'pptx': {
|
|
102
|
-
const { markdownDocToPptx } = await import('@bendyline/squisq-formats/pptx');
|
|
103
|
-
// Collect images from container for PPTX embedding
|
|
104
|
-
const images = await collectContainerImages(container);
|
|
105
|
-
const buf = await markdownDocToPptx(exportMarkdownDoc, { themeId, images });
|
|
106
|
-
await writeFile(outPath, Buffer.from(buf));
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
case 'pdf': {
|
|
110
|
-
const { markdownDocToPdf } = await import('@bendyline/squisq-formats/pdf');
|
|
111
|
-
const buf = await markdownDocToPdf(exportMarkdownDoc, { themeId });
|
|
112
|
-
await writeFile(outPath, Buffer.from(buf));
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
case 'html': {
|
|
116
|
-
const { markdownToDoc } = await import('@bendyline/squisq/doc');
|
|
117
|
-
const { docToHtml } = await import('@bendyline/squisq-formats/html');
|
|
118
|
-
const { PLAYER_BUNDLE } = await import('@bendyline/squisq-react/standalone-source');
|
|
119
|
-
const doc = markdownToDoc(exportMarkdownDoc);
|
|
120
|
-
const images = await collectImagesForHtml(doc, container);
|
|
121
|
-
const html = docToHtml(doc, {
|
|
122
|
-
playerScript: PLAYER_BUNDLE,
|
|
123
|
-
images,
|
|
124
|
-
title: baseName,
|
|
125
|
-
mode: 'static',
|
|
126
|
-
themeId,
|
|
127
|
-
});
|
|
128
|
-
await writeFile(outPath, html, 'utf-8');
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
case 'htmlzip': {
|
|
132
|
-
const { markdownToDoc } = await import('@bendyline/squisq/doc');
|
|
133
|
-
const { docToHtmlZip } = await import('@bendyline/squisq-formats/html');
|
|
134
|
-
const { PLAYER_BUNDLE } = await import('@bendyline/squisq-react/standalone-source');
|
|
135
|
-
const doc = markdownToDoc(exportMarkdownDoc);
|
|
136
|
-
const images = await collectImagesForHtml(doc, container);
|
|
137
|
-
const blob = await docToHtmlZip(doc, {
|
|
138
|
-
playerScript: PLAYER_BUNDLE,
|
|
139
|
-
images,
|
|
140
|
-
title: baseName,
|
|
141
|
-
mode: 'static',
|
|
142
|
-
themeId,
|
|
143
|
-
});
|
|
144
|
-
const buf = Buffer.from(await blob.arrayBuffer());
|
|
145
|
-
await writeFile(outPath.replace(/\.htmlzip$/, '.html.zip'), buf);
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
case 'epub': {
|
|
149
|
-
const { markdownDocToEpub } = await import('@bendyline/squisq-formats/epub');
|
|
150
|
-
const images = await collectContainerImages(container);
|
|
151
|
-
// Collect audio narration from container if Doc has audio segments
|
|
152
|
-
const epubAudio = new Map();
|
|
153
|
-
const audioSegments = result.doc?.audio?.segments;
|
|
154
|
-
if (audioSegments?.length) {
|
|
155
|
-
for (const seg of audioSegments) {
|
|
156
|
-
const data = await container.readFile(seg.src);
|
|
157
|
-
if (data)
|
|
158
|
-
epubAudio.set(seg.src, data);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
const hasNarration = epubAudio.size > 0;
|
|
162
|
-
const buf = await markdownDocToEpub(exportMarkdownDoc, {
|
|
163
|
-
title: baseName,
|
|
164
|
-
themeId,
|
|
165
|
-
images,
|
|
166
|
-
audio: hasNarration ? epubAudio : undefined,
|
|
167
|
-
audioSegments: hasNarration ? audioSegments : undefined,
|
|
168
|
-
totalDuration: hasNarration ? result.doc?.duration : undefined,
|
|
169
|
-
});
|
|
170
|
-
await writeFile(outPath, Buffer.from(buf));
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
case 'dbk': {
|
|
174
|
-
const { containerToZip } = await import('@bendyline/squisq-formats/container');
|
|
175
|
-
const blob = await containerToZip(container);
|
|
176
|
-
const buf = await blob.arrayBuffer();
|
|
177
|
-
await writeFile(outPath, Buffer.from(buf));
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
console.error(` ✓ ${outPath}`);
|
|
182
|
-
}
|
|
183
|
-
console.error('Done.');
|
|
184
|
-
}
|
|
185
|
-
// ============================================
|
|
186
|
-
// Transform Pipeline
|
|
187
|
-
// ============================================
|
|
188
|
-
/**
|
|
189
|
-
* Apply a transform style to a MarkdownDocument.
|
|
190
|
-
* Pipeline: MarkdownDocument → Doc → applyTransform → docToMarkdown → MarkdownDocument
|
|
191
|
-
*/
|
|
192
|
-
async function applyTransformToMarkdown(markdownDoc, container, transformStyle, themeId) {
|
|
193
|
-
const { markdownToDoc, docToMarkdown } = await import('@bendyline/squisq/doc');
|
|
194
|
-
const { applyTransform, extractDocImages } = await import('@bendyline/squisq/transform');
|
|
195
|
-
const doc = markdownToDoc(markdownDoc);
|
|
196
|
-
// Extract image metadata from the doc for transform interleaving
|
|
197
|
-
const images = extractDocImages(doc.blocks);
|
|
198
|
-
const result = applyTransform(doc, transformStyle, {
|
|
199
|
-
themeId,
|
|
200
|
-
images,
|
|
201
|
-
});
|
|
202
|
-
return docToMarkdown(result.doc);
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Collect images for HTML export, keying each by both its container path and
|
|
206
|
-
* its filename. The standalone player resolves by exact key first then by
|
|
207
|
-
* filename, so both keyings handle path mismatches between how the Doc
|
|
208
|
-
* references images and how they're stored in the container.
|
|
209
|
-
*
|
|
210
|
-
* Only images referenced by the Doc are included — unreferenced container
|
|
211
|
-
* images would bloat the HTML output unnecessarily.
|
|
212
|
-
*/
|
|
213
|
-
async function collectImagesForHtml(doc, container) {
|
|
214
|
-
const { collectImagePaths, extractFilename } = await import('@bendyline/squisq-formats/html');
|
|
215
|
-
const images = new Map();
|
|
216
|
-
const docPaths = collectImagePaths(doc);
|
|
217
|
-
// Try exact paths first
|
|
218
|
-
const needByFilename = new Set();
|
|
219
|
-
for (const imgPath of docPaths) {
|
|
220
|
-
const data = await container.readFile(imgPath);
|
|
221
|
-
if (data) {
|
|
222
|
-
images.set(imgPath, data);
|
|
223
|
-
const filename = extractFilename(imgPath);
|
|
224
|
-
if (filename !== imgPath)
|
|
225
|
-
images.set(filename, data);
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
needByFilename.add(extractFilename(imgPath));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
// For any doc paths that didn't resolve, scan the container for a file
|
|
232
|
-
// with the same basename (handles "images/hero.jpg" vs "hero.jpg" mismatches).
|
|
233
|
-
if (needByFilename.size > 0) {
|
|
234
|
-
const files = await container.listFiles();
|
|
235
|
-
for (const file of files) {
|
|
236
|
-
const filename = extractFilename(file.path);
|
|
237
|
-
if (needByFilename.has(filename)) {
|
|
238
|
-
const data = await container.readFile(file.path);
|
|
239
|
-
if (data) {
|
|
240
|
-
images.set(filename, data);
|
|
241
|
-
images.set(file.path, data);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
return images;
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Collect all image files from a container as a Map<path, ArrayBuffer>.
|
|
250
|
-
*/
|
|
251
|
-
async function collectContainerImages(container) {
|
|
252
|
-
const images = new Map();
|
|
253
|
-
const files = await container.listFiles();
|
|
254
|
-
for (const file of files) {
|
|
255
|
-
if (/\.(jpg|jpeg|png|gif|webp|svg|bmp|avif)$/i.test(file.path)) {
|
|
256
|
-
const data = await container.readFile(file.path);
|
|
257
|
-
if (data) {
|
|
258
|
-
images.set(file.path, data);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return images;
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=convert.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/video.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* video command
|
|
3
|
-
*
|
|
4
|
-
* Renders a squisq document to MP4 video by delegating to the
|
|
5
|
-
* programmatic renderDocToMp4 API.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* squisq video <input> [-o output.mp4] [--fps 30] [--quality normal] [--orientation landscape]
|
|
9
|
-
*/
|
|
10
|
-
import type { Command } from 'commander';
|
|
11
|
-
export declare function registerVideoCommand(program: Command): void;
|
|
12
|
-
//# sourceMappingURL=video.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC3D"}
|
package/dist/commands/video.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* video command
|
|
3
|
-
*
|
|
4
|
-
* Renders a squisq document to MP4 video by delegating to the
|
|
5
|
-
* programmatic renderDocToMp4 API.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* squisq video <input> [-o output.mp4] [--fps 30] [--quality normal] [--orientation landscape]
|
|
9
|
-
*/
|
|
10
|
-
import { mkdir } from 'node:fs/promises';
|
|
11
|
-
import { dirname, basename, extname, resolve } from 'node:path';
|
|
12
|
-
import { readInput } from '../util/readInput.js';
|
|
13
|
-
import { renderDocToMp4 } from '../api.js';
|
|
14
|
-
const VALID_QUALITIES = ['draft', 'normal', 'high'];
|
|
15
|
-
const VALID_ORIENTATIONS = ['landscape', 'portrait'];
|
|
16
|
-
const VALID_CAPTIONS = ['off', 'standard', 'social'];
|
|
17
|
-
export function registerVideoCommand(program) {
|
|
18
|
-
program
|
|
19
|
-
.command('video')
|
|
20
|
-
.description('Render a squisq document to MP4 video')
|
|
21
|
-
.argument('<input>', 'Path to .md file, .zip/.dbk container, or folder')
|
|
22
|
-
.argument('[output]', 'Output MP4 path (default: <input>.mp4)')
|
|
23
|
-
.option('-o, --output <path>', 'Output MP4 path (default: <input>.mp4)')
|
|
24
|
-
.option('--fps <number>', 'Frames per second (default: 30)', '30')
|
|
25
|
-
.option('--quality <level>', `Encoding quality: ${VALID_QUALITIES.join(', ')} (default: normal)`, 'normal')
|
|
26
|
-
.option('--orientation <orient>', `Video orientation: ${VALID_ORIENTATIONS.join(', ')} (default: landscape)`, 'landscape')
|
|
27
|
-
.option('--captions <style>', `Caption style: ${VALID_CAPTIONS.join(', ')} (default: off)`, 'off')
|
|
28
|
-
.option('--width <pixels>', 'Override video width')
|
|
29
|
-
.option('--height <pixels>', 'Override video height')
|
|
30
|
-
.action(async (inputPath, outputArg, opts) => {
|
|
31
|
-
try {
|
|
32
|
-
// Positional output arg takes precedence, then -o flag
|
|
33
|
-
if (outputArg && !opts.output) {
|
|
34
|
-
opts.output = outputArg;
|
|
35
|
-
}
|
|
36
|
-
await runVideo(inputPath, opts);
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
40
|
-
console.error(`Error: ${message}`);
|
|
41
|
-
process.exitCode = 1;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
async function runVideo(inputPath, opts) {
|
|
46
|
-
const resolvedInput = resolve(inputPath);
|
|
47
|
-
// Validate options
|
|
48
|
-
const fps = parseInt(opts.fps ?? '30', 10);
|
|
49
|
-
if (isNaN(fps) || fps < 1 || fps > 120) {
|
|
50
|
-
throw new Error('FPS must be a number between 1 and 120');
|
|
51
|
-
}
|
|
52
|
-
const quality = opts.quality ?? 'normal';
|
|
53
|
-
if (!VALID_QUALITIES.includes(quality)) {
|
|
54
|
-
throw new Error(`Invalid quality "${quality}". Valid: ${VALID_QUALITIES.join(', ')}`);
|
|
55
|
-
}
|
|
56
|
-
const orientation = opts.orientation ?? 'landscape';
|
|
57
|
-
if (!VALID_ORIENTATIONS.includes(orientation)) {
|
|
58
|
-
throw new Error(`Invalid orientation "${orientation}". Valid: ${VALID_ORIENTATIONS.join(', ')}`);
|
|
59
|
-
}
|
|
60
|
-
const captions = opts.captions ?? 'off';
|
|
61
|
-
if (!VALID_CAPTIONS.includes(captions)) {
|
|
62
|
-
throw new Error(`Invalid captions "${captions}". Valid: ${VALID_CAPTIONS.join(', ')}`);
|
|
63
|
-
}
|
|
64
|
-
const captionStyle = captions === 'off' ? undefined : captions;
|
|
65
|
-
// Determine output path
|
|
66
|
-
const inputBasename = basename(resolvedInput);
|
|
67
|
-
const inputExt = extname(inputBasename);
|
|
68
|
-
const baseName = inputExt ? inputBasename.slice(0, -inputExt.length) : inputBasename;
|
|
69
|
-
const outputPath = opts.output
|
|
70
|
-
? resolve(opts.output)
|
|
71
|
-
: resolve(dirname(resolvedInput), `${baseName}.mp4`);
|
|
72
|
-
// Ensure output directory exists
|
|
73
|
-
await mkdir(dirname(outputPath), { recursive: true });
|
|
74
|
-
// ── Step 1: Read input ──────────────────────────────────────────
|
|
75
|
-
console.error(`Reading: ${resolvedInput}`);
|
|
76
|
-
const result = await readInput(resolvedInput);
|
|
77
|
-
const { container } = result;
|
|
78
|
-
// ── Step 2: Get or parse Doc ────────────────────────────────────
|
|
79
|
-
let doc;
|
|
80
|
-
if (result.doc) {
|
|
81
|
-
console.error('Using pre-built Doc JSON');
|
|
82
|
-
doc = result.doc;
|
|
83
|
-
}
|
|
84
|
-
else if (result.markdownDoc) {
|
|
85
|
-
const { markdownToDoc } = await import('@bendyline/squisq/doc');
|
|
86
|
-
doc = markdownToDoc(result.markdownDoc);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
throw new Error('No document found in input');
|
|
90
|
-
}
|
|
91
|
-
console.error(`Rendering: ${fps} fps, quality: ${quality}, orientation: ${orientation}, captions: ${captions}`);
|
|
92
|
-
// ── Step 3: Render via programmatic API ─────────────────────────
|
|
93
|
-
const result2 = await renderDocToMp4(doc, container, {
|
|
94
|
-
outputPath,
|
|
95
|
-
fps,
|
|
96
|
-
quality: quality,
|
|
97
|
-
orientation: orientation,
|
|
98
|
-
width: opts.width ? parseInt(opts.width, 10) : undefined,
|
|
99
|
-
height: opts.height ? parseInt(opts.height, 10) : undefined,
|
|
100
|
-
captionStyle,
|
|
101
|
-
coverPreRoll: 2,
|
|
102
|
-
onProgress: (phase, percent) => {
|
|
103
|
-
writeProgress(phase, percent, 100);
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
clearProgress();
|
|
107
|
-
console.error(` ✓ ${outputPath} (${result2.duration.toFixed(1)}s, ${result2.frameCount} frames)`);
|
|
108
|
-
console.error('Done.');
|
|
109
|
-
}
|
|
110
|
-
// ── Progress helpers ──────────────────────────────────────────────
|
|
111
|
-
const BAR_WIDTH = 30;
|
|
112
|
-
function writeProgress(label, current, total, detail) {
|
|
113
|
-
const pct = Math.min(100, Math.round((current / total) * 100));
|
|
114
|
-
const filled = Math.round((pct / 100) * BAR_WIDTH);
|
|
115
|
-
const bar = '█'.repeat(filled) + '░'.repeat(BAR_WIDTH - filled);
|
|
116
|
-
const suffix = detail ? ` (${detail})` : '';
|
|
117
|
-
process.stderr.write(`\r ${label}: ${bar} ${pct}%${suffix} `);
|
|
118
|
-
}
|
|
119
|
-
function clearProgress() {
|
|
120
|
-
process.stderr.write('\r' + ' '.repeat(80) + '\r');
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=video.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAgB3C,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAC7D,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,UAAU,CAAU,CAAC;AAC9D,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,SAAS,EAAE,kDAAkD,CAAC;SACvE,QAAQ,CAAC,UAAU,EAAE,wCAAwC,CAAC;SAC9D,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,EAAE,IAAI,CAAC;SACjE,MAAM,CACL,mBAAmB,EACnB,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EACnE,QAAQ,CACT;SACA,MAAM,CACL,wBAAwB,EACxB,sBAAsB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAC1E,WAAW,CACZ;SACA,MAAM,CACL,oBAAoB,EACpB,kBAAkB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAC5D,KAAK,CACN;SACA,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,SAA6B,EAAE,IAAyB,EAAE,EAAE;QAC5F,IAAI,CAAC;YACH,uDAAuD;YACvD,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1B,CAAC;YACD,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,SAAiB,EAAE,IAAyB;IAClE,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEzC,mBAAmB;IACnB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAA2C,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,aAAa,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;IACpD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAkD,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CACb,wBAAwB,WAAW,aAAa,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;IACxC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAA2C,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,aAAa,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,YAAY,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,QAAkC,CAAC;IAE1F,wBAAwB;IACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IACrF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;QAC5B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACtB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;IAEvD,iCAAiC;IACjC,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,mEAAmE;IACnE,OAAO,CAAC,KAAK,CAAC,YAAY,aAAa,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7B,mEAAmE;IACnE,IAAI,GAAQ,CAAC;IACb,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACnB,CAAC;SAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAChE,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,KAAK,CACX,cAAc,GAAG,kBAAkB,OAAO,kBAAkB,WAAW,eAAe,QAAQ,EAAE,CACjG,CAAC;IAEF,mEAAmE;IACnE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE;QACnD,UAAU;QACV,GAAG;QACH,OAAO,EAAE,OAAuB;QAChC,WAAW,EAAE,WAA+B;QAC5C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACxD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3D,YAAY;QACZ,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7B,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;KACF,CAAC,CAAC;IAEH,aAAa,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CACX,OAAO,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,UAAU,UAAU,CACpF,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,qEAAqE;AAErE,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,SAAS,aAAa,CAAC,KAAa,EAAE,OAAe,EAAE,KAAa,EAAE,MAAe;IACnF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,GAAG,IAAI,MAAM,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* detectFfmpeg
|
|
3
|
-
*
|
|
4
|
-
* Checks whether a native ffmpeg binary is available on the system PATH.
|
|
5
|
-
* Returns the absolute path to the binary if found, or null if not.
|
|
6
|
-
*
|
|
7
|
-
* Uses `which` on macOS/Linux and `where` on Windows.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Detect whether native ffmpeg is installed and available on PATH.
|
|
11
|
-
*
|
|
12
|
-
* @returns Absolute path to ffmpeg binary, or null if not found
|
|
13
|
-
*/
|
|
14
|
-
export declare function detectFfmpeg(): Promise<string | null>;
|
|
15
|
-
//# sourceMappingURL=detectFfmpeg.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detectFfmpeg.d.ts","sourceRoot":"","sources":["../../src/util/detectFfmpeg.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAc3D"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* detectFfmpeg
|
|
3
|
-
*
|
|
4
|
-
* Checks whether a native ffmpeg binary is available on the system PATH.
|
|
5
|
-
* Returns the absolute path to the binary if found, or null if not.
|
|
6
|
-
*
|
|
7
|
-
* Uses `which` on macOS/Linux and `where` on Windows.
|
|
8
|
-
*/
|
|
9
|
-
import { execFile } from 'node:child_process';
|
|
10
|
-
/**
|
|
11
|
-
* Detect whether native ffmpeg is installed and available on PATH.
|
|
12
|
-
*
|
|
13
|
-
* @returns Absolute path to ffmpeg binary, or null if not found
|
|
14
|
-
*/
|
|
15
|
-
export async function detectFfmpeg() {
|
|
16
|
-
const command = process.platform === 'win32' ? 'where' : 'which';
|
|
17
|
-
return new Promise((resolve) => {
|
|
18
|
-
execFile(command, ['ffmpeg'], { timeout: 5000 }, (err, stdout) => {
|
|
19
|
-
if (err || !stdout.trim()) {
|
|
20
|
-
resolve(null);
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
// `which` and `where` can return multiple lines; take the first
|
|
24
|
-
const path = stdout.trim().split('\n')[0].trim();
|
|
25
|
-
resolve(path);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=detectFfmpeg.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detectFfmpeg.js","sourceRoot":"","sources":["../../src/util/detectFfmpeg.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAEjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAC/D,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,gEAAgE;YAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Native FFmpeg Encoder
|
|
3
|
-
*
|
|
4
|
-
* Encodes PNG frames to MP4 using a locally installed ffmpeg binary.
|
|
5
|
-
* Writes frames to a temporary directory, invokes ffmpeg as a child process,
|
|
6
|
-
* and reads the resulting MP4.
|
|
7
|
-
*
|
|
8
|
-
* This is the fast path — used when native ffmpeg is detected on the system.
|
|
9
|
-
* Falls back to the WASM encoder (in @bendyline/squisq-video) when unavailable.
|
|
10
|
-
*/
|
|
11
|
-
import type { VideoExportOptions } from '@bendyline/squisq-video';
|
|
12
|
-
/**
|
|
13
|
-
* Encode frame PNGs to MP4 using native ffmpeg.
|
|
14
|
-
*
|
|
15
|
-
* @param ffmpegPath - Absolute path to the ffmpeg binary
|
|
16
|
-
* @param frames - Array of PNG image bytes (one per frame)
|
|
17
|
-
* @param audio - Optional audio file bytes to mux
|
|
18
|
-
* @param outputPath - Where to write the final MP4
|
|
19
|
-
* @param options - Encoding options (fps, quality, dimensions, progress)
|
|
20
|
-
*/
|
|
21
|
-
export declare function framesToMp4Native(ffmpegPath: string, frames: Uint8Array[], audio: Uint8Array | null, outputPath: string, options?: VideoExportOptions): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* Encode frames using native ffmpeg and return the MP4 bytes (instead of writing to disk).
|
|
24
|
-
* Useful when the caller needs the bytes in memory.
|
|
25
|
-
*/
|
|
26
|
-
export declare function framesToMp4NativeBytes(ffmpegPath: string, frames: Uint8Array[], audio: Uint8Array | null, options?: VideoExportOptions): Promise<Uint8Array>;
|
|
27
|
-
//# sourceMappingURL=nativeEncoder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nativeEncoder.d.ts","sourceRoot":"","sources":["../../src/util/nativeEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAAE,EACpB,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAuFf;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAAE,EACpB,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,UAAU,CAAC,CAWrB"}
|