clipwise 0.6.0 → 0.7.0

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.ko.md CHANGED
@@ -80,6 +80,37 @@ const frames = await renderer.composeAll(session.frames);
80
80
  const mp4 = await encodeMp4(frames, scenario.output);
81
81
  ```
82
82
 
83
+ ## Claude Code 스킬
84
+
85
+ Clipwise에는 [Claude Code](https://claude.com/claude-code) 스킬이 내장되어 있습니다. 설치 후 Claude Code에서 `/clipwise`를 입력하면 자연어로 YAML 시나리오 생성, 검증, 녹화까지 한 번에 할 수 있습니다.
86
+
87
+ ### 스킬 설치
88
+
89
+ ```bash
90
+ npx clipwise install-skill
91
+ ```
92
+
93
+ `.claude/skills/clipwise.md`에 스킬 파일이 복사됩니다 (`.claude/` 디렉토리가 있으면 프로젝트 레벨, 없으면 `~/.claude/skills/`에 설치).
94
+
95
+ ### 사용법
96
+
97
+ Claude Code 세션에서:
98
+
99
+ ```
100
+ /clipwise
101
+ > http://localhost:3000 대시보드 데모 녹화해줘
102
+ — 로그인 버튼 클릭, 이메일/비밀번호 입력, 분석 페이지 이동
103
+ ```
104
+
105
+ Claude가 자동으로:
106
+ 1. `clipwise.yaml` 시나리오 생성
107
+ 2. `npx clipwise validate`로 검증
108
+ 3. `npx clipwise record`로 MP4 녹화
109
+
110
+ ### 업데이트
111
+
112
+ clipwise 업그레이드 후 `npx clipwise install-skill`을 다시 실행하면 최신 스킬로 업데이트됩니다.
113
+
83
114
  ## YAML 시나리오 형식
84
115
 
85
116
  시나리오는 4개 섹션으로 구성됩니다: 메타데이터, 이펙트, 출력, 스텝.
@@ -403,37 +434,6 @@ VideoToolbox는 런타임에 자동 감지되며, 사용 불가 시 `libx264`로
403
434
 
404
435
  [PROMPTS.md](./PROMPTS.md)에 바로 사용할 수 있는 AI 프롬프트 템플릿이 있습니다. ChatGPT나 Claude에 복붙하고 내 사이트 URL만 넣으면 YAML 시나리오를 생성해줍니다.
405
436
 
406
- ## Claude Code 스킬
407
-
408
- Clipwise에는 [Claude Code](https://claude.com/claude-code) 스킬이 내장되어 있습니다. 설치 후 Claude Code에서 `/clipwise`를 입력하면 자연어로 YAML 시나리오 생성, 검증, 녹화까지 한 번에 할 수 있습니다.
409
-
410
- ### 스킬 설치
411
-
412
- ```bash
413
- npx clipwise install-skill
414
- ```
415
-
416
- `.claude/skills/clipwise.md`에 스킬 파일이 복사됩니다 (`.claude/` 디렉토리가 있으면 프로젝트 레벨, 없으면 `~/.claude/skills/`에 설치).
417
-
418
- ### 사용법
419
-
420
- Claude Code 세션에서:
421
-
422
- ```
423
- /clipwise
424
- > http://localhost:3000 대시보드 데모 녹화해줘
425
- — 로그인 버튼 클릭, 이메일/비밀번호 입력, 분석 페이지 이동
426
- ```
427
-
428
- Claude가 자동으로:
429
- 1. `clipwise.yaml` 시나리오 생성
430
- 2. `npx clipwise validate`로 검증
431
- 3. `npx clipwise record`로 MP4 녹화
432
-
433
- ### 업데이트
434
-
435
- clipwise 업그레이드 후 `npx clipwise install-skill`을 다시 실행하면 최신 스킬로 업데이트됩니다.
436
-
437
437
  ## GitHub Pages
438
438
 
439
439
  `docs/` 폴더에 문서 사이트와 라이브 데모 대시보드가 포함되어 있습니다:
package/README.md CHANGED
@@ -80,6 +80,37 @@ const frames = await renderer.composeAll(session.frames);
80
80
  const mp4 = await encodeMp4(frames, scenario.output);
81
81
  ```
82
82
 
