@thunderkiller/video-clipper 1.5.3 → 1.5.4

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 (241) hide show
  1. package/dist/cli.d.ts +5 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +1 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config/env.d.ts +49 -0
  6. package/dist/config/env.d.ts.map +1 -0
  7. package/dist/config/env.js +1 -0
  8. package/dist/config/env.js.map +1 -0
  9. package/dist/config/index.d.ts +3 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +1 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib.d.ts +17 -0
  18. package/dist/lib.d.ts.map +1 -0
  19. package/dist/lib.js +17 -0
  20. package/dist/lib.js.map +1 -0
  21. package/dist/pipeline/runner.d.ts +23 -0
  22. package/dist/pipeline/runner.d.ts.map +1 -0
  23. package/dist/pipeline/runner.js +1 -0
  24. package/dist/pipeline/runner.js.map +1 -0
  25. package/dist/pipeline/stages/audioProcessor.d.ts +20 -0
  26. package/dist/pipeline/stages/audioProcessor.d.ts.map +1 -0
  27. package/dist/pipeline/stages/audioProcessor.js +1 -0
  28. package/dist/pipeline/stages/audioProcessor.js.map +1 -0
  29. package/dist/pipeline/stages/clipExporter.d.ts +15 -0
  30. package/dist/pipeline/stages/clipExporter.d.ts.map +1 -0
  31. package/dist/pipeline/stages/clipExporter.js +1 -0
  32. package/dist/pipeline/stages/clipExporter.js.map +1 -0
  33. package/dist/pipeline/stages/segmentAnalyzer.d.ts +27 -0
  34. package/dist/pipeline/stages/segmentAnalyzer.d.ts.map +1 -0
  35. package/dist/pipeline/stages/segmentAnalyzer.js +1 -0
  36. package/dist/pipeline/stages/segmentAnalyzer.js.map +1 -0
  37. package/dist/pipeline/stages/segmentSelector.d.ts +13 -0
  38. package/dist/pipeline/stages/segmentSelector.d.ts.map +1 -0
  39. package/dist/pipeline/stages/segmentSelector.js +1 -0
  40. package/dist/pipeline/stages/segmentSelector.js.map +1 -0
  41. package/dist/pipeline/stages/videoResolver.d.ts +12 -0
  42. package/dist/pipeline/stages/videoResolver.d.ts.map +1 -0
  43. package/dist/pipeline/stages/videoResolver.js +1 -0
  44. package/dist/pipeline/stages/videoResolver.js.map +1 -0
  45. package/dist/services/audioAnalyzers/base.d.ts +26 -0
  46. package/dist/services/audioAnalyzers/base.d.ts.map +1 -0
  47. package/dist/services/audioAnalyzers/base.js +1 -0
  48. package/dist/services/audioAnalyzers/base.js.map +1 -0
  49. package/dist/services/audioAnalyzers/factory.d.ts +23 -0
  50. package/dist/services/audioAnalyzers/factory.d.ts.map +1 -0
  51. package/dist/services/audioAnalyzers/factory.js +1 -0
  52. package/dist/services/audioAnalyzers/factory.js.map +1 -0
  53. package/dist/services/audioAnalyzers/gemini.d.ts +29 -0
  54. package/dist/services/audioAnalyzers/gemini.d.ts.map +1 -0
  55. package/dist/services/audioAnalyzers/gemini.js +1 -0
  56. package/dist/services/audioAnalyzers/gemini.js.map +1 -0
  57. package/dist/services/audioAnalyzers/index.d.ts +7 -0
  58. package/dist/services/audioAnalyzers/index.d.ts.map +1 -0
  59. package/dist/services/audioAnalyzers/index.js +1 -0
  60. package/dist/services/audioAnalyzers/index.js.map +1 -0
  61. package/dist/services/audioAnalyzers/whisper.d.ts +14 -0
  62. package/dist/services/audioAnalyzers/whisper.d.ts.map +1 -0
  63. package/dist/services/audioAnalyzers/whisper.js +3 -1
  64. package/dist/services/audioAnalyzers/whisper.js.map +1 -0
  65. package/dist/services/audioAnalyzers/yamnet.d.ts +13 -0
  66. package/dist/services/audioAnalyzers/yamnet.d.ts.map +1 -0
  67. package/dist/services/audioAnalyzers/yamnet.js +3 -1
  68. package/dist/services/audioAnalyzers/yamnet.js.map +1 -0
  69. package/dist/services/audioDownloader/index.d.ts +2 -0
  70. package/dist/services/audioDownloader/index.d.ts.map +1 -0
  71. package/dist/services/audioDownloader/index.js +1 -0
  72. package/dist/services/audioDownloader/index.js.map +1 -0
  73. package/dist/services/chunkBuilder/index.d.ts +20 -0
  74. package/dist/services/chunkBuilder/index.d.ts.map +1 -0
  75. package/dist/services/chunkBuilder/index.js +1 -0
  76. package/dist/services/chunkBuilder/index.js.map +1 -0
  77. package/dist/services/clipGenerator/index.d.ts +30 -0
  78. package/dist/services/clipGenerator/index.d.ts.map +1 -0
  79. package/dist/services/clipGenerator/index.js +1 -0
  80. package/dist/services/clipGenerator/index.js.map +1 -0
  81. package/dist/services/clipRefiner/index.d.ts +9 -0
  82. package/dist/services/clipRefiner/index.d.ts.map +1 -0
  83. package/dist/services/clipRefiner/index.js +1 -0
  84. package/dist/services/clipRefiner/index.js.map +1 -0
  85. package/dist/services/eventDetector/index.d.ts +28 -0
  86. package/dist/services/eventDetector/index.d.ts.map +1 -0
  87. package/dist/services/eventDetector/index.js +1 -0
  88. package/dist/services/eventDetector/index.js.map +1 -0
  89. package/dist/services/llmAnalyzer/LLMAnalyzer.d.ts +41 -0
  90. package/dist/services/llmAnalyzer/LLMAnalyzer.d.ts.map +1 -0
  91. package/dist/services/llmAnalyzer/LLMAnalyzer.js +1 -0
  92. package/dist/services/llmAnalyzer/LLMAnalyzer.js.map +1 -0
  93. package/dist/services/llmAnalyzer/index.d.ts +8 -0
  94. package/dist/services/llmAnalyzer/index.d.ts.map +1 -0
  95. package/dist/services/llmAnalyzer/index.js +1 -0
  96. package/dist/services/llmAnalyzer/index.js.map +1 -0
  97. package/dist/services/metadataExtractor/index.d.ts +12 -0
  98. package/dist/services/metadataExtractor/index.d.ts.map +1 -0
  99. package/dist/services/metadataExtractor/index.js +1 -0
  100. package/dist/services/metadataExtractor/index.js.map +1 -0
  101. package/dist/services/segmentRanker/index.d.ts +3 -0
  102. package/dist/services/segmentRanker/index.d.ts.map +1 -0
  103. package/dist/services/segmentRanker/index.js +1 -0
  104. package/dist/services/segmentRanker/index.js.map +1 -0
  105. package/dist/services/signalMerger/index.d.ts +5 -0
  106. package/dist/services/signalMerger/index.d.ts.map +1 -0
  107. package/dist/services/signalMerger/index.js +1 -0
  108. package/dist/services/signalMerger/index.js.map +1 -0
  109. package/dist/services/transcriptAnalyzers/base.d.ts +25 -0
  110. package/dist/services/transcriptAnalyzers/base.d.ts.map +1 -0
  111. package/dist/services/transcriptAnalyzers/base.js +1 -0
  112. package/dist/services/transcriptAnalyzers/base.js.map +1 -0
  113. package/dist/services/transcriptAnalyzers/factory.d.ts +21 -0
  114. package/dist/services/transcriptAnalyzers/factory.d.ts.map +1 -0
  115. package/dist/services/transcriptAnalyzers/factory.js +1 -0
  116. package/dist/services/transcriptAnalyzers/factory.js.map +1 -0
  117. package/dist/services/transcriptAnalyzers/gemini.d.ts +18 -0
  118. package/dist/services/transcriptAnalyzers/gemini.d.ts.map +1 -0
  119. package/dist/services/transcriptAnalyzers/gemini.js +1 -0
  120. package/dist/services/transcriptAnalyzers/gemini.js.map +1 -0
  121. package/dist/services/transcriptAnalyzers/index.d.ts +7 -0
  122. package/dist/services/transcriptAnalyzers/index.d.ts.map +1 -0
  123. package/dist/services/transcriptAnalyzers/index.js +1 -0
  124. package/dist/services/transcriptAnalyzers/index.js.map +1 -0
  125. package/dist/services/transcriptAnalyzers/whisper.d.ts +18 -0
  126. package/dist/services/transcriptAnalyzers/whisper.d.ts.map +1 -0
  127. package/dist/services/transcriptAnalyzers/whisper.js +3 -1
  128. package/dist/services/transcriptAnalyzers/whisper.js.map +1 -0
  129. package/dist/services/transcriptAnalyzers/ytdlp.d.ts +15 -0
  130. package/dist/services/transcriptAnalyzers/ytdlp.d.ts.map +1 -0
  131. package/dist/services/transcriptAnalyzers/ytdlp.js +1 -0
  132. package/dist/services/transcriptAnalyzers/ytdlp.js.map +1 -0
  133. package/dist/services/transcriptDetector/index.d.ts +53 -0
  134. package/dist/services/transcriptDetector/index.d.ts.map +1 -0
  135. package/dist/services/transcriptDetector/index.js +1 -0
  136. package/dist/services/transcriptDetector/index.js.map +1 -0
  137. package/dist/services/transcriptFetcher/index.d.ts +26 -0
  138. package/dist/services/transcriptFetcher/index.d.ts.map +1 -0
  139. package/dist/services/transcriptFetcher/index.js +1 -0
  140. package/dist/services/transcriptFetcher/index.js.map +1 -0
  141. package/dist/services/urlParser/index.d.ts +12 -0
  142. package/dist/services/urlParser/index.d.ts.map +1 -0
  143. package/dist/services/urlParser/index.js +1 -0
  144. package/dist/services/urlParser/index.js.map +1 -0
  145. package/dist/services/videoDownloader/index.d.ts +27 -0
  146. package/dist/services/videoDownloader/index.d.ts.map +1 -0
  147. package/dist/services/videoDownloader/index.js +1 -0
  148. package/dist/services/videoDownloader/index.js.map +1 -0
  149. package/dist/types/analyzer.d.ts +21 -0
  150. package/dist/types/analyzer.d.ts.map +1 -0
  151. package/dist/types/analyzer.js +1 -0
  152. package/dist/types/analyzer.js.map +1 -0
  153. package/dist/types/audio.d.ts +26 -0
  154. package/dist/types/audio.d.ts.map +1 -0
  155. package/dist/types/audio.js +1 -0
  156. package/dist/types/audio.js.map +1 -0
  157. package/dist/types/cache.d.ts +7 -0
  158. package/dist/types/cache.d.ts.map +1 -0
  159. package/dist/types/cache.js +1 -0
  160. package/dist/types/cache.js.map +1 -0
  161. package/dist/types/cli.d.ts +23 -0
  162. package/dist/types/cli.d.ts.map +1 -0
  163. package/dist/types/cli.js +1 -0
  164. package/dist/types/cli.js.map +1 -0
  165. package/dist/types/config.d.ts +90 -0
  166. package/dist/types/config.d.ts.map +1 -0
  167. package/dist/types/config.js +1 -0
  168. package/dist/types/config.js.map +1 -0
  169. package/dist/types/downloader.d.ts +11 -0
  170. package/dist/types/downloader.d.ts.map +1 -0
  171. package/dist/types/downloader.js +1 -0
  172. package/dist/types/downloader.js.map +1 -0
  173. package/dist/types/factory.d.ts +3 -0
  174. package/dist/types/factory.d.ts.map +1 -0
  175. package/dist/types/factory.js +1 -0
  176. package/dist/types/factory.js.map +1 -0
  177. package/dist/types/index.d.ts +18 -0
  178. package/dist/types/index.d.ts.map +1 -0
  179. package/dist/types/index.js +1 -0
  180. package/dist/types/index.js.map +1 -0
  181. package/dist/types/pipeline.d.ts +48 -0
  182. package/dist/types/pipeline.d.ts.map +1 -0
  183. package/dist/types/pipeline.js +1 -0
  184. package/dist/types/pipeline.js.map +1 -0
  185. package/dist/types/segment.d.ts +42 -0
  186. package/dist/types/segment.d.ts.map +1 -0
  187. package/dist/types/segment.js +1 -0
  188. package/dist/types/segment.js.map +1 -0
  189. package/dist/types/transcript.d.ts +20 -0
  190. package/dist/types/transcript.d.ts.map +1 -0
  191. package/dist/types/transcript.js +1 -0
  192. package/dist/types/transcript.js.map +1 -0
  193. package/dist/types/video.d.ts +44 -0
  194. package/dist/types/video.d.ts.map +1 -0
  195. package/dist/types/video.js +1 -0
  196. package/dist/types/video.js.map +1 -0
  197. package/dist/utils/cache.d.ts +34 -0
  198. package/dist/utils/cache.d.ts.map +1 -0
  199. package/dist/utils/cache.js +1 -0
  200. package/dist/utils/cache.js.map +1 -0
  201. package/dist/utils/chunker.d.ts +38 -0
  202. package/dist/utils/chunker.d.ts.map +1 -0
  203. package/dist/utils/chunker.js +1 -0
  204. package/dist/utils/chunker.js.map +1 -0
  205. package/dist/utils/dumper.d.ts +12 -0
  206. package/dist/utils/dumper.d.ts.map +1 -0
  207. package/dist/utils/dumper.js +1 -0
  208. package/dist/utils/dumper.js.map +1 -0
  209. package/dist/utils/format.d.ts +6 -0
  210. package/dist/utils/format.d.ts.map +1 -0
  211. package/dist/utils/format.js +1 -0
  212. package/dist/utils/format.js.map +1 -0
  213. package/dist/utils/logger.d.ts +6 -0
  214. package/dist/utils/logger.d.ts.map +1 -0
  215. package/dist/utils/logger.js +1 -0
  216. package/dist/utils/logger.js.map +1 -0
  217. package/dist/utils/modelFactory.d.ts +14 -0
  218. package/dist/utils/modelFactory.d.ts.map +1 -0
  219. package/dist/utils/modelFactory.js +1 -0
  220. package/dist/utils/modelFactory.js.map +1 -0
  221. package/dist/utils/paths.d.ts +16 -0
  222. package/dist/utils/paths.d.ts.map +1 -0
  223. package/dist/utils/paths.js +20 -0
  224. package/dist/utils/paths.js.map +1 -0
  225. package/dist/utils/redactConfig.d.ts +7 -0
  226. package/dist/utils/redactConfig.d.ts.map +1 -0
  227. package/dist/utils/redactConfig.js +1 -0
  228. package/dist/utils/redactConfig.js.map +1 -0
  229. package/dist/utils/sliceAudio.d.ts +2 -0
  230. package/dist/utils/sliceAudio.d.ts.map +1 -0
  231. package/dist/utils/sliceAudio.js +1 -0
  232. package/dist/utils/sliceAudio.js.map +1 -0
  233. package/package.json +26 -2
  234. package/requirements.txt +5 -0
  235. package/scripts/detect_events.py +81 -0
  236. package/scripts/detect_events_whisper.py +101 -0
  237. package/scripts/transcribe_whisper.py +70 -0
  238. package/.env.example +0 -130
  239. package/CHANGELOG.md +0 -102
  240. package/CONTRIBUTING.md +0 -100
  241. package/commitlint.config.js +0 -25
@@ -4,3 +4,4 @@ export { AnalyzedSegmentSchema, RankedSegmentSchema, ChunkEvaluationSchema } fro
4
4
  export { AudioEventSchema, MergedCandidateSchema } from './audio.js';
5
5
  export { VideoMetadataSchema, PipelineResultSchema } from './video.js';
6
6
  export { SegmentRefinementSchema } from './cache.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGzF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGjG,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAwBvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { VideoMetadata, TranscriptLine, MicroBlock, LLMChunk, ChunkEvaluation } from './index.js';
2
+ /** A half-open time window [start, end) in seconds. Returned by `buildWindows`. */
3
+ export interface ChunkWindow {
4
+ /** Start of the window in seconds (inclusive). */
5
+ start: number;
6
+ /** End of the window in seconds (exclusive upper bound). */
7
+ end: number;
8
+ }
9
+ export interface VideoResolverResult {
10
+ videoId: string;
11
+ metadata: VideoMetadata;
12
+ }
13
+ export interface AudioProcessorOpts {
14
+ noAudio: boolean;
15
+ gameProfile: string;
16
+ maxParallel: number;
17
+ /** Pre-downloaded audio WAV path. When provided, skips the downloadAudio call. */
18
+ audioPath?: string | null;
19
+ }
20
+ export interface SegmentAnalyzerOpts {
21
+ maxChunks?: number;
22
+ maxParallel: number;
23
+ noCache: boolean;
24
+ }
25
+ export interface SegmentAnalyzerResult {
26
+ lines: TranscriptLine[];
27
+ microBlocks: MicroBlock[];
28
+ chunks: LLMChunk[];
29
+ chunkEvals: ChunkEvaluation[];
30
+ }
31
+ export interface SegmentSelectorOpts {
32
+ threshold: number;
33
+ topN: number;
34
+ }
35
+ export interface ClipExporterOpts {
36
+ /** Path to a pre-existing local video file. Skips yt-dlp download entirely. */
37
+ localVideo?: string;
38
+ /**
39
+ * yt-dlp download strategy.
40
+ * - `'all'` — download the full video, then cut clips with ffmpeg
41
+ * - number — download only the top-N segments via --download-sections
42
+ * - undefined — same as `'all'`
43
+ */
44
+ downloadSections: 'all' | number | undefined;
45
+ /** Custom output/download directory (overrides config.DOWNLOAD_DIR / config.OUTPUT_DIR). */
46
+ videoPath?: string;
47
+ }
48
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/types/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,QAAQ,EACR,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,gBAAgB,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7C,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/types/pipeline.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+ export declare const AnalyzedSegmentSchema: z.ZodObject<{
3
+ interesting: z.ZodBoolean;
4
+ score: z.ZodNumber;
5
+ reason: z.ZodString;
6
+ clip_start: z.ZodNumber;
7
+ clip_end: z.ZodNumber;
8
+ }, z.core.$strip>;
9
+ export type AnalyzedSegment = z.infer<typeof AnalyzedSegmentSchema>;
10
+ export declare const RankedSegmentSchema: z.ZodObject<{
11
+ rank: z.ZodNumber;
12
+ start: z.ZodNumber;
13
+ end: z.ZodNumber;
14
+ score: z.ZodNumber;
15
+ reason: z.ZodString;
16
+ source: z.ZodEnum<{
17
+ both: "both";
18
+ transcript: "transcript";
19
+ audio: "audio";
20
+ }>;
21
+ audio_event: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>;
23
+ export type RankedSegment = z.infer<typeof RankedSegmentSchema>;
24
+ export declare const ChunkEvaluationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
25
+ chunk_index: z.ZodNumber;
26
+ chunk_start: z.ZodNumber;
27
+ chunk_end: z.ZodNumber;
28
+ status: z.ZodLiteral<"success">;
29
+ interesting: z.ZodBoolean;
30
+ score: z.ZodNumber;
31
+ reason: z.ZodString;
32
+ clip_start: z.ZodNumber;
33
+ clip_end: z.ZodNumber;
34
+ }, z.core.$strip>, z.ZodObject<{
35
+ chunk_index: z.ZodNumber;
36
+ chunk_start: z.ZodNumber;
37
+ chunk_end: z.ZodNumber;
38
+ status: z.ZodLiteral<"failed">;
39
+ error: z.ZodString;
40
+ }, z.core.$strip>], "status">;
41
+ export type ChunkEvaluation = z.infer<typeof ChunkEvaluationSchema>;
42
+ //# sourceMappingURL=segment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../src/types/segment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;iBAQ9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAQhE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;6BAahC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -34,3 +34,4 @@ export const ChunkEvaluationSchema = z.discriminatedUnion('status', [
34
34
  error: z.string(),
