clipwise 0.5.1 → 0.6.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
@@ -109,7 +109,10 @@ steps:
109
109
  url: "https://example.com"
110
110
  captureDelay: 200 # 액션 후 대기(ms)
111
111
  holdDuration: 800 # 결과 화면 유지(ms)
112
- transition: none # none | fade
112
+ transition: none # none | fade | slide-left | slide-up | blur
113
+ effects: # 스텝별 이펙트 오버라이드 (선택)
114
+ zoom:
115
+ enabled: false # 이 스텝에서만 줌 비활성화
113
116
  ```
114
117
 
115
118
  ### 액션
@@ -189,20 +192,26 @@ steps:
189
192
  ```yaml
190
193
  zoom:
191
194
  enabled: true
192
- intensity: moderate # subtle | light | moderate | strong | dramatic
195
+ intensity: light # subtle | light | moderate | strong | dramatic
193
196
  # 1.15x | 1.25x | 1.35x | 1.5x | 1.8x
194
- # scale: 1.35 # 숫자로 직접 지정할 때 사용 (intensity 미설정 시)
195
- duration: 500 # 애니메이션 ms
197
+ # scale: 1.25 # 숫자로 직접 지정할 때 사용 (intensity 미설정 시)
198
+ duration: 800 # 애니메이션 ms
199
+ autoZoom:
200
+ followCursor: true # 커서 위치를 따라 뷰포트 패닝
201
+ transitionDuration: 300
202
+ padding: 200
196
203
  ```
197
204
 
198
205
  | 강도 | 스케일 | 권장 사용처 |
199
206
  |------|--------|------------|
200
207
  | `subtle` | 1.15× | 정보 밀도 높은 UI, 큰 화면 |
201
- | `light` | 1.25× | Loom 스타일 부드러운 줌 (권장) |
202
- | `moderate` | 1.35× | 균형잡힌 기본값 (Camtasia 수준) |
208
+ | `light` | 1.25× | Loom 스타일 부드러운 줌 **(기본값)** |
209
+ | `moderate` | 1.35× | 균형잡힌 수준 (Camtasia 범위) |
203
210
  | `strong` | 1.5× | 명확한 포커스 |
204
211
  | `dramatic` | 1.8× | 최대 강조, 단순 UI 전용 |
205
212
 
213
+ **스마트 카메라**: 스크롤 중에는 줌이 자동 억제되어 어지러운 움직임을 방지합니다. `followCursor` 활성화 시 초점이 클릭 위치뿐 아니라 커서 위치를 부드럽게 따라갑니다.
214
+
206
215
  ### 커서
207
216
 
208
217
  커스텀 커서 + 클릭 리플 + 트레일 + 하이라이트 + 속도 조절.
@@ -211,7 +220,7 @@ zoom:
211
220
  cursor:
212
221
  enabled: true
213
222
  size: 20
214
- speed: "fast" # fast (~72ms) | normal (~144ms) | slow (~288ms)
223
+ speed: "normal" # fast (~72ms) | normal (~144ms) | slow (~288ms)
215
224
  clickEffect: true
216
225
  trail: true
217
226
  highlight: true
@@ -282,24 +291,81 @@ watermark:
282
291
  ```yaml
283
292
  speedRamp:
284
293
  enabled: true
285
- idleSpeed: 3.0
294
+ idleSpeed: 2.0 # 유휴 프레임 스킵 배수 (기본: 2.0)
286
295
  actionSpeed: 0.8
