@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.
- package/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- package/.github/workflows/ci.yml +34 -0
- package/CHANGELOG.md +24 -0
- package/CONTRIBUTING.md +75 -0
- package/LICENSE +21 -0
- package/README.md +198 -0
- package/USAGE.md +144 -0
- package/dist/handlers/capcut.d.ts +6 -0
- package/dist/handlers/capcut.js +229 -0
- package/dist/handlers/capcut.js.map +1 -0
- package/dist/handlers/editing.d.ts +6 -0
- package/dist/handlers/editing.js +242 -0
- package/dist/handlers/editing.js.map +1 -0
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.js +33 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/post-production.d.ts +5 -0
- package/dist/handlers/post-production.js +109 -0
- package/dist/handlers/post-production.js.map +1 -0
- package/dist/handlers/smart-screenshot.d.ts +5 -0
- package/dist/handlers/smart-screenshot.js +83 -0
- package/dist/handlers/smart-screenshot.js.map +1 -0
- package/dist/handlers/tts.d.ts +5 -0
- package/dist/handlers/tts.js +83 -0
- package/dist/handlers/tts.js.map +1 -0
- package/dist/handlers/video.d.ts +5 -0
- package/dist/handlers/video.js +127 -0
- package/dist/handlers/video.js.map +1 -0
- package/dist/lib/dual-transport.d.ts +42 -0
- package/dist/lib/dual-transport.js +208 -0
- package/dist/lib/dual-transport.js.map +1 -0
- package/dist/lib/logger.d.ts +12 -0
- package/dist/lib/logger.js +42 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/types.d.ts +16 -0
- package/dist/lib/types.js +15 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/schemas/capcut.d.ts +608 -0
- package/dist/schemas/capcut.js +411 -0
- package/dist/schemas/capcut.js.map +1 -0
- package/dist/schemas/editing.d.ts +822 -0
- package/dist/schemas/editing.js +466 -0
- package/dist/schemas/editing.js.map +1 -0
- package/dist/schemas/index.d.ts +2366 -0
- package/dist/schemas/index.js +15 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/post-production.d.ts +379 -0
- package/dist/schemas/post-production.js +268 -0
- package/dist/schemas/post-production.js.map +1 -0
- package/dist/schemas/smart-screenshot.d.ts +127 -0
- package/dist/schemas/smart-screenshot.js +122 -0
- package/dist/schemas/smart-screenshot.js.map +1 -0
- package/dist/schemas/tts.d.ts +220 -0
- package/dist/schemas/tts.js +194 -0
- package/dist/schemas/tts.js.map +1 -0
- package/dist/schemas/video.d.ts +236 -0
- package/dist/schemas/video.js +210 -0
- package/dist/schemas/video.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.js +239 -0
- package/dist/server.js.map +1 -0
- package/dist/server.test.d.ts +1 -0
- package/dist/server.test.js +87 -0
- package/dist/server.test.js.map +1 -0
- package/dist/tools/engine/audio-mixer.d.ts +40 -0
- package/dist/tools/engine/audio-mixer.js +169 -0
- package/dist/tools/engine/audio-mixer.js.map +1 -0
- package/dist/tools/engine/audio.d.ts +22 -0
- package/dist/tools/engine/audio.js +73 -0
- package/dist/tools/engine/audio.js.map +1 -0
- package/dist/tools/engine/beat-sync.d.ts +31 -0
- package/dist/tools/engine/beat-sync.js +270 -0
- package/dist/tools/engine/beat-sync.js.map +1 -0
- package/dist/tools/engine/capture.d.ts +12 -0
- package/dist/tools/engine/capture.js +290 -0
- package/dist/tools/engine/capture.js.map +1 -0
- package/dist/tools/engine/chroma-key.d.ts +27 -0
- package/dist/tools/engine/chroma-key.js +154 -0
- package/dist/tools/engine/chroma-key.js.map +1 -0
- package/dist/tools/engine/concat.d.ts +49 -0
- package/dist/tools/engine/concat.js +149 -0
- package/dist/tools/engine/concat.js.map +1 -0
- package/dist/tools/engine/cursor.d.ts +26 -0
- package/dist/tools/engine/cursor.js +185 -0
- package/dist/tools/engine/cursor.js.map +1 -0
- package/dist/tools/engine/easing.d.ts +15 -0
- package/dist/tools/engine/easing.js +100 -0
- package/dist/tools/engine/easing.js.map +1 -0
- package/dist/tools/engine/editing.d.ts +158 -0
- package/dist/tools/engine/editing.js +541 -0
- package/dist/tools/engine/editing.js.map +1 -0
- package/dist/tools/engine/encoder.d.ts +31 -0
- package/dist/tools/engine/encoder.js +154 -0
- package/dist/tools/engine/encoder.js.map +1 -0
- package/dist/tools/engine/index.d.ts +30 -0
- package/dist/tools/engine/index.js +23 -0
- package/dist/tools/engine/index.js.map +1 -0
- package/dist/tools/engine/lut-presets.d.ts +25 -0
- package/dist/tools/engine/lut-presets.js +141 -0
- package/dist/tools/engine/lut-presets.js.map +1 -0
- package/dist/tools/engine/narrated-video.d.ts +63 -0
- package/dist/tools/engine/narrated-video.js +163 -0
- package/dist/tools/engine/narrated-video.js.map +1 -0
- package/dist/tools/engine/scenes.d.ts +17 -0
- package/dist/tools/engine/scenes.js +223 -0
- package/dist/tools/engine/scenes.js.map +1 -0
- package/dist/tools/engine/smart-screenshot.d.ts +80 -0
- package/dist/tools/engine/smart-screenshot.js +744 -0
- package/dist/tools/engine/smart-screenshot.js.map +1 -0
- package/dist/tools/engine/social-format.d.ts +66 -0
- package/dist/tools/engine/social-format.js +107 -0
- package/dist/tools/engine/social-format.js.map +1 -0
- package/dist/tools/engine/template-renderer.d.ts +45 -0
- package/dist/tools/engine/template-renderer.js +233 -0
- package/dist/tools/engine/template-renderer.js.map +1 -0
- package/dist/tools/engine/templates.d.ts +87 -0
- package/dist/tools/engine/templates.js +272 -0
- package/dist/tools/engine/templates.js.map +1 -0
- package/dist/tools/engine/text-animations.d.ts +33 -0
- package/dist/tools/engine/text-animations.js +192 -0
- package/dist/tools/engine/text-animations.js.map +1 -0
- package/dist/tools/engine/text-overlay.d.ts +27 -0
- package/dist/tools/engine/text-overlay.js +84 -0
- package/dist/tools/engine/text-overlay.js.map +1 -0
- package/dist/tools/engine/tts.d.ts +54 -0
- package/dist/tools/engine/tts.js +186 -0
- package/dist/tools/engine/tts.js.map +1 -0
- package/dist/tools/engine/types.d.ts +166 -0
- package/dist/tools/engine/types.js +13 -0
- package/dist/tools/engine/types.js.map +1 -0
- package/dist/tools/engine/voice-effects.d.ts +18 -0
- package/dist/tools/engine/voice-effects.js +215 -0
- package/dist/tools/engine/voice-effects.js.map +1 -0
- package/dist/tools/index.d.ts +32 -0
- package/dist/tools/index.js +23 -0
- package/dist/tools/index.js.map +1 -0
- package/package.json +56 -0
- package/scripts/check-deps.js +39 -0
- package/src/handlers/capcut.ts +245 -0
- package/src/handlers/editing.ts +260 -0
- package/src/handlers/index.ts +34 -0
- package/src/handlers/post-production.ts +136 -0
- package/src/handlers/smart-screenshot.ts +86 -0
- package/src/handlers/tts.ts +103 -0
- package/src/handlers/video.ts +137 -0
- package/src/lib/dual-transport.ts +272 -0
- package/src/lib/logger.ts +59 -0
- package/src/lib/types.ts +25 -0
- package/src/schemas/capcut.ts +418 -0
- package/src/schemas/editing.ts +476 -0
- package/src/schemas/index.ts +15 -0
- package/src/schemas/post-production.ts +273 -0
- package/src/schemas/smart-screenshot.ts +122 -0
- package/src/schemas/tts.ts +197 -0
- package/src/schemas/video.ts +211 -0
- package/src/server.test.ts +99 -0
- package/src/server.ts +289 -0
- package/src/tools/engine/audio-mixer.ts +244 -0
- package/src/tools/engine/audio.ts +115 -0
- package/src/tools/engine/beat-sync.ts +356 -0
- package/src/tools/engine/capture.ts +360 -0
- package/src/tools/engine/chroma-key.ts +202 -0
- package/src/tools/engine/concat.ts +242 -0
- package/src/tools/engine/cursor.ts +222 -0
- package/src/tools/engine/easing.ts +120 -0
- package/src/tools/engine/editing.ts +809 -0
- package/src/tools/engine/encoder.ts +208 -0
- package/src/tools/engine/index.ts +33 -0
- package/src/tools/engine/lut-presets.ts +235 -0
- package/src/tools/engine/narrated-video.ts +267 -0
- package/src/tools/engine/scenes.ts +309 -0
- package/src/tools/engine/smart-screenshot.ts +923 -0
- package/src/tools/engine/social-format.ts +146 -0
- package/src/tools/engine/template-renderer.ts +294 -0
- package/src/tools/engine/templates.ts +370 -0
- package/src/tools/engine/text-animations.ts +282 -0
- package/src/tools/engine/text-overlay.ts +143 -0
- package/src/tools/engine/tts.ts +284 -0
- package/src/tools/engine/types.ts +191 -0
- package/src/tools/engine/voice-effects.ts +258 -0
- package/src/tools/index.ts +67 -0
- package/tsconfig.json +19 -0
- 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":"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"}
|
|
@@ -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
|
+
}>;
|