35
35
  }),
36
36
  ]);
37
+ //# sourceMappingURL=segment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment.js","sourceRoot":"","sources":["../../src/types/segment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IAClE,yBAAyB,CAAC,MAAM,CAAC;QAC/B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5B,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC;IACF,yBAAyB,CAAC,MAAM,CAAC;QAC/B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const TranscriptLineSchema: z.ZodObject<{
3
+ text: z.ZodString;
4
+ start: z.ZodNumber;
5
+ duration: z.ZodNumber;
6
+ }, z.core.$strip>;
7
+ export type TranscriptLine = z.infer<typeof TranscriptLineSchema>;
8
+ export declare const MicroBlockSchema: z.ZodObject<{
9
+ start: z.ZodNumber;
10
+ end: z.ZodNumber;
11
+ text: z.ZodString;
12
+ }, z.core.$strip>;
13
+ export type MicroBlock = z.infer<typeof MicroBlockSchema>;
14
+ export declare const LLMChunkSchema: z.ZodObject<{
15
+ start: z.ZodNumber;
16
+ end: z.ZodNumber;
17
+ text: z.ZodString;
18
+ }, z.core.$strip>;
19
+ export type LLMChunk = z.infer<typeof LLMChunkSchema>;
20
+ //# sourceMappingURL=transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/types/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;iBAI/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,cAAc;;;;iBAIzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -14,3 +14,4 @@ export const LLMChunkSchema = z.object({
14
14
  end: z.number(),
