@spark-apps/quickpeek 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +200 -101
  3. package/dist/assets/qp.wm +0 -0
  4. package/dist/highlight.css +15 -0
  5. package/dist/qp.js +6143 -0
  6. package/package.json +64 -46
  7. package/dist/api-client.d.ts +0 -61
  8. package/dist/api-client.d.ts.map +0 -1
  9. package/dist/api-client.js +0 -180
  10. package/dist/api-client.js.map +0 -1
  11. package/dist/config.d.ts +0 -69
  12. package/dist/config.d.ts.map +0 -1
  13. package/dist/config.js +0 -43
  14. package/dist/config.js.map +0 -1
  15. package/dist/crawl.d.ts +0 -18
  16. package/dist/crawl.d.ts.map +0 -1
  17. package/dist/crawl.js +0 -175
  18. package/dist/crawl.js.map +0 -1
  19. package/dist/cursor.d.ts +0 -6
  20. package/dist/cursor.d.ts.map +0 -1
  21. package/dist/cursor.js +0 -6
  22. package/dist/cursor.js.map +0 -1
  23. package/dist/ffmpeg.d.ts +0 -50
  24. package/dist/ffmpeg.d.ts.map +0 -1
  25. package/dist/ffmpeg.js +0 -224
  26. package/dist/ffmpeg.js.map +0 -1
  27. package/dist/index.d.ts +0 -15
  28. package/dist/index.d.ts.map +0 -1
  29. package/dist/index.js +0 -26
  30. package/dist/index.js.map +0 -1
  31. package/dist/prompts.d.ts +0 -13
  32. package/dist/prompts.d.ts.map +0 -1
  33. package/dist/prompts.js +0 -91
  34. package/dist/prompts.js.map +0 -1
  35. package/dist/styles.d.ts +0 -16
  36. package/dist/styles.d.ts.map +0 -1
  37. package/dist/styles.js +0 -66
  38. package/dist/styles.js.map +0 -1
  39. package/dist/tts.d.ts +0 -64
  40. package/dist/tts.d.ts.map +0 -1
  41. package/dist/tts.js +0 -236
  42. package/dist/tts.js.map +0 -1
  43. package/dist/utils.d.ts +0 -25
  44. package/dist/utils.d.ts.map +0 -1
  45. package/dist/utils.js +0 -106
  46. package/dist/utils.js.map +0 -1
  47. package/dist/voices.d.ts +0 -2
  48. package/dist/voices.d.ts.map +0 -1
  49. package/dist/voices.js +0 -73
  50. package/dist/voices.js.map +0 -1
  51. package/dist/watermark.d.ts +0 -27
  52. package/dist/watermark.d.ts.map +0 -1
  53. package/dist/watermark.js +0 -57
  54. package/dist/watermark.js.map +0 -1
