@t3lnet/sceneforge 1.0.19 → 1.0.21

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/README.md CHANGED
@@ -119,15 +119,15 @@ npx sceneforge split --demo my-demo --crf 15
119
119
 
120
120
  ## Viewport Settings (Recording)
121
121
 
122
- Control browser viewport size and zoom level during recording:
122
+ Control output video resolution and content zoom:
123
123
 
124
124
  ```bash
125
- --viewport <WxH|preset> # Viewport size (default: 1440x900)
125
+ --viewport <WxH|preset> # Video resolution (default: 1440x900)
126
126
  # Presets: 720p, 1080p, 1440p, 4k
127
- --width <px> # Viewport width
128
- --height <px> # Viewport height
129
- --zoom <percent> # Browser zoom: 100, 150, 200 (default: 100)
130
- --device-scale-factor <n> # Device pixel ratio: 1, 1.5, 2
127
+ --width <px> # Video width
128
+ --height <px> # Video height
129
+ --zoom <percent> # Content zoom: 100, 150, 200 (default: 100)
130
+ # Makes UI elements appear larger
131
131
  ```
132
132
 
133
133
  **Examples:**
@@ -136,11 +136,13 @@ Control browser viewport size and zoom level during recording:
136
136
  # Record at 1080p
137
137
  npx sceneforge record --definition demo.yaml --base-url http://localhost:5173 --viewport 1080p
138
138
 
139
- # Record with zoom for extra detail
139
+ # Record at 1080p with zoomed content (UI appears 1.5x larger)
140
140
  npx sceneforge record --definition demo.yaml --base-url http://localhost:5173 \