83
+ ## Claude Code Skill
84
+
85
+ Clipwise ships a built-in [Claude Code](https://claude.com/claude-code) skill. Once installed, type `/clipwise` in Claude Code to generate YAML scenarios, validate, and record — all through natural language.
86
+
87
+ ### Install the skill
88
+
89
+ ```bash
90
+ npx clipwise install-skill
91
+ ```
92
+
93
+ This copies the skill file to `.claude/skills/clipwise.md` (project-level if `.claude/` exists, otherwise `~/.claude/skills/`).
94
+
95
+ ### Usage
96
+
97
+ In any Claude Code session:
98
+
99
+ ```
100
+ /clipwise
101
+ > Record a demo of my dashboard at http://localhost:3000
102
+ — click the login button, type credentials, navigate to analytics
103
+ ```
104
+
105
+ Claude will:
106
+ 1. Generate a complete `clipwise.yaml` scenario
107
+ 2. Run `npx clipwise validate` to check for errors
108
+ 3. Run `npx clipwise record` to produce the MP4
109
+
110
+ ### Update
111
+
112
+ Re-run `npx clipwise install-skill` after upgrading clipwise to get the latest skill.
113
+
83
114
  ## YAML Scenario Format
84
115
 
85
116
  A scenario has 4 sections: metadata, effects, output, and steps.
@@ -138,6 +169,7 @@ steps:
138
169
  | `waitForURL` | `url`, `timeout?` | `timeout: 15000` | Wait for URL match |
139
170
  | `waitForFunction` | `expression`, `polling?`, `timeout?` | `polling: "raf"`, `timeout: 30000` | Wait for JS expression to be truthy |
140
171
  | `waitForResponse` | `url`, `status?`, `timeout?` | `timeout: 30000` | Wait for network response (URL substring match) |
172
+ | `smartWait` | `until`, `selector?`, `timeout?`, `displaySpeed?` | `until: "networkIdle"`, `timeout: 30000`, `displaySpeed: 8` | Smart wait — records real wait, auto-speeds in output |
141
173
 
142
174
  **`waitUntil`** options: `"load"`, `"domcontentloaded"`, `"networkidle"` (default)
143
175
  **`state`** options: `"visible"` (default), `"attached"`, `"hidden"`
@@ -196,6 +228,7 @@ zoom:
196
228
  # 1.15x | 1.25x | 1.35x | 1.5x | 1.8x
197
229
  # scale: 1.25 # Override with a numeric value instead of intensity
198
230
  duration: 800 # Zoom animation ms
231
+ easing: spring # spring (natural) | ease-in-out (default)
199
232
  autoZoom:
200
233
  followCursor: true # Viewport pans to follow cursor position
201
234
  transitionDuration: 300
@@ -210,7 +243,7 @@ zoom:
210
243
  | `strong` | 1.5× | Clear focus, some context sacrificed |
211
244
  | `dramatic` | 1.8× | Maximum emphasis, sparse UIs only |
212
245
 
213
- **Smart camera**: Zoom is automatically suppressed during scroll actions to avoid disorienting motion. When `followCursor` is enabled, the focal point smoothly pans to follow cursor position (not just click targets).
246
+ **Smart camera**: Zoom is automatically suppressed during scroll actions to avoid disorienting motion. When `followCursor` is enabled, the focal point smoothly pans to follow cursor position (not just click targets). **Zone-aware zoom** (v0.7.0) merges nearby clicks into continuous zoom zones — no more jarring zoom-out/zoom-in between adjacent interactions. **Spring easing** (`easing: spring`) produces natural, Screen Studio-like camera motion with faster initial response and smooth deceleration.
214
247
 
215
248
  ### Cursor
216
249
 
@@ -298,6 +331,32 @@ speedRamp:
298
331
  actionSpeed: 0.8 # Slow factor near clicks
299
332
  ```
300
333
 
334
+ ### Smart Speed <sup>v0.7.0</sup>
335
+
336
+ Content-aware speed control. Automatically compresses loading/wait periods while keeping meaningful content at normal speed. Detects CSS loading spinners via CDP Animation domain — no configuration needed.
337
+
338
+ ```yaml
339
+ effects:
340
+ smartSpeed:
341
+ enabled: true
342
+ waitSpeed: 4 # Speed multiplier for wait/loading periods
343
+ idleSpeed: 4 # Speed multiplier for idle frames
344
+ transitionDuration: 500 # Ease-in/out duration (ms) — loader is visible before fast-forward
345
+
346
+ steps:
347
+ - name: "Submit form"
348
+ actions:
349
+ - action: click
350
+ selector: "#submit-btn"
351
+ - action: smartWait # Records real API wait, auto-compresses in output
352
+ until: selector # networkIdle | selector | domStable
353
+ selector: ".success-toast"
354
+ timeout: 30000
355
+ displaySpeed: 4 # 4x fast-forward (spinner visibly spins faster)
356
+ ```
357
+
358
+ **How it works**: `smartWait` records the actual wait (API calls, loading states) at full quality, then smartSpeed compresses those frames in the output. Loading spinners are **auto-detected** via CDP — frames during active `@keyframes spin/rotate/pulse` animations are automatically marked for compression.
359
+
301
360
  ### Transitions
302
361
 
303
362
  Control how steps transition to each other.
@@ -357,12 +416,15 @@ audio:
357
416
 
358
417
  Measured on **Apple M1 Max (10 cores)** — Pulse Dashboard demo, 44s @ 30fps, 1280×800:
359
418
 
360
- | Stage | v0.3.0 | v0.4.0 | v0.5.0 | v0.6.0 |
361
- |-------|--------|--------|--------|--------|
362
- | Recording | 30.8 s | 31.1 s | 31.1 s | 31.1 s |
363
- | Compose + Encode | 97.2 s | 60.6 s | 60.6 s | 60.6 s |
364
- | **Total** | **127.9 s** | **91.7 s** | **91.7 s** | **91.7 s** |
365
- | Frames captured | 1,303 | 902 | 902 | 902 |
419
+ | Stage | v0.3.0 | v0.4.0 | v0.5.0 | v0.6.0 | **v0.7.0** |
420
+ |-------|--------|--------|--------|--------|--------|
421
+ | Recording | 30.8 s | 31.1 s | 31.1 s | 31.1 s | 58.3 s¹ |
422
+ | Compose + Encode | 97.2 s | 60.6 s | 60.6 s | 60.6 s | **39.6 s** |
423
+ | **Total** | **127.9 s** | **91.7 s** | **91.7 s** | **91.7 s** | **97.8 s**¹ |
424
+ | Frames captured | 1,303 | 902 | 902 | 902 | 1,388 |
425
+ | **ms/frame** | **69** | **67** | **67** | **67** | **23** |
426
+
427
+ ¹ v0.7.0 recording is longer due to more scenario steps (23 vs 20) and zoom-sustaining click events during typing. Compose throughput improved **3×** (69 → 23 ms/frame) via Sharp pipeline batching.
366
428
 
367
429
  Key optimisations in v0.4.0: concurrent streaming pipeline, static frame deduplication (~33% skipped), per-worker StaticLayers cache, and raw RGBA buffer pipeline.
368
430
 
@@ -370,6 +432,8 @@ v0.5.0 focuses on **recording quality**: smooth cursor, zoom intensity presets,
370
432
 
371
433
  v0.6.0 focuses on **convention alignment & expressiveness**: gentler defaults (light zoom, normal cursor speed), per-step effects override, new transitions (slide, blur), audio narration, and smart camera (scroll-aware zoom suppression + cursor-following focal point).
372
434
 
435
+ v0.7.0 focuses on **quality leap**: spring physics zoom, zone-aware zoom continuity, focus point interpolation, `smartWait` + content-aware `smartSpeed`, auto loader detection (CDP Animation), HEVC 10-bit encoding (`-tune animation`), AV1 codec support, and Sharp pipeline batching (5→1 calls/frame).
436
+
373
437
  ## Output Compression
374
438
 
375
439
  Use the `preset` field to control quality and file size:
@@ -379,6 +443,7 @@ output:
379
443
  format: mp4
380
444
  fps: 30
381
445
  preset: social # social | balanced | archive
446
+ codec: auto # auto | h264 | hevc | av1
382
447
  ```
383
448
 
384
449
  | Preset | libx264 CRF | HEVC VideoToolbox q:v | Target use case |
@@ -483,37 +548,6 @@ npx clipwise record my-scenario.yaml -f mp4 -o ./output
483
548
 
484
549
  See [PROMPTS.md](./PROMPTS.md) for a ready-to-use prompt template. Copy-paste it to ChatGPT or Claude with your site URL, and get a working YAML scenario back.
485
550
 
486
- ## Claude Code Skill
487
-
488
- Clipwise ships a built-in [Claude Code](https://claude.com/claude-code) skill. Once installed, type `/clipwise` in Claude Code to generate YAML scenarios, validate, and record — all through natural language.
489
-
490
- ### Install the skill
491
-
492
- ```bash
493
- npx clipwise install-skill
494
- ```
495
-
496
- This copies the skill file to `.claude/skills/clipwise.md` (project-level if `.claude/` exists, otherwise `~/.claude/skills/`).
497
-
498
- ### Usage
499
-
500
- In any Claude Code session:
501
-
502
- ```
503
- /clipwise
504
- > Record a demo of my dashboard at http://localhost:3000
505
- — click the login button, type credentials, navigate to analytics
506
- ```
507
-
508
- Claude will:
509
- 1. Generate a complete `clipwise.yaml` scenario
510
- 2. Run `npx clipwise validate` to check for errors
511
- 3. Run `npx clipwise record` to produce the MP4
512
-
513
- ### Update
514
-
515
- Re-run `npx clipwise install-skill` after upgrading clipwise to get the latest skill.
516
-
517
551
  ## GitHub Pages
518
552
 
519
553
  Clipwise includes a documentation site and a live demo dashboard in the `docs/` folder. To host it: