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 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: [{ kind: circle, selector: "#revenue", delay: 2500 }]
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: [{ kind: circle, selector: "#revenue", delay: 2500 }]
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.0");
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clipwise",
3
- "version": "0.11.0",
3
+ "version": "0.11.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",