clipwise 0.9.0 → 0.9.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
@@ -25,6 +25,20 @@ npx clipwise@latest record .clipwise/scenarios/demo.yaml
25
25
  **Zero footprint**: Clipwise가 남기는 모든 것(시나리오, 픽스처, 인증 상태, 출력물)은
26
26
  `.clipwise/` 디렉토리 하나에 담깁니다. `rm -rf .clipwise` 한 줄로 모든 흔적이 사라집니다.
27
27
 
28
+ ### 처음 5분 가이드
29
+
30
+ 1. `npx clipwise@latest init` — 바로 쓸 수 있는 시나리오 2개와 함께 `.clipwise/` 생성
31
+ 2. `npx clipwise@latest record .clipwise/scenarios/keynote.yaml` — **수정 없이** 키노트
32
+ 런치 영상이 렌더됩니다 (호스팅 데모 대시보드를 녹화)
33
+ 3. `.clipwise/output/keynote.mp4` 열기 — 이것이 기본으로 제공되는 퀄리티 기준입니다
34
+ 4. `keynote.yaml` 수정: `url:`과 셀렉터를 **내 앱**으로 교체, 캡션 문구 조정
35
+ 5. `brand.yaml` 수정: accent 컬러·폰트 프리셋·캐치프레이즈 — 영상 전체가 따라옵니다
36
+
37
+ 자연어가 편하시면 `npx clipwise install-skill` 후 Claude Code에서 `/clipwise`로
38
+ 요청하세요 — 키노트 레시피가 내장된 스킬이 YAML을 대신 작성합니다. 런치 영상이
39
+ 아니라 단순 화면 녹화가 필요하면 `scenarios/demo.yaml`과 아래
40
+ [YAML 시나리오 형식](#yaml-시나리오-형식)에서 시작하세요.
41
+
28
42
  ## 요구사항
29
43
 
30
44
  - **Node.js** >= 18
package/README.md CHANGED
@@ -25,6 +25,20 @@ npx clipwise@latest record .clipwise/scenarios/demo.yaml
25
25
  **Zero footprint**: everything Clipwise touches lives in one `.clipwise/` directory —
26
26
  scenarios, fixtures, auth state, output. Remove every trace with `rm -rf .clipwise`.
27
27
 
28
+ ### Your first 5 minutes
29
+
30
+ 1. `npx clipwise@latest init` — scaffolds `.clipwise/` with two ready scenarios
31
+ 2. `npx clipwise@latest record .clipwise/scenarios/keynote.yaml` — renders a full
32
+ keynote-style launch video **with zero edits** (it records the hosted demo dashboard)
33
+ 3. Open `.clipwise/output/keynote.mp4` — this is the quality bar you get out of the box
34
+ 4. Edit `keynote.yaml`: swap the `url:` and selectors for **your** app, tweak the captions
35
+ 5. Edit `brand.yaml`: your accent color, font preset, catchphrases — the whole video follows
36
+
37
+ Prefer natural language? `npx clipwise install-skill`, then ask `/clipwise` in
38
+ Claude Code — it writes these YAMLs for you (the skill ships with the full
39
+ keynote recipe). For a plain screen recording instead of a launch video, start
40
+ from `scenarios/demo.yaml` and the [YAML Scenario Format](#yaml-scenario-format) below.
41
+
28
42
  ## Requirements
29
43
 
30
44
  - **Node.js** >= 18
package/dist/cli/index.js CHANGED
@@ -4522,7 +4522,7 @@ import { homedir } from "os";
4522
4522
  var program = new Command();
4523
4523
  program.name("clipwise").description(
4524
4524
  "Playwright-based cinematic screen recorder for product demos"
4525
- ).version("0.9.0");
4525
+ ).version("0.9.1");
4526
4526
  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(
4527
4527
  "-f, --format <format>",
4528
4528
  "Output format (gif|mp4|png-sequence)"
@@ -4793,6 +4793,97 @@ steps:
4793
4793
  actions:
4794
4794
  - action: click
4795
4795
  selector: "#my-button"
4796
+ `;
4797
+ const keynoteTemplate = `# Keynote-style launch video \u2014 runs AS-IS against the hosted demo.
4798
+ # Try it first: clipwise record .clipwise/scenarios/keynote.yaml
4799
+ # Then replace the url + selectors with your own app.
4800
+
4801
+ name: "My Launch Video"
4802
+ viewport: { width: 1280, height: 800, deviceScaleFactor: 2 } # 2 = retina quality
4803
+
4804
+ effects:
4805
+ cursor: { enabled: true, clickEffect: true, highlight: false, trail: false }
4806
+
4807
+ output:
4808
+ format: mp4
4809
+ fps: 30
4810
+ preset: balanced
4811
+ filename: keynote
4812
+
4813
+ scenes:
4814
+ # footage take \u2014 recorded once; vignettes below quote it by step
4815
+ - type: screen
4816
+ id: demo
4817
+ steps:
4818
+ - name: "Open"
4819
+ captureDelay: 120
4820
+ holdDuration: 1400
4821
+ actions:
4822
+ - action: navigate
4823
+ url: "https://kwakseongjae.github.io/clipwise/demo/" # \u2190 your app URL
4824
+ waitUntil: networkidle
4825
+ - name: "Stats"
4826
+ captureDelay: 50
4827
+ holdDuration: 700
4828
+ actions:
4829
+ - { action: hover, selector: "#stat-users" } # \u2190 your selectors
4830
+ - name: "Search"
4831
+ captureDelay: 50
4832
+ holdDuration: 500
4833
+ actions:
4834
+ - { action: type, selector: "#search-input", text: "growth report", delay: 28 }
4835
+ - name: "Switch tab"
4836
+ captureDelay: 50
4837
+ holdDuration: 1100
4838
+ actions:
4839
+ - { action: click, selector: "#tab-daily" }
4840
+ - name: "Table"
4841
+ captureDelay: 80
4842
+ holdDuration: 1300
4843
+ actions:
4844
+ - action: scroll
4845
+ y: 420
4846
+ smooth: true
4847
+
4848
+ # \u2500\u2500 timeline \u2500\u2500
4849
+ - type: motion
4850
+ template: kinetic-type
4851
+ duration: 2200
4852
+ props: { lines: "Ship *demos*,||not edits.", size: 86 }
4853
+
4854
+ - type: vignette
4855
+ footage: demo
4856
+ duration: 4200
4857
+ layout: hero
4858
+ num: "01"
4859
+ label: "Cinematic camera"
4860
+ caption: "Recorded from a real app \u2014 *zero code changes*"
4861
+ push: { from: 1.02, to: 1.1 }
4862
+ start: { step: 0, offset: 0.15 }
4863
+ fx:
4864
+ - { kind: circle, selector: "#stat-users", delay: 2700 }
4865
+
4866
+ - type: vignette
4867
+ footage: demo
4868
+ duration: 4000
4869
+ layout: crop
4870
+ num: "02"
4871
+ label: "Close-up"
4872
+ caption: "Selector-measured crop \u2014 *no pixel guessing*"
4873
+ crop: { selector: "#chart-area", pad: 14 }
4874
+ push: { from: 1.04, to: 1 }
4875
+ start: { step: 3 }
4876
+ rate: 1.1
4877
+
4878
+ - type: motion
4879
+ template: kinetic-type
4880
+ duration: 1900
4881
+ props: { lines: "Your code,||*untouched.*", size: 80, fx: marker }
4882
+
4883
+ - type: motion
4884
+ template: kinetic-type
4885
+ duration: 2600
4886
+ props: { lines: "*My Product*", size: 90, sub: "npx clipwise@latest init" }
4796
4887
  `;
4797
4888
  const gitignore = `# Clipwise local artifacts \u2014 safe to ignore
4798
4889
  auth/
@@ -4834,23 +4925,27 @@ catchphrases:
4834
4925
  await mkdir2(join3(baseDir, "fixtures"), { recursive: true });
4835
4926
  await mkdir2(join3(baseDir, "auth"), { recursive: true });
4836
4927
  await writeFile3(join3(baseDir, "scenarios", "demo.yaml"), template, "utf-8");
4928
+ await writeFile3(join3(baseDir, "scenarios", "keynote.yaml"), keynoteTemplate, "utf-8");
4837
4929
  await writeFile3(join3(baseDir, "brand.yaml"), brandTemplate, "utf-8");
4838
4930
  await writeFile3(join3(baseDir, ".gitignore"), gitignore, "utf-8");
4839
4931
  console.log(chalk.green("Created .clipwise/\n"));
4840
4932
  console.log(" .clipwise/");
4841
- console.log(" scenarios/demo.yaml \u2014 your first scenario (edit the URL)");
4842
- console.log(" brand.yaml \u2014 tone & manner + catchphrases (Brand Kit)");
4843
- console.log(" prepare/ \u2014 CSS/JS injected only while recording");
4844
- console.log(" fixtures/ \u2014 mocked API responses (JSON)");
4845
- console.log(" auth/ \u2014 storageState files (gitignored)");
4846
- console.log(" .gitignore \u2014 keeps auth/, output/, cache/ out of git");
4847
- console.log("\nNext steps:");
4848
- console.log(` 1. Edit ${chalk.bold(".clipwise/scenarios/demo.yaml")} \u2014 change the URL to your site`);
4849
- console.log(` 2. Run ${chalk.bold("clipwise record .clipwise/scenarios/demo.yaml")}`);
4850
- console.log(` 3. Find your output in ${chalk.bold(".clipwise/output/")}`);
4933
+ console.log(" scenarios/keynote.yaml \u2014 keynote launch video (runs as-is!)");
4934
+ console.log(" scenarios/demo.yaml \u2014 simple screen recording (edit the URL)");
4935
+ console.log(" brand.yaml \u2014 tone & font presets + catchphrases");
4936
+ console.log(" prepare/ \u2014 CSS/JS injected only while recording");
4937
+ console.log(" fixtures/ \u2014 mocked API responses (JSON)");
4938
+ console.log(" auth/ \u2014 storageState files (gitignored)");
4939
+ console.log(`
4940
+ ${chalk.bold("Try it right now")} (no edits needed \u2014 records the hosted demo):`);
4941
+ console.log(` ${chalk.bold("clipwise record .clipwise/scenarios/keynote.yaml")}`);
4942
+ console.log("\nThen make it yours:");
4943
+ console.log(` 1. Edit ${chalk.bold("keynote.yaml")} \u2014 swap the url + selectors for your app`);
4944
+ console.log(` 2. Edit ${chalk.bold("brand.yaml")} \u2014 your accent color & catchphrases`);
4945
+ console.log(` 3. Or let AI write scenarios: ${chalk.bold("clipwise install-skill")} \u2192 ask ${chalk.bold("/clipwise")} in Claude Code`);
4851
4946
  console.log(`
4852
- Remove every trace anytime: ${chalk.bold("rm -rf .clipwise")}`);
4853
- console.log(`Or try the built-in demo: ${chalk.bold("clipwise demo")}
4947
+ Output lands in ${chalk.bold(".clipwise/output/")} \xB7 remove every trace: ${chalk.bold("rm -rf .clipwise")}`);
4948
+ console.log(`Docs: ${chalk.bold("https://kwakseongjae.github.io/clipwise/")}
4854
4949
  `);
4855
4950
  });
4856
4951
  program.command("demo").description("Record a demo video of the Clipwise showcase dashboard").option("-o, --output <dir>", "Output directory", ".clipwise/output").option(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clipwise",
3
- "version": "0.9.0",
3
+ "version": "0.9.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",