15
15
  text: z.string(),
16
16
  });
17
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/types/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ export declare const VideoMetadataSchema: z.ZodObject<{
3
+ videoId: z.ZodString;
4
+ title: z.ZodString;
5
+ duration: z.ZodNumber;
6
+ }, z.core.$strip>;
7
+ export type VideoMetadata = z.infer<typeof VideoMetadataSchema>;
8
+ export declare const PipelineResultSchema: z.ZodObject<{
9
+ video_id: z.ZodString;
10
+ title: z.ZodString;
11
+ duration: z.ZodNumber;
12
+ chunk_evaluations: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
13
+ chunk_index: z.ZodNumber;
14
+ chunk_start: z.ZodNumber;
15
+ chunk_end: z.ZodNumber;
16
+ status: z.ZodLiteral<"success">;
17
+ interesting: z.ZodBoolean;
18
+ score: z.ZodNumber;
19
+ reason: z.ZodString;
20
+ clip_start: z.ZodNumber;
21
+ clip_end: z.ZodNumber;
22
+ }, z.core.$strip>, z.ZodObject<{
23
+ chunk_index: z.ZodNumber;
24
+ chunk_start: z.ZodNumber;
25
+ chunk_end: z.ZodNumber;
26
+ status: z.ZodLiteral<"failed">;
27
+ error: z.ZodString;
28
+ }, z.core.$strip>], "status">>;
29
+ segments: z.ZodArray<z.ZodObject<{
30
+ rank: z.ZodNumber;
31
+ start: z.ZodNumber;
32
+ end: z.ZodNumber;
33
+ score: z.ZodNumber;
34
+ reason: z.ZodString;
35
+ source: z.ZodEnum<{
36
+ both: "both";
37
+ transcript: "transcript";
38
+ audio: "audio";
39
+ }>;
40
+ audio_event: z.ZodOptional<z.ZodString>;
41
+ }, z.core.$strip>>;
42
+ }, z.core.$strip>;
43
+ export type PipelineResult = z.infer<typeof PipelineResultSchema>;
44
+ //# sourceMappingURL=video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/types/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -12,3 +12,4 @@ export const PipelineResultSchema = z.object({
12
12
  chunk_evaluations: z.array(ChunkEvaluationSchema),