141
- --viewport 1920x1080 --zoom 150
141
+ --viewport 1080p --zoom 150
142
142
  ```
143
143
 
144
+ **How zoom works:** `--viewport 1080p --zoom 150` records a 1920x1080 video where content appears 1.5x larger (browser viewport is actually 1280x720, scaled up to 1080p).
145
+
144
146
  ## Output Dimensions (Video Processing)
145
147
 
146
148
  Control final video resolution with support for different platforms and aspect ratios:
@@ -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 viewport = parseViewportArgs(args, getFlagValue);
217
- const deviceScaleFactor = parseDeviceScaleFactor(args, getFlagValue);
218
-
219
- logViewportSettings(viewport, deviceScaleFactor, "[record]");
220
-
221
- // Calculate video recording size (viewport * scale factor for high-DPI capture)
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: Math.round(viewport.width * deviceScaleFactor),
224
- height: Math.round(viewport.height * deviceScaleFactor),
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,
@@ -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> Browser viewport size (default: 1440x900)
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> Viewport width (overrides --viewport)
195
- --height <px> Viewport height (overrides --viewport)
196
- --zoom <percent> Browser zoom level: 100, 150, 200 (default: 100)
197
- --device-scale-factor <n> Device pixel ratio: 1, 1.5, 2 (alternative to --zoom)`;
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
  /**
@@ -25,11 +25,10 @@ sceneforge record --definition <path> [options]
25
25
  | `--storage` | Path to storage state JSON |
26
26
  | `--slowmo` | Slow down actions by ms |
27
27
  | `--env-file` | Path to .env file |
28
- | `--viewport` | Browser viewport size (preset or WxH, default: 1440x900) |
29
- | `--width` | Viewport width (overrides --viewport) |
30
- | `--height` | Viewport height (overrides --viewport) |
31
- | `--zoom` | Browser zoom level: 100, 150, 200 (default: 100) |
32
- | `--device-scale-factor` | Device pixel ratio: 1, 1.5, 2 |
28
+ | `--viewport` | Target video resolution (preset or WxH, default: 1440x900) |
29
+ | `--width` | Video width (overrides --viewport) |
30
+ | `--height` | Video height (overrides --viewport) |
31
+ | `--zoom` | Content zoom level: 100, 150, 200 (default: 100) - makes UI larger |
33
32
 
34
33
  **Viewport Presets:** 720p (1280x720), 1080p (1920x1080), 1440p (2560x1440), 4k (3840x2160)
35
34
 
@@ -44,11 +43,11 @@ sceneforge record -d demo.yaml -b http://localhost:3000 --headed
44
43
  # With auth state
45
44
  sceneforge record -d demo.yaml -b http://localhost:3000 --storage ./auth.json
46
45
 
47
- # Record at 1080p viewport
46
+ # Record at 1080p resolution
48
47
  sceneforge record -d demo.yaml -b http://localhost:3000 --viewport 1080p
49
48
 
50
- # Record with zoom for extra detail
51
- sceneforge record -d demo.yaml -b http://localhost:3000 --viewport 1920x1080 --zoom 150
49
+ # Record at 1080p with zoomed content (UI appears 1.5x larger)
50
+ sceneforge record -d demo.yaml -b http://localhost:3000 --viewport 1080p --zoom 150
52
51
  ```
53
52
 
54
53
  ### setup
@@ -94,9 +93,9 @@ sceneforge pipeline --definition <path> [options]
94
93
  | `--quality` | Quality preset: low, medium, high |
95
94
  | `--crf` | Override CRF value |
96
95
  | `--codec` | Video codec: libx264, libx265 |
97
- | `--viewport` | Browser viewport size (preset or WxH) |
98
- | `--zoom` | Browser zoom level: 100, 150, 200 |
99
- | `--output-size` | Output video dimensions (preset or WxH) |
96
+ | `--viewport` | Target video resolution (preset or WxH) |
97
+ | `--zoom` | Content zoom level: 100, 150, 200 (makes UI larger) |
98
+ | `--output-size` | Final output dimensions (preset or WxH) |
100
99
  | `--output-width` | Output width (-1 for auto) |
101
100
  | `--output-height` | Output height (-1 for auto) |
102
101
 
@@ -365,16 +364,15 @@ sceneforge split --demo my-demo --crf 15
365
364
 
366
365
  ## Viewport Settings
367
366
 
368
- Control browser viewport size and zoom during recording for high-DPI capture.
367
+ Control output video resolution and content zoom during recording.
369
368
 
370
369
  ### CLI Flags (record, pipeline)
371
370
 
372
371
  ```bash
373
- --viewport <WxH|preset> # Browser viewport size (default: 1440x900)
374
- --width <px> # Viewport width (overrides --viewport)
375
- --height <px> # Viewport height (overrides --viewport)
376
- --zoom <percent> # Browser zoom: 100, 150, 200 (default: 100)
377
- --device-scale-factor <n> # Device pixel ratio: 1, 1.5, 2
372
+ --viewport <WxH|preset> # Target video resolution (default: 1440x900)
373
+ --width <px> # Video width (overrides --viewport)
374
+ --height <px> # Video height (overrides --viewport)
375
+ --zoom <percent> # Content zoom: 100, 150, 200 (default: 100)
378
376
  ```
379
377
 
380
378
  ### Viewport Presets
@@ -386,12 +384,15 @@ Control browser viewport size and zoom during recording for high-DPI capture.
386
384
  | `1440p` | 2560x1440 |
387
385
  | `4k` | 3840x2160 |
388
386
 
389
- ### Why Viewport Settings Matter
387
+ ### How Zoom Works
390
388
 
391
- - Larger viewports capture more UI detail and clarity
392
- - Zoom (device scale factor) increases effective pixel density
393
- - A 1080p viewport at 150% zoom captures at 2880x1620 effective pixels
394
- - Useful for creating videos that look sharp on retina displays
389
+ - `--viewport` sets the output video resolution (e.g., 1920x1080 for 1080p)
390
+ - `--zoom` makes UI elements appear larger by using a smaller browser viewport
391
+ - Example: `--viewport 1080p --zoom 150` records a 1920x1080 video
392
+ - Actual browser viewport: 1280x720 (1920/1.5 x 1080/1.5)
393
+ - Output video: 1920x1080
394
+ - Result: Content appears 1.5x larger/zoomed
395
+ - Useful for demos where UI elements need to be more visible and readable
395
396
 
396
397
  ## Output Dimensions
397
398
 
@@ -25,11 +25,10 @@ sceneforge record --definition <path> [options]
25
25
  | `--storage` | Path to storage state JSON |
26
26
  | `--slowmo` | Slow down actions by ms |
27
27
  | `--env-file` | Path to .env file |
28
- | `--viewport` | Browser viewport size (preset or WxH, default: 1440x900) |
29
- | `--width` | Viewport width (overrides --viewport) |
30
- | `--height` | Viewport height (overrides --viewport) |
31
- | `--zoom` | Browser zoom level: 100, 150, 200 (default: 100) |
32
- | `--device-scale-factor` | Device pixel ratio: 1, 1.5, 2 |
28
+ | `--viewport` | Target video resolution (preset or WxH, default: 1440x900) |
29
+ | `--width` | Video width (overrides --viewport) |
30
+ | `--height` | Video height (overrides --viewport) |
31
+ | `--zoom` | Content zoom level: 100, 150, 200 (default: 100) - makes UI larger |
33
32
 
34
33
  **Viewport Presets:** 720p (1280x720), 1080p (1920x1080), 1440p (2560x1440), 4k (3840x2160)
35
34
 
@@ -44,11 +43,11 @@ sceneforge record -d demo.yaml -b http://localhost:3000 --headed
44
43
  # With auth state
45
44
  sceneforge record -d demo.yaml -b http://localhost:3000 --storage ./auth.json
46
45
 
47
- # Record at 1080p viewport
46
+ # Record at 1080p resolution
48
47
  sceneforge record -d demo.yaml -b http://localhost:3000 --viewport 1080p
49
48
 
50
- # Record with zoom for extra detail
51
- sceneforge record -d demo.yaml -b http://localhost:3000 --viewport 1920x1080 --zoom 150
49
+ # Record at 1080p with zoomed content (UI appears 1.5x larger)
50
+ sceneforge record -d demo.yaml -b http://localhost:3000 --viewport 1080p --zoom 150
52
51
  ```
53
52
 
54
53
  ### setup
@@ -94,9 +93,9 @@ sceneforge pipeline --definition <path> [options]
94
93
  | `--quality` | Quality preset: low, medium, high |
95
94
  | `--crf` | Override CRF value |
96
95
  | `--codec` | Video codec: libx264, libx265 |
97
- | `--viewport` | Browser viewport size (preset or WxH) |
98
- | `--zoom` | Browser zoom level: 100, 150, 200 |
99
- | `--output-size` | Output video dimensions (preset or WxH) |
96
+ | `--viewport` | Target video resolution (preset or WxH) |
97
+ | `--zoom` | Content zoom level: 100, 150, 200 (makes UI larger) |
98
+ | `--output-size` | Final output dimensions (preset or WxH) |
100
99
  | `--output-width` | Output width (-1 for auto) |
101
100
  | `--output-height` | Output height (-1 for auto) |
102
101
 
@@ -365,16 +364,15 @@ sceneforge split --demo my-demo --crf 15
365
364
 
366
365
  ## Viewport Settings
367
366
 
368
- Control browser viewport size and zoom during recording for high-DPI capture.
367
+ Control output video resolution and content zoom during recording.
369
368
 
370
369
  ### CLI Flags (record, pipeline)
371
370
 
372
371
  ```bash
373
- --viewport <WxH|preset> # Browser viewport size (default: 1440x900)
374
- --width <px> # Viewport width (overrides --viewport)
375
- --height <px> # Viewport height (overrides --viewport)
376
- --zoom <percent> # Browser zoom: 100, 150, 200 (default: 100)
377
- --device-scale-factor <n> # Device pixel ratio: 1, 1.5, 2
372
+ --viewport <WxH|preset> # Target video resolution (default: 1440x900)
373
+ --width <px> # Video width (overrides --viewport)
374
+ --height <px> # Video height (overrides --viewport)
375
+ --zoom <percent> # Content zoom: 100, 150, 200 (default: 100)
378
376
  ```
379
377
 
380
378
  ### Viewport Presets
@@ -386,12 +384,15 @@ Control browser viewport size and zoom during recording for high-DPI capture.
386
384
  | `1440p` | 2560x1440 |
387
385
  | `4k` | 3840x2160 |
388
386
 
389
- ### Why Viewport Settings Matter
387
+ ### How Zoom Works
390
388
 
391
- - Larger viewports capture more UI detail and clarity
392
- - Zoom (device scale factor) increases effective pixel density
393
- - A 1080p viewport at 150% zoom captures at 2880x1620 effective pixels
394
- - Useful for creating videos that look sharp on retina displays
389
+ - `--viewport` sets the output video resolution (e.g., 1920x1080 for 1080p)
390
+ - `--zoom` makes UI elements appear larger by using a smaller browser viewport
391
+ - Example: `--viewport 1080p --zoom 150` records a 1920x1080 video
392
+ - Actual browser viewport: 1280x720 (1920/1.5 x 1080/1.5)
393
+ - Output video: 1920x1080
394
+ - Result: Content appears 1.5x larger/zoomed
395
+ - Useful for demos where UI elements need to be more visible and readable
395
396
 
396
397
  ## Output Dimensions
397
398
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t3lnet/sceneforge",
3
- "version": "1.0.19",
3
+ "version": "1.0.21",
4
4
  "description": "SceneForge runner and generation utilities for YAML-driven demos",
5
5
  "license": "MIT",
6
6
  "author": "T3LNET",