clipwise 0.6.0 → 0.6.1

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.
@@ -483,37 +514,6 @@ npx clipwise record my-scenario.yaml -f mp4 -o ./output
483
514
 
484
515
  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
516
 
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
517
  ## GitHub Pages
518
518
 
519
519
  Clipwise includes a documentation site and a live demo dashboard in the `docs/` folder. To host it:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clipwise",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Scriptable cinematic screen recorder for product demos — YAML in, polished MP4 out",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -64,7 +64,10 @@ steps: [] # Array of steps (min 1, first must have navigate)
64
64
  - name: "Step name" # Optional label
65
65
  captureDelay: 50 # ms to wait after actions before capturing (50-100 for snappy)
66
66
  holdDuration: 700 # ms to hold on result (500-800 for snappy)
67
- transition: none # none | fade
67
+ transition: none # none | fade | slide-left | slide-up | blur
68
+ effects: # Per-step effects override (optional)
69
+ zoom:
70
+ enabled: false # Disable zoom for this step only
68
71
  actions: [] # Array of actions
69
72
  ```
70
73
 
@@ -168,16 +171,15 @@ steps: [] # Array of steps (min 1, first must have navigate)
168
171
 
169
172
  ### Effects Configuration
170
173
 
171
- #### Zoom — Adaptive zoom follows cursor on clicks
174
+ #### Zoom — Adaptive zoom follows cursor on clicks (smart camera: auto-suppressed during scroll)
172
175
  ```yaml
173
176
  zoom:
174
177
  enabled: true
175
- intensity: moderate # subtle(1.15x) | light(1.25x) | moderate(1.35x) | strong(1.5x) | dramatic(1.8x)
176
- # scale: 1.35 # Or use numeric value (overridden by intensity)
177
- duration: 500 # Zoom animation ms
178
- easing: ease-in-out # ease-in-out | ease-in | ease-out | linear
178
+ intensity: light # subtle(1.15x) | light(1.25x) | moderate(1.35x) | strong(1.5x) | dramatic(1.8x)
179
+ # scale: 1.25 # Or use numeric value (overridden by intensity)
180
+ duration: 800 # Zoom animation ms
179
181
  autoZoom:
180
- followCursor: true
182
+ followCursor: true # Viewport pans to follow cursor position
181
183
  transitionDuration: 300
182
184
  padding: 200
183
185
  ```
@@ -188,7 +190,7 @@ cursor:
188
190
  enabled: true
189
191
  size: 20
190
192
  color: "#000000"
191
- speed: fast # fast (~72ms) | normal (~144ms) | slow (~288ms)
193
+ speed: normal # fast (~72ms) | normal (~144ms) | slow (~288ms)
192
194
  smoothing: true
193
195
  clickEffect: true
194
196
  clickColor: "rgba(59, 130, 246, 0.3)"
@@ -215,17 +217,16 @@ background:
215
217
  ```yaml
216
218
  deviceFrame:
217
219
  enabled: true
218
- type: browser # browser | macbook | iphone | ipad | android | none
220
+ type: browser # browser | iphone | ipad | android | none
219
221
  darkMode: true
220
222
  ```
221
223
 
222
224
  | Type | Description |
223
225
  |------|-------------|
224
226
  | browser | macOS browser chrome with traffic lights |
225
- | macbook | MacBook Pro frame |
226
- | iphone | iPhone 15 Pro with Dynamic Island |
227
- | ipad | iPad Pro with camera dot |
228
- | android | Android with punch-hole camera |
227
+ | iphone | iPhone 15 Pro with Dynamic Island + home bar |
228
+ | ipad | iPad Pro with front camera dot |
229
+ | android | Android generic with punch-hole camera |
229
230
 
230
231
  #### Keystroke HUD — Shows typed keys on screen
231
232
  ```yaml
@@ -260,6 +261,39 @@ speedRamp:
260
261
  transitionFrames: 15
261
262
  ```
262
263
 
264
+ #### Audio Narration — Attach audio to MP4 output
265
+ ```yaml
266
+ audio:
267
+ file: "./narration.mp3" # MP3, WAV, etc.
268
+ volume: 1.0 # 0.0 - 2.0 (default: 1.0)
269
+ fadeIn: 0 # Fade-in duration in seconds
270
+ fadeOut: 0 # Fade-out duration in seconds
271
+ ```
272
+
273
+ ### Per-Step Effects Override
274
+
275
+ Override global effects on a per-step basis. Unset properties inherit from global config.
276
+
277
+ ```yaml
278
+ effects:
279
+ zoom:
280
+ enabled: true
281
+ intensity: light
282
+
283
+ steps:
284
+ - name: "Overview"
285
+ effects:
286
+ zoom:
287
+ enabled: false # No zoom for this step
288
+ actions: [...]
289
+
290
+ - name: "Detail view"
291
+ effects:
292
+ zoom:
293
+ intensity: strong # Extra zoom for this step only
294
+ actions: [...]
295
+ ```
296
+
263
297
  ### Output Presets
264
298
 
265
299
  | Preset | Use case | Approx size (30s) |
@@ -277,6 +311,10 @@ speedRamp:
277
311
  5. **Prefer async waits over fixed `wait`**: use `waitForSelector`, `waitForFunction`, `waitForResponse` instead of guessing durations
278
312
  6. **Viewport = output**: if viewport and output dimensions differ, output will be scaled (a warning is shown)
279
313
  7. **Mobile scenarios**: use `viewport: {width: 390, height: 844}` with `deviceFrame.type: iphone` and `output: {width: 540, height: 1080}`
314
+ 8. **Per-step effects**: any effect property can be overridden per step — unset properties inherit from global config
315
+ 9. **Smart camera**: zoom is automatically suppressed during scroll actions; `followCursor` pans to cursor position
316
+ 10. **Transitions**: use `fade` or `blur` for cinematic cuts between major sections; `slide-left`/`slide-up` for sequential flows
317
+ 11. **Audio**: audio file must exist at the specified path; only works with MP4 output format
280
318
 
281
319
  ## Timing Presets
282
320