@studiomeyer/mcp-video 1.0.0

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 (184) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  3. package/.github/workflows/ci.yml +34 -0
  4. package/CHANGELOG.md +24 -0
  5. package/CONTRIBUTING.md +75 -0
  6. package/LICENSE +21 -0
  7. package/README.md +198 -0
  8. package/USAGE.md +144 -0
  9. package/dist/handlers/capcut.d.ts +6 -0
  10. package/dist/handlers/capcut.js +229 -0
  11. package/dist/handlers/capcut.js.map +1 -0
  12. package/dist/handlers/editing.d.ts +6 -0
  13. package/dist/handlers/editing.js +242 -0
  14. package/dist/handlers/editing.js.map +1 -0
  15. package/dist/handlers/index.d.ts +2 -0
  16. package/dist/handlers/index.js +33 -0
  17. package/dist/handlers/index.js.map +1 -0
  18. package/dist/handlers/post-production.d.ts +5 -0
  19. package/dist/handlers/post-production.js +109 -0
  20. package/dist/handlers/post-production.js.map +1 -0
  21. package/dist/handlers/smart-screenshot.d.ts +5 -0
  22. package/dist/handlers/smart-screenshot.js +83 -0
  23. package/dist/handlers/smart-screenshot.js.map +1 -0
  24. package/dist/handlers/tts.d.ts +5 -0
  25. package/dist/handlers/tts.js +83 -0
  26. package/dist/handlers/tts.js.map +1 -0
  27. package/dist/handlers/video.d.ts +5 -0
  28. package/dist/handlers/video.js +127 -0
  29. package/dist/handlers/video.js.map +1 -0
  30. package/dist/lib/dual-transport.d.ts +42 -0
  31. package/dist/lib/dual-transport.js +208 -0
  32. package/dist/lib/dual-transport.js.map +1 -0
  33. package/dist/lib/logger.d.ts +12 -0
  34. package/dist/lib/logger.js +42 -0
  35. package/dist/lib/logger.js.map +1 -0
  36. package/dist/lib/types.d.ts +16 -0
  37. package/dist/lib/types.js +15 -0
  38. package/dist/lib/types.js.map +1 -0
  39. package/dist/schemas/capcut.d.ts +608 -0
  40. package/dist/schemas/capcut.js +411 -0
  41. package/dist/schemas/capcut.js.map +1 -0
  42. package/dist/schemas/editing.d.ts +822 -0
  43. package/dist/schemas/editing.js +466 -0
  44. package/dist/schemas/editing.js.map +1 -0
  45. package/dist/schemas/index.d.ts +2366 -0
  46. package/dist/schemas/index.js +15 -0
  47. package/dist/schemas/index.js.map +1 -0
  48. package/dist/schemas/post-production.d.ts +379 -0
  49. package/dist/schemas/post-production.js +268 -0
  50. package/dist/schemas/post-production.js.map +1 -0
  51. package/dist/schemas/smart-screenshot.d.ts +127 -0
  52. package/dist/schemas/smart-screenshot.js +122 -0
  53. package/dist/schemas/smart-screenshot.js.map +1 -0
  54. package/dist/schemas/tts.d.ts +220 -0
  55. package/dist/schemas/tts.js +194 -0
  56. package/dist/schemas/tts.js.map +1 -0
  57. package/dist/schemas/video.d.ts +236 -0
  58. package/dist/schemas/video.js +210 -0
  59. package/dist/schemas/video.js.map +1 -0
  60. package/dist/server.d.ts +11 -0
  61. package/dist/server.js +239 -0
  62. package/dist/server.js.map +1 -0
  63. package/dist/server.test.d.ts +1 -0
  64. package/dist/server.test.js +87 -0
  65. package/dist/server.test.js.map +1 -0
  66. package/dist/tools/engine/audio-mixer.d.ts +40 -0
  67. package/dist/tools/engine/audio-mixer.js +169 -0
  68. package/dist/tools/engine/audio-mixer.js.map +1 -0
  69. package/dist/tools/engine/audio.d.ts +22 -0
  70. package/dist/tools/engine/audio.js +73 -0
  71. package/dist/tools/engine/audio.js.map +1 -0
  72. package/dist/tools/engine/beat-sync.d.ts +31 -0
  73. package/dist/tools/engine/beat-sync.js +270 -0
  74. package/dist/tools/engine/beat-sync.js.map +1 -0
  75. package/dist/tools/engine/capture.d.ts +12 -0
  76. package/dist/tools/engine/capture.js +290 -0
  77. package/dist/tools/engine/capture.js.map +1 -0
  78. package/dist/tools/engine/chroma-key.d.ts +27 -0
  79. package/dist/tools/engine/chroma-key.js +154 -0
  80. package/dist/tools/engine/chroma-key.js.map +1 -0
  81. package/dist/tools/engine/concat.d.ts +49 -0
  82. package/dist/tools/engine/concat.js +149 -0
  83. package/dist/tools/engine/concat.js.map +1 -0
  84. package/dist/tools/engine/cursor.d.ts +26 -0
  85. package/dist/tools/engine/cursor.js +185 -0
  86. package/dist/tools/engine/cursor.js.map +1 -0
  87. package/dist/tools/engine/easing.d.ts +15 -0
  88. package/dist/tools/engine/easing.js +100 -0
  89. package/dist/tools/engine/easing.js.map +1 -0
  90. package/dist/tools/engine/editing.d.ts +158 -0
  91. package/dist/tools/engine/editing.js +541 -0
  92. package/dist/tools/engine/editing.js.map +1 -0
  93. package/dist/tools/engine/encoder.d.ts +31 -0
  94. package/dist/tools/engine/encoder.js +154 -0
  95. package/dist/tools/engine/encoder.js.map +1 -0
  96. package/dist/tools/engine/index.d.ts +30 -0
  97. package/dist/tools/engine/index.js +23 -0
  98. package/dist/tools/engine/index.js.map +1 -0
  99. package/dist/tools/engine/lut-presets.d.ts +25 -0
  100. package/dist/tools/engine/lut-presets.js +141 -0
  101. package/dist/tools/engine/lut-presets.js.map +1 -0
  102. package/dist/tools/engine/narrated-video.d.ts +63 -0
  103. package/dist/tools/engine/narrated-video.js +163 -0
  104. package/dist/tools/engine/narrated-video.js.map +1 -0
  105. package/dist/tools/engine/scenes.d.ts +17 -0
  106. package/dist/tools/engine/scenes.js +223 -0
  107. package/dist/tools/engine/scenes.js.map +1 -0
  108. package/dist/tools/engine/smart-screenshot.d.ts +80 -0
  109. package/dist/tools/engine/smart-screenshot.js +744 -0
  110. package/dist/tools/engine/smart-screenshot.js.map +1 -0
  111. package/dist/tools/engine/social-format.d.ts +66 -0
  112. package/dist/tools/engine/social-format.js +107 -0
  113. package/dist/tools/engine/social-format.js.map +1 -0
  114. package/dist/tools/engine/template-renderer.d.ts +45 -0
  115. package/dist/tools/engine/template-renderer.js +233 -0
  116. package/dist/tools/engine/template-renderer.js.map +1 -0
  117. package/dist/tools/engine/templates.d.ts +87 -0
  118. package/dist/tools/engine/templates.js +272 -0
  119. package/dist/tools/engine/templates.js.map +1 -0
  120. package/dist/tools/engine/text-animations.d.ts +33 -0
  121. package/dist/tools/engine/text-animations.js +192 -0
  122. package/dist/tools/engine/text-animations.js.map +1 -0
  123. package/dist/tools/engine/text-overlay.d.ts +27 -0
  124. package/dist/tools/engine/text-overlay.js +84 -0
  125. package/dist/tools/engine/text-overlay.js.map +1 -0
  126. package/dist/tools/engine/tts.d.ts +54 -0
  127. package/dist/tools/engine/tts.js +186 -0
  128. package/dist/tools/engine/tts.js.map +1 -0
  129. package/dist/tools/engine/types.d.ts +166 -0
  130. package/dist/tools/engine/types.js +13 -0
  131. package/dist/tools/engine/types.js.map +1 -0
  132. package/dist/tools/engine/voice-effects.d.ts +18 -0
  133. package/dist/tools/engine/voice-effects.js +215 -0
  134. package/dist/tools/engine/voice-effects.js.map +1 -0
  135. package/dist/tools/index.d.ts +32 -0
  136. package/dist/tools/index.js +23 -0
  137. package/dist/tools/index.js.map +1 -0
  138. package/package.json +56 -0
  139. package/scripts/check-deps.js +39 -0
  140. package/src/handlers/capcut.ts +245 -0
  141. package/src/handlers/editing.ts +260 -0
  142. package/src/handlers/index.ts +34 -0
  143. package/src/handlers/post-production.ts +136 -0
  144. package/src/handlers/smart-screenshot.ts +86 -0
  145. package/src/handlers/tts.ts +103 -0
  146. package/src/handlers/video.ts +137 -0
  147. package/src/lib/dual-transport.ts +272 -0
  148. package/src/lib/logger.ts +59 -0
  149. package/src/lib/types.ts +25 -0
  150. package/src/schemas/capcut.ts +418 -0
  151. package/src/schemas/editing.ts +476 -0
  152. package/src/schemas/index.ts +15 -0
  153. package/src/schemas/post-production.ts +273 -0
  154. package/src/schemas/smart-screenshot.ts +122 -0
  155. package/src/schemas/tts.ts +197 -0
  156. package/src/schemas/video.ts +211 -0
  157. package/src/server.test.ts +99 -0
  158. package/src/server.ts +289 -0
  159. package/src/tools/engine/audio-mixer.ts +244 -0
  160. package/src/tools/engine/audio.ts +115 -0
  161. package/src/tools/engine/beat-sync.ts +356 -0
  162. package/src/tools/engine/capture.ts +360 -0
  163. package/src/tools/engine/chroma-key.ts +202 -0
  164. package/src/tools/engine/concat.ts +242 -0
  165. package/src/tools/engine/cursor.ts +222 -0
  166. package/src/tools/engine/easing.ts +120 -0
  167. package/src/tools/engine/editing.ts +809 -0
  168. package/src/tools/engine/encoder.ts +208 -0
  169. package/src/tools/engine/index.ts +33 -0
  170. package/src/tools/engine/lut-presets.ts +235 -0
  171. package/src/tools/engine/narrated-video.ts +267 -0
  172. package/src/tools/engine/scenes.ts +309 -0
  173. package/src/tools/engine/smart-screenshot.ts +923 -0
  174. package/src/tools/engine/social-format.ts +146 -0
  175. package/src/tools/engine/template-renderer.ts +294 -0
  176. package/src/tools/engine/templates.ts +370 -0
  177. package/src/tools/engine/text-animations.ts +282 -0
  178. package/src/tools/engine/text-overlay.ts +143 -0
  179. package/src/tools/engine/tts.ts +284 -0
  180. package/src/tools/engine/types.ts +191 -0
  181. package/src/tools/engine/voice-effects.ts +258 -0
  182. package/src/tools/index.ts +67 -0
  183. package/tsconfig.json +19 -0
  184. package/vitest.config.ts +7 -0
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Video editing engine — speed, color grading, effects, crop, reverse,
3
+ * audio extraction, subtitles, keyframe animation, picture-in-picture.
4
+ *
5
+ * All processing via ffmpeg (no npm dependencies).
6
+ */
7
+ export interface SpeedConfig {
8
+ inputPath: string;
9
+ outputPath: string;
10
+ /** Speed factor: 0.25 (4x slower) to 4.0 (4x faster). 1.0 = original. */
11
+ speed: number;
12
+ /** How to handle audio: 'match' adjusts pitch, 'mute' removes, 'original' keeps (may desync). Default: match */
13
+ audioMode?: 'match' | 'mute' | 'original';
14
+ }
15
+ export declare function adjustVideoSpeed(config: SpeedConfig): Promise<string>;
16
+ export interface ColorGradeConfig {
17
+ inputPath: string;
18
+ outputPath: string;
19
+ /** Brightness adjustment: -1.0 to 1.0 (0 = no change) */
20
+ brightness?: number;
21
+ /** Contrast: 0.0 to 3.0 (1.0 = no change) */
22
+ contrast?: number;
23
+ /** Saturation: 0.0 to 3.0 (1.0 = no change, 0 = grayscale) */
24
+ saturation?: number;
25
+ /** Gamma: 0.1 to 10.0 (1.0 = no change) */
26
+ gamma?: number;
27
+ /** Color temperature shift: -1.0 (cool/blue) to 1.0 (warm/orange). 0 = neutral */
28
+ temperature?: number;
29
+ }
30
+ export declare function applyColorGrade(config: ColorGradeConfig): Promise<string>;
31
+ export type VideoEffect = 'blur' | 'sharpen' | 'vignette' | 'grayscale' | 'sepia' | 'noise' | 'glow';
32
+ export interface EffectConfig {
33
+ inputPath: string;
34
+ outputPath: string;
35
+ /** Effect to apply */
36
+ effect: VideoEffect;
37
+ /** Intensity 0.0-1.0 (default: 0.5) */
38
+ intensity?: number;
39
+ }
40
+ export declare function applyVideoEffect(config: EffectConfig): Promise<string>;
41
+ export interface CropConfig {
42
+ inputPath: string;
43
+ outputPath: string;
44
+ /** X offset (pixels or 'center') */
45
+ x?: number | 'center';
46
+ /** Y offset (pixels or 'center') */
47
+ y?: number | 'center';
48
+ /** Width of crop region */
49
+ width: number;
50
+ /** Height of crop region */
51
+ height: number;
52
+ }
53
+ export declare function cropVideo(config: CropConfig): Promise<string>;
54
+ export interface ReverseConfig {
55
+ inputPath: string;
56
+ outputPath: string;
57
+ /** Also reverse audio (default: true) */
58
+ reverseAudio?: boolean;
59
+ }
60
+ export declare function reverseClip(config: ReverseConfig): Promise<string>;
61
+ export interface ExtractAudioConfig {
62
+ inputPath: string;
63
+ outputPath: string;
64
+ /** Output format: mp3, aac, wav, flac (default: mp3) */
65
+ format?: 'mp3' | 'aac' | 'wav' | 'flac';
66
+ /** Audio bitrate for lossy (default: 192k) */
67
+ bitrate?: string;
68
+ }
69
+ export declare function extractAudio(config: ExtractAudioConfig): Promise<string>;
70
+ export interface BurnSubtitlesConfig {
71
+ inputPath: string;
72
+ outputPath: string;
73
+ /** Path to SRT or ASS subtitle file */
74
+ subtitlePath: string;
75
+ /** Font size (default: 24) */
76
+ fontSize?: number;
77
+ /** Font color (default: white) */
78
+ fontColor?: string;
79
+ /** Outline color (default: black) */
80
+ outlineColor?: string;
81
+ /** Outline width (default: 2) */
82
+ outlineWidth?: number;
83
+ /** Position: bottom, top, center (default: bottom) */
84
+ position?: 'bottom' | 'top' | 'center';
85
+ }
86
+ export declare function burnSubtitles(config: BurnSubtitlesConfig): Promise<string>;
87
+ export interface AutoCaptionConfig {
88
+ inputPath: string;
89
+ outputPath: string;
90
+ /** Language code (default: auto-detect) */
91
+ language?: string;
92
+ /** Font size for captions (default: 28) */
93
+ fontSize?: number;
94
+ /** Caption position (default: bottom) */
95
+ position?: 'bottom' | 'top' | 'center';
96
+ /** Also return the SRT file path (default: true) */
97
+ keepSrt?: boolean;
98
+ }
99
+ export interface AutoCaptionResult {
100
+ videoPath: string;
101
+ srtPath: string;
102
+ }
103
+ export declare function autoCaption(config: AutoCaptionConfig): Promise<AutoCaptionResult>;
104
+ export interface Keyframe {
105
+ /** Time in seconds */
106
+ time: number;
107
+ /** Scale factor (1.0 = original, 2.0 = 2x zoom) */
108
+ scale?: number;
109
+ /** Pan X offset in pixels (0 = center) */
110
+ panX?: number;
111
+ /** Pan Y offset in pixels (0 = center) */
112
+ panY?: number;
113
+ /** Rotation in degrees */
114
+ rotate?: number;
115
+ }
116
+ export interface KeyframeAnimationConfig {
117
+ inputPath: string;
118
+ outputPath: string;
119
+ /** Keyframes defining animation over time */
120
+ keyframes: Keyframe[];
121
+ /** Output width (default: source width) */
122
+ outputWidth?: number;
123
+ /** Output height (default: source height) */
124
+ outputHeight?: number;
125
+ }
126
+ export declare function addKeyframeAnimation(config: KeyframeAnimationConfig): Promise<string>;
127
+ export type PipPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center';
128
+ export interface PipConfig {
129
+ /** Main (background) video */
130
+ mainVideo: string;
131
+ /** Overlay (PiP) video */
132
+ overlayVideo: string;
133
+ outputPath: string;
134
+ /** Position of PiP (default: bottom-right) */
135
+ position?: PipPosition;
136
+ /** Scale of PiP relative to main video width: 0.1-0.5 (default: 0.3) */
137
+ scale?: number;
138
+ /** PiP start time in seconds (default: 0) */
139
+ startTime?: number;
140
+ /** PiP end time in seconds (default: end of main video) */
141
+ endTime?: number;
142
+ /** Border radius / rounded corners in px (default: 0) */
143
+ borderWidth?: number;
144
+ /** Border color (default: white) */
145
+ borderColor?: string;
146
+ }
147
+ export declare function composePip(config: PipConfig): Promise<string>;
148
+ export interface AudioDuckingConfig {
149
+ inputPath: string;
150
+ outputPath: string;
151
+ /** How much to reduce background when speech detected: 0.0-1.0 (default: 0.3 = reduce to 30%) */
152
+ duckLevel?: number;
153
+ /** Attack time in seconds (default: 0.5) */
154
+ attack?: number;
155
+ /** Release time in seconds (default: 1.0) */
156
+ release?: number;
157
+ }
158
+ export declare function addAudioDucking(config: AudioDuckingConfig): Promise<string>;