287
296
  ```
288
297
 
298
+ ### 트랜지션
299
+
300
+ 스텝 간 전환 효과를 지정합니다.
301
+
302
+ ```yaml
303
+ steps:
304
+ - name: "스텝 1"
305
+ transition: fade # none | fade | slide-left | slide-up | blur
306
+ actions: [...]
307
+ ```
308
+
309
+ | 트랜지션 | 설명 |
310
+ |----------|------|
311
+ | `none` | 하드 컷 (기본값) |
312
+ | `fade` | 크로스 디졸브 |
313
+ | `slide-left` | 나가는 프레임 왼쪽 슬라이드, 들어오는 프레임 오른쪽에서 진입 |
314
+ | `slide-up` | 나가는 프레임 위로 슬라이드, 들어오는 프레임 아래에서 진입 |
315
+ | `blur` | 나가는 프레임 블러 처리 + 크로스페이드 |
316
+
317
+ ### 스텝별 이펙트 오버라이드
318
+
319
+ 글로벌 이펙트를 스텝 단위로 오버라이드할 수 있습니다. 설정하지 않은 속성은 글로벌 설정을 상속합니다.
320
+
321
+ ```yaml
322
+ effects:
323
+ zoom:
324
+ enabled: true
325
+ intensity: light
326
+
327
+ steps:
328
+ - name: "개요"
329
+ effects:
330
+ zoom:
331
+ enabled: false # 이 스텝에서만 줌 비활성화
332
+ actions: [...]
333
+
334
+ - name: "상세 보기"
335
+ effects:
336
+ zoom:
337
+ intensity: strong # 이 스텝에서만 강한 줌
338
+ actions: [...]
339
+ ```
340
+
341
+ ### 오디오 내레이션
342
+
343
+ 출력 MP4에 오디오 파일(MP3, WAV 등)을 첨부합니다.
344
+
345
+ ```yaml
346
+ audio:
347
+ file: "./narration.mp3"
348
+ volume: 1.0 # 0.0 - 2.0 (기본: 1.0)
349
+ fadeIn: 0 # 페이드인 시간(초)
350
+ fadeOut: 0 # 페이드아웃 시간(초)
351
+ ```
352
+
289
353
  ## 성능
290
354
 
291
355
  **Apple M1 Max (10코어)** 기준 — Pulse Dashboard 데모, 44초 @ 30fps, 1280×800:
292
356
 
293
- | 단계 | v0.3.0 | v0.4.0 | v0.5.0 |
294
- |------|--------|--------|--------|
295
- | 녹화 | 30.8 s | 31.1 s | 31.1 s |
296
- | 합성 + 인코딩 | 97.2 s | 60.6 s | 60.6 s |
297
- | **전체** | **127.9 s** | **91.7 s** | **91.7 s** |
298
- | 캡처 프레임 수 | 1,303 | 902 | 902 |
357
+ | 단계 | v0.3.0 | v0.4.0 | v0.5.0 | v0.6.0 |
358
+ |------|--------|--------|--------|--------|
359
+ | 녹화 | 30.8 s | 31.1 s | 31.1 s | 31.1 s |
360
+ | 합성 + 인코딩 | 97.2 s | 60.6 s | 60.6 s | 60.6 s |
361
+ | **전체** | **127.9 s** | **91.7 s** | **91.7 s** | **91.7 s** |
362
+ | 캡처 프레임 수 | 1,303 | 902 | 902 | 902 |
299
363
 
300
364
  v0.4.0 주요 최적화: 동시 스트리밍 파이프라인, 정적 프레임 중복 제거(~33% 건너뜀), 워커별 StaticLayers 캐시, raw RGBA 버퍼 파이프라인.
301
365
 
302
- v0.5.0은 **녹화 품질** 개선에 집중: CSS 트랜지션 억제로 커서 부드러운 이동, 줌 강도 프리셋, 멀티세션 키스트로크 HUD.
366
+ v0.5.0은 **녹화 품질** 개선에 집중: 부드러운 커서, 줌 강도 프리셋, 멀티세션 키스트로크 HUD.
367
+
368
+ v0.6.0은 **컨벤션 정렬 & 표현력** 강화: 부드러운 기본값 (light 줌, normal 커서 속도), 스텝별 이펙트 오버라이드, 새 트랜지션 (slide, blur), 오디오 내레이션, 스마트 카메라 (스크롤 줌 억제 + 커서 추적 포컬 포인트).
303
369
 
304
370
  ## 출력 압축
305
371
 
@@ -337,6 +403,37 @@ VideoToolbox는 런타임에 자동 감지되며, 사용 불가 시 `libx264`로
337
403
 
338
404
  [PROMPTS.md](./PROMPTS.md)에 바로 사용할 수 있는 AI 프롬프트 템플릿이 있습니다. ChatGPT나 Claude에 복붙하고 내 사이트 URL만 넣으면 YAML 시나리오를 생성해줍니다.
339
405
 
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
+
340
437
  ## GitHub Pages
341
438
 
342
439
  `docs/` 폴더에 문서 사이트와 라이브 데모 대시보드가 포함되어 있습니다:
package/README.md CHANGED
@@ -109,7 +109,10 @@ steps:
109
109
  url: "https://example.com"
110
110
  captureDelay: 200 # ms to wait after actions
111
111
  holdDuration: 800 # ms to hold on result
112
- transition: none # none | fade
112
+ transition: none # none | fade | slide-left | slide-up | blur
113
+ effects: # Per-step effects override (optional)
114
+ zoom:
115
+ enabled: false # Disable zoom for this step only
113
116
  ```