13
13
  segments: z.array(RankedSegmentSchema),
14
14
  });
15
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/types/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU;CACjC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU;IAChC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;CACvC,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { TranscriptLine, LLMChunk, ChunkEvaluation, AudioEvent, SegmentRefinement } from '../types/index.js';
2
+ /**
3
+ * Disk-backed cache for all pipeline stages.
4
+ *
5
+ * Constructed once in runner.ts with the resolved cache directory and passed
6
+ * down to each stage that needs caching. Pass `disabled = true` to bypass all
7
+ * reads and writes (equivalent to --no-cache).
8
+ */
9
+ export declare class Cache {
10
+ private readonly cacheDir;
11
+ private readonly disabled;
12
+ constructor(cacheDir: string, disabled?: boolean);
13
+ private transcriptPath;
14
+ readTranscript(videoId: string): Promise<TranscriptLine[] | null>;
15
+ writeTranscript(videoId: string, lines: TranscriptLine[]): Promise<void>;
16
+ private chunkPath;
17
+ readChunk(chunk: LLMChunk, chunkAudioEvents?: AudioEvent[]): Promise<ChunkEvaluation | null>;
18
+ writeChunk(chunk: LLMChunk, evaluation: ChunkEvaluation, chunkAudioEvents?: AudioEvent[]): Promise<void>;
19
+ private segmentRefinementPath;
20
+ readSegmentRefinement(start: number, end: number, reason: string): Promise<SegmentRefinement | null>;
21
+ writeSegmentRefinement(start: number, end: number, reason: string, refined: SegmentRefinement): Promise<void>;
22
+ private audioEventPath;
23
+ readAudioEvents(videoId: string, gameProfile: string, provider: string): Promise<AudioEvent[] | null>;
24
+ writeAudioEvents(videoId: string, gameProfile: string, provider: string, events: AudioEvent[]): Promise<void>;
25
+ /**
26
+ * Per-chunk audio cache — mirrors the LLM `chunks/` pattern.
27
+ * Key includes videoId, gameProfile, provider, and the exact window bounds
28
+ * so each 120s slice is stored independently.
29
+ */
30
+ private audioChunkPath;
31
+ readAudioChunk(videoId: string, gameProfile: string, provider: string, windowStart: number, windowEnd: number): Promise<AudioEvent[] | null>;
32
+ writeAudioChunk(videoId: string, gameProfile: string, provider: string, windowStart: number, windowEnd: number, events: AudioEvent[]): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,eAAe,EACf,UAAU,EACV,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AA0C3B;;;;;;GAMG;AACH,qBAAa,KAAK;IAEd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,OAAe;IAK5C,OAAO,CAAC,cAAc;IAIhB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC;IAKjE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9E,OAAO,CAAC,SAAS;IASX,SAAS,CACb,KAAK,EAAE,QAAQ,EACf,gBAAgB,GAAE,UAAU,EAAO,GAClC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAK5B,UAAU,CACd,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,eAAe,EAC3B,gBAAgB,GAAE,UAAU,EAAO,GAClC,OAAO,CAAC,IAAI,CAAC;IAQhB,OAAO,CAAC,qBAAqB;IAIvB,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAK9B,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC;IAOhB,OAAO,CAAC,cAAc;IAQhB,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;IAQzB,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAchB,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC;IAQzB,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
@@ -134,3 +134,4 @@ export class Cache {
134
134
  await writeCacheFile(this.audioChunkPath(videoId, gameProfile, provider, windowStart, windowEnd), events);
135
135
  }
136
136
  }
