@thunderkiller/video-clipper 1.1.1 → 1.3.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 (92) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +15 -0
  3. package/README.md +19 -0
  4. package/package.json +1 -1
  5. package/.github/workflows/ci.yml +0 -42
  6. package/.github/workflows/release.yml +0 -76
  7. package/.husky/pre-commit +0 -3
  8. package/.prettierignore +0 -6
  9. package/.prettierrc +0 -7
  10. package/.releaserc.json +0 -21
  11. package/AGENTS.md +0 -122
  12. package/docs/free-models.md +0 -78
  13. package/docs/plan.md +0 -442
  14. package/docs/refactorPhases.md +0 -105
  15. package/docs/yt-downloader.md +0 -440
  16. package/requirements.txt +0 -5
  17. package/scripts/detect_events.py +0 -81
  18. package/scripts/detect_events_whisper.py +0 -101
  19. package/scripts/transcribe_whisper.py +0 -70
  20. package/src/cli.ts +0 -186
  21. package/src/config/env.ts +0 -18
  22. package/src/config/index.ts +0 -2
  23. package/src/index.ts +0 -46
  24. package/src/pipeline/runner.ts +0 -147
  25. package/src/pipeline/stages/audioProcessor.ts +0 -127
  26. package/src/pipeline/stages/clipExporter.ts +0 -76
  27. package/src/pipeline/stages/segmentAnalyzer.ts +0 -72
  28. package/src/pipeline/stages/segmentSelector.ts +0 -39
  29. package/src/pipeline/stages/videoResolver.ts +0 -44
  30. package/src/services/audioAnalyzers/base.ts +0 -32
  31. package/src/services/audioAnalyzers/factory.ts +0 -69
  32. package/src/services/audioAnalyzers/gemini.ts +0 -136
  33. package/src/services/audioAnalyzers/index.ts +0 -6
  34. package/src/services/audioAnalyzers/whisper.ts +0 -80
  35. package/src/services/audioAnalyzers/yamnet.ts +0 -54
  36. package/src/services/audioDownloader/index.ts +0 -102
  37. package/src/services/chunkBuilder/index.ts +0 -82
  38. package/src/services/clipGenerator/index.ts +0 -210
  39. package/src/services/clipRefiner/index.ts +0 -141
  40. package/src/services/eventDetector/index.ts +0 -68
  41. package/src/services/llmAnalyzer/LLMAnalyzer.ts +0 -98
  42. package/src/services/llmAnalyzer/index.ts +0 -231
  43. package/src/services/metadataExtractor/index.ts +0 -83
  44. package/src/services/segmentRanker/index.ts +0 -88
  45. package/src/services/signalMerger/index.ts +0 -53
  46. package/src/services/transcriptAnalyzers/base.ts +0 -26
  47. package/src/services/transcriptAnalyzers/factory.ts +0 -66
  48. package/src/services/transcriptAnalyzers/gemini.ts +0 -24
  49. package/src/services/transcriptAnalyzers/index.ts +0 -6
  50. package/src/services/transcriptAnalyzers/whisper.ts +0 -68
  51. package/src/services/transcriptAnalyzers/ytdlp.ts +0 -19
  52. package/src/services/transcriptDetector/index.ts +0 -122
  53. package/src/services/transcriptFetcher/index.ts +0 -147
  54. package/src/services/urlParser/index.ts +0 -52
  55. package/src/services/videoDownloader/index.ts +0 -268
  56. package/src/types/analyzer.ts +0 -23
  57. package/src/types/audio.ts +0 -19
  58. package/src/types/cache.ts +0 -8
  59. package/src/types/cli.ts +0 -22
  60. package/src/types/config.ts +0 -151
  61. package/src/types/downloader.ts +0 -15
  62. package/src/types/factory.ts +0 -3
  63. package/src/types/index.ts +0 -40
  64. package/src/types/pipeline.ts +0 -60
  65. package/src/types/segment.ts +0 -43
  66. package/src/types/transcript.ts +0 -22
  67. package/src/types/video.ts +0 -18
  68. package/src/utils/cache.ts +0 -224
  69. package/src/utils/chunker.ts +0 -60
  70. package/src/utils/dumper.ts +0 -41
  71. package/src/utils/format.ts +0 -10
  72. package/src/utils/logger.ts +0 -17
  73. package/src/utils/modelFactory.ts +0 -71
  74. package/src/utils/redactConfig.ts +0 -23
  75. package/src/utils/sliceAudio.ts +0 -35
  76. package/test-trigger.txt +0 -1
  77. package/tests/analyzerFactory.test.ts +0 -146
  78. package/tests/audioEventDetector.test.ts +0 -69
  79. package/tests/cache.test.ts +0 -203
  80. package/tests/chunkBuilder.test.ts +0 -146
  81. package/tests/chunker.test.ts +0 -95
  82. package/tests/eventDetector.test.ts +0 -103
  83. package/tests/llmAnalyzer.test.ts +0 -283
  84. package/tests/segmentRanker.test.ts +0 -133
  85. package/tests/setup.ts +0 -48
  86. package/tests/signalMerger.test.ts +0 -197
  87. package/tests/transcriptDetector.test.ts +0 -150
  88. package/tests/transcriptFetcher.test.ts +0 -179
  89. package/tests/urlParser.test.ts +0 -70
  90. package/tsconfig.json +0 -16
  91. package/tsconfig.test.json +0 -8
  92. package/vitest.config.ts +0 -8
