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 OpenCV
12
+ * Initialize the engine and check for available dependencies
21
13
  */
22
14
  initialize(): Promise<void>;
23
15
  /**
24
- * Create depth map from image using edge detection and gradient analysis
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
- private applyLayerTransform;
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, videoCodec?: string, quality?: string, customCRF?: number): Promise<Buffer>;
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":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAK3C,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;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAuED,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;;OAGG;IACH,OAAO,CAAC,cAAc;IA6CtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6E3B;;OAEG;IACG,aAAa,CACjB,GAAG,EAAE,EAAE,CAAC,GAAG,EACX,WAAW,EAAE,UAAU,EAAE,EACzB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;IAwClB;;;OAGG;IACG,sBAAsB,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAAE,UAAU;IAC5B,GAAG,SAAK,GACP,OAAO,CAAC,MAAM,EAAE,CAAC;IAqDpB;;OAEG;IACG,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,SAAK,EACR,UAAU,SAAY,EACtB,OAAO,SAAS,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAkDlB;;;OAGG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAK,EACR,UAAU,SAAY,EACtB,OAAO,SAAS,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;CAgCnB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
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 using OpenCV
39
- * Uses depth estimation to create multi-layer parallax motion
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
- * Wait for OpenCV to be ready
47
- */
48
- async function waitForOpenCV() {
49
- return new Promise((resolve, reject) => {
50
- const timeout = setTimeout(() => {
51
- reject(new Error('OpenCV initialization timeout'));
52
- }, 30000);
53
- const checkReady = () => {
54
- if (cv.Mat) {
55
- clearTimeout(timeout);
56
- resolve();
57
- }
58
- else {
59
- setTimeout(checkReady, 100);
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
- * Load image from file path using canvas
64
+ * Get motion parameters based on intensity
67
65
  */
68
- async function loadImageToMat(imagePath) {
69
- const img = await (0, canvas_1.loadImage)(imagePath);
70
- const canvas = (0, canvas_1.createCanvas)(img.width, img.height);
71
- const ctx = canvas.getContext('2d');
72
- ctx.drawImage(img, 0, 0);
73
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
74
- const mat = cv.matFromImageData(imageData);
75
- return mat;
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
- * Save Mat to file using canvas
79
+ * Create a gradient mask for layer separation
80
+ * Returns RGBA buffer where alpha determines visibility
79
81
  */
80
- async function saveMatToFile(mat, filePath) {
81
- const canvas = (0, canvas_1.createCanvas)(mat.cols, mat.rows);
82
- const ctx = canvas.getContext('2d');
83
- // Convert to RGBA if needed
84
- let rgba;
85
- if (mat.channels() === 3) {
86
- rgba = new cv.Mat();
87
- cv.cvtColor(mat, rgba, cv.COLOR_BGR2RGBA);
88
- }
89
- else if (mat.channels() === 1) {
90
- rgba = new cv.Mat();
91
- cv.cvtColor(mat, rgba, cv.COLOR_GRAY2RGBA);
92
- }
93
- else {
94
- rgba = mat.clone();
95
- }
96
- const imageData = new canvas_1.ImageData(new Uint8ClampedArray(rgba.data), rgba.cols, rgba.rows);
97
- ctx.putImageData(imageData, 0, 0);
98
- const buffer = canvas.toBuffer('image/png');
99
- fs.writeFileSync(filePath, buffer);
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
- // 4. Blur for smoothness
143
- const blurredEdges = new cv.Mat();
144
- cv.GaussianBlur(dilatedEdges, blurredEdges, new cv.Size(31, 31), 0);
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
- return layers;
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
- * Apply transformation to a layer based on direction and progress
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
- // Create transformation matrix
237
- const centerX = src.cols / 2;
238
- const centerY = src.rows / 2;
239
- // For translation and scaling
240
- const M = cv.matFromArray(2, 3, cv.CV_64FC1, [
241
- scale, 0, offsetX + centerX * (1 - scale),
242
- 0, scale, offsetY + centerY * (1 - scale),
243
- ]);
244
- const transformed = new cv.Mat();
245
- cv.warpAffine(src, transformed, M, new cv.Size(src.cols, src.rows), cv.INTER_LINEAR, cv.BORDER_REPLICATE);
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
- * Generate all parallax frames for an image
295
- * Returns array of frame file paths
296
- */
297
- async generateParallaxFrames(imagePath, outputDir, config, duration, // seconds
298
- fps = 24) {
299
- await this.initialize();
300
- console.log(`[ParallaxEngine] Generating parallax frames: ${config.direction}, ${config.intensity}`);
301
- console.log(`[ParallaxEngine] Duration: ${duration}s, FPS: ${fps}`);
302
- // Ensure output directory exists
303
- if (!fs.existsSync(outputDir)) {
304
- fs.mkdirSync(outputDir, { recursive: true });
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
- // Load image
307
- const src = await loadImageToMat(imagePath);
308
- console.log(`[ParallaxEngine] Loaded image: ${src.cols}x${src.rows}`);
309
- // Create depth map
310
- const depthMap = this.createDepthMap(src);
311
- console.log('[ParallaxEngine] Created depth map');
312
- // Create depth layers
313
- const layerCount = config.layerCount || 3;
314
- const depthLayers = this.createDepthLayers(depthMap, layerCount);
315
- console.log(`[ParallaxEngine] Created ${layerCount} depth layers`);
316
- // Generate frames
317
- const totalFrames = Math.ceil(duration * fps);
318
- const framePaths = [];
319
- for (let i = 0; i < totalFrames; i++) {
320
- const progress = i / (totalFrames - 1);
321
- const frame = await this.generateFrame(src, depthLayers, config, progress);
322
- const framePath = path.join(outputDir, `frame_${String(i).padStart(5, '0')}.png`);
323
- await saveMatToFile(frame, framePath);
324
- framePaths.push(framePath);
325
- frame.delete();
326
- if (i % 10 === 0) {
327
- console.log(`[ParallaxEngine] Generated frame ${i + 1}/${totalFrames}`);
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
- // Cleanup
331
- src.delete();
332
- depthMap.delete();
333
- for (const layer of depthLayers) {
334
- layer.mask.delete();
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
- `-crf ${crf}`,
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 command: ${cmd}`);
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, videoCodec = 'libx264', quality = 'high', customCRF) {
388
- // Create temp directory for frames
389
- const tempDir = path.join(path.dirname(outputPath), `parallax_frames_${Date.now()}`);
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
- // Generate frames
392
- const framePaths = await this.generateParallaxFrames(imagePath, tempDir, config, duration, fps);
393
- // Create video from frames
394
- const videoBuffer = await this.createVideoFromFrames(framePaths, outputPath, fps, videoCodec, quality, customCRF);
395
- return videoBuffer;
396
- }
397
- finally {
398
- // Cleanup temp directory
399
- if (fs.existsSync(tempDir)) {
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.0",
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
  },