137
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Generic windowed-chunker utility.
3
+ *
4
+ * Used by:
5
+ * - transcriptProcessor — builds LLM analysis windows over micro-blocks
6
+ * - audioProcessor — builds audio slice windows over the video duration
7
+ *
8
+ * The function returns non-overlapping or overlapping half-open intervals
9
+ * [start, end) that together cover the full range [0, totalDuration).
10
+ */
11
+ import type { ChunkWindow } from '../types/index.js';
12
+ export type { ChunkWindow };
13
+ /**
14
+ * Builds a list of time windows covering `[0, totalDuration)`.
15
+ *
16
+ * @param totalDuration - Total duration of the content in seconds.
17
+ * @param windowSec - Width of each window in seconds. Must be > 0.
18
+ * @param overlapSec - How many seconds consecutive windows share. Must be
19
+ * >= 0 and < windowSec. Defaults to 0.
20
+ * @returns Array of {start, end} windows. Empty when totalDuration <= 0.
21
+ *
22
+ * @example
23
+ * // No overlap — three equal windows
24
+ * buildWindows(60, 20)
25
+ * // → [{start:0,end:20}, {start:20,end:40}, {start:40,end:60}]
26
+ *
27
+ * @example
28
+ * // With overlap — each window starts 10s after the previous
29
+ * buildWindows(60, 30, 10)
30
+ * // → [{start:0,end:30}, {start:20,end:50}, {start:40,end:60}]
31
+ *
32
+ * @example
33
+ * // Remainder — last window is shorter
34
+ * buildWindows(70, 30)
35
+ * // → [{start:0,end:30}, {start:30,end:60}, {start:60,end:70}]
36
+ */
37
+ export declare function buildWindows(totalDuration: number, windowSec: number, overlapSec?: number): ChunkWindow[];
38
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/utils/chunker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,YAAY,CAC1B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAU,GACrB,WAAW,EAAE,CAgBf"}
@@ -49,3 +49,4 @@ export function buildWindows(totalDuration, windowSec, overlapSec = 0) {
49
49
  }
50
50
  return windows;
51
51
  }