@@ -1,70 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { parseUrl } from '../src/services/urlParser/index.js';
3
-
4
- describe('parseUrl', () => {
5
- describe('valid URLs', () => {
6
- it('parses a standard youtube.com/watch URL', () => {
7
- expect(parseUrl('https://www.youtube.com/watch?v=dQw4w9WgXcQ')).toBe('dQw4w9WgXcQ');
8
- });
9
-
10
- it('parses a youtube.com/watch URL without www', () => {
11
- expect(parseUrl('https://youtube.com/watch?v=dQw4w9WgXcQ')).toBe('dQw4w9WgXcQ');
12
- });
13
-
14
- it('parses a youtu.be short URL', () => {
15
- expect(parseUrl('https://youtu.be/dQw4w9WgXcQ')).toBe('dQw4w9WgXcQ');
16
- });
17
-
18
- it('parses a youtu.be URL with extra query params', () => {
19
- expect(parseUrl('https://youtu.be/dQw4w9WgXcQ?t=42')).toBe('dQw4w9WgXcQ');
20
- });
21
-
22
- it('parses a youtube.com/embed URL', () => {
23
- expect(parseUrl('https://www.youtube.com/embed/dQw4w9WgXcQ')).toBe('dQw4w9WgXcQ');
24
- });
25
-
26
- it('parses a youtube.com/shorts URL', () => {
27
- expect(parseUrl('https://www.youtube.com/shorts/dQw4w9WgXcQ')).toBe('dQw4w9WgXcQ');
28
- });
29
-
30
- it('parses a watch URL with additional query params', () => {
31
- expect(parseUrl('https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=120&list=PLxxx')).toBe(
32
- 'dQw4w9WgXcQ',
33
- );
34
- });
35
- });
36
-
37
- describe('invalid URLs', () => {
38
- it('throws on a completely invalid string', () => {
39
- expect(() => parseUrl('not-a-url')).toThrow('Invalid URL');
40
- });
41
-
42
- it('throws on a non-YouTube URL', () => {
43
- expect(() => parseUrl('https://vimeo.com/123456789')).toThrow('Could not extract video ID');
44
- });
45
-
46
- it('throws on a YouTube URL with no video ID', () => {
47
- expect(() => parseUrl('https://www.youtube.com/watch')).toThrow('Could not extract video ID');
48
- });
49
-
50
- it('throws on a YouTube URL with an empty video ID', () => {
51
- expect(() => parseUrl('https://www.youtube.com/watch?v=')).toThrow();
52
- });
53
-
54
- it('throws if the video ID is shorter than 11 characters', () => {
55
- expect(() => parseUrl('https://www.youtube.com/watch?v=short')).toThrow(
56
- 'expected 11 characters',
57
- );
58
- });
59
-
60
- it('throws if the video ID is longer than 11 characters', () => {
61
- expect(() => parseUrl('https://www.youtube.com/watch?v=toolongvideoid')).toThrow(
62
- 'expected 11 characters',
63
- );
64
- });
65
-
66
- it('throws on an empty string', () => {
67
- expect(() => parseUrl('')).toThrow('Invalid URL');
68
- });
69
- });
70
- });
package/tsconfig.json DELETED
@@ -1,16 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "NodeNext",
5
- "moduleResolution": "NodeNext",
6
- "outDir": "dist",
7
- "rootDir": "src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "resolveJsonModule": true,
11
- "skipLibCheck": true,
12
- "types": ["node"]
13
- },
14
- "include": ["src/**/*"],
15
- "exclude": ["node_modules", "dist"]
16
- }
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "rootDir": ".",
5
- "noEmit": true
6
- },
7
- "include": ["src/**/*", "tests/**/*"]
8
- }
package/vitest.config.ts DELETED
@@ -1,8 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
-
3
- export default defineConfig({
4
- test: {
5
- include: ['tests/**/*.test.ts'],
6
- setupFiles: ['tests/setup.ts'],
7
- },
8
- });