@t3lnet/sceneforge 1.0.19 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/commands/record-demo.js +30 -10
- package/cli/utils/dimensions.js +7 -5
- package/package.json +1 -1
|
@@ -19,7 +19,6 @@ import {
|
|
|
19
19
|
parseViewportArgs,
|
|
20
20
|
parseDeviceScaleFactor,
|
|
21
21
|
getViewportHelpText,
|
|
22
|
-
logViewportSettings,
|
|
23
22
|
} from "../utils/dimensions.js";
|
|
24
23
|
|
|
25
24
|
function printHelp() {
|
|
@@ -213,17 +212,37 @@ export async function runRecordDemoCommand(argv) {
|
|
|
213
212
|
await ensureDir(outputPaths.outputDir);
|
|
214
213
|
await ensureDir(outputPaths.videosDir);
|
|
215
214
|
|
|
216
|
-
const
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
//
|
|
215
|
+
const requestedViewport = parseViewportArgs(args, getFlagValue);
|
|
216
|
+
const zoomFactor = parseDeviceScaleFactor(args, getFlagValue);
|
|
217
|
+
|
|
218
|
+
// To achieve "zoom", we use a smaller viewport but record at the requested resolution.
|
|
219
|
+
// This makes content appear larger (zoomed in) in the final video.
|
|
220
|
+
// Example: --viewport 1080p --zoom 150 means:
|
|
221
|
+
// - User wants 1920x1080 output video
|
|
222
|
+
// - Content should appear 1.5x larger (zoomed)
|
|
223
|
+
// - So we set viewport to 1280x720 (1920/1.5 x 1080/1.5)
|
|
224
|
+
// - Record at 1920x1080
|
|
225
|
+
const viewport = zoomFactor !== 1
|
|
226
|
+
? {
|
|
227
|
+
width: Math.round(requestedViewport.width / zoomFactor),
|
|
228
|
+
height: Math.round(requestedViewport.height / zoomFactor),
|
|
229
|
+
}
|
|
230
|
+
: requestedViewport;
|
|
231
|
+
|
|
232
|
+
// Recording size is the requested viewport (the final video dimensions)
|
|
222
233
|
const recordVideoSize = {
|
|
223
|
-
width:
|
|
224
|
-
height:
|
|
234
|
+
width: requestedViewport.width,
|
|
235
|
+
height: requestedViewport.height,
|
|
225
236
|
};
|
|
226
237
|
|
|
238
|
+
// Log what's happening
|
|
239
|
+
if (zoomFactor !== 1) {
|
|
240
|
+
console.log(`[record] Viewport: ${viewport.width}x${viewport.height} (zoomed ${Math.round(zoomFactor * 100)}%)`);
|
|
241
|
+
console.log(`[record] Output video: ${recordVideoSize.width}x${recordVideoSize.height}`);
|
|
242
|
+
} else {
|
|
243
|
+
console.log(`[record] Viewport: ${viewport.width}x${viewport.height}`);
|
|
244
|
+
}
|
|
245
|
+
|
|
227
246
|
const recordDir = path.join(outputPaths.videosDir, ".recordings", definition.name);
|
|
228
247
|
if (!noVideo) {
|
|
229
248
|
await ensureDir(recordDir);
|
|
@@ -236,7 +255,8 @@ export async function runRecordDemoCommand(argv) {
|
|
|
236
255
|
|
|
237
256
|
const context = await browser.newContext({
|
|
238
257
|
viewport,
|
|
239
|
-
deviceScaleFactor
|
|
258
|
+
// Note: we achieve "zoom" by using a smaller viewport, not deviceScaleFactor
|
|
259
|
+
// deviceScaleFactor only affects pixel density, not content size
|
|
240
260
|
recordVideo: noVideo ? undefined : { dir: recordDir, size: recordVideoSize },
|
|
241
261
|
storageState: storageState ? toAbsolute(rootDir, storageState) : undefined,
|
|
242
262
|
locale: locale || undefined,
|
package/cli/utils/dimensions.js
CHANGED
|
@@ -188,13 +188,15 @@ export function getScaleFilterArgs(dimensions) {
|
|
|
188
188
|
export function getViewportHelpText() {
|
|
189
189
|
return `
|
|
190
190
|
Viewport Options (Recording):
|
|
191
|
-
--viewport <WxH|preset>
|
|
191
|
+
--viewport <WxH|preset> Target video resolution (default: 1440x900)
|
|
192
192
|
Presets: 720p, 1080p, 1440p, 4k
|
|
193
193
|
Example: --viewport 1920x1080 or --viewport 1080p
|
|
194
|
-
--width <px>
|
|
195
|
-
--height <px>
|
|
196
|
-
--zoom <percent>
|
|
197
|
-
|
|
194
|
+
--width <px> Video width (overrides --viewport)
|
|
195
|
+
--height <px> Video height (overrides --viewport)
|
|
196
|
+
--zoom <percent> Content zoom level: 100, 150, 200 (default: 100)
|
|
197
|
+
Makes UI elements appear larger in the video
|
|
198
|
+
Example: --viewport 1080p --zoom 150 records at
|
|
199
|
+
1920x1080 with content appearing 1.5x larger`;
|
|
198
200
|
}
|
|
199
201
|
|
|
200
202
|
/**
|