114
117
 
115
118
  ### Actions
@@ -189,12 +192,12 @@ Adaptive zoom follows cursor and zooms in on click targets.
189
192
  ```yaml
190
193
  zoom:
191
194
  enabled: true
192
- intensity: moderate # subtle | light | moderate | strong | dramatic
195
+ intensity: light # subtle | light | moderate | strong | dramatic
193
196
  # 1.15x | 1.25x | 1.35x | 1.5x | 1.8x
194
- # scale: 1.35 # Override with a numeric value instead of intensity
195
- duration: 500 # Zoom animation ms
197
+ # scale: 1.25 # Override with a numeric value instead of intensity
198
+ duration: 800 # Zoom animation ms
196
199
  autoZoom:
197
- followCursor: true
200
+ followCursor: true # Viewport pans to follow cursor position
198
201
  transitionDuration: 300
199
202
  padding: 200
200
203
  ```
@@ -202,11 +205,13 @@ zoom:
202
205
  | Intensity | Scale | Best for |
203
206
  |-----------|-------|----------|
204
207
  | `subtle` | 1.15× | Dense UIs, large viewports |
205
- | `light` | 1.25× | Loom-style gentle pull-in (recommended) |
206
- | `moderate` | 1.35× | Balanced default — Camtasia range |
208
+ | `light` | 1.25× | Loom-style gentle pull-in **(default)** |
209
+ | `moderate` | 1.35× | Balanced — Camtasia range |
207
210
  | `strong` | 1.5× | Clear focus, some context sacrificed |
208
211
  | `dramatic` | 1.8× | Maximum emphasis, sparse UIs only |
209
212
 
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).
214
+
210
215
  ### Cursor
211
216
 
212
217
  Custom cursor with click ripple, trail, glow highlight, and speed control.
@@ -215,7 +220,7 @@ Custom cursor with click ripple, trail, glow highlight, and speed control.
215
220
  cursor:
216
221
  enabled: true
217
222
  size: 20
218
- speed: "fast" # fast (~72ms) | normal (~144ms) | slow (~288ms)
223
+ speed: "normal" # fast (~72ms) | normal (~144ms) | slow (~288ms)
219
224
  clickEffect: true
220
225
  clickColor: "rgba(59, 130, 246, 0.3)"
221
226
  trail: true
@@ -289,24 +294,81 @@ Automatically slows down near clicks and speeds up idle sections.
289
294
  ```yaml
290
295
  speedRamp:
291
296
  enabled: true
292
- idleSpeed: 3.0 # Skip factor for idle frames
297
+ idleSpeed: 2.0 # Skip factor for idle frames (default: 2.0)
293
298
  actionSpeed: 0.8 # Slow factor near clicks
294
299
  ```
295
300
 
