@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/voices.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const LANGUAGE_VOICES: Record<string, string>;
2
- //# sourceMappingURL=voices.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"voices.d.ts","sourceRoot":"","sources":["../src/voices.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoElD,CAAC"}
package/dist/voices.js DELETED
@@ -1,73 +0,0 @@
1
- // Default Edge TTS voice per language
2
- // Format: ISO 639-1 language code -> Edge TTS voice name
3
- // Voice list: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=tts
4
- export const LANGUAGE_VOICES = {
5
- en: 'en-GB-SoniaNeural',
6
- ar: 'ar-LB-LaylaNeural',
7
- es: 'es-ES-ElviraNeural',
8
- fr: 'fr-FR-DeniseNeural',
9
- de: 'de-DE-KatjaNeural',
10
- it: 'it-IT-ElsaNeural',
11
- pt: 'pt-BR-FranciscaNeural',
12
- ru: 'ru-RU-SvetlanaNeural',
13
- zh: 'zh-CN-XiaoxiaoNeural',
14
- ja: 'ja-JP-NanamiNeural',
15
- ko: 'ko-KR-SunHiNeural',
16
- hi: 'hi-IN-SwaraNeural',
17
- tr: 'tr-TR-EmelNeural',
18
- nl: 'nl-NL-ColetteNeural',
19
- pl: 'pl-PL-AgnieszkaNeural',
20
- sv: 'sv-SE-SofieNeural',
21
- he: 'he-IL-HilaNeural',
22
- th: 'th-TH-PremwadeeNeural',
23
- vi: 'vi-VN-HoaiMyNeural',
24
- id: 'id-ID-GadisNeural',
25
- ms: 'ms-MY-YasminNeural',
26
- fil: 'fil-PH-BlessicaNeural',
27
- uk: 'uk-UA-PolinaNeural',
28
- cs: 'cs-CZ-VlastaNeural',
29
- el: 'el-GR-AthinaNeural',
30
- ro: 'ro-RO-AlinaNeural',
31
- hu: 'hu-HU-NoemiNeural',
32
- da: 'da-DK-ChristelNeural',
33
- fi: 'fi-FI-NooraNeural',
34
- no: 'nb-NO-PernilleNeural',
35
- sk: 'sk-SK-ViktoriaNeural',
36
- bg: 'bg-BG-KalinaNeural',
37
- hr: 'hr-HR-GabrijelaNeural',
38
- sl: 'sl-SI-PetraNeural',
39
- et: 'et-EE-AnuNeural',
40
- lv: 'lv-LV-EveritaNeural',
41
- lt: 'lt-LT-OnaNeural',
42
- bn: 'bn-IN-TanishaaNeural',
43
- ta: 'ta-IN-PallaviNeural',
44
- te: 'te-IN-ShrutiNeural',
45
- mr: 'mr-IN-AarohiNeural',
46
- gu: 'gu-IN-DhwaniNeural',
47
- kn: 'kn-IN-SapnaNeural',
48
- ml: 'ml-IN-SobhanaNeural',
49
- ur: 'ur-PK-UzmaNeural',
50
- fa: 'fa-IR-DilaraNeural',
51
- sw: 'sw-KE-ZuriNeural',
52
- af: 'af-ZA-AdriNeural',
53
- ca: 'ca-ES-JoanaNeural',
54
- cy: 'cy-GB-NiaNeural',
55
- ga: 'ga-IE-OrlaNeural',
56
- mt: 'mt-MT-GraceNeural',
57
- is: 'is-IS-GudrunNeural',
58
- mk: 'mk-MK-MarijaNeural',
59
- sr: 'sr-RS-SophieNeural',
60
- bs: 'bs-BA-VesnaNeural',
61
- sq: 'sq-AL-AnilaNeural',
62
- am: 'am-ET-MekdesNeural',
63
- az: 'az-AZ-BabekNeural',
64
- ka: 'ka-GE-EkaNeural',
65
- kk: 'kk-KZ-AigulNeural',
66
- mn: 'mn-MN-YesUINeural',
67
- ne: 'ne-NP-HemkalaNeural',
68
- ps: 'ps-AF-LatifaNeural',
69
- si: 'si-LK-ThiliniNeural',
70
- so: 'so-SO-UbaxNeural',
71
- zu: 'zu-ZA-ThandoNeural',
72
- };
73
- //# sourceMappingURL=voices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"voices.js","sourceRoot":"","sources":["../src/voices.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,yDAAyD;AACzD,2GAA2G;AAE3G,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,uBAAuB;IAC3B,EAAE,EAAE,sBAAsB;IAC1B,EAAE,EAAE,sBAAsB;IAC1B,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,uBAAuB;IAC3B,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,uBAAuB;IAC3B,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,oBAAoB;IACxB,GAAG,EAAE,uBAAuB;IAC5B,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,sBAAsB;IAC1B,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,sBAAsB;IAC1B,EAAE,EAAE,sBAAsB;IAC1B,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,uBAAuB;IAC3B,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,iBAAiB;IACrB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,iBAAiB;IACrB,EAAE,EAAE,sBAAsB;IAC1B,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,iBAAiB;IACrB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,iBAAiB;IACrB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,oBAAoB;IACxB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,oBAAoB;CACzB,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * FFmpeg watermark filter generation for QuickPeek
3
- * Applies watermarks to free tier videos longer than 20 seconds
4
- */
5
- import type { UserTier } from './config.js';
6
- export interface WatermarkOptions {
7
- tier: UserTier;
8
- videoDuration: number;
9
- }
10
- /**
11
- * Build FFmpeg drawtext filters for watermarks
12
- * Returns empty string if no watermark needed (pro tier or short video)
13
- */
14
- export declare function buildWatermarkFilters(opts: WatermarkOptions): string;
15
- /**
16
- * Check if watermark should be applied based on tier and duration
17
- */
18
- export declare function shouldApplyWatermark(tier: UserTier, videoDurationSeconds: number): boolean;
19
- /**
20
- * Get watermark configuration for display purposes
21
- */
22
- export declare function getWatermarkInfo(): {
23
- threshold: number;
24
- cornerText: string;
25
- endText: string;
26
- };
27
- //# sourceMappingURL=watermark.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watermark.d.ts","sourceRoot":"","sources":["../src/watermark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAWD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAmCpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAE1F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAMA"}
package/dist/watermark.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * FFmpeg watermark filter generation for QuickPeek
3
- * Applies watermarks to free tier videos longer than 20 seconds
4
- */
5
- // Watermark threshold: only apply to videos longer than 20 seconds
6
- const WATERMARK_THRESHOLD_SECONDS = 20;
7
- // End text appears in the last 3 seconds
8
- const END_TEXT_DURATION = 3;
9
- // Fade-in duration for end text
10
- const END_TEXT_FADE_IN = 1;
11
- /**
12
- * Build FFmpeg drawtext filters for watermarks
13
- * Returns empty string if no watermark needed (pro tier or short video)
14
- */
15
- export function buildWatermarkFilters(opts) {
16
- const { tier, videoDuration } = opts;
17
- // No watermark for pro tier
18
- if (tier === 'pro') {
19
- return '';
20
- }
21
- // No watermark for videos 20 seconds or shorter
22
- if (videoDuration <= WATERMARK_THRESHOLD_SECONDS) {
23
- return '';
24
- }
25
- const filters = [];
26
- // Corner "qp" watermark - always visible (bottom-right)
27
- // White text at 30% opacity, small and subtle
28
- filters.push(`drawtext=text='qp':fontsize=24:fontcolor=white@0.3:x=w-tw-20:y=h-th-20`);
29
- // End text - "Video made with QuickPeek" in last 3 seconds
30
- // Centered at bottom, with fade-in effect
31
- const endTextStart = Math.max(0, videoDuration - END_TEXT_DURATION);
32
- const fadeEndTime = endTextStart + END_TEXT_FADE_IN;
33
- // Build alpha expression for fade-in:
34
- // - Before endTextStart: 0 (invisible)
35
- // - During fade-in: linear ramp from 0 to 0.6
36
- // - After fade-in: 0.6 (full opacity)
37
- const alphaExpr = `if(lt(t,${endTextStart}),0,if(lt(t,${fadeEndTime}),(t-${endTextStart})*0.6,0.6))`;
38
- filters.push(`drawtext=text='Video made with QuickPeek':fontsize=32:fontcolor=white:x=(w-tw)/2:y=h-80:alpha='${alphaExpr}'`);
39
- return filters.join(',');
40
- }
41
- /**
42
- * Check if watermark should be applied based on tier and duration
43
- */
44
- export function shouldApplyWatermark(tier, videoDurationSeconds) {
45
- return tier === 'free' && videoDurationSeconds > WATERMARK_THRESHOLD_SECONDS;
46
- }
47
- /**
48
- * Get watermark configuration for display purposes
49
- */
50
- export function getWatermarkInfo() {
51
- return {
52
- threshold: WATERMARK_THRESHOLD_SECONDS,
53
- cornerText: 'qp',
54
- endText: 'Video made with QuickPeek',
55
- };
56
- }
57
- //# sourceMappingURL=watermark.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watermark.js","sourceRoot":"","sources":["../src/watermark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,mEAAmE;AACnE,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAEvC,yCAAyC;AACzC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,gCAAgC;AAChC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAsB;IAC1D,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAErC,4BAA4B;IAC5B,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gDAAgD;IAChD,IAAI,aAAa,IAAI,2BAA2B,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,wDAAwD;IACxD,8CAA8C;IAC9C,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IAEvF,2DAA2D;IAC3D,0CAA0C;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,YAAY,GAAG,gBAAgB,CAAC;IAEpD,sCAAsC;IACtC,uCAAuC;IACvC,8CAA8C;IAC9C,sCAAsC;IACtC,MAAM,SAAS,GAAG,WAAW,YAAY,eAAe,WAAW,QAAQ,YAAY,aAAa,CAAC;IAErG,OAAO,CAAC,IAAI,CACV,kGAAkG,SAAS,GAAG,CAC/G,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAc,EAAE,oBAA4B;IAC/E,OAAO,IAAI,KAAK,MAAM,IAAI,oBAAoB,GAAG,2BAA2B,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAK9B,OAAO;QACL,SAAS,EAAE,2BAA2B;QACtC,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,2BAA2B;KACrC,CAAC;AACJ,CAAC"}