package/dist/crawl.js DELETED
@@ -1,175 +0,0 @@
1
- /**
2
- * Page crawling and interactive element extraction
3
- */
4
- import { chromium } from 'playwright';
5
- /**
6
- * Crawl a page and extract interactive elements with smart selectors
7
- */
8
- export async function crawlPage(url, task) {
9
- const browserTask = task('Launching browser');
10
- const browser = await chromium.launch({ headless: true });
11
- const page = await browser.newPage();
12
- browserTask.succeed('Browser launched');
13
- const crawlTask = task('Crawling page');
14
- await page.goto(url, { waitUntil: 'networkidle', timeout: 30000 });
15
- const title = await page.title();
16
- // Extract raw element data from page (no functions to avoid tsx __name issue)
17
- const rawElements = (await page.evaluate(`
18
- (() => {
19
- const items = [];
20
-
21
- // Helper to get parent context
22
- const getCtx = (el) => {
23
- let p = el.parentElement;
24
- while (p && p !== document.body) {
25
- if (p.id) return '#' + p.id;
26
- const cls = Array.from(p.classList).find(c =>
27
- /toolbar|header|footer|sidebar|panel|modal|dialog|nav|menu|controls|actions/i.test(c)
28
- );
29
- if (cls) return '.' + cls;
30
- if (['header', 'footer', 'nav', 'main', 'aside', 'form'].includes(p.tagName.toLowerCase())) {
31
- return p.tagName.toLowerCase();
32
- }
33
- p = p.parentElement;
34
- }
35
- return '';
36
- };
37
-
38
- // Buttons (use textContent to catch hidden elements too)
39
- document.querySelectorAll('button, [role="button"]').forEach(el => {
40
- const text = (el.textContent || el.innerText || '').trim().replace(/\\s+/g, ' ').slice(0, 40);
41
- const testId = el.getAttribute('data-testid');
42
- const ariaLabel = el.getAttribute('aria-label');
43
- if (!text && !testId && !ariaLabel) return;
44
- items.push({ type: 'button', text: text || ariaLabel || testId, testId, ctx: getCtx(el) });
45
- });
46
-
47
- // Inputs (including file inputs with labels)
48
- document.querySelectorAll('input, textarea, select').forEach(el => {
49
- if (el.type === 'hidden') return;
50
- const testId = el.getAttribute('data-testid');
51
- // For file inputs, get label text
52
- const labelText = el.type === 'file' && el.labels?.[0]
53
- ? el.labels[0].textContent?.trim()
54
- : null;
55
- const text = labelText || el.placeholder || el.name || el.id || '';
56
- // Include file inputs even without text (they're important)
57
- if (!text && !testId && el.type !== 'file') return;
58
- items.push({
59
- type: el.type || 'input',
60
- text: text || (el.type === 'file' ? 'file upload' : testId),
61
- testId,
62
- id: el.id,
63
- name: el.name,
64
- placeholder: el.placeholder,
65
- isFile: el.type === 'file'
66
- });
67
- });
68
-
69
- // Links (use textContent to catch hidden elements too)
70
- document.querySelectorAll('a[href]').forEach(el => {
71
- const text = (el.textContent || el.innerText || '').trim().replace(/\\s+/g, ' ').slice(0, 40);
72
- if (text && text.length >= 2) items.push({ type: 'link', text });
73
- });
74
-
75
- return items.slice(0, 40);
76
- })()
77
- `));
78
- // Filter out navigation, account, and footer links that shouldn't be in demos
79
- const SKIP_PATTERNS = [
80
- // Navigation
81
- /^home$/i,
82
- /^about$/i,
83
- /^about us$/i,
84
- /^contact$/i,
85
- /^contact us$/i,
86
- /^help$/i,
87
- /^support$/i,
88
- /^faq$/i,
89
- /^docs$/i,
90
- /^documentation$/i,
91
- // Account
92
- /^log ?in$/i,
93
- /^sign ?in$/i,
94
- /^sign ?up$/i,
95
- /^register$/i,
96
- /^my ?account$/i,
97
- /^profile$/i,
98
- /^settings$/i,
99
- /^log ?out$/i,
100
- /^sign ?out$/i,
101
- // Business
102
- /^pricing$/i,
103
- /^plans$/i,
104
- /^subscribe$/i,
105
- /^upgrade$/i,
106
- /^buy$/i,
107
- /^purchase$/i,
108
- // Footer
109
- /^privacy$/i,
110
- /^terms$/i,
111
- /^legal$/i,
112
- /^blog$/i,
113
- /^careers$/i,
114
- /^jobs$/i,
115
- /^twitter$/i,
116
- /^facebook$/i,
117
- /^linkedin$/i,
118
- /^instagram$/i,
119
- /^github$/i,
120
- /^cookie/i,
121
- /^gdpr$/i,
122
- ];
123
- const filteredElements = rawElements.filter((el) => {
124
- if (!el.text)
125
- return true; // Keep elements without text (like file inputs)
126
- const text = el.text.toLowerCase().trim();
127
- // Skip if matches any skip pattern
128
- return !SKIP_PATTERNS.some((pattern) => pattern.test(text));
129
- });
130
- // Build smart selectors in Node.js (avoids tsx transpilation issues)
131
- const btnTexts = {};
132
- for (const el of filteredElements) {
133
- if (el.type === 'button' && el.text) {
134
- btnTexts[el.text] = (btnTexts[el.text] || 0) + 1;
135
- }
136
- }
137
- const elements = filteredElements.map((el) => {
138
- let selector;
139
- if (el.testId) {
140
- selector = `[data-testid="${el.testId}"]`;
141
- }
142
- else if (el.isFile || el.type === 'file') {
143
- // File inputs always use type selector
144
- selector = 'input[type="file"]';
145
- }
146
- else if (el.type === 'button') {
147
- if (btnTexts[el.text] === 1) {
148
- selector = `text="${el.text}"`;
149
- }
150
- else {
151
- selector = el.ctx ? `${el.ctx} >> text="${el.text}"` : `button:has-text("${el.text}")`;
152
- }
153
- }
154
- else if (el.type === 'link') {
155
- selector = `text="${el.text}"`;
156
- }
157
- else if (el.id) {
158
- selector = `#${el.id}`;
159
- }
160
- else if (el.name) {
161
- selector = `[name="${el.name}"]`;
162
- }
163
- else if (el.placeholder) {
164
- selector = `[placeholder="${el.placeholder}"]`;
165
- }
166
- else {
167
- selector = `text="${el.text}"`;
168
- }
169
- return { type: el.type, text: el.text, selector };
170
- });
171
- await browser.close();
172
- crawlTask.succeed(`Found ${elements.length} interactive elements`);
173
- return { title, elements };
174
- }
175
- //# sourceMappingURL=crawl.js.map
package/dist/crawl.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../src/crawl.ts"],"names":[],"mappings":"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"}
package/dist/cursor.d.ts DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * Cursor PNG as base64 data URI for browser injection
3
- * Source: src/imgs/cursor.png
4
- */
5
- export declare const CURSOR_PNG = "data:image/png;base64,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";
6
- //# sourceMappingURL=cursor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,UAAU,+gFACu/E,CAAC"}
package/dist/cursor.js DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * Cursor PNG as base64 data URI for browser injection
3
- * Source: src/imgs/cursor.png
4
- */
5
- export const CURSOR_PNG = 'data:image/png;base64,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';
6
- //# sourceMappingURL=cursor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GACrB,4gFAA4gF,CAAC"}
package/dist/ffmpeg.d.ts DELETED
@@ -1,50 +0,0 @@
1
- import type { UserTier } from './config.js';
2
- /**
3
- * Run ffprobe to get media duration in milliseconds
4
- */
5
- export declare function getMediaDuration(filePath: string): Promise<number>;
6
- /**
7
- * Concatenate audio files using ffmpeg concat demuxer
8
- */
9
- export declare function concatMedia(listPath: string, output: string): Promise<void>;
10
- export interface ComposeOptions {
11
- videoPath: string;
12
- assPath: string;
13
- outputPath: string;
14
- voiceoverPath?: string | undefined;
15
- musicPath?: string | undefined;
16
- musicVolume?: number | undefined;
17
- musicFadeIn?: number | undefined;
18
- musicFadeOut?: number | undefined;
19
- width: number;
20
- height: number;
21
- fps: number;
22
- preset: string;
23
- quality: number;
24
- fadeIn: number;
25
- fadeOut: number;
26
- videoDuration: number;
27
- audioBitrate?: string | undefined;
28
- contrast?: number | undefined;
29
- trimStart?: number | undefined;
30
- userTier?: UserTier | undefined;
31
- }
32
- /**
33
- * Compose final video with subtitles, voiceover, and music
34
- */
35
- export declare function composeVideo(opts: ComposeOptions): Promise<void>;
36
- /**
37
- * Generate silence audio file of specified duration
38
- */
39
- export declare function generateSilence(outputPath: string, durationMs: number): Promise<void>;
40
- export interface SpeedUpOptions {
41
- inputPath: string;
42
- outputPath: string;
43
- factor: number;
44
- preset: string;
45
- }
46
- /**
47
- * Speed up video by a factor
48
- */
49
- export declare function speedUpVideo(opts: SpeedUpOptions): Promise<void>;
50
- //# sourceMappingURL=ffmpeg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../src/ffmpeg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkClE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB3E;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsHhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCrF;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ChE"}
package/dist/ffmpeg.js DELETED
@@ -1,224 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { buildWatermarkFilters } from './watermark.js';
3
- /**
4
- * Run ffprobe to get media duration in milliseconds
5
- */
6
- export function getMediaDuration(filePath) {
7
- return new Promise((resolve, reject) => {
8
- const args = [
9
- '-v',
10
- 'error',
11
- '-show_entries',
12
- 'format=duration',
13
- '-of',
14
- 'default=noprint_wrappers=1:nokey=1',
15
- filePath,
16
- ];
17
- const proc = spawn('ffprobe', args);
18
- let stdout = '';
19
- let stderr = '';
20
- proc.stdout.on('data', (data) => {
21
- stdout += data;
22
- });
23
- proc.stderr.on('data', (data) => {
24
- stderr += data;
25
- });
26
- proc.on('close', (code) => {
27
- if (code !== 0) {
28
- reject(new Error(`ffprobe failed: ${stderr}`));
29
- return;
30
- }
31
- const duration = parseFloat(stdout.trim());
32
- resolve(Math.ceil(duration * 1000));
33
- });
34
- proc.on('error', reject);
35
- });
36
- }
37
- /**
38
- * Concatenate audio files using ffmpeg concat demuxer
39
- */
40
- export function concatMedia(listPath, output) {
41
- return new Promise((resolve, reject) => {
42
- const args = ['-y', '-f', 'concat', '-safe', '0', '-i', listPath, '-c', 'copy', output];
43
- const proc = spawn('ffmpeg', args);
44
- let stderr = '';
45
- proc.stderr.on('data', (data) => {
46
- stderr += data;
47
- });
48
- proc.on('close', (code) => {
49
- if (code !== 0) {
50
- reject(new Error(`ffmpeg concat failed: ${stderr}`));
51
- return;
52
- }
53
- resolve();
54
- });
55
- proc.on('error', reject);
56
- });
57
- }
58
- /**
59
- * Compose final video with subtitles, voiceover, and music
60
- */
61
- export function composeVideo(opts) {
62
- return new Promise((resolve, reject) => {
63
- const { videoPath, assPath, outputPath, voiceoverPath, musicPath, musicVolume = 0.3, musicFadeIn = 2, musicFadeOut = 2, width, height, fps, preset, quality, fadeIn, fadeOut, videoDuration, audioBitrate = '192k', contrast = 0, trimStart = 0, userTier = 'free', } = opts;
64
- // Trim white frames from start of Playwright recording
65
- const args = ['-y'];
66
- if (trimStart > 0) {
67
- args.push('-ss', String(trimStart));
68
- }
69
- args.push('-i', videoPath);
70
- // Adjust duration for trimmed content
71
- const effectiveDuration = videoDuration - trimStart;
72
- // Add input streams
73
- if (voiceoverPath)
74
- args.push('-i', voiceoverPath);
75
- if (musicPath)
76
- args.push('-i', musicPath);
77
- // Build video filter
78
- const vf = [`scale=${width}:${height}`, `fps=${fps}`];
79
- // Add contrast filter if enabled (contrast > 0)
80
- // Map 0-1 range to ffmpeg's eq filter: 0 = no change (1.0), 1 = double contrast (2.0)
81
- if (contrast > 0) {
82
- const ffmpegContrast = 1 + contrast;
83
- vf.push(`eq=contrast=${ffmpegContrast.toFixed(2)}`);
84
- }
85
- // Add watermark filters for free tier videos >20 seconds
86
- const watermarkFilters = buildWatermarkFilters({ tier: userTier, videoDuration: effectiveDuration });
87
- if (watermarkFilters) {
88
- vf.push(watermarkFilters);
89
- }
90
- vf.push(`ass=${assPath.replace(/\\/g, '/').replace(/:/g, '\\:')}`);
91
- if (fadeIn > 0)
92
- vf.push(`fade=t=in:st=0:d=${fadeIn}:c=black`);
93
- if (fadeOut > 0) {
94
- const videoFadeOutStart = Math.max(0, effectiveDuration - fadeOut);
95
- vf.push(`fade=t=out:st=${videoFadeOutStart}:d=${fadeOut}:c=black`);
96
- }
97
- args.push('-vf', vf.join(','));
98
- // Convert 0-1 quality to CRF (1.0 = CRF 18 best, 0.0 = CRF 28 smallest)
99
- const crf = Math.round(28 - quality * 10);
100
- args.push('-c:v', 'libx264', '-preset', preset, '-crf', String(crf), '-pix_fmt', 'yuv420p');
101
- // Handle audio mixing
102
- const hasVoiceover = !!voiceoverPath;
103
- const hasMusic = !!musicPath;
104
- const musicFadeOutStart = Math.max(0, effectiveDuration - musicFadeOut);
105
- const voiceFadeOutStart = Math.max(0, effectiveDuration - fadeOut);
106
- if (hasVoiceover && hasMusic) {
107
- // Pad voiceover to video duration, loop music to video duration, then mix
108
- const complexFilter = [
109
- `[1:a]apad=whole_dur=${effectiveDuration},afade=t=in:st=0:d=${fadeIn},afade=t=out:st=${voiceFadeOutStart}:d=${fadeOut}[voice]`,
110
- `[2:a]aloop=loop=-1:size=2e+09,atrim=0:${effectiveDuration},volume=${musicVolume},afade=t=in:st=0:d=${musicFadeIn},afade=t=out:st=${musicFadeOutStart}:d=${musicFadeOut}[music]`,
111
- `[voice][music]amix=inputs=2:duration=shortest[aout]`,
112
- ].join(';');
113
- args.push('-filter_complex', complexFilter, '-map', '0:v', '-map', '[aout]');
114
- args.push('-c:a', 'aac', '-b:a', audioBitrate);
115
- }
116
- else if (hasVoiceover) {
117
- // Pad voiceover to video duration
118
- const af = `apad=whole_dur=${effectiveDuration},afade=t=in:st=0:d=${fadeIn},afade=t=out:st=${voiceFadeOutStart}:d=${fadeOut}`;
119
- args.push('-map', '0:v', '-map', '1:a', '-af', af);
120
- args.push('-c:a', 'aac', '-b:a', audioBitrate);
121
- }
122
- else if (hasMusic) {
123
- // Loop music to video duration
124
- const musicFilter = `aloop=loop=-1:size=2e+09,atrim=0:${effectiveDuration},volume=${musicVolume},afade=t=in:st=0:d=${musicFadeIn},afade=t=out:st=${musicFadeOutStart}:d=${musicFadeOut}`;
125
- args.push('-map', '0:v', '-map', '1:a', '-af', musicFilter);
126
- args.push('-c:a', 'aac', '-b:a', '192k');
127
- }
128
- args.push(outputPath);
129
- // Debug: log ffmpeg command
130
- // console.log('ffmpeg', args.join(' '));
131
- const proc = spawn('ffmpeg', args);
132
- let stderr = '';
133
- proc.stderr.on('data', (data) => {
134
- stderr += data;
135
- });
136
- proc.on('close', (code) => {
137
- if (code !== 0) {
138
- reject(new Error(`ffmpeg compose failed: ${stderr}`));
139
- return;
140
- }
141
- resolve();
142
- });
143
- proc.on('error', reject);
144
- });
145
- }
146
- /**
147
- * Generate silence audio file of specified duration
148
- */
149
- export function generateSilence(outputPath, durationMs) {
150
- return new Promise((resolve, reject) => {
151
- const durationSec = durationMs / 1000;
152
- const args = [
153
- '-y',
154
- '-f',
155
- 'lavfi',
156
- '-i',
157
- `anullsrc=r=24000:cl=mono`,
158
- '-t',
159
- String(durationSec),
160
- '-c:a',
161
- 'libmp3lame',
162
- '-b:a',
163
- '96k',
164
- outputPath,
165
- ];
166
- const proc = spawn('ffmpeg', args);
167
- let stderr = '';
168
- proc.stderr.on('data', (data) => {
169
- stderr += data;
170
- });
171
- proc.on('close', (code) => {
172
- if (code !== 0) {
173
- reject(new Error(`ffmpeg silence generation failed: ${stderr}`));
174
- return;
175
- }
176
- resolve();
177
- });
178
- proc.on('error', reject);
179
- });
180
- }
181
- /**
182
- * Speed up video by a factor
183
- */
184
- export function speedUpVideo(opts) {
185
- return new Promise((resolve, reject) => {
186
- const { inputPath, outputPath, factor, preset } = opts;
187
- // setpts for video speed
188
- const videoFilter = `setpts=${(1 / factor).toFixed(3)}*PTS`;
189
- // atempo only supports 0.5-2.0, so chain multiple for higher speeds
190
- const audioFilters = [];
191
- let remaining = factor;
192
- while (remaining > 1) {
193
- const tempo = Math.min(remaining, 2.0);
194
- audioFilters.push(`atempo=${tempo.toFixed(2)}`);
195
- remaining /= tempo;
196
- }
197
- const args = [
198
- '-y',
199
- '-i',
200
- inputPath,
201
- '-vf',
202
- videoFilter,
203
- '-af',
204
- audioFilters.join(','),
205
- '-preset',
206
- preset,
207
- outputPath,
208
- ];
209
- const proc = spawn('ffmpeg', args);
210
- let stderr = '';
211
- proc.stderr.on('data', (data) => {
212
- stderr += data;
213
- });
214
- proc.on('close', (code) => {
215
- if (code !== 0) {
216
- reject(new Error(`ffmpeg speedup failed: ${stderr}`));
217
- return;
218
- }
219
- resolve();
220
- });
221
- proc.on('error', reject);
222
- });
223
- }
224
- //# sourceMappingURL=ffmpeg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../src/ffmpeg.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * QuickPeek Core - Shared library for demo video generation
3
- */
4
- export * from './api-client.js';
5
- export * from './config.js';
6
- export * from './crawl.js';
7
- export * from './cursor.js';
8
- export * from './ffmpeg.js';
9
- export * from './prompts.js';
10
- export * from './styles.js';
11
- export * from './tts.js';
12
- export * from './utils.js';
13
- export * from './voices.js';
14
- export * from './watermark.js';
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAE5B,cAAc,YAAY,CAAC;AAE3B,cAAc,aAAa,CAAC;AAE5B,cAAc,aAAa,CAAC;AAG5B,cAAc,cAAc,CAAC;AAE7B,cAAc,aAAa,CAAC;AAE5B,cAAc,UAAU,CAAC;AAEzB,cAAc,YAAY,CAAC;AAE3B,cAAc,aAAa,CAAC;AAE5B,cAAc,gBAAgB,CAAC"}
package/dist/index.js DELETED
@@ -1,26 +0,0 @@
1
- /**
2
- * QuickPeek Core - Shared library for demo video generation
3
- */
4
- // API client for backend communication
5
- export * from './api-client.js';
6
- // Configuration types and defaults
7
- export * from './config.js';
8
- // Page crawling (requires Playwright as peer dependency)
9
- export * from './crawl.js';
10
- // Cursor asset
11
- export * from './cursor.js';
12
- // FFmpeg video/audio processing
13
- export * from './ffmpeg.js';
14
- // AI prompt building
15
- export * from './prompts.js';
16
- // CSS/ASS styling for subtitles
17
- export * from './styles.js';
18
- // Text-to-speech voiceover generation
19
- export * from './tts.js';
20
- // Utility functions
21
- export * from './utils.js';
22
- // Voice mappings for TTS
23
- export * from './voices.js';
24
- // Watermark filter generation
25
- export * from './watermark.js';
26
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,uCAAuC;AACvC,cAAc,iBAAiB,CAAC;AAEhC,mCAAmC;AACnC,cAAc,aAAa,CAAC;AAC5B,yDAAyD;AACzD,cAAc,YAAY,CAAC;AAC3B,eAAe;AACf,cAAc,aAAa,CAAC;AAC5B,gCAAgC;AAChC,cAAc,aAAa,CAAC;AAE5B,qBAAqB;AACrB,cAAc,cAAc,CAAC;AAC7B,gCAAgC;AAChC,cAAc,aAAa,CAAC;AAC5B,sCAAsC;AACtC,cAAc,UAAU,CAAC;AACzB,oBAAoB;AACpB,cAAc,YAAY,CAAC;AAC3B,yBAAyB;AACzB,cAAc,aAAa,CAAC;AAC5B,8BAA8B;AAC9B,cAAc,gBAAgB,CAAC"}
package/dist/prompts.d.ts DELETED
@@ -1,13 +0,0 @@
1
- /**
2
- * AI prompts for demo plan generation
3
- */
4
- import { getLanguageName } from './utils.js';
5
- interface ElementInfo {
6
- type: string;
7
- text: string;
8
- selector: string;
9
- }
10
- export { getLanguageName };
11
- export declare function buildSystemPrompt(maxSteps: number): string;
12
- export declare function buildUserPrompt(url: string, title: string, elements: ElementInfo[], langName: string | null, description: string | undefined, maxSteps: number): string;
13
- //# sourceMappingURL=prompts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuD1D;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GACf,MAAM,CA4BR"}