clipwise 0.5.2 → 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 +81 -15
- package/README.md +80 -22
- package/dist/cli/index.js +261 -59
- package/dist/compose/frame-worker.js +2 -1
- package/dist/index.d.ts +1649 -186
- package/dist/index.js +269 -62
- package/package.json +1 -1
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
|
|
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,7 +477,7 @@ 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
|
|
|
@@ -462,11 +524,7 @@ Clipwise includes a documentation site and a live demo dashboard in the `docs/`
|
|
|
462
524
|
4. Docs go live at `https://kwakseongjae.github.io/clipwise/`
|
|
463
525
|
5. Demo dashboard at `https://kwakseongjae.github.io/clipwise/demo/`
|
|
464
526
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
```bash
|
|
468
|
-
npx clipwise demo --url https://kwakseongjae.github.io/clipwise/demo/
|
|
469
|
-
```
|
|
527
|
+
The built-in `npx clipwise demo` already points to this URL by default.
|
|
470
528
|
|
|
471
529
|
## Security
|
|
472
530
|
|