@thunderkiller/video-clipper 1.5.5 → 1.5.6

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 (103) hide show
  1. package/README.md +69 -349
  2. package/dist/config/index.d.ts +0 -1
  3. package/dist/config/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/pipeline/dumper.d.ts.map +1 -0
  7. package/dist/{utils → pipeline}/dumper.js +1 -1
  8. package/dist/pipeline/dumper.js.map +1 -0
  9. package/dist/pipeline/runner.js +1 -1
  10. package/dist/pipeline/runner.js.map +1 -1
  11. package/dist/pipeline/stages/audioProcessor.d.ts +0 -1
  12. package/dist/pipeline/stages/audioProcessor.d.ts.map +1 -1
  13. package/dist/pipeline/stages/audioProcessor.js +1 -1
  14. package/dist/pipeline/stages/audioProcessor.js.map +1 -1
  15. package/dist/pipeline/stages/clipExporter.d.ts +0 -1
  16. package/dist/pipeline/stages/clipExporter.d.ts.map +1 -1
  17. package/dist/pipeline/stages/clipExporter.js.map +1 -1
  18. package/dist/pipeline/stages/segmentAnalyzer.d.ts +0 -1
  19. package/dist/pipeline/stages/segmentAnalyzer.d.ts.map +1 -1
  20. package/dist/pipeline/stages/segmentAnalyzer.js.map +1 -1
  21. package/dist/pipeline/stages/segmentSelector.d.ts +0 -1
  22. package/dist/pipeline/stages/segmentSelector.d.ts.map +1 -1
  23. package/dist/pipeline/stages/segmentSelector.js +1 -2
  24. package/dist/pipeline/stages/segmentSelector.js.map +1 -1
  25. package/dist/pipeline/stages/videoResolver.d.ts +0 -1
  26. package/dist/pipeline/stages/videoResolver.d.ts.map +1 -1
  27. package/dist/pipeline/stages/videoResolver.js.map +1 -1
  28. package/dist/services/audioAnalyzers/index.d.ts +0 -4
  29. package/dist/services/audioAnalyzers/index.d.ts.map +1 -1
  30. package/dist/services/audioAnalyzers/index.js +0 -3
  31. package/dist/services/audioAnalyzers/index.js.map +1 -1
  32. package/dist/services/audioAnalyzers/whisper.d.ts +0 -1
  33. package/dist/services/audioAnalyzers/whisper.d.ts.map +1 -1
  34. package/dist/services/audioAnalyzers/whisper.js +1 -21
  35. package/dist/services/audioAnalyzers/whisper.js.map +1 -1
  36. package/dist/services/audioAnalyzers/yamnet.js +1 -1
  37. package/dist/services/audioAnalyzers/yamnet.js.map +1 -1
  38. package/dist/services/audioDownloader/index.d.ts.map +1 -1
  39. package/dist/services/audioDownloader/index.js +3 -14
  40. package/dist/services/audioDownloader/index.js.map +1 -1
  41. package/dist/services/audioDownloader/sliceAudio.d.ts.map +1 -0
  42. package/dist/{utils → services/audioDownloader}/sliceAudio.js +1 -1
  43. package/dist/services/audioDownloader/sliceAudio.js.map +1 -0
  44. package/dist/services/clipGenerator/index.js +0 -16
  45. package/dist/services/clipGenerator/index.js.map +1 -1
  46. package/dist/services/segmentRanker/index.d.ts +2 -1
  47. package/dist/services/segmentRanker/index.d.ts.map +1 -1
  48. package/dist/services/segmentRanker/index.js +36 -0
  49. package/dist/services/segmentRanker/index.js.map +1 -1
  50. package/dist/services/transcriptAnalyzers/index.d.ts +0 -4
  51. package/dist/services/transcriptAnalyzers/index.d.ts.map +1 -1
  52. package/dist/services/transcriptAnalyzers/index.js +0 -3
  53. package/dist/services/transcriptAnalyzers/index.js.map +1 -1
  54. package/dist/services/transcriptAnalyzers/whisper.js +1 -1
  55. package/dist/services/transcriptAnalyzers/whisper.js.map +1 -1
  56. package/dist/services/transcriptAnalyzers/ytdlp.d.ts +11 -0
  57. package/dist/services/transcriptAnalyzers/ytdlp.d.ts.map +1 -1
  58. package/dist/services/transcriptAnalyzers/ytdlp.js +120 -1
  59. package/dist/services/transcriptAnalyzers/ytdlp.js.map +1 -1
  60. package/dist/services/videoDownloader/index.d.ts.map +1 -1
  61. package/dist/services/videoDownloader/index.js +4 -19
  62. package/dist/services/videoDownloader/index.js.map +1 -1
  63. package/dist/types/analyzer.d.ts +2 -1
  64. package/dist/types/analyzer.d.ts.map +1 -1
  65. package/dist/types/config.d.ts +0 -3
  66. package/dist/types/config.d.ts.map +1 -1
  67. package/dist/types/downloader.d.ts.map +1 -1
  68. package/dist/types/pipeline.d.ts +3 -1
  69. package/dist/types/pipeline.d.ts.map +1 -1
  70. package/dist/utils/chunker.d.ts +0 -1
  71. package/dist/utils/chunker.d.ts.map +1 -1
  72. package/dist/utils/chunker.js.map +1 -1
  73. package/dist/utils/format.d.ts +6 -0
  74. package/dist/utils/format.d.ts.map +1 -1
  75. package/dist/utils/format.js +20 -0
  76. package/dist/utils/format.js.map +1 -1
  77. package/dist/utils/logger.d.ts +1 -0
  78. package/dist/utils/logger.d.ts.map +1 -1
  79. package/dist/utils/logger.js +10 -0
  80. package/dist/utils/logger.js.map +1 -1
  81. package/dist/utils/pythonBin.d.ts +2 -0
  82. package/dist/utils/pythonBin.d.ts.map +1 -0
  83. package/dist/utils/pythonBin.js +24 -0
  84. package/dist/utils/pythonBin.js.map +1 -0
  85. package/package.json +1 -1
  86. package/dist/services/signalMerger/index.d.ts +0 -5
  87. package/dist/services/signalMerger/index.d.ts.map +0 -1
  88. package/dist/services/signalMerger/index.js +0 -37
  89. package/dist/services/signalMerger/index.js.map +0 -1
  90. package/dist/services/transcriptFetcher/index.d.ts +0 -26
  91. package/dist/services/transcriptFetcher/index.d.ts.map +0 -1
  92. package/dist/services/transcriptFetcher/index.js +0 -121
  93. package/dist/services/transcriptFetcher/index.js.map +0 -1
  94. package/dist/utils/dumper.d.ts.map +0 -1
  95. package/dist/utils/dumper.js.map +0 -1
  96. package/dist/utils/redactConfig.d.ts +0 -7
  97. package/dist/utils/redactConfig.d.ts.map +0 -1
  98. package/dist/utils/redactConfig.js +0 -21
  99. package/dist/utils/redactConfig.js.map +0 -1
  100. package/dist/utils/sliceAudio.d.ts.map +0 -1
  101. package/dist/utils/sliceAudio.js.map +0 -1
  102. /package/dist/{utils → pipeline}/dumper.d.ts +0 -0
  103. /package/dist/{utils → services/audioDownloader}/sliceAudio.d.ts +0 -0
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # video-clipper
1
+ # @thunderkiller/video-clipper
2
2
 
