@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 @@
1
+ {"version":3,"file":"smart-screenshot.js","sourceRoot":"","sources":["../../../src/tools/engine/smart-screenshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Social media format converter — crop, scale, pad for every platform
3
+ */
4
+ export declare const SOCIAL_FORMATS: {
5
+ readonly 'instagram-reel': {
6
+ readonly width: 1080;
7
+ readonly height: 1920;
8
+ readonly maxDuration: 90;
9
+ readonly label: "Instagram Reels (9:16)";
10
+ };
11
+ readonly 'instagram-feed': {
12
+ readonly width: 1080;
13
+ readonly height: 1080;
14
+ readonly maxDuration: 60;
15
+ readonly label: "Instagram Feed (1:1)";
16
+ };
17
+ readonly 'instagram-story': {
18
+ readonly width: 1080;
19
+ readonly height: 1920;
20
+ readonly maxDuration: 60;
21
+ readonly label: "Instagram Story (9:16)";
22
+ };
23
+ readonly youtube: {
24
+ readonly width: 1920;
25
+ readonly height: 1080;
26
+ readonly maxDuration: 0;
27
+ readonly label: "YouTube (16:9)";
28
+ };
29
+ readonly 'youtube-short': {
30
+ readonly width: 1080;
31
+ readonly height: 1920;
32
+ readonly maxDuration: 60;
33
+ readonly label: "YouTube Shorts (9:16)";
34
+ };
35
+ readonly tiktok: {
36
+ readonly width: 1080;
37
+ readonly height: 1920;
38
+ readonly maxDuration: 600;
39
+ readonly label: "TikTok (9:16)";
40
+ };
41
+ readonly 'linkedin-landscape': {
42
+ readonly width: 1920;
43
+ readonly height: 1080;
44
+ readonly maxDuration: 600;
45
+ readonly label: "LinkedIn (16:9)";
46
+ };
47
+ readonly 'linkedin-square': {
48
+ readonly width: 1080;
49
+ readonly height: 1080;
50
+ readonly maxDuration: 600;
51
+ readonly label: "LinkedIn (1:1)";
52
+ };
53
+ };
54
+ export type SocialFormat = keyof typeof SOCIAL_FORMATS;
55
+ export type CropStrategy = 'crop' | 'pad' | 'blur-background';
56
+ export interface FormatConvertConfig {
57
+ inputPath: string;
58
+ outputPath: string;
59
+ format: SocialFormat;
60
+ /** How to handle aspect ratio mismatch (default: blur-background) */
61
+ strategy?: CropStrategy;
62
+ /** Override max duration (seconds) */
63
+ maxDuration?: number;
64
+ }
65
+ export declare function convertToSocialFormat(config: FormatConvertConfig): Promise<string>;
66
+ export declare function convertToAllFormats(inputPath: string, outputDir: string, formats?: SocialFormat[], strategy?: CropStrategy): Promise<Record<string, string>>;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Social media format converter — crop, scale, pad for every platform
3
+ */
4
+ import { execFile } from 'child_process';
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { logger } from '../../lib/logger.js';
8
+ // ─── Format Definitions ─────────────────────────────────────────────
9
+ export const SOCIAL_FORMATS = {
10
+ 'instagram-reel': { width: 1080, height: 1920, maxDuration: 90, label: 'Instagram Reels (9:16)' },
11
+ 'instagram-feed': { width: 1080, height: 1080, maxDuration: 60, label: 'Instagram Feed (1:1)' },
12
+ 'instagram-story': { width: 1080, height: 1920, maxDuration: 60, label: 'Instagram Story (9:16)' },
13
+ 'youtube': { width: 1920, height: 1080, maxDuration: 0, label: 'YouTube (16:9)' },
14
+ 'youtube-short': { width: 1080, height: 1920, maxDuration: 60, label: 'YouTube Shorts (9:16)' },
15
+ 'tiktok': { width: 1080, height: 1920, maxDuration: 600, label: 'TikTok (9:16)' },
16
+ 'linkedin-landscape': { width: 1920, height: 1080, maxDuration: 600, label: 'LinkedIn (16:9)' },
17
+ 'linkedin-square': { width: 1080, height: 1080, maxDuration: 600, label: 'LinkedIn (1:1)' },
18
+ };
19
+ // ─── Single Format Conversion ───────────────────────────────────────
20
+ export async function convertToSocialFormat(config) {
21
+ const { inputPath, outputPath, format, strategy = 'blur-background', maxDuration, } = config;
22
+ if (!fs.existsSync(inputPath))
23
+ throw new Error(`Input not found: ${inputPath}`);
24
+ const spec = SOCIAL_FORMATS[format];
25
+ const { width, height } = spec;
26
+ const durLimit = maxDuration ?? (spec.maxDuration > 0 ? spec.maxDuration : undefined);
27
+ logger.info(`Converting to ${spec.label} (${strategy})`);
28
+ const outDir = path.dirname(outputPath);
29
+ if (!fs.existsSync(outDir))
30
+ fs.mkdirSync(outDir, { recursive: true });
31
+ const durArgs = durLimit ? ['-t', String(durLimit)] : [];
32
+ if (strategy === 'blur-background') {
33
+ // Blurred version as background + sharp foreground centered
34
+ const filterComplex = [
35
+ `[0:v]scale=${width}:${height}:force_original_aspect_ratio=increase,crop=${width}:${height},boxblur=20:20[bg]`,
36
+ `[0:v]scale=${width}:${height}:force_original_aspect_ratio=decrease[fg]`,
37
+ `[bg][fg]overlay=(W-w)/2:(H-h)/2[out]`,
38
+ ].join(';');
39
+ const args = [
40
+ '-y', '-i', inputPath,
41
+ '-filter_complex', filterComplex,
42
+ '-map', '[out]', '-map', '0:a?',
43
+ '-c:v', 'libx264', '-crf', '18', '-preset', 'medium',
44
+ '-pix_fmt', 'yuv420p', '-c:a', 'aac', '-b:a', '192k',
45
+ ...durArgs,
46
+ '-movflags', '+faststart',
47
+ outputPath,
48
+ ];
49
+ await runFfmpeg(args);
50
+ }
51
+ else if (strategy === 'crop') {
52
+ const vf = `scale=${width}:${height}:force_original_aspect_ratio=increase,crop=${width}:${height}`;
53
+ const args = [
54
+ '-y', '-i', inputPath,
55
+ '-vf', vf,
56
+ '-c:v', 'libx264', '-crf', '18', '-pix_fmt', 'yuv420p',
57
+ '-c:a', 'aac', '-b:a', '192k',
58
+ ...durArgs,
59
+ '-movflags', '+faststart',
60
+ outputPath,
61
+ ];
62
+ await runFfmpeg(args);
63
+ }
64
+ else {
65
+ // pad — letterbox/pillarbox with black
66
+ const vf = `scale=${width}:${height}:force_original_aspect_ratio=decrease,pad=${width}:${height}:(ow-iw)/2:(oh-ih)/2:color=black`;
67
+ const args = [
68
+ '-y', '-i', inputPath,
69
+ '-vf', vf,
70
+ '-c:v', 'libx264', '-crf', '18', '-pix_fmt', 'yuv420p',
71
+ '-c:a', 'aac', '-b:a', '192k',
72
+ ...durArgs,
73
+ '-movflags', '+faststart',
74
+ outputPath,
75
+ ];
76
+ await runFfmpeg(args);
77
+ }
78
+ const stats = fs.statSync(outputPath);
79
+ logger.info(`Converted: ${outputPath} (${spec.label}, ${(stats.size / 1024 / 1024).toFixed(2)} MB)`);
80
+ return outputPath;
81
+ }
82
+ // ─── Batch Conversion ───────────────────────────────────────────────
83
+ export async function convertToAllFormats(inputPath, outputDir, formats = ['instagram-reel', 'instagram-feed', 'youtube', 'tiktok'], strategy = 'blur-background') {
84
+ const baseName = path.basename(inputPath, path.extname(inputPath));
85
+ const results = {};
86
+ if (!fs.existsSync(outputDir))
87
+ fs.mkdirSync(outputDir, { recursive: true });
88
+ for (const format of formats) {
89
+ const outputPath = path.join(outputDir, `${baseName}-${format}.mp4`);
90
+ results[format] = await convertToSocialFormat({ inputPath, outputPath, format, strategy });
91
+ }
92
+ return results;
93
+ }
94
+ // ─── Helper ─────────────────────────────────────────────────────────
95
+ function runFfmpeg(args) {
96
+ return new Promise((resolve, reject) => {
97
+ execFile('ffmpeg', args, { maxBuffer: 50 * 1024 * 1024 }, (error, stdout, stderr) => {
98
+ if (error) {
99
+ logger.error(`ffmpeg failed: ${stderr}`);
100
+ reject(new Error(`ffmpeg failed: ${stderr || error.message}`));
101
+ return;
102
+ }
103
+ resolve(stdout);
104
+ });
105
+ });
106
+ }
107
+ //# sourceMappingURL=social-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-format.js","sourceRoot":"","sources":["../../../src/tools/engine/social-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Template Renderer — Renders video templates with user-provided assets.
3
+ *
4
+ * Pipeline: Validate assets → Trim clips → Apply color grade → Add text animations
5
+ * → Concatenate with transitions → Add music → Export (optional social formats)
6
+ *
7
+ * Uses ALL existing engines: editing, lut-presets, text-animations,
8
+ * concat, audio, social-format.
9
+ */
10
+ export interface TemplateAssets {
11
+ /** Map of slot name → file path */
12
+ clips: Record<string, string>;
13
+ /** Map of placeholder name → custom text (overrides defaults) */
14
+ texts?: Record<string, string>;
15
+ /** Background music file path (optional) */
16
+ musicPath?: string;
17
+ /** Music volume: 0.0-1.0. Default: 0.3 */
18
+ musicVolume?: number;
19
+ /** Logo/watermark image path (optional) */
20
+ logoPath?: string;
21
+ }
22
+ export interface RenderTemplateConfig {
23
+ /** Template ID */
24
+ templateId: string;
25
+ /** User-provided assets */
26
+ assets: TemplateAssets;
27
+ outputPath: string;
28
+ /** Override color grade preset. Omit to use template default. */
29
+ colorGrade?: string;
30
+ /** Also export social format variants. Default: false */
31
+ socialFormats?: boolean;
32
+ }
33
+ export interface RenderResult {
34
+ outputPath: string;
35
+ template: string;
36
+ duration: number;
37
+ resolution: {
38
+ width: number;
39
+ height: number;
40
+ };
41
+ clipsUsed: number;
42
+ textsApplied: number;
43
+ socialVariants?: string[];
44
+ }
45
+ export declare function renderTemplate(config: RenderTemplateConfig): Promise<RenderResult>;
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Template Renderer — Renders video templates with user-provided assets.
3
+ *
4
+ * Pipeline: Validate assets → Trim clips → Apply color grade → Add text animations
5
+ * → Concatenate with transitions → Add music → Export (optional social formats)
6
+ *
7
+ * Uses ALL existing engines: editing, lut-presets, text-animations,
8
+ * concat, audio, social-format.
9
+ */
10
+ import { execFile } from 'child_process';
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ import { logger } from '../../lib/logger.js';
14
+ import { getTemplate } from './templates.js';
15
+ // ─── Helpers ────────────────────────────────────────────────────────
16
+ function runFfmpeg(args, timeoutMs = 600_000) {
17
+ return new Promise((resolve, reject) => {
18
+ execFile('ffmpeg', args, { maxBuffer: 100 * 1024 * 1024, timeout: timeoutMs }, (error, stdout, stderr) => {
19
+ if (error) {
20
+ logger.error(`ffmpeg failed: ${stderr}`);
21
+ reject(new Error(`ffmpeg failed: ${stderr || error.message}`));
22
+ return;
23
+ }
24
+ resolve(stdout);
25
+ });
26
+ });
27
+ }
28
+ function ensureDir(filePath) {
29
+ const dir = path.dirname(filePath);
30
+ if (!fs.existsSync(dir))
31
+ fs.mkdirSync(dir, { recursive: true });
32
+ }
33
+ function assertExists(filePath, label = 'File') {
34
+ if (!fs.existsSync(filePath))
35
+ throw new Error(`${label} not found: ${filePath}`);
36
+ }
37
+ function fileInfo(filePath) {
38
+ const stats = fs.statSync(filePath);
39
+ return `${(stats.size / 1024 / 1024).toFixed(2)} MB`;
40
+ }
41
+ function isImageFile(filePath) {
42
+ const ext = path.extname(filePath).toLowerCase();
43
+ return ['.png', '.jpg', '.jpeg', '.webp', '.bmp'].includes(ext);
44
+ }
45
+ /** Escape text for FFmpeg drawtext */
46
+ function escapeDrawtext(text) {
47
+ return text
48
+ .replace(/\\/g, '\\\\\\\\')
49
+ .replace(/'/g, "'\\\\\\''")
50
+ .replace(/:/g, '\\:')
51
+ .replace(/%/g, '%%');
52
+ }
53
+ // ─── Main Render Function ───────────────────────────────────────────
54
+ export async function renderTemplate(config) {
55
+ const { templateId, assets, outputPath, colorGrade, socialFormats = false } = config;
56
+ // Step 1: Get template
57
+ const template = getTemplate(templateId);
58
+ if (!template) {
59
+ const available = ['social-reel-hype', 'social-reel-aesthetic', 'product-demo-saas', 'testimonial-single', 'before-after-split', 'slideshow-photo', 'tutorial-howto', 'announcement-launch', 'promo-sale'];
60
+ throw new Error(`Unknown template: ${templateId}. Available: ${available.join(', ')}`);
61
+ }
62
+ // Step 2: Validate required assets
63
+ const requiredSlots = template.slots.filter(s => s.required);
64
+ for (const slot of requiredSlots) {
65
+ if (!assets.clips[slot.name]) {
66
+ throw new Error(`Missing required clip for slot "${slot.name}": ${slot.description}`);
67
+ }
68
+ assertExists(assets.clips[slot.name], `Clip for "${slot.name}"`);
69
+ }
70
+ ensureDir(outputPath);
71
+ const tempDir = `/tmp/template-render-${Date.now()}`;
72
+ fs.mkdirSync(tempDir, { recursive: true });
73
+ logger.info(`Rendering template: ${template.name} (${template.id})`);
74
+ try {
75
+ // Step 3: Prepare each slot — trim to duration, scale to target resolution
76
+ const segmentPaths = [];
77
+ let timeOffset = 0;
78
+ const usedSlots = [];
79
+ for (const slot of template.slots) {
80
+ const clipPath = assets.clips[slot.name];
81
+ if (!clipPath)
82
+ continue; // Skip optional empty slots
83
+ assertExists(clipPath, `Clip for "${slot.name}"`);
84
+ usedSlots.push(slot);
85
+ const segPath = path.join(tempDir, `seg-${segmentPaths.length}.mp4`);
86
+ const { width, height } = template.resolution;
87
+ if (isImageFile(clipPath)) {
88
+ // Image → video (still frame for slot duration)
89
+ await runFfmpeg([
90
+ '-y', '-loop', '1', '-i', clipPath,
91
+ '-t', String(slot.duration),
92
+ '-vf', `scale=${width}:${height}:force_original_aspect_ratio=decrease,pad=${width}:${height}:(ow-iw)/2:(oh-ih)/2:black`,
93
+ '-c:v', 'libx264', '-crf', '18', '-preset', 'fast',
94
+ '-pix_fmt', 'yuv420p', '-r', '30',
95
+ segPath,
96
+ ]);
97
+ }
98
+ else {
99
+ // Video → trim + scale
100
+ await runFfmpeg([
101
+ '-y', '-i', clipPath,
102
+ '-t', String(slot.duration),
103
+ '-vf', `scale=${width}:${height}:force_original_aspect_ratio=decrease,pad=${width}:${height}:(ow-iw)/2:(oh-ih)/2:black`,
104
+ '-c:v', 'libx264', '-crf', '18', '-preset', 'fast',
105
+ '-pix_fmt', 'yuv420p', '-an', '-r', '30',
106
+ segPath,
107
+ ]);
108
+ }
109
+ segmentPaths.push(segPath);
110
+ timeOffset += slot.duration;
111
+ }
112
+ if (segmentPaths.length === 0) {
113
+ throw new Error('No clips provided for any template slot');
114
+ }
115
+ // Step 4: Concatenate all segments
116
+ const concatFile = path.join(tempDir, 'concat.txt');
117
+ fs.writeFileSync(concatFile, segmentPaths.map(p => `file '${p}'`).join('\n'));
118
+ const concatOutput = path.join(tempDir, 'concatenated.mp4');
119
+ await runFfmpeg([
120
+ '-y', '-f', 'concat', '-safe', '0', '-i', concatFile,
121
+ '-c', 'copy', concatOutput,
122
+ ]);
123
+ // Step 5: Apply color grade
124
+ let gradedOutput = concatOutput;
125
+ const gradePreset = colorGrade ?? template.colorGrade;
126
+ if (gradePreset) {
127
+ gradedOutput = path.join(tempDir, 'graded.mp4');
128
+ try {
129
+ // Import dynamically to avoid circular deps — use FFmpeg directly
130
+ const { applyLutPreset } = await import('./lut-presets.js');
131
+ await applyLutPreset({
132
+ inputPath: concatOutput,
133
+ outputPath: gradedOutput,
134
+ preset: gradePreset,
135
+ intensity: 0.8, // 80% intensity for templates — not too heavy
136
+ });
137
+ }
138
+ catch (gradeError) {
139
+ logger.warn(`Color grade failed, using ungraded: ${gradeError}`);
140
+ gradedOutput = concatOutput;
141
+ }
142
+ }
143
+ // Step 6: Apply text animations
144
+ let textOutput = gradedOutput;
145
+ let textsApplied = 0;
146
+ for (const placeholder of template.textPlaceholders) {
147
+ const customText = assets.texts?.[placeholder.name] ?? placeholder.defaultText;
148
+ const nextOutput = path.join(tempDir, `text-${textsApplied}.mp4`);
149
+ try {
150
+ const { animateText } = await import('./text-animations.js');
151
+ await animateText({
152
+ inputPath: textOutput,
153
+ outputPath: nextOutput,
154
+ text: customText,
155
+ animation: placeholder.animation,
156
+ startTime: placeholder.startTime,
157
+ duration: placeholder.duration,
158
+ fontSize: placeholder.fontSize,
159
+ position: placeholder.position,
160
+ });
161
+ textOutput = nextOutput;
162
+ textsApplied++;
163
+ }
164
+ catch (textError) {
165
+ logger.warn(`Text animation "${placeholder.name}" failed: ${textError}`);
166
+ }
167
+ }
168
+ // Step 7: Add music if provided
169
+ let finalOutput = textOutput;
170
+ if (assets.musicPath) {
171
+ assertExists(assets.musicPath, 'Music file');
172
+ finalOutput = path.join(tempDir, 'with-music.mp4');
173
+ const musicVol = (assets.musicVolume ?? 0.3).toFixed(2);
174
+ await runFfmpeg([
175
+ '-y',
176
+ '-i', textOutput,
177
+ '-i', assets.musicPath,
178
+ '-filter_complex', `[1:a]volume=${musicVol}[music];[music]afade=t=out:st=${Math.max(0, timeOffset - 2)}:d=2[musicfade]`,
179
+ '-map', '0:v', '-map', '[musicfade]',
180
+ '-c:v', 'copy', '-c:a', 'aac', '-b:a', '192k',
181
+ '-t', String(timeOffset),
182
+ '-movflags', '+faststart',
183
+ '-shortest',
184
+ finalOutput,
185
+ ]);
186
+ }
187
+ // Step 8: Copy to output path
188
+ if (finalOutput !== outputPath) {
189
+ fs.copyFileSync(finalOutput, outputPath);
190
+ }
191
+ logger.info(`Template rendered: ${template.name} → ${outputPath} (${fileInfo(outputPath)})`);
192
+ // Step 9: Social format variants (optional)
193
+ let socialVariants;
194
+ if (socialFormats) {
195
+ socialVariants = [];
196
+ const outputDir = path.dirname(outputPath);
197
+ const baseName = path.basename(outputPath, path.extname(outputPath));
198
+ const formats = ['instagram-reel', 'tiktok', 'youtube-short'];
199
+ for (const fmt of formats) {
200
+ try {
201
+ const { convertToSocialFormat } = await import('./social-format.js');
202
+ const variantPath = path.join(outputDir, `${baseName}-${fmt}.mp4`);
203
+ await convertToSocialFormat({
204
+ inputPath: outputPath,
205
+ outputPath: variantPath,
206
+ format: fmt,
207
+ });
208
+ socialVariants.push(variantPath);
209
+ }
210
+ catch (fmtError) {
211
+ logger.warn(`Social format ${fmt} failed: ${fmtError}`);
212
+ }
213
+ }
214
+ }
215
+ return {
216
+ outputPath,
217
+ template: template.id,
218
+ duration: timeOffset,
219
+ resolution: template.resolution,
220
+ clipsUsed: usedSlots.length,
221
+ textsApplied,
222
+ socialVariants,
223
+ };
224
+ }
225
+ finally {
226
+ // Cleanup temp files
227
+ try {
228
+ fs.rmSync(tempDir, { recursive: true });
229
+ }
230
+ catch { /* ignore */ }
231
+ }
232
+ }
233
+ //# sourceMappingURL=template-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../../src/tools/engine/template-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAwC7C,uEAAuE;AAEvE,SAAS,SAAS,CAAC,IAAc,EAAE,SAAS,GAAG,OAAO;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACvG,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;gBACzC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,KAAK,GAAG,MAAM;IACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,QAAQ,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB;IAChC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,sCAAsC;AACtC,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA4B;IAC/D,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IAErF,uBAAuB;IACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAC3M,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,gBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,aAAa,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,SAAS,CAAC,UAAU,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,wBAAwB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACrD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,2EAA2E;QAC3E,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAmB,EAAE,CAAC;QAErC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ;gBAAE,SAAS,CAAC,4BAA4B;YAErD,YAAY,CAAC,QAAQ,EAAE,aAAa,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAClD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAErB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,YAAY,CAAC,MAAM,MAAM,CAAC,CAAC;YACrE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC;YAE9C,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,gDAAgD;gBAChD,MAAM,SAAS,CAAC;oBACd,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ;oBAClC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC3B,KAAK,EAAE,SAAS,KAAK,IAAI,MAAM,6CAA6C,KAAK,IAAI,MAAM,4BAA4B;oBACvH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;oBAClD,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI;oBACjC,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,MAAM,SAAS,CAAC;oBACd,IAAI,EAAE,IAAI,EAAE,QAAQ;oBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC3B,KAAK,EAAE,SAAS,KAAK,IAAI,MAAM,6CAA6C,KAAK,IAAI,MAAM,4BAA4B;oBACvH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;oBAClD,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI;oBACxC,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC9B,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,mCAAmC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACpD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAC5D,MAAM,SAAS,CAAC;YACd,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU;YACpD,IAAI,EAAE,MAAM,EAAE,YAAY;SAC3B,CAAC,CAAC;QAEH,4BAA4B;QAC5B,IAAI,YAAY,GAAG,YAAY,CAAC;QAChC,MAAM,WAAW,GAAG,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;QACtD,IAAI,WAAW,EAAE,CAAC;YAChB,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAChD,IAAI,CAAC;gBACH,kEAAkE;gBAClE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC5D,MAAM,cAAc,CAAC;oBACnB,SAAS,EAAE,YAAY;oBACvB,UAAU,EAAE,YAAY;oBACxB,MAAM,EAAE,WAA6D;oBACrE,SAAS,EAAE,GAAG,EAAE,8CAA8C;iBAC/D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;gBACjE,YAAY,GAAG,YAAY,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,IAAI,UAAU,GAAG,YAAY,CAAC;QAC9B,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACpD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC;YAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,YAAY,MAAM,CAAC,CAAC;YAElE,IAAI,CAAC;gBACH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;gBAC7D,MAAM,WAAW,CAAC;oBAChB,SAAS,EAAE,UAAU;oBACrB,UAAU,EAAE,UAAU;oBACtB,IAAI,EAAE,UAAU;oBAChB,SAAS,EAAE,WAAW,CAAC,SAA2D;oBAClF,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAyD;iBAChF,CAAC,CAAC;gBACH,UAAU,GAAG,UAAU,CAAC;gBACxB,YAAY,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,mBAAmB,WAAW,CAAC,IAAI,aAAa,SAAS,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,IAAI,WAAW,GAAG,UAAU,CAAC;QAC7B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAC7C,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAExD,MAAM,SAAS,CAAC;gBACd,IAAI;gBACJ,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,iBAAiB,EAAE,eAAe,QAAQ,iCAAiC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,iBAAiB;gBACvH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa;gBACpC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;gBAC7C,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC;gBACxB,WAAW,EAAE,YAAY;gBACzB,WAAW;gBACX,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;QAED,8BAA8B;QAC9B,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,IAAI,MAAM,UAAU,KAAK,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAE7F,4CAA4C;QAC5C,IAAI,cAAoC,CAAC;QACzC,IAAI,aAAa,EAAE,CAAC;YAClB,cAAc,GAAG,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAErE,MAAM,OAAO,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE,eAAe,CAAU,CAAC;YACvE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;oBACrE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,IAAI,GAAG,MAAM,CAAC,CAAC;oBACnE,MAAM,qBAAqB,CAAC;wBAC1B,SAAS,EAAE,UAAU;wBACrB,UAAU,EAAE,WAAW;wBACvB,MAAM,EAAE,GAA4D;qBACrE,CAAC,CAAC;oBACH,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnC,CAAC;gBAAC,OAAO,QAAQ,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,iBAAiB,GAAG,YAAY,QAAQ,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,SAAS,CAAC,MAAM;YAC3B,YAAY;YACZ,cAAc;SACf,CAAC;IAEJ,CAAC;YAAS,CAAC;QACT,qBAAqB;QACrB,IAAI,CAAC;YAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Video Template Engine — Pre-built video templates for common use cases.
3
+ *
4
+ * Templates define: clip slots, timing, transitions, text placeholders,
5
+ * effects, color grades, and music style.
6
+ *
7
+ * The renderer (template-renderer.ts) takes a template + user assets
8
+ * and produces a finished video using all existing engines.
9
+ */
10
+ export type TemplateCategory = 'social-reel' | 'product-demo' | 'testimonial' | 'before-after' | 'slideshow' | 'tutorial' | 'announcement' | 'promo';
11
+ export interface TemplateSlot {
12
+ /** Slot name (e.g., 'intro-clip', 'product-shot-1') */
13
+ name: string;
14
+ /** Duration of this slot in seconds */
15
+ duration: number;
16
+ /** Whether this slot is required */
17
+ required: boolean;
18
+ /** Description of what should go in this slot */
19
+ description: string;
20
+ /** Slot type */
21
+ type: 'video' | 'image' | 'text';
22
+ }
23
+ export interface TemplateTextPlaceholder {
24
+ /** Placeholder name (e.g., 'title', 'subtitle', 'cta') */
25
+ name: string;
26
+ /** Default text */
27
+ defaultText: string;
28
+ /** Text animation to use */
29
+ animation: string;
30
+ /** When to show (seconds from start) */
31
+ startTime: number;
32
+ /** How long to show (seconds) */
33
+ duration: number;
34
+ /** Position on screen */
35
+ position: string;
36
+ /** Font size */
37
+ fontSize: number;
38
+ }
39
+ export interface VideoTemplate {
40
+ /** Unique template ID */
41
+ id: string;
42
+ /** Human-readable name */
43
+ name: string;
44
+ /** Category for filtering */
45
+ category: TemplateCategory;
46
+ /** Description of the template */
47
+ description: string;
48
+ /** Total duration in seconds */
49
+ totalDuration: number;
50
+ /** Aspect ratio */
51
+ aspectRatio: '16:9' | '9:16' | '1:1' | '4:5';
52
+ /** Resolution */
53
+ resolution: {
54
+ width: number;
55
+ height: number;
56
+ };
57
+ /** Clip/asset slots */
58
+ slots: TemplateSlot[];
59
+ /** Text placeholders */
60
+ textPlaceholders: TemplateTextPlaceholder[];
61
+ /** Transition between clips */
62
+ transition: string;
63
+ /** Recommended color grade preset */
64
+ colorGrade?: string;
65
+ /** Recommended music style */
66
+ musicStyle: string;
67
+ /** Tags for search */
68
+ tags: string[];
69
+ }
70
+ /** List all available templates, optionally filtered by category */
71
+ export declare function listTemplates(category?: TemplateCategory): VideoTemplate[];
72
+ /** Get a specific template by ID */
73
+ export declare function getTemplate(id: string): VideoTemplate | undefined;
74
+ /** Get all template categories */
75
+ export declare function getTemplateCategories(): TemplateCategory[];
76
+ /** Get template summary for listing */
77
+ export declare function getTemplateSummaries(category?: TemplateCategory): Array<{
78
+ id: string;
79
+ name: string;
80
+ category: string;
81
+ description: string;
82
+ duration: string;
83
+ aspectRatio: string;
84
+ requiredSlots: number;
85
+ optionalSlots: number;
86
+ tags: string[];
87
+ }>;