playwright-recast 0.2.0 → 0.3.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 +52 -4
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/render/renderer.d.ts.map +1 -1
- package/dist/render/renderer.js +20 -4
- package/dist/render/renderer.js.map +1 -1
- package/dist/subtitles/ass-writer.d.ts +18 -0
- package/dist/subtitles/ass-writer.d.ts.map +1 -0
- package/dist/subtitles/ass-writer.js +118 -0
- package/dist/subtitles/ass-writer.js.map +1 -0
- package/dist/subtitles/subtitle-chunker.d.ts +18 -0
- package/dist/subtitles/subtitle-chunker.d.ts.map +1 -0
- package/dist/subtitles/subtitle-chunker.js +138 -0
- package/dist/subtitles/subtitle-chunker.js.map +1 -0
- package/dist/types/render.d.ts +28 -1
- package/dist/types/render.d.ts.map +1 -1
- package/dist/types/render.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,7 +45,8 @@ await Recast
|
|
|
45
45
|
- **Trace-based processing** — Parses Playwright trace.zip (actions, screenshots, network, cursor positions). No manual recording needed.
|
|
46
46
|
- **Smart speed control** — Automatically speeds up idle time, network waits, and navigation while keeping user actions at normal speed.
|
|
47
47
|
- **TTS voiceover** — Generate narration with OpenAI TTS or ElevenLabs. Properly timed with silence padding.
|
|
48
|
-
- **Subtitle generation** — SRT and
|
|
48
|
+
- **Subtitle generation** — SRT, WebVTT, and ASS output. Import external SRT or generate from trace BDD step titles.
|
|
49
|
+
- **Styled subtitle burn-in** — Configurable font, size, color, background box with opacity, padding, position. Smart punctuation-based chunking for single-line display.
|
|
49
50
|
- **playwright-bdd support** — First-class integration with playwright-bdd Gherkin steps. Doc strings become voiceover narration.
|
|
50
51
|
- **Step helpers** — `narrate()`, `zoom()`, `pace()` — importable helpers for Playwright step definitions.
|
|
51
52
|
- **CLI included** — `npx playwright-recast -i trace.zip -o demo.mp4` — no code needed.
|
|
@@ -117,7 +118,21 @@ await Recast
|
|
|
117
118
|
speed: 1.2,
|
|
118
119
|
instructions: 'Professional product demo narration.',
|
|
119
120
|
}))
|
|
120
|
-
.render({
|
|
121
|
+
.render({
|
|
122
|
+
format: 'mp4',
|
|
123
|
+
resolution: '1080p',
|
|
124
|
+
fps: 60,
|
|
125
|
+
burnSubtitles: true,
|
|
126
|
+
subtitleStyle: {
|
|
127
|
+
fontSize: 48,
|
|
128
|
+
primaryColor: '#1a1a1a',
|
|
129
|
+
backgroundColor: '#FFFFFF',
|
|
130
|
+
backgroundOpacity: 0.75,
|
|
131
|
+
padding: 20,
|
|
132
|
+
bold: true,
|
|
133
|
+
chunkOptions: { maxCharsPerLine: 55 },
|
|
134
|
+
},
|
|
135
|
+
})
|
|
121
136
|
.toFile('demo.mp4')
|
|
122
137
|
```
|
|
123
138
|
|
|
@@ -173,11 +188,44 @@ Every stage is optional and composable:
|
|
|
173
188
|
| `.subtitlesFromSrt(path)` | Load subtitles from an external SRT file |
|
|
174
189
|
| `.subtitlesFromTrace()` | Auto-generate subtitles from BDD step titles in trace |
|
|
175
190
|
| `.voiceover(provider)` | Generate TTS audio from subtitle text |
|
|
176
|
-
| `.render(config)` | Render final video (format, resolution, burn
|
|
191
|
+
| `.render(config)` | Render final video (format, resolution, fps, styled subtitle burn-in) |
|
|
177
192
|
| `.toFile(path)` | Execute pipeline and write output |
|
|
178
193
|
|
|
179
194
|
---
|
|
180
195
|
|
|
196
|
+
## Subtitle Styling
|
|
197
|
+
|
|
198
|
+
Burn styled subtitles into the video with full control over appearance:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
.render({
|
|
202
|
+
burnSubtitles: true,
|
|
203
|
+
subtitleStyle: {
|
|
204
|
+
fontFamily: 'Arial', // Any system font
|
|
205
|
+
fontSize: 48, // Pixels (relative to 1080p)
|
|
206
|
+
primaryColor: '#1a1a1a', // Text color (hex)
|
|
207
|
+
backgroundColor: '#FFFFFF', // Box background (hex)
|
|
208
|
+
backgroundOpacity: 0.75, // 0.0 transparent — 1.0 opaque
|
|
209
|
+
padding: 20, // Box padding in px
|
|
210
|
+
bold: true,
|
|
211
|
+
position: 'bottom', // 'bottom' or 'top'
|
|
212
|
+
marginVertical: 50, // Distance from edge
|
|
213
|
+
marginHorizontal: 100, // Side margins (text wraps within)
|
|
214
|
+
wrapStyle: 'smart', // 'smart', 'endOfLine', 'none'
|
|
215
|
+
chunkOptions: { // Split long text into single-line chunks
|
|
216
|
+
maxCharsPerLine: 55, // Split at punctuation when text exceeds this
|
|
217
|
+
minCharsPerChunk: 15, // Merge tiny fragments
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
})
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Punctuation-based chunking** splits long subtitle text into shorter single-line entries. Time is distributed proportionally by character count. Splits at sentence boundaries (`. ! ?`) first, then clause boundaries (`, ; :`) if still too long.
|
|
224
|
+
|
|
225
|
+
Without `subtitleStyle`, `burnSubtitles: true` falls back to default ffmpeg SRT rendering.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
181
229
|
## TTS Providers
|
|
182
230
|
|
|
183
231
|
### OpenAI TTS
|
|
@@ -260,7 +308,7 @@ await base.subtitlesFromSrt('./cs.srt').render({ burnSubtitles: true }).toFile('
|
|
|
260
308
|
|
|
261
309
|
## Roadmap
|
|
262
310
|
|
|
263
|
-
- [
|
|
311
|
+
- [x] **Burned-in subtitles** — Render styled subtitles directly into the video with customizable font, size, color, background box, and position
|
|
264
312
|
- [ ] **Smooth zoom transitions** — Animated crop-and-zoom on elements during specific steps
|
|
265
313
|
- [ ] **Edge TTS provider** — Free TTS without API key using Microsoft Edge's online voices
|
|
266
314
|
- [ ] **Playwright Reporter plugin** — Auto-generate demo videos as part of your test run
|
package/dist/index.d.ts
CHANGED
|
@@ -7,4 +7,8 @@ export type { SpeedConfig, SpeedSegment, SpeedRule, SpeedRuleContext, ActivityTy
|
|
|
7
7
|
export type { SubtitleEntry, SubtitleFormat, SubtitleOptions, SubtitledTrace, } from './types/subtitle.js';
|
|
8
8
|
export type { TtsProvider, TtsOptions, AudioSegment, VoiceoverEntry, VoiceoveredTrace, } from './types/voiceover.js';
|
|
9
9
|
export type { RenderConfig, SubtitleStyle, ZoomKeyframe } from './types/render.js';
|
|
10
|
+
export { writeAss, hexToAss } from './subtitles/ass-writer.js';
|
|
11
|
+
export type { AssResolution } from './subtitles/ass-writer.js';
|
|
12
|
+
export { chunkSubtitles } from './subtitles/subtitle-chunker.js';
|
|
13
|
+
export type { ChunkOptions } from './subtitles/subtitle-chunker.js';
|
|
10
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAG3D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAGxE,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,GACZ,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAE7B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAG3D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAGxE,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,GACZ,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAE7B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGlF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -5,4 +5,7 @@ export { setupRecast, narrate, zoom, pace } from './helpers.js';
|
|
|
5
5
|
// Providers
|
|
6
6
|
export { OpenAIProvider } from './voiceover/providers/openai.js';
|
|
7
7
|
export { ElevenLabsProvider } from './voiceover/providers/elevenlabs.js';
|
|
8
|
+
// Subtitle writers & utilities
|
|
9
|
+
export { writeAss, hexToAss } from './subtitles/ass-writer.js';
|
|
10
|
+
export { chunkSubtitles } from './subtitles/subtitle-chunker.js';
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE3D,qCAAqC;AACrC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE/D,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE3D,qCAAqC;AACrC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE/D,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AA4CxE,+BAA+B;AAC/B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAKpD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA+B3E;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAA;IAC3B,SAAS,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAA;IACnF,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B;AAiKD;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,IAAI,CA6GN"}
|
package/dist/render/renderer.js
CHANGED
|
@@ -3,6 +3,8 @@ import * as path from 'node:path';
|
|
|
3
3
|
import { execFileSync } from 'node:child_process';
|
|
4
4
|
import { resolveResolution } from '../types/render.js';
|
|
5
5
|
import { writeSrt } from '../subtitles/srt-writer.js';
|
|
6
|
+
import { writeAss } from '../subtitles/ass-writer.js';
|
|
7
|
+
import { chunkSubtitles } from '../subtitles/subtitle-chunker.js';
|
|
6
8
|
/**
|
|
7
9
|
* Detect blank/white frames at the start of a video and return the timestamp
|
|
8
10
|
* of the first non-blank frame. Blank frames are identified by file size —
|
|
@@ -218,10 +220,24 @@ export function renderVideo(trace, config, outputPath, tmpDir) {
|
|
|
218
220
|
vFilters.push(`scale=${resolution.width}:${resolution.height}`);
|
|
219
221
|
}
|
|
220
222
|
if (config.burnSubtitles && trace.subtitles && trace.subtitles.length > 0) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
if (config.subtitleStyle) {
|
|
224
|
+
// Styled subtitles via ASS format (background box, custom font, etc.)
|
|
225
|
+
let burnEntries = trace.subtitles;
|
|
226
|
+
if (config.subtitleStyle.chunkOptions) {
|
|
227
|
+
burnEntries = chunkSubtitles(burnEntries, config.subtitleStyle.chunkOptions);
|
|
228
|
+
}
|
|
229
|
+
const assPath = path.join(tmpDir, 'burn-subtitles.ass');
|
|
230
|
+
fs.writeFileSync(assPath, writeAss(burnEntries, config.subtitleStyle, resolution));
|
|
231
|
+
const escapedPath = assPath.replace(/'/g, "'\\''").replace(/:/g, '\\:');
|
|
232
|
+
vFilters.push(`ass='${escapedPath}'`);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
// Plain SRT subtitles (default ffmpeg styling)
|
|
236
|
+
const srtPath = path.join(tmpDir, 'burn-subtitles.srt');
|
|
237
|
+
fs.writeFileSync(srtPath, writeSrt(trace.subtitles));
|
|
238
|
+
const escapedPath = srtPath.replace(/'/g, "'\\''").replace(/:/g, '\\:');
|
|
239
|
+
vFilters.push(`subtitles='${escapedPath}'`);
|
|
240
|
+
}
|
|
225
241
|
}
|
|
226
242
|
if (vFilters.length > 0) {
|
|
227
243
|
ffmpegArgs.push('-vf', vFilters.join(','));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAItD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,MAAc;IACjE,MAAM,SAAS,GAAG,GAAG,CAAA,CAAC,UAAU;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAC,8BAA8B;IACnD,MAAM,cAAc,GAAG,MAAM,CAAA,CAAC,yCAAyC;IAEvE,IAAI,aAAa,GAAG,CAAC,CAAC,CAAA;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACtE,IAAI,CAAC;YACH,YAAY,CAAC,QAAQ,EAAE;gBACrB,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS;gBACvC,WAAW,EAAE,GAAG,EAAE,SAAS;aAC5B,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAErB,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAA;YACxC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;YAExB,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;gBAC3B,aAAa,GAAG,CAAC,CAAA;YACnB,CAAC;iBAAM,CAAC;gBACN,gDAAgD;gBAChD,OAAO,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAK;QACP,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,OAAO,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC;AAcD,SAAS,MAAM,CAAC,IAAc;IAC5B,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CACrB,WAAmB,EACnB,SAA0B,EAC1B,KAAa,EACb,MAAc,EACd,MAAc;IAId,MAAM,QAAQ,GAAc,EAAE,CAAA;IAE9B,qBAAqB;IACrB,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,EAAE;QAC1C,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW;KACjF,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;IACpB,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAEzC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAA;IACtE,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAA;QAE/B,uBAAuB;QACvB,IAAI,QAAQ,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,iBAAiB;QACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,GAAG,MAAM,CAAA;IACjB,CAAC;IACD,4BAA4B;IAC5B,IAAI,MAAM,GAAG,aAAa,GAAG,GAAG,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAA,CAAC,iBAAiB;IACtC,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;QACtD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE1B,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAE9F,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAA;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;YAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;YAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAA;YAClE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAA;YAEnE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,MAAM,EAAE,CAAC,CAAA;QAC/G,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,MAAM,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7E,MAAM,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACvD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAE/E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC3D,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IAE1F,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,WAAmB,EACnB,aAA6B,EAC7B,UAAkB,EAClB,MAAc;IAEd,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAA;IAElD,8CAA8C;IAC9C,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IAC9E,IAAI,WAAW;QAAE,OAAO,WAAW,CAAA;IAEnC,yCAAyC;IACzC,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,EAAE;QAC1C,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW;KACjF,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;IACpB,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAEzC,8EAA8E;IAC9E,kFAAkF;IAClF,0FAA0F;IAC1F,MAAM,aAAa,GAAG,aAAa;SAChC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAE,GAAG,CAAC,aAAwB,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC;QAC1E,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAE,GAAG,CAAC,WAAsB,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC;QAClF,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;IAE9C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAA;IAElD,OAAO,CAAC,GAAG,CAAC,YAAY,aAAa,CAAC,MAAM,qBAAqB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAE7F,uBAAuB;IACvB,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAE,CAAA;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;QACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAA;QAC1C,MAAM,cAAc,GAAG,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAA;QAE3C,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5D,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,cAAc,GAAG,CAAC,KAAK,EAAE;YACtC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK;YACzD,OAAO;SACR,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,CAAA;QAEZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAClI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,2BAA2B;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACxD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAE/E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IAC5D,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IAE1F,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAsB,EACtB,MAAoB,EACpB,UAAkB,EAClB,MAAc;IAEd,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAA;IACzC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAA;IACrC,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAA;IAE5B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,KAAK,CAAA;IACnF,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,cAAc;QAC9C,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QACpE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IAEjE,wDAAwD;IACxD,IAAI,UAAU,GAAG,WAAW,CAAA;IAC5B,MAAM,WAAW,GAAG,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACzD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;QAC1D,MAAM,CAAC;YACL,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU;YAClD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI;YACvD,WAAW;SACZ,CAAC,CAAA;QACF,UAAU,GAAG,WAAW,CAAA;IAE1B,CAAC;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,iFAAiF;IACjF,IAAI,QAAQ,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAC7C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;QAC7D,MAAM,eAAe,GAAG,eAAe;YACrC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;QAC3E,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;YAClD,CAAC,CAAE,eAAe,CAAC,CAAC,CAAE,CAAC,SAAoB;YAC3C,CAAC,CAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,aAAwB,CAAA;QACrD,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAA;IAC1F,CAAC;IAED,6FAA6F;IAC7F,IAAI,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAC/B,UAAU,GAAG,cAAc,CACzB,UAAU,EACV,KAAK,CAAC,SAAS,EACf,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,MAAM,EACjB,MAAM,CACP,CAAA;IACH,CAAC;IAED,+DAA+D;IAC/D,MAAM,UAAU,GAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IAErD,IAAI,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAChC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,4DAA4D;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,sEAAsE;YACtE,IAAI,WAAW,GAAG,KAAK,CAAC,SAAS,CAAA;YACjC,IAAI,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;gBACtC,WAAW,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;YAC9E,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;YACvD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAA;YAClF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACvE,QAAQ,CAAC,IAAI,CAAC,QAAQ,WAAW,GAAG,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;YACvD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;YACpD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACvE,QAAQ,CAAC,IAAI,CAAC,cAAc,WAAW,GAAG,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5F,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACzF,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3B,MAAM,CAAC,UAAU,CAAC,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SubtitleEntry } from '../types/subtitle.js';
|
|
2
|
+
import type { SubtitleStyle } from '../types/render.js';
|
|
3
|
+
/** Video resolution for ASS coordinate space */
|
|
4
|
+
export interface AssResolution {
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Convert '#RRGGBB' hex color to ASS color format '&HAABBGGRR'.
|
|
10
|
+
* ASS uses reversed byte order (BGR) and alpha where 00=opaque, FF=transparent.
|
|
11
|
+
*/
|
|
12
|
+
export declare function hexToAss(hex: string, opacity?: number): string;
|
|
13
|
+
/**
|
|
14
|
+
* Write subtitle entries to ASS (Advanced SubStation Alpha) format
|
|
15
|
+
* with configurable styling — background box, font, colors, positioning.
|
|
16
|
+
*/
|
|
17
|
+
export declare function writeAss(entries: SubtitleEntry[], style?: SubtitleStyle, resolution?: AssResolution): string;
|
|
18
|
+
//# sourceMappingURL=ass-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ass-writer.d.ts","sourceRoot":"","sources":["../../src/subtitles/ass-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAY,GAAG,MAAM,CAQnE;AAqBD;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,aAAa,EAAE,EACxB,KAAK,GAAE,aAAkB,EACzB,UAAU,GAAE,aAA6C,GACxD,MAAM,CAuFR"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert '#RRGGBB' hex color to ASS color format '&HAABBGGRR'.
|
|
3
|
+
* ASS uses reversed byte order (BGR) and alpha where 00=opaque, FF=transparent.
|
|
4
|
+
*/
|
|
5
|
+
export function hexToAss(hex, opacity = 1.0) {
|
|
6
|
+
const clean = hex.replace('#', '');
|
|
7
|
+
const r = clean.slice(0, 2).toUpperCase();
|
|
8
|
+
const g = clean.slice(2, 4).toUpperCase();
|
|
9
|
+
const b = clean.slice(4, 6).toUpperCase();
|
|
10
|
+
const alpha = Math.round((1.0 - Math.max(0, Math.min(1, opacity))) * 255);
|
|
11
|
+
const alphaHex = alpha.toString(16).padStart(2, '0').toUpperCase();
|
|
12
|
+
return `&H${alphaHex}${b}${g}${r}`;
|
|
13
|
+
}
|
|
14
|
+
/** Format milliseconds as ASS time: H:MM:SS.CC (centiseconds) */
|
|
15
|
+
function formatAssTime(ms) {
|
|
16
|
+
const rounded = Math.max(0, Math.round(ms));
|
|
17
|
+
const h = Math.floor(rounded / 3600000);
|
|
18
|
+
const m = Math.floor((rounded % 3600000) / 60000);
|
|
19
|
+
const s = Math.floor((rounded % 60000) / 1000);
|
|
20
|
+
const cs = Math.floor((rounded % 1000) / 10);
|
|
21
|
+
return `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}.${String(cs).padStart(2, '0')}`;
|
|
22
|
+
}
|
|
23
|
+
function resolveWrapStyle(ws) {
|
|
24
|
+
switch (ws) {
|
|
25
|
+
case 'endOfLine': return 1;
|
|
26
|
+
case 'none': return 2;
|
|
27
|
+
case 'smart':
|
|
28
|
+
default: return 0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Write subtitle entries to ASS (Advanced SubStation Alpha) format
|
|
33
|
+
* with configurable styling — background box, font, colors, positioning.
|
|
34
|
+
*/
|
|
35
|
+
export function writeAss(entries, style = {}, resolution = { width: 1920, height: 1080 }) {
|
|
36
|
+
if (entries.length === 0)
|
|
37
|
+
return '';
|
|
38
|
+
// Resolve style with defaults
|
|
39
|
+
const fontFamily = style.fontFamily ?? 'Arial';
|
|
40
|
+
const fontSize = style.fontSize ?? 52;
|
|
41
|
+
const primaryColor = style.primaryColor ?? style.color ?? '#1a1a1a';
|
|
42
|
+
const bgColor = style.backgroundColor ?? '#FFFFFF';
|
|
43
|
+
const bgOpacity = style.backgroundOpacity ?? 0.75;
|
|
44
|
+
const padding = style.padding ?? 18;
|
|
45
|
+
const shadow = style.shadow ?? 0;
|
|
46
|
+
const position = style.position ?? 'bottom';
|
|
47
|
+
const marginV = style.marginVertical ?? style.marginBottom ?? 50;
|
|
48
|
+
const marginH = style.marginHorizontal ?? 80;
|
|
49
|
+
const bold = style.bold !== false ? -1 : 0; // ASS: -1 = bold, 0 = normal
|
|
50
|
+
const wrapStyle = resolveWrapStyle(style.wrapStyle);
|
|
51
|
+
// ASS alignment: bottom-center=2, top-center=8
|
|
52
|
+
const alignment = position === 'top' ? 8 : 2;
|
|
53
|
+
// Convert colors to ASS format
|
|
54
|
+
const assPrimary = hexToAss(primaryColor, 1.0);
|
|
55
|
+
const assSecondary = hexToAss('#000000', 0.0); // unused
|
|
56
|
+
// OutlineColour = same as BackColour so outline acts as padding extension
|
|
57
|
+
const assOutline = hexToAss(bgColor, bgOpacity);
|
|
58
|
+
const assBack = hexToAss(bgColor, bgOpacity);
|
|
59
|
+
// Build style line
|
|
60
|
+
// Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour,
|
|
61
|
+
// OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut,
|
|
62
|
+
// ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow,
|
|
63
|
+
// Alignment, MarginL, MarginR, MarginV, Encoding
|
|
64
|
+
const styleLine = [
|
|
65
|
+
'Default',
|
|
66
|
+
fontFamily,
|
|
67
|
+
fontSize,
|
|
68
|
+
assPrimary,
|
|
69
|
+
assSecondary,
|
|
70
|
+
assOutline,
|
|
71
|
+
assBack,
|
|
72
|
+
bold, // Bold
|
|
73
|
+
0, // Italic
|
|
74
|
+
0, // Underline
|
|
75
|
+
0, // StrikeOut
|
|
76
|
+
100, // ScaleX
|
|
77
|
+
100, // ScaleY
|
|
78
|
+
0, // Spacing
|
|
79
|
+
0, // Angle
|
|
80
|
+
3, // BorderStyle (3 = opaque box)
|
|
81
|
+
padding, // Outline (acts as box padding in BorderStyle=3)
|
|
82
|
+
shadow, // Shadow
|
|
83
|
+
alignment,
|
|
84
|
+
marginH, // MarginL
|
|
85
|
+
marginH, // MarginR
|
|
86
|
+
marginV, // MarginV
|
|
87
|
+
1, // Encoding (1 = default)
|
|
88
|
+
].join(',');
|
|
89
|
+
// Build dialogue lines
|
|
90
|
+
const dialogues = entries.map((entry) => {
|
|
91
|
+
const start = formatAssTime(entry.startMs);
|
|
92
|
+
const end = formatAssTime(entry.endMs);
|
|
93
|
+
// Escape special ASS characters and convert newlines
|
|
94
|
+
const text = entry.text
|
|
95
|
+
.replace(/\\/g, '\\\\')
|
|
96
|
+
.replace(/\{/g, '\\{')
|
|
97
|
+
.replace(/\}/g, '\\}')
|
|
98
|
+
.replace(/\n/g, '\\N');
|
|
99
|
+
return `Dialogue: 0,${start},${end},Default,,0,0,0,,${text}`;
|
|
100
|
+
});
|
|
101
|
+
return [
|
|
102
|
+
'[Script Info]',
|
|
103
|
+
'ScriptType: v4.00+',
|
|
104
|
+
`PlayResX: ${resolution.width}`,
|
|
105
|
+
`PlayResY: ${resolution.height}`,
|
|
106
|
+
`WrapStyle: ${wrapStyle}`,
|
|
107
|
+
'',
|
|
108
|
+
'[V4+ Styles]',
|
|
109
|
+
'Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding',
|
|
110
|
+
`Style: ${styleLine}`,
|
|
111
|
+
'',
|
|
112
|
+
'[Events]',
|
|
113
|
+
'Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text',
|
|
114
|
+
...dialogues,
|
|
115
|
+
'', // trailing newline
|
|
116
|
+
].join('\n');
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=ass-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ass-writer.js","sourceRoot":"","sources":["../../src/subtitles/ass-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SubtitleEntry } from '../types/subtitle.js';
|
|
2
|
+
export interface ChunkOptions {
|
|
3
|
+
/** Max characters per line before forcing a split (default: 60) */
|
|
4
|
+
maxCharsPerLine?: number;
|
|
5
|
+
/** Min characters — don't create tiny fragments (default: 15) */
|
|
6
|
+
minCharsPerChunk?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Split subtitle entries into shorter, single-line chunks based on
|
|
10
|
+
* punctuation. Time is distributed proportionally by character count.
|
|
11
|
+
*
|
|
12
|
+
* Splitting priority:
|
|
13
|
+
* 1. Sentence boundaries: . ! ?
|
|
14
|
+
* 2. Clause boundaries: , ; : – —
|
|
15
|
+
* 3. Word boundary (fallback if still too long)
|
|
16
|
+
*/
|
|
17
|
+
export declare function chunkSubtitles(entries: SubtitleEntry[], options?: ChunkOptions): SubtitleEntry[];
|
|
18
|
+
//# sourceMappingURL=subtitle-chunker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtitle-chunker.d.ts","sourceRoot":"","sources":["../../src/subtitles/subtitle-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE,YAAY,GACrB,aAAa,EAAE,CAuCjB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Split subtitle entries into shorter, single-line chunks based on
|
|
3
|
+
* punctuation. Time is distributed proportionally by character count.
|
|
4
|
+
*
|
|
5
|
+
* Splitting priority:
|
|
6
|
+
* 1. Sentence boundaries: . ! ?
|
|
7
|
+
* 2. Clause boundaries: , ; : – —
|
|
8
|
+
* 3. Word boundary (fallback if still too long)
|
|
9
|
+
*/
|
|
10
|
+
export function chunkSubtitles(entries, options) {
|
|
11
|
+
const maxChars = options?.maxCharsPerLine ?? 60;
|
|
12
|
+
const minChars = options?.minCharsPerChunk ?? 15;
|
|
13
|
+
const result = [];
|
|
14
|
+
let globalIndex = 1;
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
const chunks = splitText(entry.text, maxChars, minChars);
|
|
17
|
+
if (chunks.length <= 1) {
|
|
18
|
+
result.push({ ...entry, index: globalIndex++ });
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
// Distribute time proportionally by character count
|
|
22
|
+
const totalChars = chunks.reduce((sum, c) => sum + c.length, 0);
|
|
23
|
+
const totalDuration = entry.endMs - entry.startMs;
|
|
24
|
+
let cursor = entry.startMs;
|
|
25
|
+
for (const chunk of chunks) {
|
|
26
|
+
const ratio = chunk.length / totalChars;
|
|
27
|
+
const duration = totalDuration * ratio;
|
|
28
|
+
const endMs = cursor + duration;
|
|
29
|
+
result.push({
|
|
30
|
+
index: globalIndex++,
|
|
31
|
+
startMs: Math.round(cursor),
|
|
32
|
+
endMs: Math.round(endMs),
|
|
33
|
+
text: chunk,
|
|
34
|
+
keyword: entry.keyword,
|
|
35
|
+
zoom: entry.zoom,
|
|
36
|
+
});
|
|
37
|
+
cursor = endMs;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
/** Sentence-ending punctuation */
|
|
43
|
+
const SENTENCE_END = /([.!?])\s+/;
|
|
44
|
+
/** Clause-boundary punctuation */
|
|
45
|
+
const CLAUSE_BREAK = /([,;:–—])\s+/;
|
|
46
|
+
/**
|
|
47
|
+
* Split text into chunks respecting punctuation boundaries.
|
|
48
|
+
*/
|
|
49
|
+
function splitText(text, maxChars, minChars) {
|
|
50
|
+
const trimmed = text.trim();
|
|
51
|
+
if (trimmed.length <= maxChars)
|
|
52
|
+
return [trimmed];
|
|
53
|
+
// Phase 1: Split on sentence boundaries
|
|
54
|
+
let segments = splitOnPattern(trimmed, SENTENCE_END);
|
|
55
|
+
// Phase 2: Further split long segments on clause boundaries
|
|
56
|
+
segments = segments.flatMap((seg) => seg.length > maxChars ? splitOnPattern(seg, CLAUSE_BREAK) : [seg]);
|
|
57
|
+
// Phase 3: Split remaining long segments at word boundaries
|
|
58
|
+
segments = segments.flatMap((seg) => seg.length > maxChars ? splitAtWordBoundary(seg, maxChars) : [seg]);
|
|
59
|
+
// Phase 4: Merge tiny fragments back into their neighbor
|
|
60
|
+
return mergeSmallChunks(segments, minChars);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Split text on a regex pattern, keeping the punctuation with the preceding chunk.
|
|
64
|
+
*/
|
|
65
|
+
function splitOnPattern(text, pattern) {
|
|
66
|
+
const parts = [];
|
|
67
|
+
let remaining = text;
|
|
68
|
+
while (remaining.length > 0) {
|
|
69
|
+
const match = pattern.exec(remaining);
|
|
70
|
+
if (!match || match.index === undefined) {
|
|
71
|
+
parts.push(remaining.trim());
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
// Include the punctuation mark with the preceding text
|
|
75
|
+
const splitAt = match.index + match[1].length;
|
|
76
|
+
const before = remaining.slice(0, splitAt).trim();
|
|
77
|
+
if (before)
|
|
78
|
+
parts.push(before);
|
|
79
|
+
remaining = remaining.slice(splitAt).trim();
|
|
80
|
+
}
|
|
81
|
+
return parts.filter((p) => p.length > 0);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Split a long segment at the word boundary closest to the target length.
|
|
85
|
+
*/
|
|
86
|
+
function splitAtWordBoundary(text, maxChars) {
|
|
87
|
+
const results = [];
|
|
88
|
+
let remaining = text;
|
|
89
|
+
while (remaining.length > maxChars) {
|
|
90
|
+
let splitAt = -1;
|
|
91
|
+
for (let i = maxChars; i >= 1; i--) {
|
|
92
|
+
if (remaining[i] === ' ') {
|
|
93
|
+
splitAt = i;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (splitAt === -1) {
|
|
98
|
+
splitAt = maxChars;
|
|
99
|
+
}
|
|
100
|
+
results.push(remaining.slice(0, splitAt).trim());
|
|
101
|
+
remaining = remaining.slice(splitAt).trim();
|
|
102
|
+
}
|
|
103
|
+
if (remaining.length > 0) {
|
|
104
|
+
results.push(remaining);
|
|
105
|
+
}
|
|
106
|
+
return results;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Merge chunks shorter than minChars FORWARD into the next chunk.
|
|
110
|
+
* Preserves sentence boundaries — small fragments get prepended
|
|
111
|
+
* to the next clause, not appended to the previous sentence.
|
|
112
|
+
*/
|
|
113
|
+
function mergeSmallChunks(chunks, minChars) {
|
|
114
|
+
if (chunks.length <= 1)
|
|
115
|
+
return chunks;
|
|
116
|
+
const result = [];
|
|
117
|
+
let carry = '';
|
|
118
|
+
for (const chunk of chunks) {
|
|
119
|
+
if (carry) {
|
|
120
|
+
result.push(carry + ' ' + chunk);
|
|
121
|
+
carry = '';
|
|
122
|
+
}
|
|
123
|
+
else if (chunk.length < minChars) {
|
|
124
|
+
carry = chunk;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
result.push(chunk);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (carry && result.length > 0) {
|
|
131
|
+
result[result.length - 1] += ' ' + carry;
|
|
132
|
+
}
|
|
133
|
+
else if (carry) {
|
|
134
|
+
result.push(carry);
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=subtitle-chunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtitle-chunker.js","sourceRoot":"","sources":["../../src/subtitles/subtitle-chunker.ts"],"names":[],"mappings":"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"}
|
package/dist/types/render.d.ts
CHANGED
|
@@ -26,11 +26,38 @@ export interface RenderConfig {
|
|
|
26
26
|
crf?: number;
|
|
27
27
|
}
|
|
28
28
|
export interface SubtitleStyle {
|
|
29
|
+
/** Font family name (default: 'Arial') */
|
|
29
30
|
fontFamily?: string;
|
|
31
|
+
/** Font size in script pixels relative to 1080p (default: 52) */
|
|
30
32
|
fontSize?: number;
|
|
31
|
-
color
|
|
33
|
+
/** Text color as hex '#RRGGBB' (default: '#1a1a1a') */
|
|
34
|
+
primaryColor?: string;
|
|
35
|
+
/** Background box color as hex '#RRGGBB' (default: '#FFFFFF') */
|
|
32
36
|
backgroundColor?: string;
|
|
37
|
+
/** Background opacity 0.0 (transparent) to 1.0 (opaque) (default: 0.75) */
|
|
38
|
+
backgroundOpacity?: number;
|
|
39
|
+
/** Box padding in pixels — extends background around text (default: 18) */
|
|
40
|
+
padding?: number;
|
|
41
|
+
/** Shadow distance in pixels (default: 0) */
|
|
42
|
+
shadow?: number;
|
|
43
|
+
/** Vertical position: 'bottom' or 'top' (default: 'bottom') */
|
|
33
44
|
position?: 'bottom' | 'top';
|
|
45
|
+
/** Bottom/top margin in pixels (default: 50) */
|
|
46
|
+
marginVertical?: number;
|
|
47
|
+
/** Left/right margin in pixels (default: 80) */
|
|
48
|
+
marginHorizontal?: number;
|
|
49
|
+
/** Bold text (default: true) */
|
|
50
|
+
bold?: boolean;
|
|
51
|
+
/** Word wrap: 'smart' (even lines), 'endOfLine', 'none' (default: 'smart') */
|
|
52
|
+
wrapStyle?: 'smart' | 'endOfLine' | 'none';
|
|
53
|
+
/** Split long subtitles into shorter single-line chunks (null = no chunking) */
|
|
54
|
+
chunkOptions?: {
|
|
55
|
+
maxCharsPerLine?: number;
|
|
56
|
+
minCharsPerChunk?: number;
|
|
57
|
+
} | null;
|
|
58
|
+
/** @deprecated Use primaryColor */
|
|
59
|
+
color?: string;
|
|
60
|
+
/** @deprecated Use marginVertical */
|
|
34
61
|
marginBottom?: number;
|
|
35
62
|
}
|
|
36
63
|
/** Resolved resolution in pixels */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/types/render.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,kEAAkE;IAClE,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,mEAAmE;IACnE,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAClF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/types/render.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,kEAAkE;IAClE,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,mEAAmE;IACnE,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAClF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC3B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAA;IAC1C,gFAAgF;IAChF,YAAY,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAG7E,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,oCAAoC;AACpC,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,GACrC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAanC"}
|
package/dist/types/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/types/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/types/render.ts"],"names":[],"mappings":"AA6DA,oCAAoC;AACpC,MAAM,UAAU,iBAAiB,CAC/B,UAAsC;IAEtC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU;QAAE,OAAO,UAAU,CAAA;IACnE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;QACrC,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QACtC,KAAK,IAAI;YACP,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QACtC,KAAK,OAAO,CAAC;QACb;YACE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACxC,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwright-recast",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Fluent pipeline library for processing Playwright traces into polished demo videos — TTS voiceover, subtitles, speed control, and zoom.",
|
|
6
6
|
"license": "MIT",
|