3
- A TypeScript CLI tool that takes a YouTube URL, analyzes the transcript with an LLM, and returns the most interesting moments as ranked timestamp ranges. Optionally downloads the video and cuts clips automatically.
3
+ A TypeScript CLI (and library) that analyzes a YouTube video with an LLM, finds the most interesting moments, and optionally downloads the video and cuts clips automatically.
4
4
 
5
- ## How it works
5
+ ## How It Works
6
6
 
7
7
  ```
8
8
  YouTube URL
@@ -11,10 +11,10 @@ YouTube URL
11
11
  Parse URL → fetch transcript → group into chunks
12
12
 
13
13
 
14
- Parallel LLM analysis (Vercel AI SDK + gpt-4o)
14
+ Parallel LLM analysis (Vercel AI SDK OpenAI, Anthropic, Google, and more)
15
15
 
16
16
 
17
- Rank & deduplicate segments
17
+ Merge with audio event detection → rank & deduplicate segments
18
18
 
19
19
 
20
20
  Refine clip boundaries (second LLM pass)
@@ -23,132 +23,80 @@ Refine clip boundaries (second LLM pass)
23
23
  (Optional) Download video + cut clips with ffmpeg
24
24
  ```
25
25
 
26
- ## Tech Stack
27
-
28
- | Layer | Choice |
29
- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
30
- | Language | TypeScript (Node.js 18+) |
31
- | Transcript | `youtube-transcript` |
32
- | LLM | Vercel AI SDK (`ai` + `@ai-sdk/openai`, `@ai-sdk/anthropic`, `@ai-sdk/google`, `@ai-sdk/xai`, `@ai-sdk/mistral`, `@ai-sdk/groq`, `@ai-sdk/openrouter`) |
33
- | Structured output | `generateObject` + `zod` |
34
- | Video download | `yt-dlp` via `execa` |
35
- | Clip cutting | `fluent-ffmpeg` |
36
- | Config validation | `zod` |
37
- | Concurrency | `p-limit` |
38
-
39
26
  ## Requirements
40
27
 
41
28
  - Node.js 18+
