@spark-apps/quickpeek 1.0.0 → 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.
- package/LICENSE +21 -0
- package/README.md +200 -0
- package/dist/assets/qp.wm +0 -0
- package/dist/highlight.css +15 -0
- package/dist/qp.js +6143 -0
- package/package.json +64 -45
- package/dist/api-client.d.ts +0 -61
- package/dist/api-client.d.ts.map +0 -1
- package/dist/api-client.js +0 -180
- package/dist/api-client.js.map +0 -1
- package/dist/config.d.ts +0 -69
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -43
- package/dist/config.js.map +0 -1
- package/dist/crawl.d.ts +0 -18
- package/dist/crawl.d.ts.map +0 -1
- package/dist/crawl.js +0 -175
- package/dist/crawl.js.map +0 -1
- package/dist/cursor.d.ts +0 -6
- package/dist/cursor.d.ts.map +0 -1
- package/dist/cursor.js +0 -6
- package/dist/cursor.js.map +0 -1
- package/dist/ffmpeg.d.ts +0 -50
- package/dist/ffmpeg.d.ts.map +0 -1
- package/dist/ffmpeg.js +0 -224
- package/dist/ffmpeg.js.map +0 -1
- package/dist/index.d.ts +0 -15
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
- package/dist/prompts.d.ts +0 -13
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js +0 -91
- package/dist/prompts.js.map +0 -1
- package/dist/styles.d.ts +0 -16
- package/dist/styles.d.ts.map +0 -1
- package/dist/styles.js +0 -66
- package/dist/styles.js.map +0 -1
- package/dist/tts.d.ts +0 -64
- package/dist/tts.d.ts.map +0 -1
- package/dist/tts.js +0 -236
- package/dist/tts.js.map +0 -1
- package/dist/utils.d.ts +0 -25
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -106
- package/dist/utils.js.map +0 -1
- package/dist/voices.d.ts +0 -2
- package/dist/voices.d.ts.map +0 -1
- package/dist/voices.js +0 -73
- package/dist/voices.js.map +0 -1
- package/dist/watermark.d.ts +0 -27
- package/dist/watermark.d.ts.map +0 -1
- package/dist/watermark.js +0 -57
- 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
|
package/dist/cursor.d.ts.map
DELETED
|
@@ -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,iVBORw0KGgoAAAANSUhEUgAAAMgAAAEsBAMAAAB01OGNAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAtUExURUdwTAAAAAAAAAAAAAAAAAAAAAAAAB0dHVZWVtvb2/X19f///6mpqXV1df////vm1ewAAAAGdFJOUwAltTfpcLO208EAAAABYktHRA5vvTBPAAAAB3RJTUUH6QwFFREKplBWTAAABqdJREFUeNq93c+OFFUUx/EeCHud6H7A4HpCOu6NiWsWZh5Ax8YFbAdNWBPxBcCo+yGjD+CAW1ywh0Rexu6uulX3Vp269/c7f7o3Bpjhk6+H6TrU0LdXR6sDPI4/OgCyvn0I5NsDpKw3B0hZbw6Qst4cIGWLxKdskfiUHRKeskPCU/ZIdMoeiU7pkOCUDglO6ZHYlB6JTUlIaEpCQlMGJDJlQCJTRiQwZUQCUzIkLiVD4lJyJCwlR8JSCiQqpUCiUkokKKVEglImSEzKBIlJmSIhKT3yY2hKjzx7GpnSI7+8iExJyN+RKQl5FZkyIJEpAxKZMiKBKSMSmJIhcSkZEpeSI2EpORKWUiBRKQUSlVIiQSklEpQyQWJSJkhMyhQJSZkiISkzJCJlhkSkzJGAlDkSkCIg/ikC4p8iIe4pEuKeIiLeKSLinSIjziky4pyygPimLCC+KUuIa8oS4pqyiHimLCKeKcuIY8oy4phSQfxSKohfSg1xS6khbilVxCulinil1BGnlDrilNJAfFIaiE9KC3FJaSEuKU3EI6WJeKS0EYeUNuKQAiD2FACxpyCIOQVBzCkQYk2BEGsKhhhTMMSYAiK2FBCxpaCIKQVFTCkwYkmBEUsKjhhScMSQQiD6FALRpzCIOoVB1CkUok2hEG0KhyhTOESZQiK6FBLRpbCIKoVFVCk0okmhEU0KjyhSeESRokD4FAXCp2gQOkWD0CkqhE1RIWyKDiFTdAiZokS4FCXCpWgRKkWLUClqhElRI0yKHiFS9AiRYkDwFAOCp1gQOMWCwCkmBE0xIWiKDQFTbAiYYkSwFCOCpVgRKMWKQClmBEkxI0iKHQFS7AiQ4oC0UxyQdooH0kzxQJopLkgrxQVppfggjRQfpJHihNRTnJB6ihdSTfFCqiluSC3FDaml+CGVFD+kkuKILKc4IsspnshiiieymOKKLKW4Iq8u5RRf5FpO8UUWpuKMyCnOiJzijYgp3oiY4o5IKe6IlEIhL38FHr9fzFK47/0On195PL6YpVDIX4CRP1IKhbxGSvLHbQUy/snhUrg/XW9IpE/hkOcs0qVwyD8s0qWQ349nJ9+lcAg9+S6FfFqhJ79PIZFLGtmlkMifPLJNYf/5wgWvfAYg11f5j951H39+B3/cBZA/3uY/+nccJ/5oItdPi19Lkz91RV5snuQ/fN0jJ57I9svvkTT5rzyR7RX7wW/C5L93RPbPI8Xknysmj7zWQZz8fTeke0J8aJ088vqTR1czl5t8Fel/w2Ly12/6oXghaRn8IEz+nJh8DRkuUc/yn02XYGLy0Ou0ysn3X44+/75rvNb+IE3+OxdkXM/Lr3l+8stIvjSIkz91QMaQzeYn2+QXkWL7KSafnogd/jlcHiJPHn8iXkLKNe7BW9Pk26/73T/+y3/tkp38AjLdR4vJp+XrxIhMQuRL8Jc2ZLZYF5OnL8Gt18ff6f9bTJ5dvkQku6vw6Ub4AHb5ap1ZcPS5MHn2Eiwhxe2Rs8rk0Utw8xyJ/gNMy5eAlPd5bkiTJ5ev5tkeN7+uTP6+FpncsEqTt6zd7fNWpMmTy9cMmd15+0SYPLl8tc/AuVWZPLh8TZH5LURx8unOFzb59rlEafKG5WuCSPdC0+SvhMljyxdwVtSx9DVPTb5ExPvTafIfpMmf8oh4pz1NXr92F8jCtz+kyVPLF3Km2jfdz+mXrxxZCLFPHjnnTpw8s3xlyFLIMHn18gWdPVibPLJ8jchiyPBB5eTf4ZOHzoNMky+eiInlCzrZMk1eWruR5Qs6o/NImjxxCcZOGz2rTB64BGPnpkqTJ5Yv7ARY4/LVIz9XQ4bJK5cv7FRe49oNni/cT165fIEnJdfW7vYTMXjm8w3pax6ePHh6tW35As/hltfui8ZniUglvDb55vKFno0urd3wJRg95b26dp8SSO3/rTh5dPlCT94XJ48uX/B7CKTJa5Yv+N0QLJOH39fBsnavwRBx7X75vv/kExBpftn2k38oGOAraYBnuS+6DxwvwaPRmvwaDZmt3ZkBvlwHuFBPJp8breVrjYZM1u7SaEx+jYaUk58Y58gLj5i/lO0mPzE2d4GZYPetxrWbNDoEu68wrN2ssUfAG3Bp7X7CGnsE/R7F2UZ6tI0dwt5Dpo3dJ8LfbDlWGivm3dpuKY0V875z6RLMGtw76J3pDO69ANc6Y3WPCBn+wkUaq48JY3giJg3ukU8+ysgnH2ek5SvUGCYfaaTJhxr95GONbvLRxm7y4cb2iTjeWN08gLFaaYz/AWAIeJtzdhugAAAAAElFTkSuQmCC';
|
|
6
|
-
//# sourceMappingURL=cursor.js.map
|
package/dist/cursor.js.map
DELETED
|
@@ -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
|
package/dist/ffmpeg.d.ts.map
DELETED
|
@@ -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
|
package/dist/ffmpeg.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../src/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,OAAO;YACP,eAAe;YACf,iBAAiB;YACjB,KAAK;YACL,oCAAoC;YACpC,QAAQ;SACT,CAAC;QAEF,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAc;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAExF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAyBD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EACJ,SAAS,EACT,OAAO,EACP,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,GAAG,GAAG,EACjB,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,CAAC,EAChB,KAAK,EACL,MAAM,EACN,GAAG,EACH,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,aAAa,EACb,YAAY,GAAG,MAAM,EACrB,QAAQ,GAAG,CAAC,EACZ,SAAS,GAAG,CAAC,EACb,QAAQ,GAAG,MAAM,GAClB,GAAG,IAAI,CAAC;QAET,uDAAuD;QACvD,MAAM,IAAI,GAAa,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE3B,sCAAsC;QACtC,MAAM,iBAAiB,GAAG,aAAa,GAAG,SAAS,CAAC;QAEpD,oBAAoB;QACpB,IAAI,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAClD,IAAI,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE1C,qBAAqB;QACrB,MAAM,EAAE,GAAa,CAAC,SAAS,KAAK,IAAI,MAAM,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;QAEhE,gDAAgD;QAChD,sFAAsF;QACtF,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC;YACpC,EAAE,CAAC,IAAI,CAAC,eAAe,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,yDAAyD;QACzD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACrG,IAAI,gBAAgB,EAAE,CAAC;YACrB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5B,CAAC;QAED,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAEnE,IAAI,MAAM,GAAG,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,MAAM,UAAU,CAAC,CAAC;QAC9D,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC;YACnE,EAAE,CAAC,IAAI,CAAC,iBAAiB,iBAAiB,MAAM,OAAO,UAAU,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAE5F,sBAAsB;QACtB,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC;QACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,CAAC;QAExE,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC;QAEnE,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;YAC7B,0EAA0E;YAC1E,MAAM,aAAa,GAAG;gBACpB,uBAAuB,iBAAiB,sBAAsB,MAAM,mBAAmB,iBAAiB,MAAM,OAAO,SAAS;gBAC9H,yCAAyC,iBAAiB,WAAW,WAAW,sBAAsB,WAAW,mBAAmB,iBAAiB,MAAM,YAAY,SAAS;gBAChL,qDAAqD;aACtD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,kCAAkC;YAClC,MAAM,EAAE,GAAG,kBAAkB,iBAAiB,sBAAsB,MAAM,mBAAmB,iBAAiB,MAAM,OAAO,EAAE,CAAC;YAC9H,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,+BAA+B;YAC/B,MAAM,WAAW,GAAG,oCAAoC,iBAAiB,WAAW,WAAW,sBAAsB,WAAW,mBAAmB,iBAAiB,MAAM,YAAY,EAAE,CAAC;YACzL,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtB,4BAA4B;QAC5B,yCAAyC;QAEzC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,UAAkB;IACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;QACtC,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,IAAI;YACJ,0BAA0B;YAC1B,IAAI;YACJ,MAAM,CAAC,WAAW,CAAC;YACnB,MAAM;YACN,YAAY;YACZ,MAAM;YACN,KAAK;YACL,UAAU;SACX,CAAC;QAEF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AASD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAEvD,yBAAyB;QACzB,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAE5D,oEAAoE;QACpE,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChD,SAAS,IAAI,KAAK,CAAC;QACrB,CAAC;QAED,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,IAAI;YACJ,SAAS;YACT,KAAK;YACL,WAAW;YACX,KAAK;YACL,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YACtB,SAAS;YACT,MAAM;YACN,UAAU;SACX,CAAC;QAEF,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
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
|
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;;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
|
package/dist/prompts.d.ts.map
DELETED
|
@@ -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"}
|