52
+ //# sourceMappingURL=chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../src/utils/chunker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,YAAY,CAC1B,aAAqB,EACrB,SAAiB,EACjB,aAAqB,CAAC;IAEtB,IAAI,aAAa,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpD,IAAI,UAAU,GAAG,CAAC;QAAE,UAAU,GAAG,CAAC,CAAC;IACnC,IAAI,UAAU,IAAI,SAAS;QAAE,UAAU,GAAG,CAAC,CAAC,CAAC,8BAA8B;IAE3E,MAAM,IAAI,GAAG,SAAS,GAAG,UAAU,CAAC;IACpC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC;YACX,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,aAAa,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { TranscriptLine, PipelineResult } from '../types/index.js';
2
+ /**
3
+ * Writes the raw normalized transcript lines to
4
+ * `{OUTPUT_DIR}/transcript/{videoId}.json`.
5
+ */
6
+ export declare function dumpTranscript(videoId: string, lines: TranscriptLine[]): Promise<void>;
7
+ /**
8
+ * Writes the full pipeline result (metadata + ranked segments) to
9
+ * `{OUTPUT_DIR}/analysis/{videoId}.json`.
10
+ */
11
+ export declare function dumpAnalysis(videoId: string, result: PipelineResult): Promise<void>;
12
+ //# sourceMappingURL=dumper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumper.d.ts","sourceRoot":"","sources":["../../src/utils/dumper.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExE;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzF"}
@@ -34,3 +34,4 @@ export async function dumpAnalysis(videoId, result) {
34
34
  log.warn(`Failed to dump analysis for ${videoId}: ${err instanceof Error ? err.message : String(err)}`);
35
35
  }
36
36
  }
37
+ //# sourceMappingURL=dumper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumper.js","sourceRoot":"","sources":["../../src/utils/dumper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,KAAuB;IAC3E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;QACnD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,iCAAiC,OAAO,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChG,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,MAAsB;IACxE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;QACnD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACvE,GAAG,CAAC,IAAI,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CACN,+BAA+B,OAAO,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Converts a duration in seconds to HH:MM:SS string.
3
+ * e.g. 3723 → "01:02:03"
4
+ */
5
+ export declare function formatSeconds(seconds: number): string;
6
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKrD"}
@@ -8,3 +8,4 @@ export function formatSeconds(seconds) {
8
8
  const s = Math.floor(seconds % 60);
9
9
  return [h, m, s].map((v) => String(v).padStart(2, '0')).join(':');
10
10
  }
11
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const log: {
2
+ info: (msg: string) => void;
3
+ warn: (msg: string) => void;
4
+ error: (msg: string) => void;
5
+ };
6
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,GAAG;gBACF,MAAM,KAAG,IAAI;gBAGb,MAAM,KAAG,IAAI;iBAGZ,MAAM,KAAG,IAAI;CAG3B,CAAC"}
@@ -14,3 +14,4 @@ export const log = {
14
14
  console.error(`${LEVELS.error} ${msg}`);
15
15
  },
16
16
  };
17
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { LanguageModel } from 'ai';
2
+ /**
3
+ * Returns a Vercel AI SDK LanguageModel instance for the configured provider
4
+ * and model. Both `llmAnalyzer` and `clipRefiner` call this instead of
5
+ * hard-coding `openai(config.LLM_MODEL)`.
6
+ *
7
+ * The active provider is controlled by `LLM_PROVIDER` in the environment.
8
+ * The model name is controlled by `LLM_MODEL`.
9
+ *
10
+ * In ai@5, all provider packages ship LanguageModelV3 which natively
11
+ * satisfies the LanguageModel interface.
12
+ */
13
+ export declare function getModel(): LanguageModel;
14
+ //# sourceMappingURL=modelFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelFactory.d.ts","sourceRoot":"","sources":["../../src/utils/modelFactory.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAIxC;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,IAAI,aAAa,CAiDxC"}
@@ -58,3 +58,4 @@ export function getModel() {
58
58
  }).languageModel(model);
59
59
  }
60
60
  }
