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 +112 -15
- package/README.md +111 -22
- package/dist/cli/index.js +312 -61
- package/dist/compose/frame-worker.js +2 -1
- package/dist/index.d.ts +1649 -186
- package/dist/index.js +269 -62
- package/package.json +2 -1
- package/skills/clipwise.md +373 -0
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:
|
|
195
|
+
intensity: light # subtle | light | moderate | strong | dramatic
|
|
193
196
|
# 1.15x | 1.25x | 1.35x | 1.5x | 1.8x
|
|
194
|
-
# scale: 1.
|
|
195
|
-
duration:
|
|
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× | 균형잡힌
|
|
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: "
|
|
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:
|
|
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은 **녹화 품질** 개선에 집중:
|
|
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:
|
|
195
|
+
intensity: light # subtle | light | moderate | strong | dramatic
|
|
193
196
|
# 1.15x | 1.25x | 1.35x | 1.5x | 1.8x
|
|
194
|
-
# scale: 1.
|
|
195
|
-
duration:
|
|
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 (
|
|
206
|
-
| `moderate` | 1.35× | Balanced
|
|
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: "
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
|