n8n-nodes-sb-render 1.6.1 → 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.
|
@@ -13,20 +13,16 @@ export declare class ParallaxEngine {
|
|
|
13
13
|
*/
|
|
14
14
|
initialize(): Promise<void>;
|
|
15
15
|
/**
|
|
16
|
-
* Check if parallax
|
|
16
|
+
* Check if true parallax (layer separation) is available
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Check if multi-layer parallax is available (requires sharp)
|
|
21
|
-
*/
|
|
22
|
-
isMultiLayerAvailable(): boolean;
|
|
18
|
+
isLayerParallaxAvailable(): boolean;
|
|
23
19
|
/**
|
|
24
20
|
* Generate parallax video from a single image
|
|
25
21
|
* Main entry point for creating parallax effect videos
|
|
26
22
|
*/
|
|
27
23
|
generateParallaxVideo(imagePath: string, outputPath: string, config: ParallaxConfig, duration: number, fps?: number, _videoCodec?: string, _quality?: string, _customCRF?: number): Promise<Buffer>;
|
|
28
24
|
/**
|
|
29
|
-
* Legacy method for compatibility
|
|
25
|
+
* Legacy method for compatibility
|
|
30
26
|
*/
|
|
31
27
|
generateParallaxFrames(imagePath: string, outputDir: string, config: ParallaxConfig, duration: number, fps?: number): Promise<string[]>;
|
|
32
28
|
}
|
|
@@ -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,10 +35,11 @@ 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
40
|
*
|
|
41
|
-
*
|
|
41
|
+
* Uses sharp for layer separation and compositing
|
|
42
|
+
* Falls back to simple Ken Burns if sharp is not available
|
|
42
43
|
*/
|
|
43
44
|
const fs = __importStar(require("fs"));
|
|
44
45
|
const path = __importStar(require("path"));
|
|
@@ -55,7 +56,7 @@ async function loadSharp() {
|
|
|
55
56
|
return true;
|
|
56
57
|
}
|
|
57
58
|
catch (error) {
|
|
58
|
-
console.warn('[ParallaxEngine] Sharp not available,
|
|
59
|
+
console.warn('[ParallaxEngine] Sharp not available:', error.message);
|
|
59
60
|
return false;
|
|
60
61
|
}
|
|
61
62
|
}
|
|
@@ -65,32 +66,257 @@ async function loadSharp() {
|
|
|
65
66
|
function getIntensityParams(intensity) {
|
|
66
67
|
switch (intensity) {
|
|
67
68
|
case 'subtle':
|
|
68
|
-
return { fgSpeed: 0.
|
|
69
|
+
return { fgSpeed: 0.04, bgSpeed: 0.015, scaleRange: 0.02 };
|
|
69
70
|
case 'normal':
|
|
70
|
-
return { fgSpeed: 0.
|
|
71
|
+
return { fgSpeed: 0.08, bgSpeed: 0.025, scaleRange: 0.04 };
|
|
71
72
|
case 'dramatic':
|
|
72
|
-
return { fgSpeed: 0.
|
|
73
|
+
return { fgSpeed: 0.15, bgSpeed: 0.04, scaleRange: 0.08 };
|
|
73
74
|
default:
|
|
74
|
-
return { fgSpeed: 0.
|
|
75
|
+
return { fgSpeed: 0.08, bgSpeed: 0.025, scaleRange: 0.04 };
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
79
|
+
* Create a gradient mask for layer separation
|
|
80
|
+
* Returns RGBA buffer where alpha determines visibility
|
|
80
81
|
*/
|
|
81
|
-
|
|
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);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (y < layerStart && y > layerStart - featherSize) {
|
|
105
|
+
// Fade in from above
|
|
106
|
+
alpha = Math.floor(((layerStart - y) / featherSize) * 128);
|
|
107
|
+
}
|
|
108
|
+
else if (y >= layerEnd && y < layerEnd + featherSize) {
|
|
109
|
+
// Fade out below
|
|
110
|
+
alpha = Math.floor(((y - layerEnd) / featherSize) * 128);
|
|
111
|
+
}
|
|
112
|
+
// For foreground (bottom), extend fully to bottom
|
|
113
|
+
if (type === 'foreground' && layerIndex === 0 && y >= layerStart) {
|
|
114
|
+
alpha = 255;
|
|
115
|
+
}
|
|
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
|
|
126
|
+
}
|
|
127
|
+
}
|
|
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));
|
|
160
|
+
}
|
|
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}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
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)();
|
|
278
|
+
command
|
|
279
|
+
.input(inputPattern)
|
|
280
|
+
.inputOptions([`-framerate ${fps}`])
|
|
281
|
+
.outputOptions([
|
|
282
|
+
'-c:v libx264',
|
|
283
|
+
'-crf 18',
|
|
284
|
+
'-preset medium',
|
|
285
|
+
'-pix_fmt yuv420p',
|
|
286
|
+
'-movflags +faststart',
|
|
287
|
+
])
|
|
288
|
+
.format('mp4')
|
|
289
|
+
.output(outputPath);
|
|
290
|
+
command.on('start', (cmd) => {
|
|
291
|
+
console.log(`[ParallaxEngine] FFmpeg: ${cmd}`);
|
|
292
|
+
});
|
|
293
|
+
command.on('error', (err) => reject(err));
|
|
294
|
+
command.on('end', () => resolve());
|
|
295
|
+
command.run();
|
|
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) {
|
|
82
311
|
const params = getIntensityParams(config.intensity);
|
|
83
312
|
const totalFrames = Math.ceil(duration * fps);
|
|
84
|
-
// Calculate zoom and pan expressions based on direction
|
|
85
313
|
let zoomExpr;
|
|
86
314
|
let xExpr;
|
|
87
315
|
let yExpr;
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
const zoomDelta = params.zoomAmount;
|
|
316
|
+
const baseZoom = 1.15;
|
|
317
|
+
const zoomDelta = params.scaleRange;
|
|
91
318
|
switch (config.direction) {
|
|
92
319
|
case 'left':
|
|
93
|
-
// Pan left with subtle zoom - foreground moves faster
|
|
94
320
|
zoomExpr = `${baseZoom}+${zoomDelta}*on/${totalFrames}`;
|
|
95
321
|
xExpr = `(iw-ow)/2-${params.fgSpeed}*iw*on/${totalFrames}`;
|
|
96
322
|
yExpr = `(ih-oh)/2`;
|
|
@@ -111,14 +337,12 @@ async function generateParallaxWithFFmpeg(imagePath, outputPath, config, duratio
|
|
|
111
337
|
yExpr = `(ih-oh)/2+${params.fgSpeed}*ih*on/${totalFrames}`;
|
|
112
338
|
break;
|
|
113
339
|
case 'zoomIn':
|
|
114
|
-
|
|
115
|
-
zoomExpr = `${baseZoom}+${zoomDelta * 2}*on/${totalFrames}`;
|
|
340
|
+
zoomExpr = `${baseZoom}+${zoomDelta * 3}*on/${totalFrames}`;
|
|
116
341
|
xExpr = `(iw-ow)/2`;
|
|
117
342
|
yExpr = `(ih-oh)/2`;
|
|
118
343
|
break;
|
|
119
344
|
case 'zoomOut':
|
|
120
|
-
|
|
121
|
-
zoomExpr = `${baseZoom + zoomDelta * 2}-${zoomDelta * 2}*on/${totalFrames}`;
|
|
345
|
+
zoomExpr = `${baseZoom + zoomDelta * 3}-${zoomDelta * 3}*on/${totalFrames}`;
|
|
122
346
|
xExpr = `(iw-ow)/2`;
|
|
123
347
|
yExpr = `(ih-oh)/2`;
|
|
124
348
|
break;
|
|
@@ -127,7 +351,6 @@ async function generateParallaxWithFFmpeg(imagePath, outputPath, config, duratio
|
|
|
127
351
|
xExpr = `(iw-ow)/2`;
|
|
128
352
|
yExpr = `(ih-oh)/2`;
|
|
129
353
|
}
|
|
130
|
-
// Build zoompan filter with parallax-like motion
|
|
131
354
|
const zoompanFilter = `zoompan=z='${zoomExpr}':x='${xExpr}':y='${yExpr}':d=${totalFrames}:s=${width}x${height}:fps=${fps}`;
|
|
132
355
|
return new Promise((resolve, reject) => {
|
|
133
356
|
const command = (0, ffmpeg_wrapper_1.createCommand)(imagePath);
|
|
@@ -145,184 +368,24 @@ async function generateParallaxWithFFmpeg(imagePath, outputPath, config, duratio
|
|
|
145
368
|
.format('mp4')
|
|
146
369
|
.output(outputPath);
|
|
147
370
|
command.on('start', (cmd) => {
|
|
148
|
-
console.log(`[ParallaxEngine] FFmpeg
|
|
371
|
+
console.log(`[ParallaxEngine] FFmpeg: ${cmd}`);
|
|
149
372
|
});
|
|
150
373
|
command.on('error', (err) => {
|
|
151
374
|
console.error('[ParallaxEngine] FFmpeg error:', err.message);
|
|
152
375
|
reject(err);
|
|
153
376
|
});
|
|
154
377
|
command.on('end', () => {
|
|
155
|
-
console.log('[ParallaxEngine]
|
|
378
|
+
console.log('[ParallaxEngine] Ken Burns fallback video created');
|
|
156
379
|
resolve();
|
|
157
380
|
});
|
|
158
381
|
command.run();
|
|
159
382
|
});
|
|
160
383
|
}
|
|
161
|
-
/**
|
|
162
|
-
* Generate multi-layer parallax using sharp for layer separation
|
|
163
|
-
* Creates more realistic 3D effect with separate foreground/background motion
|
|
164
|
-
*/
|
|
165
|
-
async function generateMultiLayerParallax(imagePath, outputPath, config, duration, fps, width, height) {
|
|
166
|
-
if (!sharp) {
|
|
167
|
-
throw new Error('Sharp not available for multi-layer parallax');
|
|
168
|
-
}
|
|
169
|
-
const params = getIntensityParams(config.intensity);
|
|
170
|
-
const totalFrames = Math.ceil(duration * fps);
|
|
171
|
-
const tempDir = path.join(path.dirname(outputPath), `parallax_temp_${Date.now()}`);
|
|
172
|
-
try {
|
|
173
|
-
fs.mkdirSync(tempDir, { recursive: true });
|
|
174
|
-
// Load original image
|
|
175
|
-
const image = sharp(imagePath);
|
|
176
|
-
const metadata = await image.metadata();
|
|
177
|
-
const imgWidth = metadata.width || width;
|
|
178
|
-
const imgHeight = metadata.height || height;
|
|
179
|
-
// Create gradient masks for foreground/background separation
|
|
180
|
-
// Foreground: bottom portion (typically subject)
|
|
181
|
-
// Background: top portion (typically sky/distant objects)
|
|
182
|
-
const maskHeight = Math.floor(imgHeight * 0.4); // Top 40% is "background"
|
|
183
|
-
// Create background layer (top portion with gradient fade)
|
|
184
|
-
const bgGradient = Buffer.alloc(imgWidth * imgHeight);
|
|
185
|
-
for (let y = 0; y < imgHeight; y++) {
|
|
186
|
-
const alpha = y < maskHeight
|
|
187
|
-
? 255
|
|
188
|
-
: Math.max(0, 255 - Math.floor((y - maskHeight) / (imgHeight - maskHeight) * 255));
|
|
189
|
-
for (let x = 0; x < imgWidth; x++) {
|
|
190
|
-
bgGradient[y * imgWidth + x] = alpha;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// Create foreground layer (bottom portion with gradient fade)
|
|
194
|
-
const fgGradient = Buffer.alloc(imgWidth * imgHeight);
|
|
195
|
-
for (let y = 0; y < imgHeight; y++) {
|
|
196
|
-
const alpha = y > imgHeight - maskHeight
|
|
197
|
-
? 255
|
|
198
|
-
: Math.max(0, Math.floor(y / maskHeight * 255));
|
|
199
|
-
for (let x = 0; x < imgWidth; x++) {
|
|
200
|
-
fgGradient[y * imgWidth + x] = alpha;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
// Generate frames
|
|
204
|
-
console.log(`[ParallaxEngine] Generating ${totalFrames} parallax frames...`);
|
|
205
|
-
for (let frame = 0; frame < totalFrames; frame++) {
|
|
206
|
-
const progress = frame / totalFrames;
|
|
207
|
-
// Calculate offsets for each layer
|
|
208
|
-
let bgOffsetX = 0, bgOffsetY = 0;
|
|
209
|
-
let fgOffsetX = 0, fgOffsetY = 0;
|
|
210
|
-
let bgZoom = 1.0, fgZoom = 1.0;
|
|
211
|
-
const bgMove = params.bgSpeed * imgWidth * (progress - 0.5) * 2;
|
|
212
|
-
const fgMove = params.fgSpeed * imgWidth * (progress - 0.5) * 2;
|
|
213
|
-
switch (config.direction) {
|
|
214
|
-
case 'left':
|
|
215
|
-
bgOffsetX = Math.round(bgMove);
|
|
216
|
-
fgOffsetX = Math.round(fgMove);
|
|
217
|
-
break;
|
|
218
|
-
case 'right':
|
|
219
|
-
bgOffsetX = Math.round(-bgMove);
|
|
220
|
-
fgOffsetX = Math.round(-fgMove);
|
|
221
|
-
break;
|
|
222
|
-
case 'up':
|
|
223
|
-
bgOffsetY = Math.round(bgMove);
|
|
224
|
-
fgOffsetY = Math.round(fgMove);
|
|
225
|
-
break;
|
|
226
|
-
case 'down':
|
|
227
|
-
bgOffsetY = Math.round(-bgMove);
|
|
228
|
-
fgOffsetY = Math.round(-fgMove);
|
|
229
|
-
break;
|
|
230
|
-
case 'zoomIn':
|
|
231
|
-
bgZoom = 1 + params.bgSpeed * progress;
|
|
232
|
-
fgZoom = 1 + params.fgSpeed * progress;
|
|
233
|
-
break;
|
|
234
|
-
case 'zoomOut':
|
|
235
|
-
bgZoom = 1 + params.bgSpeed * (1 - progress);
|
|
236
|
-
fgZoom = 1 + params.fgSpeed * (1 - progress);
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
// Generate background layer with offset
|
|
240
|
-
const bgWidth = Math.round(imgWidth * bgZoom);
|
|
241
|
-
const bgHeight = Math.round(imgHeight * bgZoom);
|
|
242
|
-
const bgLayer = await sharp(imagePath)
|
|
243
|
-
.resize(bgWidth, bgHeight, { fit: 'fill' })
|
|
244
|
-
.extend({
|
|
245
|
-
top: Math.max(0, -bgOffsetY),
|
|
246
|
-
bottom: Math.max(0, bgOffsetY),
|
|
247
|
-
left: Math.max(0, -bgOffsetX),
|
|
248
|
-
right: Math.max(0, bgOffsetX),
|
|
249
|
-
background: { r: 0, g: 0, b: 0, alpha: 0 },
|
|
250
|
-
})
|
|
251
|
-
.extract({
|
|
252
|
-
left: Math.max(0, bgOffsetX) + Math.floor((bgWidth - imgWidth) / 2),
|
|
253
|
-
top: Math.max(0, bgOffsetY) + Math.floor((bgHeight - imgHeight) / 2),
|
|
254
|
-
width: imgWidth,
|
|
255
|
-
height: imgHeight,
|
|
256
|
-
})
|
|
257
|
-
.toBuffer();
|
|
258
|
-
// Generate foreground layer with offset
|
|
259
|
-
const fgWidth = Math.round(imgWidth * fgZoom);
|
|
260
|
-
const fgHeight = Math.round(imgHeight * fgZoom);
|
|
261
|
-
const fgLayer = await sharp(imagePath)
|
|
262
|
-
.resize(fgWidth, fgHeight, { fit: 'fill' })
|
|
263
|
-
.extend({
|
|
264
|
-
top: Math.max(0, -fgOffsetY),
|
|
265
|
-
bottom: Math.max(0, fgOffsetY),
|
|
266
|
-
left: Math.max(0, -fgOffsetX),
|
|
267
|
-
right: Math.max(0, fgOffsetX),
|
|
268
|
-
background: { r: 0, g: 0, b: 0, alpha: 0 },
|
|
269
|
-
})
|
|
270
|
-
.extract({
|
|
271
|
-
left: Math.max(0, fgOffsetX) + Math.floor((fgWidth - imgWidth) / 2),
|
|
272
|
-
top: Math.max(0, fgOffsetY) + Math.floor((fgHeight - imgHeight) / 2),
|
|
273
|
-
width: imgWidth,
|
|
274
|
-
height: imgHeight,
|
|
275
|
-
})
|
|
276
|
-
.toBuffer();
|
|
277
|
-
// Composite layers
|
|
278
|
-
const framePath = path.join(tempDir, `frame_${String(frame).padStart(5, '0')}.png`);
|
|
279
|
-
await sharp(bgLayer)
|
|
280
|
-
.composite([
|
|
281
|
-
{
|
|
282
|
-
input: fgLayer,
|
|
283
|
-
blend: 'over',
|
|
284
|
-
},
|
|
285
|
-
])
|
|
286
|
-
.resize(width, height, { fit: 'fill' })
|
|
287
|
-
.toFile(framePath);
|
|
288
|
-
if (frame % Math.floor(totalFrames / 10) === 0) {
|
|
289
|
-
console.log(`[ParallaxEngine] Frame ${frame + 1}/${totalFrames}`);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
// Combine frames into video
|
|
293
|
-
console.log('[ParallaxEngine] Combining frames into video...');
|
|
294
|
-
const inputPattern = path.join(tempDir, 'frame_%05d.png');
|
|
295
|
-
await new Promise((resolve, reject) => {
|
|
296
|
-
const command = (0, ffmpeg_wrapper_1.createCommand)();
|
|
297
|
-
command
|
|
298
|
-
.input(inputPattern)
|
|
299
|
-
.inputOptions([`-framerate ${fps}`])
|
|
300
|
-
.outputOptions([
|
|
301
|
-
'-c:v libx264',
|
|
302
|
-
'-crf 18',
|
|
303
|
-
'-preset medium',
|
|
304
|
-
'-pix_fmt yuv420p',
|
|
305
|
-
'-movflags +faststart',
|
|
306
|
-
])
|
|
307
|
-
.format('mp4')
|
|
308
|
-
.output(outputPath);
|
|
309
|
-
command.on('error', (err) => reject(err));
|
|
310
|
-
command.on('end', () => resolve());
|
|
311
|
-
command.run();
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
finally {
|
|
315
|
-
// Cleanup temp directory
|
|
316
|
-
if (fs.existsSync(tempDir)) {
|
|
317
|
-
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
384
|
/**
|
|
322
385
|
* Get image dimensions using FFprobe
|
|
323
386
|
*/
|
|
324
387
|
async function getImageDimensions(imagePath) {
|
|
325
|
-
return new Promise((resolve
|
|
388
|
+
return new Promise((resolve) => {
|
|
326
389
|
const probePath = (0, ffmpeg_wrapper_1.getFfprobePath)();
|
|
327
390
|
const proc = (0, child_process_1.spawn)(probePath, [
|
|
328
391
|
'-v', 'error',
|
|
@@ -336,7 +399,6 @@ async function getImageDimensions(imagePath) {
|
|
|
336
399
|
proc.on('close', (code) => {
|
|
337
400
|
var _a;
|
|
338
401
|
if (code !== 0) {
|
|
339
|
-
// Default dimensions if probe fails
|
|
340
402
|
resolve({ width: 1920, height: 1080 });
|
|
341
403
|
return;
|
|
342
404
|
}
|
|
@@ -370,18 +432,12 @@ class ParallaxEngine {
|
|
|
370
432
|
return;
|
|
371
433
|
this.sharpAvailable = await loadSharp();
|
|
372
434
|
this.initialized = true;
|
|
373
|
-
console.log(`[ParallaxEngine] Initialized (sharp: ${this.sharpAvailable ? '
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Check if parallax effects are available
|
|
377
|
-
*/
|
|
378
|
-
isAvailable() {
|
|
379
|
-
return true; // Always available with FFmpeg fallback
|
|
435
|
+
console.log(`[ParallaxEngine] Initialized (sharp: ${this.sharpAvailable ? 'YES - Multi-layer parallax enabled' : 'NO - Using Ken Burns fallback'})`);
|
|
380
436
|
}
|
|
381
437
|
/**
|
|
382
|
-
* Check if
|
|
438
|
+
* Check if true parallax (layer separation) is available
|
|
383
439
|
*/
|
|
384
|
-
|
|
440
|
+
isLayerParallaxAvailable() {
|
|
385
441
|
return this.sharpAvailable;
|
|
386
442
|
}
|
|
387
443
|
/**
|
|
@@ -396,19 +452,18 @@ class ParallaxEngine {
|
|
|
396
452
|
const dimensions = await getImageDimensions(imagePath);
|
|
397
453
|
const width = Math.floor(dimensions.width / 2) * 2; // Ensure even
|
|
398
454
|
const height = Math.floor(dimensions.height / 2) * 2;
|
|
399
|
-
console.log(`[ParallaxEngine]
|
|
455
|
+
console.log(`[ParallaxEngine] Output size: ${width}x${height}`);
|
|
400
456
|
try {
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
console.log('[ParallaxEngine] Using multi-layer mode');
|
|
404
|
-
await
|
|
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);
|
|
405
461
|
}
|
|
406
462
|
else {
|
|
407
|
-
//
|
|
408
|
-
console.log('[ParallaxEngine] Using
|
|
409
|
-
await
|
|
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);
|
|
410
466
|
}
|
|
411
|
-
// Read and return the output
|
|
412
467
|
const buffer = fs.readFileSync(outputPath);
|
|
413
468
|
console.log(`[ParallaxEngine] Video created: ${buffer.length} bytes`);
|
|
414
469
|
return buffer;
|
|
@@ -419,10 +474,9 @@ class ParallaxEngine {
|
|
|
419
474
|
}
|
|
420
475
|
}
|
|
421
476
|
/**
|
|
422
|
-
* Legacy method for compatibility
|
|
477
|
+
* Legacy method for compatibility
|
|
423
478
|
*/
|
|
424
479
|
async generateParallaxFrames(imagePath, outputDir, config, duration, fps = 24) {
|
|
425
|
-
// For compatibility, generate video and return single path
|
|
426
480
|
const outputPath = path.join(outputDir, 'parallax_output.mp4');
|
|
427
481
|
await this.generateParallaxVideo(imagePath, outputPath, config, duration, fps);
|
|
428
482
|
return [outputPath];
|
|
@@ -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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"}
|