61
+ //# sourceMappingURL=modelFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelFactory.js","sourceRoot":"","sources":["../../src/utils/modelFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;IAE/B,QAAQ,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAErC,KAAK,WAAW;YACd,OAAO,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAExC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAErC,KAAK,KAAK;YACR,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAElC,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEtC,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEnC,KAAK,KAAK;YACR,OAAO,sBAAsB,CAAC;gBAC5B,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,8BAA8B;gBACvC,MAAM,EAAE,MAAM,CAAC,WAAW;gBAC1B,qEAAqE;gBACrE,qEAAqE;gBACrE,gEAAgE;gBAChE,yBAAyB,EAAE,IAAI;aAChC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1B,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;gBAClB,OAAO,EAAE,8BAA8B;gBACvC,MAAM,EAAE,MAAM,CAAC,kBAAkB;aAClC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1B,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM,CAAC,sBAAuB;gBACvC,MAAM,EAAE,MAAM,CAAC,qBAAqB;gBACpC,qEAAqE;gBACrE,6EAA6E;gBAC7E,yBAAyB,EAAE,IAAI;aAChC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Absolute path to the package root, resolved from the compiled output location.
3
+ *
4
+ * At runtime (from `dist/utils/paths.js`), going up two levels lands at the
5
+ * package root where `scripts/` is co-located. This works whether the package
6
+ * is run from source (via tsx) or from a global/local npm install.
7
+ */
8
+ export declare const PACKAGE_ROOT: string;
9
+ /**
10
+ * Returns the absolute path to a bundled Python script in the `scripts/`
11
+ * directory at the package root.
12
+ *
13
+ * @param name - Filename of the Python script, e.g. `'detect_events.py'`
14
+ */
15
+ export declare function scriptPath(name: string): string;
16
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,MAAqE,CAAC;AAEjG;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,20 @@
1
+ import { resolve, dirname } from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ /**
4
+ * Absolute path to the package root, resolved from the compiled output location.
5
+ *
6
+ * At runtime (from `dist/utils/paths.js`), going up two levels lands at the
7
+ * package root where `scripts/` is co-located. This works whether the package
8
+ * is run from source (via tsx) or from a global/local npm install.
9
+ */
10
+ export const PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..');
11
+ /**
12
+ * Returns the absolute path to a bundled Python script in the `scripts/`
13
+ * directory at the package root.
14
+ *
15
+ * @param name - Filename of the Python script, e.g. `'detect_events.py'`
16
+ */
17
+ export function scriptPath(name) {
18
+ return resolve(PACKAGE_ROOT, 'scripts', name);
19
+ }
20
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAW,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEjG;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,OAAO,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Config } from '../types/config.js';
2
+ /**
3
+ * Formats the resolved config as a single-line key=value string,
4
+ * omitting all API key fields and any undefined optional values.
5
+ */
6
+ export declare function formatConfig(cfg: Config): string;
7
+ //# sourceMappingURL=redactConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactConfig.d.ts","sourceRoot":"","sources":["../../src/utils/redactConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAYjD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhD"}
@@ -18,3 +18,4 @@ export function formatConfig(cfg) {
18
18
  .map(([k, v]) => `${k}=${String(v)}`)
19
19
  .join(' ');
20
20
  }
21
+ //# sourceMappingURL=redactConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactConfig.js","sourceRoot":"","sources":["../../src/utils/redactConfig.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,gBAAgB;IAChB,mBAAmB;IACnB,8BAA8B;IAC9B,aAAa;IACb,iBAAiB;IACjB,cAAc;IACd,aAAa;CACd,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAQ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAyB;SAChD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACvC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function sliceAudio(inputPath: string, startSec: number, durationSec: number, outputDir: string): Promise<string>;
2
+ //# sourceMappingURL=sliceAudio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sliceAudio.d.ts","sourceRoot":"","sources":["../../src/utils/sliceAudio.ts"],"names":[],"mappings":"AAWA,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -24,3 +24,4 @@ export async function sliceAudio(inputPath, startSec, durationSec, outputDir) {
24
24
  });
25
25
  return outputPath;
26
26
  }
27
+ //# sourceMappingURL=sliceAudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sliceAudio.js","sourceRoot":"","sources":["../../src/utils/sliceAudio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAiB,EACjB,QAAgB,EAChB,WAAmB,EACnB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,UAAU,QAAQ,MAAM,CAAC,CAAC;IAE7E,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,SAAS,CAAC;aACd,YAAY,CAAC,QAAQ,CAAC;aACtB,WAAW,CAAC,WAAW,CAAC;aACxB,cAAc,CAAC,KAAK,CAAC;aACrB,aAAa,CAAC,CAAC,CAAC;aAChB,MAAM,CAAC,KAAK,CAAC;aACb,MAAM,CAAC,UAAU,CAAC;aAClB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;aAC1B,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACjC,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,36 @@
1
1
  {
2
2
  "name": "@thunderkiller/video-clipper",
3
- "version": "1.5.3",
3
+ "version": "1.5.4",
4
4
  "description": "CLI that analyzes YouTube transcripts with an LLM to find interesting moments and cut clips",
5
5
  "license": "ISC",
6
6
  "author": "",
7
7
  "packageManager": "pnpm@10.12.4",
8
8
  "type": "module",
9
- "main": "dist/index.js",
9
+ "main": "dist/lib.js",
10
+ "module": "dist/lib.js",
11
+ "types": "dist/lib.d.ts",
12
+ "bin": {
13
+ "video-clipper": "dist/index.js"
14
+ },
15
+ "exports": {
16
+ ".": {
17
+ "import": {
18
+ "types": "./dist/lib.d.ts",
19
+ "default": "./dist/lib.js"
20
+ }
21
+ },
22
+ "./cli": {
23
+ "import": {
24
+ "types": "./dist/index.d.ts",
25
+ "default": "./dist/index.js"
26
+ }
27
+ }
28
+ },
29
+ "files": [
30
+ "dist",
31
+ "scripts",
32
+ "requirements.txt"
33
+ ],
10
34
  "private": false,
11
35
  "publishConfig": {
12
36
  "access": "public"
@@ -0,0 +1,5 @@
1
+ tensorflow
2
+ tensorflow-hub
3
+ soundfile
4
+ numpy
5
+ openai-whisper