301
+ ### Transitions
302
+
303
+ Control how steps transition to each other.
304
+
305
+ ```yaml
306
+ steps:
307
+ - name: "Step 1"
308
+ transition: fade # none | fade | slide-left | slide-up | blur
309
+ actions: [...]
310
+ ```
311
+
312
+ | Transition | Description |
313
+ |------------|-------------|
314
+ | `none` | Hard cut (default) |
315
+ | `fade` | Cross-dissolve between steps |
316
+ | `slide-left` | Outgoing frame slides left, incoming slides in from right |
317
+ | `slide-up` | Outgoing frame slides up, incoming slides in from bottom |
318
+ | `blur` | Outgoing frame blurs out while cross-fading to incoming |
319
+
320
+ ### Per-Step Effects Override
321
+
322
+ Override global effects on a per-step basis. Any effect property can be overridden — unset properties inherit from the global config.
323
+
324
+ ```yaml
325
+ effects:
326
+ zoom:
327
+ enabled: true
328
+ intensity: light
329
+
330
+ steps:
331
+ - name: "Overview"
332
+ effects:
333
+ zoom:
334
+ enabled: false # No zoom for this step
335
+ actions: [...]
336
+
337
+ - name: "Detail view"
338
+ effects:
339
+ zoom:
340
+ intensity: strong # Extra zoom for this step only
341
+ actions: [...]
342
+ ```
343
+
344
+ ### Audio Narration
345
+
346
+ Attach an audio file (MP3, WAV, etc.) to the output MP4.
347
+
348
+ ```yaml
349
+ audio:
350
+ file: "./narration.mp3"
351
+ volume: 1.0 # 0.0 - 2.0 (default: 1.0)
352
+ fadeIn: 0 # Fade-in duration in seconds
353
+ fadeOut: 0 # Fade-out duration in seconds
354
+ ```
355
+
296
356
  ## Performance
297
357
 
298
358
  Measured on **Apple M1 Max (10 cores)** — Pulse Dashboard demo, 44s @ 30fps, 1280×800:
299
359
 
300
- | Stage | v0.3.0 | v0.4.0 | v0.5.0 |
301
- |-------|--------|--------|--------|
302
- | Recording | 30.8 s | 31.1 s | 31.1 s |
303
- | Compose + Encode | 97.2 s | 60.6 s | 60.6 s |
304
- | **Total** | **127.9 s** | **91.7 s** | **91.7 s** |
305
- | Frames captured | 1,303 | 902 | 902 |
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 |
306
366
 
307
367
  Key optimisations in v0.4.0: concurrent streaming pipeline, static frame deduplication (~33% skipped), per-worker StaticLayers cache, and raw RGBA buffer pipeline.
308
368
 
309
- v0.5.0 focuses on **recording quality** rather than throughput: smooth cursor movement (CSS transition suppression), zoom intensity presets, and multi-session keystroke HUD.
369
+ v0.5.0 focuses on **recording quality**: smooth cursor, zoom intensity presets, multi-session keystroke HUD.
370
+
371
+ 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).
310
372
 
311
373
  ## Output Compression
312
374
 
@@ -415,12 +477,43 @@ npx clipwise record my-scenario.yaml -f mp4 -o ./output
415
477
  - Start each interaction with enough scroll to make the target element visible
416
478
  - Use `waitUntil: "networkidle"` for pages with API calls
417
479
  - Keep `type.delay` at 15-25ms for a fast but readable typing effect
418
- - Use `transition: fade` between major sections for cinematic cuts
480
+ - Use `transition: fade` or `transition: blur` between major sections for cinematic cuts
419
481
 
420
482
  ### Writing Scenarios with AI
421
483
 
422
484
  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.
423
485
 
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
+
424
517
  ## GitHub Pages
425
518
 
426
519
  Clipwise includes a documentation site and a live demo dashboard in the `docs/` folder. To host it:
@@ -431,11 +524,7 @@ Clipwise includes a documentation site and a live demo dashboard in the `docs/`
431
524
  4. Docs go live at `https://kwakseongjae.github.io/clipwise/`
432
525
  5. Demo dashboard at `https://kwakseongjae.github.io/clipwise/demo/`
433
526
 
434
- Then anyone can record the demo site:
435
-
436
- ```bash
437
- npx clipwise demo --url https://kwakseongjae.github.io/clipwise/demo/
438
- ```
527
+ The built-in `npx clipwise demo` already points to this URL by default.
439
528
 
440
529
  ## Security
441
530