clipwise 0.11.0 → 0.11.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 +13 -1
- package/README.md +13 -1
- package/dist/cli/index.js +7 -1
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -294,6 +294,7 @@ prepare:
|
|
|
294
294
|
| 시드 데이터를 가진 "데모 모드" 구현 | `mock:` |
|
|
295
295
|
| 일관된 데모를 위한 날짜/랜덤 스텁 | `freezeTime:` + `seedRandom:` |
|
|
296
296
|
| 녹화용 온보딩 사전 완료 분기 | `storage:` |
|
|
297
|
+
| 민감 정보(이메일·금액) 블러 | `mask:` — 요소 단위, 스크롤 추적 |
|
|
297
298
|
|
|
298
299
|
`freezeTime` + `seedRandom`을 함께 쓰면 녹화가 **결정론적**이 됩니다 —
|
|
299
300
|
같은 시나리오는 몇 번을 돌려도 바이트 단위로 동일한 프레임을 만듭니다.
|
|
@@ -327,11 +328,22 @@ scenes:
|
|
|
327
328
|
push: { from: 1.05, to: 1 }
|
|
328
329
|
start: { step: 3 } # step 경계에서 인용 시작
|
|
329
330
|
rate: 1.15
|
|
330
|
-
fx:
|
|
331
|
+
fx:
|
|
332
|
+
- { kind: circle, selector: "#revenue", delay: 2500 } # 손그림 동그라미
|
|
333
|
+
- { kind: spotlight, selector: "#revenue", delay: 2500 } # 주변 디밍
|
|
334
|
+
# push: { from: 1.0, to: 1.2, origin: ".panel" } # 셀렉터를 향한 매치컷
|
|
335
|
+
|
|
336
|
+
# 선택 — 무료 BGM을 URL로 (사용자 머신에서 다운로드) + 비트 싱크 컷
|
|
337
|
+
audio: { file: "https://assets.mixkit.co/music/132/132.mp3", bpm: 120, volume: 0.32, fadeOut: 2000 }
|
|
338
|
+
|
|
339
|
+
# 선택 — 캡션 필 (타임라인 절대 초), 모든 비율에 번인
|
|
340
|
+
captions:
|
|
341
|
+
- { text: "실제 앱을 그대로 녹화했습니다", start: 0.4, end: 2.4 }
|
|
331
342
|
```
|
|
332
343
|
|
|
333
344
|
**고퀄리티 레시피** (쇼케이스 영상이 이렇게 나오는 이유):
|
|
334
345
|
1. `viewport.deviceScaleFactor: 2` — 레티나 해상도 캡처 (푸티지·타이포 전부)
|
|
346
|
+
0. `output.aspects: ["9:16", "1:1"]` — 같은 실행에서 릴스/피드 파일까지 (푸티지는 1회 녹화)
|
|
335
347
|
2. `prepare:` — 배너 숨김, 시간 동결, 랜덤 시드, API 목킹
|
|
336
348
|
3. `.clipwise/brand.yaml` — 톤 프리셋, accent, 폰트 프리셋(`editorial` = Inter + Fraunces),
|
|
337
349
|
캐치프레이즈. 선 드로잉 주석 + 연결 스레드는 자동 적용
|
package/README.md
CHANGED
|
@@ -296,6 +296,7 @@ prepare:
|
|
|
296
296
|
| Build a "demo mode" with seeded data | `mock:` |
|
|
297
297
|
| Stub dates and randomness for consistent demos | `freezeTime:` + `seedRandom:` |
|
|
298
298
|
| Pre-complete onboarding for recordings | `storage:` |
|
|
299
|
+
| Blur sensitive data (emails, amounts) | `mask:` — element-level, follows scrolling |
|
|
299
300
|
|
|
300
301
|
Combined with `freezeTime` + `seedRandom`, recordings become **deterministic** —
|
|
301
302
|
the same scenario produces byte-identical frames run after run.
|
|
@@ -330,11 +331,22 @@ scenes:
|
|
|
330
331
|
push: { from: 1.05, to: 1 }
|
|
331
332
|
start: { step: 3 } # quote from a step boundary
|
|
332
333
|
rate: 1.15
|
|
333
|
-
fx:
|
|
334
|
+
fx:
|
|
335
|
+
- { kind: circle, selector: "#revenue", delay: 2500 } # hand-drawn circle
|
|
336
|
+
- { kind: spotlight, selector: "#revenue", delay: 2500 } # dim everything else
|
|
337
|
+
# push: { from: 1.0, to: 1.2, origin: ".panel" } # match-cut toward a selector
|
|
338
|
+
|
|
339
|
+
# Optional — free BGM by URL (downloaded on your machine) + beat-synced cuts
|
|
340
|
+
audio: { file: "https://assets.mixkit.co/music/132/132.mp3", bpm: 120, volume: 0.32, fadeOut: 2000 }
|
|
341
|
+
|
|
342
|
+
# Optional — caption pills (timeline-absolute seconds), burned into every aspect
|
|
343
|
+
captions:
|
|
344
|
+
- { text: "Recorded from a real app", start: 0.4, end: 2.4 }
|
|
334
345
|
```
|
|
335
346
|
|
|
336
347
|
**Quality recipe** (what makes the showcase videos look the way they do):
|
|
337
348
|
1. `viewport.deviceScaleFactor: 2` — retina-resolution capture (footage, type, everything)
|
|
349
|
+
0. `output.aspects: ["9:16", "1:1"]` — reels/feed files from the same run (footage recorded once)
|
|
338
350
|
2. `prepare:` — hide banners, freeze time, seed randomness, mock APIs
|
|
339
351
|
3. `.clipwise/brand.yaml` — tone preset, accent, font preset (`editorial` = Inter + Fraunces), catchphrases; line annotations + the connecting thread switch on automatically
|
|
340
352
|
4. Structure: kinetic hook → hero push-in → close-up vignettes → interstitial → split (YAML × footage) → outro
|
package/dist/cli/index.js
CHANGED
|
@@ -4642,7 +4642,7 @@ import { homedir } from "os";
|
|
|
4642
4642
|
var program = new Command();
|
|
4643
4643
|
program.name("clipwise").description(
|
|
4644
4644
|
"Playwright-based cinematic screen recorder for product demos"
|
|
4645
|
-
).version("0.11.
|
|
4645
|
+
).version("0.11.1");
|
|
4646
4646
|
program.command("record").description("Record a demo from a YAML scenario file").argument("<scenario>", "Path to YAML scenario file").option("-o, --output <dir>", "Output directory (default: scenario outputDir or .clipwise/output)").option(
|
|
4647
4647
|
"-f, --format <format>",
|
|
4648
4648
|
"Output format (gif|mp4|png-sequence)"
|
|
@@ -4926,6 +4926,11 @@ steps:
|
|
|
4926
4926
|
name: "My Launch Video"
|
|
4927
4927
|
viewport: { width: 1280, height: 800, deviceScaleFactor: 2 } # 2 = retina quality
|
|
4928
4928
|
|
|
4929
|
+
# Optional extras (uncomment to use):
|
|
4930
|
+
# audio: { file: "https://assets.mixkit.co/music/132/132.mp3", bpm: 120, volume: 0.32, fadeOut: 2000 }
|
|
4931
|
+
# captions:
|
|
4932
|
+
# - { text: "Recorded from a real app", start: 0.4, end: 2.4 }
|
|
4933
|
+
|
|
4929
4934
|
effects:
|
|
4930
4935
|
cursor: { enabled: true, clickEffect: true, highlight: false, trail: false }
|
|
4931
4936
|
|
|
@@ -4934,6 +4939,7 @@ output:
|
|
|
4934
4939
|
fps: 30
|
|
4935
4940
|
preset: balanced
|
|
4936
4941
|
filename: keynote
|
|
4942
|
+
# aspects: ["9:16"] # also render a reels-format file in the same run
|
|
4937
4943
|
|
|
4938
4944
|
scenes:
|
|
4939
4945
|
# footage take \u2014 recorded once; vignettes below quote it by step
|