42
- - `yt-dlp` (for video download)
43
- - `ffmpeg` (for clip cutting)
29
+ - [`yt-dlp`](https://github.com/yt-dlp/yt-dlp) for video download
30
+ - [`ffmpeg`](https://ffmpeg.org) for clip cutting
44
31
 
45
32
  ```bash
46
33
  # macOS
47
34
  brew install yt-dlp ffmpeg
48
35
  ```
49
36
 
50
- ## Audio/Video Sync
51
-
52
- Clips are generated by re-encoding with `libx264` (video) and `aac` (audio) to ensure perfect audio/video synchronization. This is slower than stream copy mode but prevents the common issue where video and audio become desynchronized in the output clips.
53
-
54
- **Performance vs Quality Trade-off:**
55
-
56
- Use the `FFMPEG_PRESET` environment variable to adjust encoding speed:
57
-
58
- | Preset | Speed | Quality | Use Case |
59
- | ---------------- | --------- | ------- | ---------------------- |
60
- | `ultrafast` | Very fast | Lowest | Quick testing |
61
- | `fast` (default) | Fast | Good | Balanced performance |
62
- | `medium` | Medium | Better | Higher quality clips |
63
- | `slow` | Slow | High | Final production clips |
64
-
65
- Example:
37
+ ## Installation
66
38
 
67
39
  ```bash
68
- # Faster processing (lower quality)
69
- FFMPEG_PRESET=ultrafast npm run start -- <url> --clip
40
+ # Global CLI
41
+ npm install -g @thunderkiller/video-clipper
42
+
43
+ # One-off with npx (no install)
44
+ npx @thunderkiller/video-clipper <url>
70
45
 
71
- # Higher quality (slower)
72
- FFMPEG_PRESET=medium npm run start -- <url> --clip
46
+ # As a library
47
+ npm install @thunderkiller/video-clipper
73
48
  ```
74
49
 
75
- ## Setup
50
+ ## Quick Start
76
51
 
77
- ```bash
78
- npm install
79
- cp .env.example .env
80
- ```
52
+ **1. Configure your LLM provider**
81
53
 
82
- Edit `.env` and configure your LLM provider:
54
+ Create a `.env` file in your working directory:
83
55
 
84
56
  ```env
85
- # Choose your provider (openai, anthropic, google, xai, mistral, groq, zai, openrouter)
86
57
  LLM_PROVIDER=openai
87
- OPENAI_API_KEY=your_key_here
88
-
89
- # Or use a free model via OpenRouter:
90
- # LLM_PROVIDER=openrouter
91
- # OPENROUTER_API_KEY=sk-or-...
92
- # LLM_MODEL=meta-llama/llama-3.3-70b-instruct:free
58
+ OPENAI_API_KEY=sk-...
93
59
  ```
94
60
 
95
- ## Advanced Examples
61
+ Or use a free model via OpenRouter:
96
62
 
97
- ```bash
98
- # Analyze only (no download)
99
- npm run start -- <youtube-url>
63
+ ```env
64
+ LLM_PROVIDER=openrouter
65
+ OPENROUTER_API_KEY=sk-or-...
66
+ LLM_MODEL=meta-llama/llama-3.3-70b-instruct:free
67
+ ```
100
68
 
101
- # Analyze and download full video
102
- npm run start -- <youtube-url> --download
69
+ **2. Run**
103
70
 
104
- # Analyze and cut clips
105
- npm run start -- <youtube-url> --clip
71
+ ```bash
72
+ # Analyze only prints ranked segments as JSON
73
+ video-clipper https://youtube.com/watch?v=VIDEO_ID
106
74
 
107
- # Limit number of clips to generate
108
- npm run start -- <youtube-url> --clip --max-clips 3
75
+ # Analyze and cut clips (downloads video, runs ffmpeg)
76
+ video-clipper https://youtube.com/watch?v=VIDEO_ID --clip
109
77
 
110
- # Use custom output directory
111
- OUTPUT_DIR=my-clips npm run start -- <youtube-url> --clip
78
+ # Download only the top 3 segments (faster than full video)
79
+ video-clipper https://youtube.com/watch?v=VIDEO_ID --download-sections 3
112
80
  ```
113
81
 
114
- ## Configuration
115
-
116
- All parameters are set via `.env`:
82
+ ## CLI Flags
117
83
 
118
- | Variable | Default | Description |
119
- | ------------------------------ | ---------------- | ------------------------------------------------------------------------------------------------------ |
120
- | **Provider selection** |
121
- | `LLM_PROVIDER` | `openai` | LLM provider (openai, anthropic, google, xai, mistral, groq, zai, openrouter) |
122
- | `OPENAI_API_KEY` | | Your OpenAI API key (required if LLM_PROVIDER=openai) |
123
- | `ANTHROPIC_API_KEY` | | Your Anthropic API key (required if LLM_PROVIDER=anthropic) |
124
- | `GOOGLE_GENERATIVE_AI_API_KEY` | — | Your Google API key (required if LLM_PROVIDER=google) |
125
- | `XAI_API_KEY` | | Your XAI API key (required if LLM_PROVIDER=xai) |
126
- | `MISTRAL_API_KEY` | | Your Mistral API key (required if LLM_PROVIDER=mistral) |
127
- | `GROQ_API_KEY` | | Your Groq API key (required if LLM_PROVIDER=groq) |
128
- | `ZAI_API_KEY` | | Your Zai API key (required if LLM_PROVIDER=zai) |
129
- | `OPENROUTER_API_KEY` | — | Your OpenRouter API key (required if LLM_PROVIDER=openrouter) |
130
- | **Model & LLM** |
131
- | `LLM_MODEL` | `gpt-4o` | Model ID (depends on provider) |
132
- | `LLM_MAX_RETRIES` | `3` | Max retries on rate-limit errors |
133
- | `LLM_CONCURRENCY` | `3` | Max parallel LLM calls |
134
- | `LLM_SYSTEM_PROMPT` | (default prompt) | Custom system prompt for LLM analysis |
135
- | **Analysis parameters** |
136
- | `SCORE_THRESHOLD` | `7` | Minimum score (1–10) to keep a segment |
137
- | `TOP_N_SEGMENTS` | `10` | Max number of segments to return |
138
- | `CHUNK_LENGTH_SEC` | `120` | LLM analysis window size in seconds |
139
- | `CHUNK_OVERLAP_SEC` | `20` | Overlap between consecutive chunks |
140
- | `MICRO_BLOCK_SEC` | `15` | Transcript grouping window in seconds |
141
- | `MAX_CHUNKS` | — | Limit number of chunks sent to LLM (optional) |
142
- | **Video download** |
143
- | `DOWNLOAD_SECTIONS_MODE` | `all` | yt-dlp mode: all (full video) or N (top N segments only, e.g. 1, 2, 3...) |
144
- | `FFMPEG_PRESET` | `fast` | ffmpeg encoding preset: ultrafast, superfast, veryfast, fast (default), medium, slow, slower |
145
- | `TIMESTAMP_OFFSET_SECONDS` | `0` | Adjust all clip timestamps (positive = later, negative = earlier) to fix transcript-video misalignment |
146
- | **Paths** |
147
- | `DOWNLOAD_DIR` | `downloads/` | Where to store downloaded videos |
148
- | `OUTPUT_DIR` | `outputs/` | Where to store generated clips and dumps |
149
- | `CACHE_DIR` | `outputs/cache` | Where to store transcript and LLM result cache |
150
- | **Output options** |
151
- | `DUMP_OUTPUTS` | `true` | Write transcript/analysis JSON dumps |
84
+ | Flag | Description |
85
+ | -------------------------- | ------------------------------------------------------------------------ |
86
+ | `--clip` | Download video and generate mp4 clips for each segment |
87
+ | `--download-sections <n>` | Download only top N segments via yt-dlp `--download-sections` (e.g. `3`) |
88
+ | `--local-video <path>` | Cut clips from a local video file — skips yt-dlp download entirely |
89
+ | `--video-path <path>` | Custom output directory for downloaded videos and clips |
90
+ | `--threshold <n>` | Minimum score (1–10) to keep a segment (default: `7`) |
91
+ | `--top-n <n>` | Maximum number of segments to return (default: `10`) |
92
+ | `--max-duration <s>` | Abort if video is longer than N seconds |
93
+ | `--max-chunks <n>` | Limit number of transcript chunks sent to LLM |
94
+ | `--max-parallel <n>` | Max parallel LLM calls |
95
+ | `--no-audio` | Disable audio event detection (transcript-only mode) |
96
+ | `--game-profile <profile>` | Audio event profile: `valorant`, `fps`, `boss_fight`, `general` |
97
+ | `--output-json <path>` | Write output JSON to file instead of stdout |
98
+ | `--no-cache` | Bypass all caches and force a fresh run |
99
+ | `--help, -h` | Show help message |
152
100
 
153
101
  ## Output
154
102
 
@@ -163,267 +111,39 @@ All parameters are set via `.env`:
163
111
  "start": 120,
164
112
  "end": 150,
165
113
  "score": 9,
166
- "reason": "strong controversial opinion"
114
+ "reason": "strong controversial opinion",
115
+ "source": "transcript"
167
116
  },
168
117
  {
169
118
  "rank": 2,
170
119
  "start": 420,
171
120
  "end": 455,
172
121
  "score": 8,
173
- "reason": "funny storytelling moment"
122
+ "reason": "funny storytelling moment",
123
+ "source": "both"
174
124
  }
175
125
  ]
176
126
  }
177
127
  ```
178
128
 
179
- ## Caching
180
-
181
- The CLI caches both transcript fetches and LLM chunk results to speed up subsequent runs:
182
-
183
- - **Transcript cache**: Stored per video ID in `CACHE_DIR`
184
- - **LLM chunk cache**: Stores successful chunk analyses to avoid re-analyzing the same content
185
-
186
- Cache is automatically used on re-runs. Use `--no-cache` to bypass.
187
-
188
- ## Working with Pre-Downloaded Videos
189
-
190
- If you already have a video downloaded (from yt-dlp, browser download, or other tool), you can skip the download step and work directly with that file.
191
-
192
- **Workflow:**
193
-
194
- ```bash
195
- # Step 1: Run analysis once to get segment timestamps
196
- npm run start -- <url> --output-json analysis.json
197
-
198
- # Step 2: (Optional) Edit timestamps in analysis.json if needed
199
- # Edit the "start" and "end" values for each segment
200
-
201
- # Step 3: Place your video in downloads/ directory
202
- cp /path/to/your/video.mp4 downloads/<videoId>.mp4
203
-
204
- # Step 4: Run again - will skip download and use your video
205
- npm run start -- <url> --clip
206
- ```
207
-
208
- **Use cases:**
209
-
210
- - **Testing different settings** - Run different clip configurations without re-downloading
211
- - **Manual timestamp adjustment** - Fine-tune segment boundaries based on visual inspection
212
- - **Alternative video sources** - Work with videos downloaded from other tools or browsers
213
- - **Large video files** - If you have a high-quality version, use that instead
214
-
215
- **Notes:**
216
-
217
- - The video file must be named exactly `{videoId}.mp4` in the `DOWNLOAD_DIR`
218
- - You can apply `TIMESTAMP_OFFSET_SECONDS` globally instead of editing each timestamp
219
- - Transcript cache is used, so re-running is fast (no API calls)
220
-
221
- ### Combining with Timestamp Offset
222
-
223
- For pre-downloaded videos with known sync issues:
224
-
225
- ```bash
226
- # Skip download, apply 3-second offset to all clips
227
- TIMESTAMP_OFFSET_SECONDS=-3 npm run start -- <url> --clip
228
- ```
229
-
230
- The CLI will find the existing video in `downloads/`, skip the download step, and apply the offset to all clip generation.
231
-
232
- ## Usage
233
-
234
- ### Basic analysis (no download)
235
-
236
- ```bash
237
- npm run start -- https://youtube.com/watch?v=abc123
238
- ```
239
-
240
- ### Download full video and generate clips
241
-
242
- ```bash
243
- npm run start -- https://youtube.com/watch?v=abc123 --clip
244
- ```
129
+ ## Programmatic API
245
130
 
246
- ### Download top N segments only
131
+ ```typescript
132
+ import { runPipeline, parseArgs, config } from '@thunderkiller/video-clipper';
247
133
 
248
- ```bash
249
- # Download top 3 segments
250
- npm run start -- https://youtube.com/watch?v=abc123 --download-sections 3
251
-
252
- # Download top 5 segments
253
- npm run start -- https://youtube.com/watch?v=abc123 --download-sections 5
254
- ```
255
-
256
- ### Custom output directory
257
-
258
- ```bash
259
- # Store clips in custom directory
260
- npm run start -- https://youtube.com/watch?v=abc123 --clip --video-path ./my-clips
261
-
262
- # Download segments to custom path
263
- npm run start -- https://youtube.com/watch?v=abc123 --download-sections 3 --video-path ./downloads
264
- ```
265
-
266
- ### Custom thresholds
267
-
268
- ```bash
269
- npm run start -- https://youtube.com/watch?v=abc123 --threshold 8 --top-n 5
270
- ```
271
-
272
- ### Testing with limited chunks
273
-
274
- ```bash
275
- npm run start -- https://youtube.com/watch?v=abc123 --max-chunks 3
134
+ const args = parseArgs(process.argv);
135
+ await runPipeline(args);
276
136
  ```
277
137
 
278
- ### Custom thresholds with timestamp offset
279
-
280
- ```bash
281
- # Fix 3-second audio delay (shift earlier)
282
- TIMESTAMP_OFFSET_SECONDS=-3 npm run start -- <url> --clip
283
-
284
- # Fix 2-second early start (shift later)
285
- TIMESTAMP_OFFSET_SECONDS=2 npm run start -- <url> --clip
286
-
287
- # High quality, slower processing, with offset
288
- FFMPEG_PRESET=slow TIMESTAMP_OFFSET_SECONDS=-3 npm run start -- <url> --clip
289
- ```
290
-
291
- ## Troubleshooting Audio Sync Issues
292
-
293
- ### Problem: Audio is delayed or starts early
294
-
295
- **Symptoms:**
296
-
297
- - Video starts at correct moment but audio plays 2-5 seconds later/earlier
298
- - Lip movements don't match speech in the clip
299
- - Content in clip doesn't match the transcript segment
300
-
301
- **Root Causes:**
302
-
303
- 1. **Transcript misalignment** - Transcript timestamps don't perfectly match the video
304
- - **Auto-generated captions**: Often have 1-3 second delays
305
- - **Manual captions**: Usually more accurate but can have timing issues
306
- - **Multiple caption tracks**: Transcripts from different video versions
307
-
308
- 2. **Millisecond precision loss** - Old implementation lost decimal seconds
309
- - Now fixed: `--download-sections` uses HH:MM:SS.mmm format
310
-
311
- 3. **Version differences** - The transcript might be from a slightly different version of the video
312
-
313
- ### Solution: Use `TIMESTAMP_OFFSET_SECONDS`
314
-
315
- **What it does:**
316
- Applies a global offset to all clip timestamps. Positive = shift later, negative = shift earlier.
317
-
318
- **How to use:**
319
-
320
- ```bash
321
- # Add to .env
322
- TIMESTAMP_OFFSET_SECONDS=-3
323
-
324
- # Or inline
325
- TIMESTAMP_OFFSET_SECONDS=-3 npm run start -- <url> --clip
326
- ```
327
-
328
- ### Finding the Correct Offset
329
-
330
- **Step 1: Test with logging**
331
-
332
- Run a single segment and observe the logs:
333
-
334
- ```bash
335
- TIMESTAMP_OFFSET_SECONDS=0 npm run start -- <url> --download-sections 1
336
- ```
337
-
338
- Look for these log lines:
339
-
340
- ```
341
- [info] Downloading segment 1: 00:02:00.500-00:02:30.000 (strong opinion...)
342
- [info] Requested: 120.50s - 150.00s
343
- [info] Adjusted: 117.50s - 147.00s (offset: -3s)
344
- [info] Cutting clip: start=117.50s, end=147.00s, duration=29.50s
345
- ```
346
-
347
- **Step 2: Play and verify**
348
-
349
- - Open the generated clip
350
- - Check if the moment matches the transcript description
351
- - Note if it's too early or too late
352
-
353
- **Step 3: Adjust offset**
354
-
355
- If clip **starts 3 seconds late**:
356
-
357
- ```bash
358
- TIMESTAMP_OFFSET_SECONDS=-3 # Negative = shift earlier
359
- ```
360
-
361
- If clip **starts 2 seconds early**:
362
-
363
- ```bash
364
- TIMESTAMP_OFFSET_SECONDS=2 # Positive = shift later
365
- ```
366
-
367
- **Step 4: Verify with multiple clips**
368
-
369
- ```bash
370
- TIMESTAMP_OFFSET_SECONDS=-3 npm run start -- <url> --download-sections 3
371
- ```
372
-
373
- Check if the offset works consistently across different segments.
374
-
375
- ### Binary Search for Optimal Offset
376
-
377
- If you're unsure of the exact offset:
378
-
379
- ```bash
380
- # Try 0, -3, -6, -9 to see which is closest
381
- for offset in 0 -3 -6 -9; do
382
- TIMESTAMP_OFFSET_SECONDS=$offset npm run start -- <url> --download-sections 1
383
- echo "Tested offset: $offset"
384
- # Play and check accuracy
385
- done
386
- ```
387
-
388
- Then narrow down: `-3` seems good, try `-2` and `-4`, etc.
389
-
390
- ### Common Scenarios
391
-
392
- | Scenario | Likely Offset | Explanation |
393
- | ----------------------- | ------------- | --------------------------------------------------- |
394
- | Auto-generated captions | `-1` to `-3` | ASR timing often lags behind actual speech |
395
- | Manual captions | `0` to `-1` | Usually more accurate, small sync issues |
396
- | Multiple caption tracks | `-2` to `-5` | Different versions may have systematic offset |
397
- | Regional variations | Varies | Different regions may have different caption timing |
398
-
399
- ### Verifying the Fix
400
-
401
- After applying `TIMESTAMP_OFFSET_SECONDS`, verify:
402
-
403
- 1. **Watch the clip**: Audio and video should be synchronized
404
- 2. **Check multiple clips**: Offset should work consistently
405
- 3. **Compare with original**: Clip should match the described content
406
-
407
- If offset varies between segments, the issue might be video-specific rather than a global transcript offset.
408
-
409
- ### CLI Flags
410
-
411
- | Flag | Description |
412
- | ---------------------------- | ----------------------------------------------------------------------------- |
413
- | `--clip` | Download video and generate mp4 clips for each segment |
414
- | `--download-sections <mode>` | yt-dlp mode: `all` (full video) or `N` (top N segments only, e.g. 1, 2, 3...) |
415
- | `--video-path <path>` | Custom output directory for downloaded videos and clips |
416
- | `--threshold <n>` | Minimum score (1–10) to keep a segment |
417
- | `--top-n <n>` | Maximum number of segments to return |
418
- | `--max-duration <s>` | Abort if video is longer than N seconds |
419
- | `--max-chunks <n>` | Limit number of transcript chunks sent to LLM |
420
- | `--max-parallel <n>` | Max number of LLM calls to run in parallel |
421
- | `--output-json <path>` | Write output JSON to file instead of stdout |
422
- | `--no-cache` | Bypass all caches and force a fresh run |
423
- | `--help, -h` | Show help message |
424
-
425
- ## Docs
138
+ All public types and Zod schemas are exported from the package root. See [src/lib.ts](src/lib.ts) for the full surface.
426
139
 
427
- Full architecture and build plan: [docs/plan.md](docs/plan.md)
140
+ ## Documentation
428
141
 
429
- yt-dlp download modes: [docs/yt-downloader.md](docs/yt-downloader.md)
142
+ | Doc | Description |
143
+ | ------------------------------------------------ | --------------------------------------------------------------------- |
144
+ | [docs/configuration.md](docs/configuration.md) | Full environment variable reference, provider setup, FFmpeg presets |
145
+ | [docs/advanced-usage.md](docs/advanced-usage.md) | Advanced CLI examples, caching, pre-downloaded videos |
146
+ | [docs/audio-sync.md](docs/audio-sync.md) | Audio/video sync troubleshooting and `TIMESTAMP_OFFSET_SECONDS` guide |
147
+ | [docs/yt-downloader.md](docs/yt-downloader.md) | yt-dlp download modes explained |
148
+ | [docs/free-models.md](docs/free-models.md) | Free models that work well with this tool |
149
+ | [docs/plan.md](docs/plan.md) | Full architecture and pipeline design |
@@ -1,3 +1,2 @@
1
1
  export { config } from './env.js';
2
- export type { Config } from '../types/config.js';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { log } from './utils/logger.js';
3
- import { formatConfig } from './utils/redactConfig.js';
3
+ import { formatConfig } from './utils/format.js';
4
4
  import { config } from './config/index.js';
5
5
  import { parseArgs, printUsage } from './cli.js';
6
6
  import { runPipeline } from './pipeline/runner.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAErC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAChD,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC7C,GAAG,CAAC,IAAI,CACN,8FAA8F,CAC/F,CAAC;AACJ,CAAC;AAED,GAAG,CAAC,IAAI,CACN,kCAAkC,MAAM,CAAC,SAAS,GAAG;IACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK;QACrE,CAAC,CAAC,0BAA0B,IAAI,CAAC,gBAAgB,GAAG;QACpD,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/D,CAAC;AACF,GAAG,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE5C,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC9B,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAErC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAChD,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC7C,GAAG,CAAC,IAAI,CACN,8FAA8F,CAC/F,CAAC;AACJ,CAAC;AAED,GAAG,CAAC,IAAI,CACN,kCAAkC,MAAM,CAAC,SAAS,GAAG;IACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK;QACrE,CAAC,CAAC,0BAA0B,IAAI,CAAC,gBAAgB,GAAG;QACpD,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/D,CAAC;AACF,GAAG,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE5C,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC9B,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumper.d.ts","sourceRoot":"","sources":["../../src/pipeline/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"}
@@ -1,7 +1,7 @@
1
1
  import { promises as fs } from 'fs';
2
2
  import path from 'path';
3
3
  import { config } from '../config/index.js';
4
- import { log } from './logger.js';
4
+ import { log } from '../utils/logger.js';
5
5
  /**
6
6
  * Writes the raw normalized transcript lines to
7
7
  * `{OUTPUT_DIR}/transcript/{videoId}.json`.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumper.js","sourceRoot":"","sources":["../../src/pipeline/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,oBAAoB,CAAC;AAGzC;;;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"}
@@ -2,7 +2,7 @@ import { promises as fs } from 'fs';
2
2
  import { config } from '../config/index.js';
3
3
  import { Cache } from '../utils/cache.js';
4
4
  import { log } from '../utils/logger.js';
5
- import { dumpAnalysis, dumpTranscript } from '../utils/dumper.js';
5
+ import { dumpAnalysis, dumpTranscript } from './dumper.js';
6
6
  import { resolveVideo } from './stages/videoResolver.js';
7
7
  import { processAudio } from './stages/audioProcessor.js';
8
8
  import { analyzeSegments, refineRankedSegments } from './stages/segmentAnalyzer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/pipeline/runner.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import type { Cache } from '../../utils/cache.js';
2
2
  import type { AudioEvent, AudioProcessorOpts } from '../../types/index.js';
3
- export type { AudioProcessorOpts };
4
3
  /**
5
4
  * Stage 3 — Audio Processor
6
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"audioProcessor.d.ts","sourceRoot":"","sources":["../../../src/pipeline/stages/audioProcessor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC,CA4FvB"}
1
+ {"version":3,"file":"audioProcessor.d.ts","sourceRoot":"","sources":["../../../src/pipeline/stages/audioProcessor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE3E;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC,CA4FvB"}
@@ -3,7 +3,7 @@ import pLimit from 'p-limit';
3
3
  import { downloadAudio } from '../../services/audioDownloader/index.js';
4
4
  import { createAnalyzerChain } from '../../services/audioAnalyzers/index.js';
5
5
  import { EventDetector } from '../../services/eventDetector/index.js';
6
- import { sliceAudio } from '../../utils/sliceAudio.js';
6
+ import { sliceAudio } from '../../services/audioDownloader/sliceAudio.js';
7
7
  import { buildWindows } from '../../utils/chunker.js';
8
8
  import { log } from '../../utils/logger.js';
9
9
  import { config } from '../../config/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"audioProcessor.js","sourceRoot":"","sources":["../../../src/pipeline/stages/audioProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audioProcessor.js","sourceRoot":"","sources":["../../../src/pipeline/stages/audioProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,QAAgB,EAChB,KAAY,EACZ,IAAwB;IAExB,MAAM,YAAY,GAAG,MAAM,CAAC,uBAAuB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACrE,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7F,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,IAAI,CAAC,+CAA+C,MAAM,CAAC,MAAM,UAAU,CAAC,CAAC;QACjF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GACb,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,QAAQ,CAAC,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1C,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,GAAG,CAAC,IAAI,CACN,kCAAkC,aAAa,cAAc,IAAI,CAAC,WAAW,SAAS,IAAI,CAAC,WAAW,eAAe,CACtH,CAAC;QAEF,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACrB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,GAAG,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;YAE1E,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,cAAc,CAC5C,OAAO,EACP,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,GAAG,CACX,CAAC;YACF,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,CAAC,IAAI,CACN,6BAA6B,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,MAAM,UAAU,CAC7F,CAAC;gBACF,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAChC,SAAS,EACT,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EACzB,MAAM,CAAC,UAAU,CAClB,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAClC,SAAS,EACT,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAC1B,CAAC;YACF,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAE3B,MAAM,KAAK,CAAC,eAAe,CACzB,OAAO,EACP,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,GAAG,EACV,MAAM,CACP,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CACH,CACF,CAAC;QAEF,MAAM,WAAW,GAAiB,OAAO;aACtC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC;YAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CACN,4CAA4C,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CACxF,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAEnC,GAAG,CAAC,IAAI,CAAC,mCAAmC,WAAW,CAAC,MAAM,eAAe,CAAC,CAAC;QAE/E,MAAM,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC5F,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,gDAAgD,OAAO,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import type { RankedSegment, ClipExporterOpts } from '../../types/index.js';
2
- export type { ClipExporterOpts };
3
2
  /**
4
3
  * Stage 6 — Clip Exporter
5
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"clipExporter.d.ts","sourceRoot":"","sources":["../../../src/pipeline/stages/clipExporter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,EAAE,EACzB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoDnB"}
1
+ {"version":3,"file":"clipExporter.d.ts","sourceRoot":"","sources":["../../../src/pipeline/stages/clipExporter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,EAAE,EACzB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoDnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"clipExporter.js","sourceRoot":"","sources":["../../../src/pipeline/stages/clipExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK/C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,QAAyB,EACzB,IAAsB;IAEtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,aAAa,CAClB,IAAI,CAAC,UAAU,EACf,QAAQ,EACR,OAAO,EACP,IAAI,CAAC,SAAS,EACd,MAAM,CAAC,gBAAgB,CACxB,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAEhF,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAE/D,IAAI,kBAAkB,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CACN,aAAa,gBAAgB,uBAAuB,kBAAkB,CAAC,MAAM,iCAAiC,CAC/G,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,eAAe,kBAAkB,CAAC,MAAM,6CAA6C,CAAC,CAAC;QAChG,MAAM,cAAc,GAAG,MAAM,aAAa,CACxC,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAE/E,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,aAAa,CAClB,cAAc,CAAC,IAAI,EACnB,QAAQ,EACR,OAAO,EACP,IAAI,CAAC,SAAS,EACd,MAAM,CAAC,gBAAgB,CACxB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"clipExporter.js","sourceRoot":"","sources":["../../../src/pipeline/stages/clipExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,QAAyB,EACzB,IAAsB;IAEtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,aAAa,CAClB,IAAI,CAAC,UAAU,EACf,QAAQ,EACR,OAAO,EACP,IAAI,CAAC,SAAS,EACd,MAAM,CAAC,gBAAgB,CACxB,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAEhF,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAE/D,IAAI,kBAAkB,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CACN,aAAa,gBAAgB,uBAAuB,kBAAkB,CAAC,MAAM,iCAAiC,CAC/G,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,eAAe,kBAAkB,CAAC,MAAM,6CAA6C,CAAC,CAAC;QAChG,MAAM,cAAc,GAAG,MAAM,aAAa,CACxC,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAE/E,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,aAAa,CAClB,cAAc,CAAC,IAAI,EACnB,QAAQ,EACR,OAAO,EACP,IAAI,CAAC,SAAS,EACd,MAAM,CAAC,gBAAgB,CACxB,CAAC;AACJ,CAAC"}