clipwise 0.7.1 → 0.7.2

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
@@ -5,10 +5,10 @@
5
5
  YAML 시나리오를 작성하면 시네마틱 데모 영상(MP4/GIF)을 자동으로 만들어주는 스크린 레코더. Playwright CDP 기반.
6
6
 
7
7
  <p align="center">
8
- <video src="https://github.com/user-attachments/assets/bfd3910d-3449-4d04-b95a-52bea1f16025" autoplay loop muted playsinline width="100%"></video>
8
+ <video src="https://github.com/user-attachments/assets/800d956f-ecf3-40c4-8750-c93b34285f11" autoplay loop muted playsinline width="100%"></video>
9
9
  </p>
10
10
 
11
- > *`npx clipwise demo` 한 줄로 생성된 영상입니다 — YAML 파일 1개, 239줄.*
11
+ > *`npx clipwise demo` 한 줄로 생성된 영상입니다 — YAML 파일 1개, 248줄.*
12
12
 
13
13
  ## 빠른 시작
14
14
 
package/README.md CHANGED
@@ -5,10 +5,10 @@
5
5
  Scriptable cinematic screen recorder for product demos — YAML in, polished MP4 out. Powered by Playwright CDP.
6
6
 
7
7
  <p align="center">
8
- <video src="https://github.com/user-attachments/assets/bfd3910d-3449-4d04-b95a-52bea1f16025" autoplay loop muted playsinline width="100%"></video>
8
+ <video src="https://github.com/user-attachments/assets/800d956f-ecf3-40c4-8750-c93b34285f11" autoplay loop muted playsinline width="100%"></video>
9
9
  </p>
10
10
 
11
- > *Generated with `npx clipwise demo` — 1 YAML file, 239 lines, one command.*
11
+ > *Generated with `npx clipwise demo` — 1 YAML file, 248 lines, one command.*
12
12
 
13
13
  ## Quick Start
14
14
 
@@ -154,7 +154,7 @@ steps:
154
154
  |--------|-----------|---------|-------------|
155
155
  | `navigate` | `url`, `waitUntil?` | `waitUntil: "networkidle"` | Navigate to URL |
156
156
  | `click` | `selector`, `delay?`, `timeout?` | | Click an element |
157
- | `type` | `selector`, `text`, `delay?`, `timeout?` | `delay: 50` | Type text (char-by-char) |
157
+ | `type` | `selector`, `text`, `delay?`, `timeout?` | `delay: 50` | Type text (char-by-char, React/Vue compatible) |
158
158
  | `hover` | `selector`, `timeout?` | | Hover over element |
159
159
  | `scroll` | `y?`, `x?`, `selector?`, `smooth?`, `timeout?` | `y: 0`, `x: 0`, `smooth: true` | Scroll by offset |
160
160
  | `wait` | `duration` | | Wait (ms) |
@@ -164,13 +164,15 @@ steps:
164
164
 
165
165
  | Action | Parameters | Default | Description |
166
166
  |--------|-----------|---------|-------------|
167
- | `waitForSelector` | `selector`, `state?`, `timeout?` | `state: "visible"`, `timeout: 15000` | Wait for element state |
168
- | `waitForNavigation` | `waitUntil?`, `timeout?` | `waitUntil: "networkidle"`, `timeout: 15000` | Wait for page load |
169
- | `waitForURL` | `url`, `timeout?` | `timeout: 15000` | Wait for URL match |
170
- | `waitForFunction` | `expression`, `polling?`, `timeout?` | `polling: "raf"`, `timeout: 30000` | Wait for JS expression to be truthy |
171
- | `waitForResponse` | `url`, `status?`, `timeout?` | `timeout: 30000` | Wait for network response (URL substring match) |
167
+ | `waitForSelector` | `selector`, `state?`, `timeout?`, `captureWhileWaiting?`, `displaySpeed?` | `state: "visible"`, `timeout: 15000` | Wait for element state |
168
+ | `waitForNavigation` | `waitUntil?`, `timeout?`, `captureWhileWaiting?`, `displaySpeed?` | `waitUntil: "networkidle"`, `timeout: 15000` | Wait for page load |
169
+ | `waitForURL` | `url`, `timeout?`, `captureWhileWaiting?`, `displaySpeed?` | `timeout: 15000` | Wait for URL match |
170
+ | `waitForFunction` | `expression`, `polling?`, `timeout?`, `captureWhileWaiting?`, `displaySpeed?` | `polling: "raf"`, `timeout: 30000` | Wait for JS expression to be truthy |
171
+ | `waitForResponse` | `url`, `status?`, `timeout?`, `captureWhileWaiting?`, `displaySpeed?` | `timeout: 30000` | Wait for network response (URL substring match) |
172
172
  | `smartWait` | `until`, `selector?`, `timeout?`, `displaySpeed?` | `until: "networkIdle"`, `timeout: 30000`, `displaySpeed: 8` | Smart wait — records real wait, auto-speeds in output |
173
173
 
174
+ **`captureWhileWaiting`**: When `true`, continuously captures frames during the wait (like `smartWait`). Useful for recording loading animations, progress bars, streaming responses. Pairs with `displaySpeed` (1-32, default: 8) to auto-compress wait frames in the output.
175
+
174
176
  **`waitUntil`** options: `"load"`, `"domcontentloaded"`, `"networkidle"` (default)
175
177
  **`state`** options: `"visible"` (default), `"attached"`, `"hidden"`
176
178
  **`polling`** options: `"raf"` (requestAnimationFrame, default) or milliseconds (e.g. `500`)
@@ -213,6 +215,29 @@ For slower, cinematic demos:
213
215
  - `holdDuration: 1500-2500` ms
214
216
  - `type.delay: 40-60` ms per character
215
217
 
218
+ ### Authentication
219
+
220
+ Record pages behind login by restoring a browser session. Supports Playwright's `storageState` file (recommended) or inline cookies.
221
+
222
+ ```yaml
223
+ # Option 1: Playwright storageState file (cookies + localStorage)
224
+ auth:
225
+ storageState: ./auth-state.json
226
+
227
+ # Option 2: Inline cookies
228
+ auth:
229
+ cookies:
230
+ - name: session_id
231
+ value: abc123
232
+ domain: .example.com
233
+ ```
234
+
235
+ Generate a `storageState` file by logging in interactively:
236
+
237
+ ```bash
238
+ npx playwright codegen --save-storage=auth-state.json https://my-app.com
239
+ ```
240
+
216
241
  ## Effects
217
242
 
218
243
  All effects are optional and have sensible defaults.
@@ -297,7 +322,7 @@ deviceFrame:
297
322
 
298
323
  Displays a HUD at the bottom of the screen showing what was typed. By default, only modifier+key shortcuts are shown (industry standard — same as Screen Studio, KeyCastr, ScreenFlow). Set `showTyping: true` to also show regular typed text.
299
324
 
300
- When typing across multiple input fields, each field gets its own line in the HUD (up to 3 recent sessions, oldest dimmed at top, newest bright at bottom).
325
+ When typing across multiple input fields, each field gets its own line in the HUD (up to 3 recent sessions, oldest dimmed at top, newest bright at bottom). CJK text (Korean, Chinese, Japanese) is automatically wrapped to fit the screen width.
301
326
 
302
327
  ```yaml
303
328
  keystroke: