n8n-nodes-sb-render 1.6.0 → 1.6.2
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.
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ParallaxEngine - Creates parallax effects from static images using OpenCV
|
|
3
|
-
* Uses depth estimation to create multi-layer parallax motion
|
|
4
|
-
*/
|
|
5
|
-
import * as cv from '@techstark/opencv-js';
|
|
6
1
|
export type ParallaxDirection = 'left' | 'right' | 'up' | 'down' | 'zoomIn' | 'zoomOut';
|
|
7
2
|
export type ParallaxIntensity = 'subtle' | 'normal' | 'dramatic';
|
|
8
3
|
export interface ParallaxConfig {
|
|
@@ -10,53 +5,26 @@ export interface ParallaxConfig {
|
|
|
10
5
|
intensity: ParallaxIntensity;
|
|
11
6
|
layerCount?: number;
|
|
12
7
|
}
|
|
13
|
-
interface DepthLayer {
|
|
14
|
-
mask: cv.Mat;
|
|
15
|
-
depth: number;
|
|
16
|
-
}
|
|
17
8
|
export declare class ParallaxEngine {
|
|
9
|
+
private sharpAvailable;
|
|
18
10
|
private initialized;
|
|
19
11
|
/**
|
|
20
|
-
* Initialize
|
|
12
|
+
* Initialize the engine and check for available dependencies
|
|
21
13
|
*/
|
|
22
14
|
initialize(): Promise<void>;
|
|
23
15
|
/**
|
|
24
|
-
*
|
|
25
|
-
* Returns a grayscale image where brighter = closer (foreground)
|
|
26
|
-
*/
|
|
27
|
-
private createDepthMap;
|
|
28
|
-
/**
|
|
29
|
-
* Create depth layers from depth map
|
|
30
|
-
*/
|
|
31
|
-
private createDepthLayers;
|
|
32
|
-
/**
|
|
33
|
-
* Get motion multiplier based on intensity
|
|
34
|
-
*/
|
|
35
|
-
private getIntensityMultiplier;
|
|
36
|
-
/**
|
|
37
|
-
* Apply transformation to a layer based on direction and progress
|
|
16
|
+
* Check if true parallax (layer separation) is available
|
|
38
17
|
*/
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Generate a single parallax frame
|
|
42
|
-
*/
|
|
43
|
-
generateFrame(src: cv.Mat, depthLayers: DepthLayer[], config: ParallaxConfig, progress: number): Promise<cv.Mat>;
|
|
44
|
-
/**
|
|
45
|
-
* Generate all parallax frames for an image
|
|
46
|
-
* Returns array of frame file paths
|
|
47
|
-
*/
|
|
48
|
-
generateParallaxFrames(imagePath: string, outputDir: string, config: ParallaxConfig, duration: number, // seconds
|
|
49
|
-
fps?: number): Promise<string[]>;
|
|
50
|
-
/**
|
|
51
|
-
* Create video from parallax frames using FFmpeg
|
|
52
|
-
*/
|
|
53
|
-
createVideoFromFrames(framePaths: string[], outputPath: string, fps?: number, videoCodec?: string, quality?: string, customCRF?: number): Promise<Buffer>;
|
|
18
|
+
isLayerParallaxAvailable(): boolean;
|
|
54
19
|
/**
|
|
55
20
|
* Generate parallax video from a single image
|
|
56
21
|
* Main entry point for creating parallax effect videos
|
|
57
22
|
*/
|
|
58
|
-
generateParallaxVideo(imagePath: string, outputPath: string, config: ParallaxConfig, duration: number, fps?: number,
|
|
23
|
+
generateParallaxVideo(imagePath: string, outputPath: string, config: ParallaxConfig, duration: number, fps?: number, _videoCodec?: string, _quality?: string, _customCRF?: number): Promise<Buffer>;
|
|
24
|
+
/**
|
|
25
|
+
* Legacy method for compatibility
|
|
26
|
+
*/
|
|
27
|
+
generateParallaxFrames(imagePath: string, outputDir: string, config: ParallaxConfig, duration: number, fps?: number): Promise<string[]>;
|
|
59
28
|
}
|
|
60
29
|
export declare const parallaxEngine: ParallaxEngine;
|
|
61
|
-
export {};
|
|
62
30
|
//# sourceMappingURL=ParallaxEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParallaxEngine.d.ts","sourceRoot":"","sources":["../../../../nodes/SbRender/services/ParallaxEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParallaxEngine.d.ts","sourceRoot":"","sources":["../../../../nodes/SbRender/services/ParallaxEngine.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AACxF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkdD,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;OAEG;IACH,wBAAwB,IAAI,OAAO;IAInC;;;OAGG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAK,EACR,WAAW,SAAY,EACvB,QAAQ,SAAS,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IAkDlB;;OAEG;IACG,sBAAsB,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAK,GACP,OAAO,CAAC,MAAM,EAAE,CAAC;CAKrB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -35,330 +35,252 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.parallaxEngine = exports.ParallaxEngine = void 0;
|
|
37
37
|
/**
|
|
38
|
-
* ParallaxEngine - Creates parallax effects from static images
|
|
39
|
-
*
|
|
38
|
+
* ParallaxEngine - Creates 2.5D parallax effects from static images
|
|
39
|
+
* Separates foreground/background layers and moves them at different speeds
|
|
40
|
+
*
|
|
41
|
+
* Uses sharp for layer separation and compositing
|
|
42
|
+
* Falls back to simple Ken Burns if sharp is not available
|
|
40
43
|
*/
|
|
41
|
-
const cv = __importStar(require("@techstark/opencv-js"));
|
|
42
|
-
const canvas_1 = require("canvas");
|
|
43
44
|
const fs = __importStar(require("fs"));
|
|
44
45
|
const path = __importStar(require("path"));
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
62
|
-
checkReady();
|
|
63
|
-
});
|
|
46
|
+
const ffmpeg_wrapper_1 = require("../utils/ffmpeg-wrapper");
|
|
47
|
+
const child_process_1 = require("child_process");
|
|
48
|
+
// Try to load sharp (optional dependency)
|
|
49
|
+
let sharp = null;
|
|
50
|
+
async function loadSharp() {
|
|
51
|
+
if (sharp !== null)
|
|
52
|
+
return true;
|
|
53
|
+
try {
|
|
54
|
+
sharp = (await Promise.resolve().then(() => __importStar(require('sharp')))).default;
|
|
55
|
+
console.log('[ParallaxEngine] Sharp loaded successfully');
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.warn('[ParallaxEngine] Sharp not available:', error.message);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
64
62
|
}
|
|
65
63
|
/**
|
|
66
|
-
*
|
|
64
|
+
* Get motion parameters based on intensity
|
|
67
65
|
*/
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
function getIntensityParams(intensity) {
|
|
67
|
+
switch (intensity) {
|
|
68
|
+
case 'subtle':
|
|
69
|
+
return { fgSpeed: 0.04, bgSpeed: 0.015, scaleRange: 0.02 };
|
|
70
|
+
case 'normal':
|
|
71
|
+
return { fgSpeed: 0.08, bgSpeed: 0.025, scaleRange: 0.04 };
|
|
72
|
+
case 'dramatic':
|
|
73
|
+
return { fgSpeed: 0.15, bgSpeed: 0.04, scaleRange: 0.08 };
|
|
74
|
+
default:
|
|
75
|
+
return { fgSpeed: 0.08, bgSpeed: 0.025, scaleRange: 0.04 };
|
|
76
|
+
}
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
78
|
-
*
|
|
79
|
+
* Create a gradient mask for layer separation
|
|
80
|
+
* Returns RGBA buffer where alpha determines visibility
|
|
79
81
|
*/
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if (rgba !== mat) {
|
|
101
|
-
rgba.delete();
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
class ParallaxEngine {
|
|
105
|
-
constructor() {
|
|
106
|
-
this.initialized = false;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Initialize OpenCV
|
|
110
|
-
*/
|
|
111
|
-
async initialize() {
|
|
112
|
-
if (this.initialized)
|
|
113
|
-
return;
|
|
114
|
-
await waitForOpenCV();
|
|
115
|
-
this.initialized = true;
|
|
116
|
-
console.log('[ParallaxEngine] OpenCV initialized');
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Create depth map from image using edge detection and gradient analysis
|
|
120
|
-
* Returns a grayscale image where brighter = closer (foreground)
|
|
121
|
-
*/
|
|
122
|
-
createDepthMap(src) {
|
|
123
|
-
// Convert to grayscale
|
|
124
|
-
const gray = new cv.Mat();
|
|
125
|
-
cv.cvtColor(src, gray, cv.COLOR_RGBA2GRAY);
|
|
126
|
-
// 1. Edge detection - edges often indicate foreground objects
|
|
127
|
-
const edges = new cv.Mat();
|
|
128
|
-
cv.Canny(gray, edges, 50, 150);
|
|
129
|
-
// 2. Dilate edges to create regions
|
|
130
|
-
const kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, new cv.Size(15, 15));
|
|
131
|
-
const dilatedEdges = new cv.Mat();
|
|
132
|
-
cv.dilate(edges, dilatedEdges, kernel);
|
|
133
|
-
kernel.delete();
|
|
134
|
-
// 3. Create vertical gradient (assume bottom = closer)
|
|
135
|
-
const verticalGradient = new cv.Mat(src.rows, src.cols, cv.CV_8UC1);
|
|
136
|
-
for (let y = 0; y < src.rows; y++) {
|
|
137
|
-
const value = Math.floor((y / src.rows) * 128) + 64; // 64-192 range
|
|
138
|
-
for (let x = 0; x < src.cols; x++) {
|
|
139
|
-
verticalGradient.ucharPtr(y, x)[0] = value;
|
|
82
|
+
function createGradientMask(width, height, type, layerIndex, totalLayers) {
|
|
83
|
+
// Create RGBA buffer
|
|
84
|
+
const buffer = Buffer.alloc(width * height * 4);
|
|
85
|
+
// Calculate layer boundaries
|
|
86
|
+
const layerHeight = height / totalLayers;
|
|
87
|
+
const layerStart = (totalLayers - 1 - layerIndex) * layerHeight; // Reverse: top layers are background
|
|
88
|
+
const layerEnd = layerStart + layerHeight;
|
|
89
|
+
// Feather zone for smooth transitions
|
|
90
|
+
const featherSize = layerHeight * 0.3;
|
|
91
|
+
for (let y = 0; y < height; y++) {
|
|
92
|
+
let alpha = 0;
|
|
93
|
+
if (y >= layerStart && y < layerEnd) {
|
|
94
|
+
// Inside layer
|
|
95
|
+
alpha = 255;
|
|
96
|
+
// Apply feathering at edges
|
|
97
|
+
if (y < layerStart + featherSize) {
|
|
98
|
+
alpha = Math.floor(((y - layerStart) / featherSize) * 255);
|
|
99
|
+
}
|
|
100
|
+
else if (y > layerEnd - featherSize) {
|
|
101
|
+
alpha = Math.floor(((layerEnd - y) / featherSize) * 255);
|
|
140
102
|
}
|
|
141
103
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
// 5. Combine edge-based depth with vertical gradient
|
|
146
|
-
const depthMap = new cv.Mat();
|
|
147
|
-
cv.addWeighted(blurredEdges, 0.6, verticalGradient, 0.4, 0, depthMap);
|
|
148
|
-
// 6. Normalize to 0-255 range
|
|
149
|
-
cv.normalize(depthMap, depthMap, 0, 255, cv.NORM_MINMAX);
|
|
150
|
-
// Cleanup
|
|
151
|
-
gray.delete();
|
|
152
|
-
edges.delete();
|
|
153
|
-
dilatedEdges.delete();
|
|
154
|
-
verticalGradient.delete();
|
|
155
|
-
blurredEdges.delete();
|
|
156
|
-
return depthMap;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Create depth layers from depth map
|
|
160
|
-
*/
|
|
161
|
-
createDepthLayers(depthMap, layerCount) {
|
|
162
|
-
const layers = [];
|
|
163
|
-
const step = 256 / layerCount;
|
|
164
|
-
for (let i = 0; i < layerCount; i++) {
|
|
165
|
-
const minDepth = i * step;
|
|
166
|
-
const maxDepth = (i + 1) * step;
|
|
167
|
-
// Create mask for this depth range
|
|
168
|
-
const lowerBound = new cv.Mat(depthMap.rows, depthMap.cols, cv.CV_8UC1, new cv.Scalar(minDepth));
|
|
169
|
-
const upperBound = new cv.Mat(depthMap.rows, depthMap.cols, cv.CV_8UC1, new cv.Scalar(maxDepth));
|
|
170
|
-
const mask = new cv.Mat();
|
|
171
|
-
const mask1 = new cv.Mat();
|
|
172
|
-
const mask2 = new cv.Mat();
|
|
173
|
-
cv.compare(depthMap, lowerBound, mask1, cv.CMP_GE);
|
|
174
|
-
cv.compare(depthMap, upperBound, mask2, cv.CMP_LT);
|
|
175
|
-
cv.bitwise_and(mask1, mask2, mask);
|
|
176
|
-
// Smooth the mask edges
|
|
177
|
-
const smoothMask = new cv.Mat();
|
|
178
|
-
cv.GaussianBlur(mask, smoothMask, new cv.Size(11, 11), 0);
|
|
179
|
-
layers.push({
|
|
180
|
-
mask: smoothMask,
|
|
181
|
-
depth: i / (layerCount - 1), // 0 = background, 1 = foreground
|
|
182
|
-
});
|
|
183
|
-
lowerBound.delete();
|
|
184
|
-
upperBound.delete();
|
|
185
|
-
mask1.delete();
|
|
186
|
-
mask2.delete();
|
|
187
|
-
mask.delete();
|
|
104
|
+
else if (y < layerStart && y > layerStart - featherSize) {
|
|
105
|
+
// Fade in from above
|
|
106
|
+
alpha = Math.floor(((layerStart - y) / featherSize) * 128);
|
|
188
107
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
* Get motion multiplier based on intensity
|
|
193
|
-
*/
|
|
194
|
-
getIntensityMultiplier(intensity) {
|
|
195
|
-
switch (intensity) {
|
|
196
|
-
case 'subtle': return 0.02;
|
|
197
|
-
case 'normal': return 0.05;
|
|
198
|
-
case 'dramatic': return 0.1;
|
|
199
|
-
default: return 0.05;
|
|
108
|
+
else if (y >= layerEnd && y < layerEnd + featherSize) {
|
|
109
|
+
// Fade out below
|
|
110
|
+
alpha = Math.floor(((y - layerEnd) / featherSize) * 128);
|
|
200
111
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
*/
|
|
205
|
-
applyLayerTransform(src, mask, depth, direction, progress, // 0 to 1
|
|
206
|
-
intensityMultiplier) {
|
|
207
|
-
// Deeper layers (background) move less, foreground moves more
|
|
208
|
-
const motionScale = 0.3 + (depth * 0.7); // 0.3 for bg, 1.0 for fg
|
|
209
|
-
const maxOffset = src.cols * intensityMultiplier * motionScale;
|
|
210
|
-
let offsetX = 0;
|
|
211
|
-
let offsetY = 0;
|
|
212
|
-
let scale = 1.0;
|
|
213
|
-
// Calculate offset based on direction
|
|
214
|
-
// Progress goes from 0 to 1, we want motion from -max to +max
|
|
215
|
-
const normalizedProgress = (progress - 0.5) * 2; // -1 to 1
|
|
216
|
-
switch (direction) {
|
|
217
|
-
case 'left':
|
|
218
|
-
offsetX = normalizedProgress * maxOffset * -1;
|
|
219
|
-
break;
|
|
220
|
-
case 'right':
|
|
221
|
-
offsetX = normalizedProgress * maxOffset;
|
|
222
|
-
break;
|
|
223
|
-
case 'up':
|
|
224
|
-
offsetY = normalizedProgress * maxOffset * -1;
|
|
225
|
-
break;
|
|
226
|
-
case 'down':
|
|
227
|
-
offsetY = normalizedProgress * maxOffset;
|
|
228
|
-
break;
|
|
229
|
-
case 'zoomIn':
|
|
230
|
-
scale = 1 + (progress * intensityMultiplier * motionScale);
|
|
231
|
-
break;
|
|
232
|
-
case 'zoomOut':
|
|
233
|
-
scale = 1 + ((1 - progress) * intensityMultiplier * motionScale);
|
|
234
|
-
break;
|
|
112
|
+
// For foreground (bottom), extend fully to bottom
|
|
113
|
+
if (type === 'foreground' && layerIndex === 0 && y >= layerStart) {
|
|
114
|
+
alpha = 255;
|
|
235
115
|
}
|
|
236
|
-
//
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
M.delete();
|
|
247
|
-
// Apply mask to get only this layer's contribution
|
|
248
|
-
const result = new cv.Mat();
|
|
249
|
-
// Convert mask to 4-channel for blending
|
|
250
|
-
const mask4ch = new cv.Mat();
|
|
251
|
-
const channels = new cv.MatVector();
|
|
252
|
-
channels.push_back(mask);
|
|
253
|
-
channels.push_back(mask);
|
|
254
|
-
channels.push_back(mask);
|
|
255
|
-
channels.push_back(mask);
|
|
256
|
-
cv.merge(channels, mask4ch);
|
|
257
|
-
channels.delete();
|
|
258
|
-
// Apply mask
|
|
259
|
-
cv.bitwise_and(transformed, mask4ch, result);
|
|
260
|
-
transformed.delete();
|
|
261
|
-
mask4ch.delete();
|
|
262
|
-
return result;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Generate a single parallax frame
|
|
266
|
-
*/
|
|
267
|
-
async generateFrame(src, depthLayers, config, progress) {
|
|
268
|
-
const intensityMultiplier = this.getIntensityMultiplier(config.intensity);
|
|
269
|
-
// Start with black canvas
|
|
270
|
-
const result = cv.Mat.zeros(src.rows, src.cols, cv.CV_8UC4);
|
|
271
|
-
// Process each layer from background to foreground
|
|
272
|
-
for (const layer of depthLayers) {
|
|
273
|
-
const layerResult = this.applyLayerTransform(src, layer.mask, layer.depth, config.direction, progress, intensityMultiplier);
|
|
274
|
-
// Blend this layer onto result
|
|
275
|
-
// Use mask for alpha blending
|
|
276
|
-
for (let y = 0; y < src.rows; y++) {
|
|
277
|
-
for (let x = 0; x < src.cols; x++) {
|
|
278
|
-
const alpha = layer.mask.ucharPtr(y, x)[0] / 255;
|
|
279
|
-
if (alpha > 0.01) {
|
|
280
|
-
const srcPixel = layerResult.ucharPtr(y, x);
|
|
281
|
-
const dstPixel = result.ucharPtr(y, x);
|
|
282
|
-
dstPixel[0] = Math.round(srcPixel[0] * alpha + dstPixel[0] * (1 - alpha));
|
|
283
|
-
dstPixel[1] = Math.round(srcPixel[1] * alpha + dstPixel[1] * (1 - alpha));
|
|
284
|
-
dstPixel[2] = Math.round(srcPixel[2] * alpha + dstPixel[2] * (1 - alpha));
|
|
285
|
-
dstPixel[3] = 255;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
layerResult.delete();
|
|
116
|
+
// For background (top), extend fully to top
|
|
117
|
+
if (type === 'background' && layerIndex === totalLayers - 1 && y <= layerEnd) {
|
|
118
|
+
alpha = 255;
|
|
119
|
+
}
|
|
120
|
+
for (let x = 0; x < width; x++) {
|
|
121
|
+
const idx = (y * width + x) * 4;
|
|
122
|
+
buffer[idx] = 255; // R
|
|
123
|
+
buffer[idx + 1] = 255; // G
|
|
124
|
+
buffer[idx + 2] = 255; // B
|
|
125
|
+
buffer[idx + 3] = alpha; // A
|
|
290
126
|
}
|
|
291
|
-
return result;
|
|
292
127
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
128
|
+
return buffer;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Generate true multi-layer parallax with actual layer separation
|
|
132
|
+
*/
|
|
133
|
+
async function generateLayeredParallax(imagePath, outputPath, config, duration, fps, width, height) {
|
|
134
|
+
if (!sharp) {
|
|
135
|
+
throw new Error('Sharp not available for parallax');
|
|
136
|
+
}
|
|
137
|
+
const params = getIntensityParams(config.intensity);
|
|
138
|
+
const totalFrames = Math.ceil(duration * fps);
|
|
139
|
+
const numLayers = config.layerCount || 3;
|
|
140
|
+
const tempDir = path.join(path.dirname(outputPath), `parallax_temp_${Date.now()}`);
|
|
141
|
+
console.log(`[ParallaxEngine] Creating ${numLayers}-layer parallax effect`);
|
|
142
|
+
console.log(`[ParallaxEngine] Direction: ${config.direction}, Intensity: ${config.intensity}`);
|
|
143
|
+
try {
|
|
144
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
145
|
+
// Load and prepare the source image
|
|
146
|
+
const sourceBuffer = await sharp(imagePath)
|
|
147
|
+
.resize(width, height, { fit: 'cover', position: 'center' })
|
|
148
|
+
.ensureAlpha()
|
|
149
|
+
.raw()
|
|
150
|
+
.toBuffer({ resolveWithObject: true });
|
|
151
|
+
const { data: sourceData, info } = sourceBuffer;
|
|
152
|
+
const imgWidth = info.width;
|
|
153
|
+
const imgHeight = info.height;
|
|
154
|
+
console.log(`[ParallaxEngine] Source image: ${imgWidth}x${imgHeight}`);
|
|
155
|
+
// Pre-calculate layer masks
|
|
156
|
+
const layerMasks = [];
|
|
157
|
+
for (let i = 0; i < numLayers; i++) {
|
|
158
|
+
const type = i === 0 ? 'foreground' : i === numLayers - 1 ? 'background' : 'middle';
|
|
159
|
+
layerMasks.push(createGradientMask(imgWidth, imgHeight, type, i, numLayers));
|
|
305
160
|
}
|
|
306
|
-
//
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
161
|
+
// Generate each frame
|
|
162
|
+
console.log(`[ParallaxEngine] Generating ${totalFrames} frames...`);
|
|
163
|
+
for (let frameNum = 0; frameNum < totalFrames; frameNum++) {
|
|
164
|
+
// Progress from -1 to 1 (centered animation)
|
|
165
|
+
const progress = ((frameNum / (totalFrames - 1)) - 0.5) * 2;
|
|
166
|
+
// Start with a base canvas (slightly larger for movement headroom)
|
|
167
|
+
const canvasWidth = Math.floor(imgWidth * 1.2);
|
|
168
|
+
const canvasHeight = Math.floor(imgHeight * 1.2);
|
|
169
|
+
// Create composites array for all layers
|
|
170
|
+
const composites = [];
|
|
171
|
+
// Process each layer (background to foreground)
|
|
172
|
+
for (let layerIdx = numLayers - 1; layerIdx >= 0; layerIdx--) {
|
|
173
|
+
// Calculate movement for this layer
|
|
174
|
+
// Background layers (higher index) move less, foreground layers move more
|
|
175
|
+
const depthFactor = layerIdx / (numLayers - 1); // 0 = foreground, 1 = background
|
|
176
|
+
const layerSpeed = params.bgSpeed + (params.fgSpeed - params.bgSpeed) * (1 - depthFactor);
|
|
177
|
+
let offsetX = 0;
|
|
178
|
+
let offsetY = 0;
|
|
179
|
+
let scale = 1.0;
|
|
180
|
+
switch (config.direction) {
|
|
181
|
+
case 'left':
|
|
182
|
+
offsetX = Math.round(progress * layerSpeed * imgWidth);
|
|
183
|
+
break;
|
|
184
|
+
case 'right':
|
|
185
|
+
offsetX = Math.round(-progress * layerSpeed * imgWidth);
|
|
186
|
+
break;
|
|
187
|
+
case 'up':
|
|
188
|
+
offsetY = Math.round(progress * layerSpeed * imgHeight);
|
|
189
|
+
break;
|
|
190
|
+
case 'down':
|
|
191
|
+
offsetY = Math.round(-progress * layerSpeed * imgHeight);
|
|
192
|
+
break;
|
|
193
|
+
case 'zoomIn':
|
|
194
|
+
scale = 1 + (progress + 1) * params.scaleRange * (1 - depthFactor * 0.5);
|
|
195
|
+
break;
|
|
196
|
+
case 'zoomOut':
|
|
197
|
+
scale = 1 + (1 - progress) * params.scaleRange * (1 - depthFactor * 0.5);
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
// Apply mask to source image to create this layer
|
|
201
|
+
const mask = layerMasks[layerIdx];
|
|
202
|
+
const layerData = Buffer.alloc(imgWidth * imgHeight * 4);
|
|
203
|
+
for (let i = 0; i < imgWidth * imgHeight; i++) {
|
|
204
|
+
const srcIdx = i * 4;
|
|
205
|
+
const maskAlpha = mask[srcIdx + 3];
|
|
206
|
+
layerData[srcIdx] = sourceData[srcIdx]; // R
|
|
207
|
+
layerData[srcIdx + 1] = sourceData[srcIdx + 1]; // G
|
|
208
|
+
layerData[srcIdx + 2] = sourceData[srcIdx + 2]; // B
|
|
209
|
+
layerData[srcIdx + 3] = maskAlpha; // A from mask
|
|
210
|
+
}
|
|
211
|
+
// Create the layer image with transformations
|
|
212
|
+
let layerImage = sharp(layerData, {
|
|
213
|
+
raw: { width: imgWidth, height: imgHeight, channels: 4 },
|
|
214
|
+
});
|
|
215
|
+
// Apply scale if needed
|
|
216
|
+
if (scale !== 1.0) {
|
|
217
|
+
const scaledWidth = Math.round(imgWidth * scale);
|
|
218
|
+
const scaledHeight = Math.round(imgHeight * scale);
|
|
219
|
+
layerImage = layerImage.resize(scaledWidth, scaledHeight, { fit: 'fill' });
|
|
220
|
+
// Extract center portion back to original size
|
|
221
|
+
const cropX = Math.floor((scaledWidth - imgWidth) / 2);
|
|
222
|
+
const cropY = Math.floor((scaledHeight - imgHeight) / 2);
|
|
223
|
+
layerImage = layerImage.extract({
|
|
224
|
+
left: Math.max(0, cropX),
|
|
225
|
+
top: Math.max(0, cropY),
|
|
226
|
+
width: Math.min(imgWidth, scaledWidth),
|
|
227
|
+
height: Math.min(imgHeight, scaledHeight),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
const layerBuffer = await layerImage.ensureAlpha().raw().toBuffer();
|
|
231
|
+
// Calculate position on canvas
|
|
232
|
+
const baseX = Math.floor((canvasWidth - imgWidth) / 2);
|
|
233
|
+
const baseY = Math.floor((canvasHeight - imgHeight) / 2);
|
|
234
|
+
composites.push({
|
|
235
|
+
input: layerBuffer,
|
|
236
|
+
raw: { width: imgWidth, height: imgHeight, channels: 4 },
|
|
237
|
+
left: baseX + offsetX,
|
|
238
|
+
top: baseY + offsetY,
|
|
239
|
+
blend: 'over',
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// Create the final frame by compositing all layers
|
|
243
|
+
let frame = sharp({
|
|
244
|
+
create: {
|
|
245
|
+
width: canvasWidth,
|
|
246
|
+
height: canvasHeight,
|
|
247
|
+
channels: 4,
|
|
248
|
+
background: { r: 0, g: 0, b: 0, alpha: 255 },
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
// Add each layer
|
|
252
|
+
for (const comp of composites) {
|
|
253
|
+
frame = sharp(await frame.png().toBuffer()).composite([{
|
|
254
|
+
input: comp.input,
|
|
255
|
+
raw: comp.raw,
|
|
256
|
+
left: comp.left,
|
|
257
|
+
top: comp.top,
|
|
258
|
+
blend: comp.blend,
|
|
259
|
+
}]);
|
|
260
|
+
}
|
|
261
|
+
// Extract the center portion at original size
|
|
262
|
+
const cropX = Math.floor((canvasWidth - imgWidth) / 2);
|
|
263
|
+
const cropY = Math.floor((canvasHeight - imgHeight) / 2);
|
|
264
|
+
const framePath = path.join(tempDir, `frame_${String(frameNum).padStart(5, '0')}.png`);
|
|
265
|
+
await frame
|
|
266
|
+
.extract({ left: cropX, top: cropY, width: imgWidth, height: imgHeight })
|
|
267
|
+
.png()
|
|
268
|
+
.toFile(framePath);
|
|
269
|
+
if (frameNum % Math.max(1, Math.floor(totalFrames / 10)) === 0) {
|
|
270
|
+
console.log(`[ParallaxEngine] Frame ${frameNum + 1}/${totalFrames}`);
|
|
328
271
|
}
|
|
329
272
|
}
|
|
330
|
-
//
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
}
|
|
336
|
-
console.log(`[ParallaxEngine] Generated ${totalFrames} frames`);
|
|
337
|
-
return framePaths;
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Create video from parallax frames using FFmpeg
|
|
341
|
-
*/
|
|
342
|
-
async createVideoFromFrames(framePaths, outputPath, fps = 24, videoCodec = 'libx264', quality = 'high', customCRF) {
|
|
343
|
-
const { createCommand } = await Promise.resolve().then(() => __importStar(require('../utils/ffmpeg-wrapper')));
|
|
344
|
-
// Get CRF value
|
|
345
|
-
const crfMapping = {
|
|
346
|
-
low: 28,
|
|
347
|
-
medium: 23,
|
|
348
|
-
high: 18,
|
|
349
|
-
};
|
|
350
|
-
const crf = customCRF || crfMapping[quality] || 18;
|
|
351
|
-
// Create input pattern from frame directory
|
|
352
|
-
const frameDir = path.dirname(framePaths[0]);
|
|
353
|
-
const inputPattern = path.join(frameDir, 'frame_%05d.png');
|
|
354
|
-
return new Promise((resolve, reject) => {
|
|
355
|
-
const command = createCommand();
|
|
273
|
+
// Combine frames into video using FFmpeg
|
|
274
|
+
console.log('[ParallaxEngine] Combining frames into video...');
|
|
275
|
+
const inputPattern = path.join(tempDir, 'frame_%05d.png');
|
|
276
|
+
await new Promise((resolve, reject) => {
|
|
277
|
+
const command = (0, ffmpeg_wrapper_1.createCommand)();
|
|
356
278
|
command
|
|
357
279
|
.input(inputPattern)
|
|
358
280
|
.inputOptions([`-framerate ${fps}`])
|
|
359
|
-
.videoCodec(videoCodec)
|
|
360
281
|
.outputOptions([
|
|
361
|
-
|
|
282
|
+
'-c:v libx264',
|
|
283
|
+
'-crf 18',
|
|
362
284
|
'-preset medium',
|
|
363
285
|
'-pix_fmt yuv420p',
|
|
364
286
|
'-movflags +faststart',
|
|
@@ -366,41 +288,199 @@ class ParallaxEngine {
|
|
|
366
288
|
.format('mp4')
|
|
367
289
|
.output(outputPath);
|
|
368
290
|
command.on('start', (cmd) => {
|
|
369
|
-
console.log(`[ParallaxEngine] FFmpeg
|
|
370
|
-
});
|
|
371
|
-
command.on('error', (err) => {
|
|
372
|
-
console.error('[ParallaxEngine] FFmpeg error:', err.message);
|
|
373
|
-
reject(err);
|
|
374
|
-
});
|
|
375
|
-
command.on('end', () => {
|
|
376
|
-
console.log('[ParallaxEngine] Video created successfully');
|
|
377
|
-
const buffer = fs.readFileSync(outputPath);
|
|
378
|
-
resolve(buffer);
|
|
291
|
+
console.log(`[ParallaxEngine] FFmpeg: ${cmd}`);
|
|
379
292
|
});
|
|
293
|
+
command.on('error', (err) => reject(err));
|
|
294
|
+
command.on('end', () => resolve());
|
|
380
295
|
command.run();
|
|
381
296
|
});
|
|
297
|
+
console.log('[ParallaxEngine] Parallax video created successfully');
|
|
298
|
+
}
|
|
299
|
+
finally {
|
|
300
|
+
// Cleanup temp directory
|
|
301
|
+
if (fs.existsSync(tempDir)) {
|
|
302
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Fallback: Simple Ken Burns effect using FFmpeg zoompan
|
|
308
|
+
* Used when sharp is not available
|
|
309
|
+
*/
|
|
310
|
+
async function generateSimpleKenBurns(imagePath, outputPath, config, duration, fps, width, height) {
|
|
311
|
+
const params = getIntensityParams(config.intensity);
|
|
312
|
+
const totalFrames = Math.ceil(duration * fps);
|
|
313
|
+
let zoomExpr;
|
|
314
|
+
let xExpr;
|
|
315
|
+
let yExpr;
|
|
316
|
+
const baseZoom = 1.15;
|
|
317
|
+
const zoomDelta = params.scaleRange;
|
|
318
|
+
switch (config.direction) {
|
|
319
|
+
case 'left':
|
|
320
|
+
zoomExpr = `${baseZoom}+${zoomDelta}*on/${totalFrames}`;
|
|
321
|
+
xExpr = `(iw-ow)/2-${params.fgSpeed}*iw*on/${totalFrames}`;
|
|
322
|
+
yExpr = `(ih-oh)/2`;
|
|
323
|
+
break;
|
|
324
|
+
case 'right':
|
|
325
|
+
zoomExpr = `${baseZoom}+${zoomDelta}*on/${totalFrames}`;
|
|
326
|
+
xExpr = `(iw-ow)/2+${params.fgSpeed}*iw*on/${totalFrames}`;
|
|
327
|
+
yExpr = `(ih-oh)/2`;
|
|
328
|
+
break;
|
|
329
|
+
case 'up':
|
|
330
|
+
zoomExpr = `${baseZoom}+${zoomDelta}*on/${totalFrames}`;
|
|
331
|
+
xExpr = `(iw-ow)/2`;
|
|
332
|
+
yExpr = `(ih-oh)/2-${params.fgSpeed}*ih*on/${totalFrames}`;
|
|
333
|
+
break;
|
|
334
|
+
case 'down':
|
|
335
|
+
zoomExpr = `${baseZoom}+${zoomDelta}*on/${totalFrames}`;
|
|
336
|
+
xExpr = `(iw-ow)/2`;
|
|
337
|
+
yExpr = `(ih-oh)/2+${params.fgSpeed}*ih*on/${totalFrames}`;
|
|
338
|
+
break;
|
|
339
|
+
case 'zoomIn':
|
|
340
|
+
zoomExpr = `${baseZoom}+${zoomDelta * 3}*on/${totalFrames}`;
|
|
341
|
+
xExpr = `(iw-ow)/2`;
|
|
342
|
+
yExpr = `(ih-oh)/2`;
|
|
343
|
+
break;
|
|
344
|
+
case 'zoomOut':
|
|
345
|
+
zoomExpr = `${baseZoom + zoomDelta * 3}-${zoomDelta * 3}*on/${totalFrames}`;
|
|
346
|
+
xExpr = `(iw-ow)/2`;
|
|
347
|
+
yExpr = `(ih-oh)/2`;
|
|
348
|
+
break;
|
|
349
|
+
default:
|
|
350
|
+
zoomExpr = `${baseZoom}`;
|
|
351
|
+
xExpr = `(iw-ow)/2`;
|
|
352
|
+
yExpr = `(ih-oh)/2`;
|
|
353
|
+
}
|
|
354
|
+
const zoompanFilter = `zoompan=z='${zoomExpr}':x='${xExpr}':y='${yExpr}':d=${totalFrames}:s=${width}x${height}:fps=${fps}`;
|
|
355
|
+
return new Promise((resolve, reject) => {
|
|
356
|
+
const command = (0, ffmpeg_wrapper_1.createCommand)(imagePath);
|
|
357
|
+
command
|
|
358
|
+
.inputOptions(['-loop 1'])
|
|
359
|
+
.videoFilters([zoompanFilter])
|
|
360
|
+
.outputOptions([
|
|
361
|
+
`-t ${duration}`,
|
|
362
|
+
'-pix_fmt yuv420p',
|
|
363
|
+
'-c:v libx264',
|
|
364
|
+
'-crf 18',
|
|
365
|
+
'-preset medium',
|
|
366
|
+
'-movflags +faststart',
|
|
367
|
+
])
|
|
368
|
+
.format('mp4')
|
|
369
|
+
.output(outputPath);
|
|
370
|
+
command.on('start', (cmd) => {
|
|
371
|
+
console.log(`[ParallaxEngine] FFmpeg: ${cmd}`);
|
|
372
|
+
});
|
|
373
|
+
command.on('error', (err) => {
|
|
374
|
+
console.error('[ParallaxEngine] FFmpeg error:', err.message);
|
|
375
|
+
reject(err);
|
|
376
|
+
});
|
|
377
|
+
command.on('end', () => {
|
|
378
|
+
console.log('[ParallaxEngine] Ken Burns fallback video created');
|
|
379
|
+
resolve();
|
|
380
|
+
});
|
|
381
|
+
command.run();
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Get image dimensions using FFprobe
|
|
386
|
+
*/
|
|
387
|
+
async function getImageDimensions(imagePath) {
|
|
388
|
+
return new Promise((resolve) => {
|
|
389
|
+
const probePath = (0, ffmpeg_wrapper_1.getFfprobePath)();
|
|
390
|
+
const proc = (0, child_process_1.spawn)(probePath, [
|
|
391
|
+
'-v', 'error',
|
|
392
|
+
'-select_streams', 'v:0',
|
|
393
|
+
'-show_entries', 'stream=width,height',
|
|
394
|
+
'-of', 'json',
|
|
395
|
+
imagePath,
|
|
396
|
+
]);
|
|
397
|
+
let stdout = '';
|
|
398
|
+
proc.stdout.on('data', (data) => { stdout += data.toString(); });
|
|
399
|
+
proc.on('close', (code) => {
|
|
400
|
+
var _a;
|
|
401
|
+
if (code !== 0) {
|
|
402
|
+
resolve({ width: 1920, height: 1080 });
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
try {
|
|
406
|
+
const data = JSON.parse(stdout);
|
|
407
|
+
const stream = (_a = data.streams) === null || _a === void 0 ? void 0 : _a[0];
|
|
408
|
+
resolve({
|
|
409
|
+
width: (stream === null || stream === void 0 ? void 0 : stream.width) || 1920,
|
|
410
|
+
height: (stream === null || stream === void 0 ? void 0 : stream.height) || 1080,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
resolve({ width: 1920, height: 1080 });
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
proc.on('error', () => {
|
|
418
|
+
resolve({ width: 1920, height: 1080 });
|
|
419
|
+
});
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
class ParallaxEngine {
|
|
423
|
+
constructor() {
|
|
424
|
+
this.sharpAvailable = false;
|
|
425
|
+
this.initialized = false;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Initialize the engine and check for available dependencies
|
|
429
|
+
*/
|
|
430
|
+
async initialize() {
|
|
431
|
+
if (this.initialized)
|
|
432
|
+
return;
|
|
433
|
+
this.sharpAvailable = await loadSharp();
|
|
434
|
+
this.initialized = true;
|
|
435
|
+
console.log(`[ParallaxEngine] Initialized (sharp: ${this.sharpAvailable ? 'YES - Multi-layer parallax enabled' : 'NO - Using Ken Burns fallback'})`);
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Check if true parallax (layer separation) is available
|
|
439
|
+
*/
|
|
440
|
+
isLayerParallaxAvailable() {
|
|
441
|
+
return this.sharpAvailable;
|
|
382
442
|
}
|
|
383
443
|
/**
|
|
384
444
|
* Generate parallax video from a single image
|
|
385
445
|
* Main entry point for creating parallax effect videos
|
|
386
446
|
*/
|
|
387
|
-
async generateParallaxVideo(imagePath, outputPath, config, duration, fps = 24,
|
|
388
|
-
|
|
389
|
-
|
|
447
|
+
async generateParallaxVideo(imagePath, outputPath, config, duration, fps = 24, _videoCodec = 'libx264', _quality = 'high', _customCRF) {
|
|
448
|
+
await this.initialize();
|
|
449
|
+
console.log(`[ParallaxEngine] Generating parallax: ${config.direction}, ${config.intensity}`);
|
|
450
|
+
console.log(`[ParallaxEngine] Duration: ${duration}s, FPS: ${fps}`);
|
|
451
|
+
// Get image dimensions
|
|
452
|
+
const dimensions = await getImageDimensions(imagePath);
|
|
453
|
+
const width = Math.floor(dimensions.width / 2) * 2; // Ensure even
|
|
454
|
+
const height = Math.floor(dimensions.height / 2) * 2;
|
|
455
|
+
console.log(`[ParallaxEngine] Output size: ${width}x${height}`);
|
|
390
456
|
try {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
457
|
+
if (this.sharpAvailable) {
|
|
458
|
+
// Use true multi-layer parallax
|
|
459
|
+
console.log('[ParallaxEngine] Using multi-layer parallax mode');
|
|
460
|
+
await generateLayeredParallax(imagePath, outputPath, { ...config, layerCount: config.layerCount || 3 }, duration, fps, width, height);
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
// Fallback to simple Ken Burns
|
|
464
|
+
console.log('[ParallaxEngine] Using Ken Burns fallback (sharp not available)');
|
|
465
|
+
await generateSimpleKenBurns(imagePath, outputPath, config, duration, fps, width, height);
|
|
401
466
|
}
|
|
467
|
+
const buffer = fs.readFileSync(outputPath);
|
|
468
|
+
console.log(`[ParallaxEngine] Video created: ${buffer.length} bytes`);
|
|
469
|
+
return buffer;
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
console.error('[ParallaxEngine] Error generating parallax:', error);
|
|
473
|
+
throw error;
|
|
402
474
|
}
|
|
403
475
|
}
|
|
476
|
+
/**
|
|
477
|
+
* Legacy method for compatibility
|
|
478
|
+
*/
|
|
479
|
+
async generateParallaxFrames(imagePath, outputDir, config, duration, fps = 24) {
|
|
480
|
+
const outputPath = path.join(outputDir, 'parallax_output.mp4');
|
|
481
|
+
await this.generateParallaxVideo(imagePath, outputPath, config, duration, fps);
|
|
482
|
+
return [outputPath];
|
|
483
|
+
}
|
|
404
484
|
}
|
|
405
485
|
exports.ParallaxEngine = ParallaxEngine;
|
|
406
486
|
// Singleton instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParallaxEngine.js","sourceRoot":"","sources":["../../../../nodes/SbRender/services/ParallaxEngine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ParallaxEngine.js","sourceRoot":"","sources":["../../../../nodes/SbRender/services/ParallaxEngine.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-sb-render",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.2",
|
|
4
4
|
"description": "n8n community node for video rendering with customizable subtitles, BGM, and narration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -57,13 +57,14 @@
|
|
|
57
57
|
"typescript": "^5.0.4"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@techstark/opencv-js": "^4.12.0-release.1",
|
|
61
|
-
"canvas": "^3.2.0",
|
|
62
60
|
"ffmpeg-static": "^5.3.0",
|
|
63
61
|
"ffprobe-static": "^3.1.0",
|
|
64
62
|
"node-fetch": "^2.6.12",
|
|
65
63
|
"tmp-promise": "^3.0.3"
|
|
66
64
|
},
|
|
65
|
+
"optionalDependencies": {
|
|
66
|
+
"sharp": "^0.33.0"
|
|
67
|
+
},
|
|
67
68
|
"peerDependencies": {
|
|
68
69
|
"n8n-workflow": "*"
|
|
69
70
|
},
|