screenci 0.0.83 → 0.0.85

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.
Files changed (91) hide show
  1. package/dist/cli.d.ts +16 -3
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +138 -32
  4. package/dist/cli.js.map +1 -1
  5. package/dist/docs/video-sources/camera-and-zooming.screenci.js +1 -2
  6. package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -1
  7. package/dist/docs/video-sources/installation.screenci.js +1 -2
  8. package/dist/docs/video-sources/installation.screenci.js.map +1 -1
  9. package/dist/docs/video-sources/languages.screenci.js +3 -1
  10. package/dist/docs/video-sources/languages.screenci.js.map +1 -1
  11. package/dist/docs/video-sources/locator-highlight-animated.screenci.js +0 -1
  12. package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
  13. package/dist/docs/video-sources/locator-highlight-still.screenci.js +0 -1
  14. package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
  15. package/dist/docs/video-sources/narration.screenci.js +3 -1
  16. package/dist/docs/video-sources/narration.screenci.js.map +1 -1
  17. package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +3 -1
  18. package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -1
  19. package/dist/docs/video-sources/speaking-style.screenci.js +79 -14
  20. package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -1
  21. package/dist/docs/video-sources/studio.screenci.js +3 -1
  22. package/dist/docs/video-sources/studio.screenci.js.map +1 -1
  23. package/dist/docs/video-sources/vertical-video.screenci.js +1 -1
  24. package/dist/src/anonSession.d.ts +40 -0
  25. package/dist/src/anonSession.d.ts.map +1 -0
  26. package/dist/src/anonSession.js +91 -0
  27. package/dist/src/anonSession.js.map +1 -0
  28. package/dist/src/asset.d.ts +11 -1
  29. package/dist/src/asset.d.ts.map +1 -1
  30. package/dist/src/asset.js +122 -52
  31. package/dist/src/asset.js.map +1 -1
  32. package/dist/src/audio.d.ts.map +1 -1
  33. package/dist/src/audio.js +2 -2
  34. package/dist/src/audio.js.map +1 -1
  35. package/dist/src/cue.d.ts.map +1 -1
  36. package/dist/src/cue.js +12 -4
  37. package/dist/src/cue.js.map +1 -1
  38. package/dist/src/disableAnimations.d.ts +33 -0
  39. package/dist/src/disableAnimations.d.ts.map +1 -0
  40. package/dist/src/disableAnimations.js +50 -0
  41. package/dist/src/disableAnimations.js.map +1 -0
  42. package/dist/src/events.d.ts +5 -1
  43. package/dist/src/events.d.ts.map +1 -1
  44. package/dist/src/events.js +4 -0
  45. package/dist/src/events.js.map +1 -1
  46. package/dist/src/git.d.ts +2 -0
  47. package/dist/src/git.d.ts.map +1 -1
  48. package/dist/src/git.js +1 -1
  49. package/dist/src/git.js.map +1 -1
  50. package/dist/src/init.d.ts +30 -8
  51. package/dist/src/init.d.ts.map +1 -1
  52. package/dist/src/init.js +112 -57
  53. package/dist/src/init.js.map +1 -1
  54. package/dist/src/instrument.d.ts.map +1 -1
  55. package/dist/src/instrument.js +5 -2
  56. package/dist/src/instrument.js.map +1 -1
  57. package/dist/src/linkSession.d.ts +13 -10
  58. package/dist/src/linkSession.d.ts.map +1 -1
  59. package/dist/src/linkSession.js +33 -29
  60. package/dist/src/linkSession.js.map +1 -1
  61. package/dist/src/missingAssetLog.d.ts +8 -0
  62. package/dist/src/missingAssetLog.d.ts.map +1 -0
  63. package/dist/src/missingAssetLog.js +16 -0
  64. package/dist/src/missingAssetLog.js.map +1 -0
  65. package/dist/src/recordingData.d.ts +1 -1
  66. package/dist/src/recordingData.d.ts.map +1 -1
  67. package/dist/src/runtimeContext.d.ts +17 -0
  68. package/dist/src/runtimeContext.d.ts.map +1 -1
  69. package/dist/src/runtimeContext.js +3 -0
  70. package/dist/src/runtimeContext.js.map +1 -1
  71. package/dist/src/runtimeMode.d.ts.map +1 -1
  72. package/dist/src/runtimeMode.js +8 -0
  73. package/dist/src/runtimeMode.js.map +1 -1
  74. package/dist/src/screenshot.d.ts.map +1 -1
  75. package/dist/src/screenshot.js +7 -0
  76. package/dist/src/screenshot.js.map +1 -1
  77. package/dist/src/types.d.ts +37 -1
  78. package/dist/src/types.d.ts.map +1 -1
  79. package/dist/src/types.js.map +1 -1
  80. package/dist/src/video.d.ts.map +1 -1
  81. package/dist/src/video.js +7 -0
  82. package/dist/src/video.js.map +1 -1
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/package.json +1 -1
  85. package/skills/screenci/SKILL.md +10 -9
  86. package/skills/screenci/references/init.md +5 -6
  87. package/skills/screenci/references/record.md +9 -7
  88. package/dist/docs/video-sources/landing.screenci.d.ts +0 -2
  89. package/dist/docs/video-sources/landing.screenci.d.ts.map +0 -1
  90. package/dist/docs/video-sources/landing.screenci.js +0 -34
  91. package/dist/docs/video-sources/landing.screenci.js.map +0 -1
@@ -1,49 +1,114 @@
1
- import { hide, video, voices } from 'screenci';
1
+ import { hide, modelTypes, video, voices } from 'screenci';
2
2
  // Each cue carries its own style prompt, so the same voice adapts its delivery
3
- // per line without any audio editing.
4
- video.narration({
3
+ // per line without any audio editing. Write the direction in plain English,
4
+ // however far out you want to go: the expressive model takes styles from a
5
+ // straight product guide all the way to a swashbuckling pirate. The style prompt
6
+ // for each line is overlaid on screen as a text card (one named overlay per
7
+ // style, so each renders its own asset).
8
+ function styleCard(text) {
9
+ return {
10
+ html: '<div class="ss-card">' +
11
+ '<span class="ss-kicker">Speaking style</span>' +
12
+ `<span class="ss-text">${text}</span>` +
13
+ '</div>',
14
+ css: `
15
+ .ss-card {
16
+ display: inline-flex;
17
+ flex-direction: column;
18
+ gap: 6px;
19
+ box-sizing: border-box;
20
+ padding: 18px 28px;
21
+ border-radius: 18px;
22
+ font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
23
+ color: #ffffff;
24
+ background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 55%, #ec4899 100%);
25
+ border: 1px solid rgba(255, 255, 255, 0.28);
26
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35);
27
+ }
28
+ .ss-kicker {
29
+ font-size: 13px;
30
+ font-weight: 600;
31
+ letter-spacing: 0.18em;
32
+ text-transform: uppercase;
33
+ opacity: 0.85;
34
+ }
35
+ .ss-text { font-size: 30px; font-weight: 700; letter-spacing: -0.01em; }
36
+ `,
37
+ x: 96,
38
+ y: 880,
39
+ width: 1000,
40
+ };
41
+ }
42
+ video
43
+ .overlays({
44
+ sHook: styleCard('Warm and intriguing'),
45
+ sPirate: styleCard('🏴‍☠️ Boisterous pirate captain'),
46
+ sSports: styleCard('🎙️ Breathless sportscaster'),
47
+ sWhisper: styleCard('🤫 Hushed, conspiratorial whisper'),
48
+ sOutro: styleCard('Confident and conclusive'),
49
+ })
50
+ .narration({
5
51
  en: {
6
52
  hook: {
7
53
  cue: 'Every narration line can have its own speaking style.',
8
54
  voice: {
9
55
  name: voices.Nora,
56
+ modelType: modelTypes.expressive,
10
57
  style: 'Warm and intriguing, drawing the viewer in.',
11
58
  },
12
59
  },
13
- explain: {
14
- cue: 'You write a style prompt alongside the text, and the delivery follows it.',
60
+ pirate: {
61
+ cue: 'Arr! Even a swashbuckling pirate can guide the tour, if that be the style ye prompt.',
15
62
  voice: {
16
63
  name: voices.Nora,
17
- style: 'Measured and instructional, making a point clearly.',
64
+ modelType: modelTypes.expressive,
65
+ style: 'A boisterous pirate captain, gravelly and full of swagger, rolling every R.',
18
66
  },
19
67
  },
20
- reveal: {
21
- cue: 'One script can shift from a calm explainer to an excited reveal, in the same render.',
68
+ sportscaster: {
69
+ cue: 'And the feature ships, the crowd goes wild, what a release this has been!',
22
70
  voice: {
23
71
  name: voices.Nora,
24
- style: 'Energetic and enthusiastic, building into a reveal.',
72
+ modelType: modelTypes.expressive,
73
+ style: 'A breathless sportscaster calling a last-second play-by-play.',
74
+ },
75
+ },
76
+ whisper: {
77
+ cue: 'Or lean right in, because the best part is a little secret.',
78
+ voice: {
79
+ name: voices.Nora,
80
+ modelType: modelTypes.expressive,
81
+ style: 'A hushed, conspiratorial whisper, close to the mic.',
25
82
  },
26
83
  },
27
84
  outro: {
28
85
  cue: 'Write the style in plain English. The voice does the rest.',
29
86
  voice: {
30
87
  name: voices.Nora,
88
+ modelType: modelTypes.expressive,
31
89
  style: 'Confident and conclusive, landing the final thought.',
32
90
  },
33
91
  },
34
92
  },
35
- })('Per-cue speaking style', async ({ page, narration }) => {
93
+ })('Per-cue speaking style', async ({ page, narration, overlays }) => {
36
94
  await hide(async () => {
37
95
  await page.goto('https://screenci.com/docs/guides/narration', {
38
96
  waitUntil: 'domcontentloaded',
39
97
  });
40
98
  await page.getByRole('heading').first().waitFor();
41
99
  });
42
- await narration.hook();
43
- await narration.explain();
100
+ // Hold each cue's style card up while that line is spoken.
101
+ async function line(card, cue) {
102
+ await card.start();
103
+ await cue();
104
+ await card.end();
105
+ }
106
+ await line(overlays.sHook, narration.hook);
107
+ await line(overlays.sPirate, narration.pirate);
44
108
  await page.evaluate(() => window.scrollBy({ top: 400, behavior: 'smooth' }));
45
109
  await page.waitForTimeout(1200);
46
- await narration.reveal();
47
- await narration.outro();
110
+ await line(overlays.sSports, narration.sportscaster);
111
+ await line(overlays.sWhisper, narration.whisper);
112
+ await line(overlays.sOutro, narration.outro);
48
113
  });
49
114
  //# sourceMappingURL=speaking-style.screenci.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"speaking-style.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/speaking-style.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAE9C,+EAA+E;AAC/E,sCAAsC;AACtC,KAAK,CAAC,SAAS,CAAC;IACd,EAAE,EAAE;QACF,IAAI,EAAE;YACJ,GAAG,EAAE,uDAAuD;YAC5D,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,6CAA6C;aACrD;SACF;QACD,OAAO,EAAE;YACP,GAAG,EAAE,2EAA2E;YAChF,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,qDAAqD;aAC7D;SACF;QACD,MAAM,EAAE;YACN,GAAG,EAAE,sFAAsF;YAC3F,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,qDAAqD;aAC7D;SACF;QACD,KAAK,EAAE;YACL,GAAG,EAAE,4DAA4D;YACjE,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,sDAAsD;aAC9D;SACF;KACF;CACF,CAAC,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACzD,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,EAAE;YAC5D,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;IACtB,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;IAEzB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC5E,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAE/B,MAAM,SAAS,CAAC,MAAM,EAAE,CAAA;IACxB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"speaking-style.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/speaking-style.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAE1D,+EAA+E;AAC/E,4EAA4E;AAC5E,2EAA2E;AAC3E,iFAAiF;AACjF,4EAA4E;AAC5E,yCAAyC;AACzC,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO;QACL,IAAI,EACF,uBAAuB;YACvB,+CAA+C;YAC/C,yBAAyB,IAAI,SAAS;YACtC,QAAQ;QACV,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;KAsBJ;QACD,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,GAAG;QACN,KAAK,EAAE,IAAI;KACZ,CAAA;AACH,CAAC;AAED,KAAK;KACF,QAAQ,CAAC;IACR,KAAK,EAAE,SAAS,CAAC,qBAAqB,CAAC;IACvC,OAAO,EAAE,SAAS,CAAC,iCAAiC,CAAC;IACrD,OAAO,EAAE,SAAS,CAAC,6BAA6B,CAAC;IACjD,QAAQ,EAAE,SAAS,CAAC,mCAAmC,CAAC;IACxD,MAAM,EAAE,SAAS,CAAC,0BAA0B,CAAC;CAC9C,CAAC;KACD,SAAS,CAAC;IACT,EAAE,EAAE;QACF,IAAI,EAAE;YACJ,GAAG,EAAE,uDAAuD;YAC5D,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,KAAK,EAAE,6CAA6C;aACrD;SACF;QACD,MAAM,EAAE;YACN,GAAG,EAAE,sFAAsF;YAC3F,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,KAAK,EACH,6EAA6E;aAChF;SACF;QACD,YAAY,EAAE;YACZ,GAAG,EAAE,2EAA2E;YAChF,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,KAAK,EACH,+DAA+D;aAClE;SACF;QACD,OAAO,EAAE;YACP,GAAG,EAAE,6DAA6D;YAClE,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,KAAK,EAAE,qDAAqD;aAC7D;SACF;QACD,KAAK,EAAE;YACL,GAAG,EAAE,4DAA4D;YACjE,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,KAAK,EAAE,sDAAsD;aAC9D;SACF;KACF;CACF,CAAC,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrE,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,EAAE;YAC5D,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,2DAA2D;IAC3D,KAAK,UAAU,IAAI,CACjB,IAA8D,EAC9D,GAAwB;QAExB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,MAAM,GAAG,EAAE,CAAA;QACX,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC5E,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAE/B,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;IACpD,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAChD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA"}
@@ -26,7 +26,9 @@ video.narration({
26
26
  // session (SCREENCI_APP_STORAGE_STATE, see screenci.config.ts). When it is not
27
27
  // configured (e.g. CI without the session secret), skip instead of timing out
28
28
  // on the login page.
29
- video.skip(!process.env.SCREENCI_APP_STORAGE_STATE, 'Requires SCREENCI_APP_STORAGE_STATE (a logged-in app session).');
29
+ if (!process.env.SCREENCI_APP_STORAGE_STATE) {
30
+ throw new Error('Not logged in. Record via `scripts/screenci.sh docs <env> record` (it signs in first), or set SCREENCI_APP_STORAGE_STATE to a Playwright storageState.');
31
+ }
30
32
  // Navigate from the dashboard into Studio without showing it in the recording.
31
33
  await hide(async () => {
32
34
  await page.goto(appUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"studio.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/studio.screenci.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"studio.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/studio.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjE,KAAK,CAAC,GAAG,CAAC;IACR,aAAa,EAAE;QACb,SAAS,EAAE;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE;SAChE;KACF;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAA;AAE1E,+EAA+E;AAC/E,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,4EAA4E;AAC5E,KAAK,CAAC,SAAS,CAAC;IACd,EAAE,EAAE;QACF,KAAK,EAAE,oEAAoE;QAC3E,IAAI,EAAE,iGAAiG;KACxG;IACD,EAAE,EAAE;QACF,KAAK,EACH,sFAAsF;QACxF,IAAI,EAAE,mHAAmH;KAC1H;CACF,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACrD,0EAA0E;IAC1E,+EAA+E;IAC/E,8EAA8E;IAC9E,qBAAqB;IACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,wJAAwJ,CACzJ,CAAA;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAE1C,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;aAC1C,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;QAEzE,2EAA2E;QAC3E,4BAA4B;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;QACxD,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;aACpD,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9B,MAAM,IAAI;aACP,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;aACtC,KAAK,EAAE;aACP,KAAK,EAAE,CAAA;QACV,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;aAC3C,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IAEvB,8EAA8E;IAC9E,yCAAyC;IACzC,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IAC9D,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,EAAE,CAAA;IACjB,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;IAE1B,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;QAClD,IAAI,EAAE,wBAAwB;KAC/B,CAAC,CAAA;IACF,IAAI,MAAM,kBAAkB,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,wDAAwD;QACxD,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAChC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,SAAS,EAAE,CAAA;IACnB,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { hide, video } from 'screenci';
2
2
  video.use({
3
3
  renderOptions: {
4
- recording: { size: 0.82, shape: 'rounded', roundness: 0.05 },
4
+ recording: { size: 0.96, shape: 'rounded', roundness: 0.04 },
5
5
  output: {
6
6
  aspectRatio: '9:16',
7
7
  quality: '1080p',
@@ -0,0 +1,40 @@
1
+ export declare const ANON_TOKEN_HEADER = "X-ScreenCI-Anon-Token";
2
+ export declare const SECRET_HEADER = "X-ScreenCI-Secret";
3
+ export type CliCredential = {
4
+ header: typeof SECRET_HEADER;
5
+ value: string;
6
+ } | {
7
+ header: typeof ANON_TOKEN_HEADER;
8
+ value: string;
9
+ };
10
+ export declare function secretCredential(secret: string): CliCredential;
11
+ export declare function anonCredential(token: string): CliCredential;
12
+ export declare function deleteAnonSessionFile(screenciDir: string): Promise<void>;
13
+ /**
14
+ * Reads the locally stored anon session token, minting and persisting a new
15
+ * one on first use in this project directory. Reused across every subsequent
16
+ * `record` so multiple videos land under the same anonymous trial.
17
+ */
18
+ export declare function getOrCreateAnonToken(screenciDir: string): Promise<string>;
19
+ export type AnonSessionStatus = {
20
+ status: 'not_found';
21
+ } | {
22
+ status: 'expired';
23
+ } | {
24
+ status: 'pending';
25
+ } | {
26
+ status: 'claimed';
27
+ secret: string;
28
+ };
29
+ /**
30
+ * Checks the server-side status of a locally stored anon token before every
31
+ * upload attempt: still pending (proceed anonymously), claimed (the CLI
32
+ * should self-upgrade to the real secret), or expired/not found (start a
33
+ * fresh trial). Defaults to `pending` on a network failure so a transient
34
+ * outage doesn't block an otherwise-working anonymous upload.
35
+ */
36
+ export declare function checkAnonSessionStatus(token: string, options?: {
37
+ backendUrl?: string;
38
+ fetchImpl?: typeof fetch;
39
+ }): Promise<AnonSessionStatus>;
40
+ //# sourceMappingURL=anonSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anonSession.d.ts","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB,0BAA0B,CAAA;AACxD,eAAO,MAAM,aAAa,sBAAsB,CAAA;AAEhD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,OAAO,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,OAAO,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAE9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAE3D;AA+BD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GAC9D,OAAO,CAAC,iBAAiB,CAAC,CAwB5B"}
@@ -0,0 +1,91 @@
1
+ import { existsSync, mkdirSync } from 'fs';
2
+ import { readFile, writeFile, unlink } from 'fs/promises';
3
+ import { randomUUID } from 'crypto';
4
+ import { resolve } from 'path';
5
+ import { getDevBackendUrl } from './linkSession.js';
6
+ // Anonymous CLI trial: `screenci record` with no SCREENCI_SECRET uploads
7
+ // under a locally generated token instead of requiring an account up front.
8
+ // The token lives only in `.screenci/anon-session.json` and, server-side, in
9
+ // the anonymousSessions table (never printed or embedded in any URL).
10
+ const ANON_SESSION_FILE = 'anon-session.json';
11
+ export const ANON_TOKEN_HEADER = 'X-ScreenCI-Anon-Token';
12
+ export const SECRET_HEADER = 'X-ScreenCI-Secret';
13
+ export function secretCredential(secret) {
14
+ return { header: SECRET_HEADER, value: secret };
15
+ }
16
+ export function anonCredential(token) {
17
+ return { header: ANON_TOKEN_HEADER, value: token };
18
+ }
19
+ function getAnonSessionFilePath(screenciDir) {
20
+ return resolve(screenciDir, ANON_SESSION_FILE);
21
+ }
22
+ async function readAnonSessionFile(screenciDir) {
23
+ try {
24
+ const raw = await readFile(getAnonSessionFilePath(screenciDir), 'utf-8');
25
+ const parsed = JSON.parse(raw);
26
+ return typeof parsed.token === 'string' ? parsed.token : null;
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ async function writeAnonSessionFile(screenciDir, token) {
33
+ mkdirSync(screenciDir, { recursive: true });
34
+ await writeFile(getAnonSessionFilePath(screenciDir), `${JSON.stringify({ token }, null, 2)}\n`);
35
+ }
36
+ export async function deleteAnonSessionFile(screenciDir) {
37
+ const path = getAnonSessionFilePath(screenciDir);
38
+ if (!existsSync(path))
39
+ return;
40
+ try {
41
+ await unlink(path);
42
+ }
43
+ catch {
44
+ // Best-effort: a stale file left behind is harmless (a fresh token is
45
+ // minted on the next read if this one still resolves as expired).
46
+ }
47
+ }
48
+ /**
49
+ * Reads the locally stored anon session token, minting and persisting a new
50
+ * one on first use in this project directory. Reused across every subsequent
51
+ * `record` so multiple videos land under the same anonymous trial.
52
+ */
53
+ export async function getOrCreateAnonToken(screenciDir) {
54
+ const existing = await readAnonSessionFile(screenciDir);
55
+ if (existing)
56
+ return existing;
57
+ const token = randomUUID();
58
+ await writeAnonSessionFile(screenciDir, token);
59
+ return token;
60
+ }
61
+ /**
62
+ * Checks the server-side status of a locally stored anon token before every
63
+ * upload attempt: still pending (proceed anonymously), claimed (the CLI
64
+ * should self-upgrade to the real secret), or expired/not found (start a
65
+ * fresh trial). Defaults to `pending` on a network failure so a transient
66
+ * outage doesn't block an otherwise-working anonymous upload.
67
+ */
68
+ export async function checkAnonSessionStatus(token, options = {}) {
69
+ const backendUrl = options.backendUrl ?? getDevBackendUrl();
70
+ const fetchImpl = options.fetchImpl ?? fetch;
71
+ try {
72
+ const response = await fetchImpl(`${backendUrl}/cli/anon-session-status`, {
73
+ method: 'POST',
74
+ headers: { 'Content-Type': 'application/json' },
75
+ body: JSON.stringify({ token }),
76
+ });
77
+ const body = (await response.json().catch(() => ({})));
78
+ if (body.status === 'claimed' && typeof body.secret === 'string') {
79
+ return { status: 'claimed', secret: body.secret };
80
+ }
81
+ if (body.status === 'expired')
82
+ return { status: 'expired' };
83
+ if (body.status === 'not_found')
84
+ return { status: 'not_found' };
85
+ return { status: 'pending' };
86
+ }
87
+ catch {
88
+ return { status: 'pending' };
89
+ }
90
+ }
91
+ //# sourceMappingURL=anonSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anonSession.js","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"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"}
@@ -110,6 +110,16 @@ type OverlayCommon = {
110
110
  * recording as the camera zooms and pans.
111
111
  */
112
112
  pinToScreen?: boolean;
113
+ /**
114
+ * Hide the synthetic mouse cursor while this overlay is displayed, restoring
115
+ * its prior visibility when the overlay ends. Useful for full-screen intro or
116
+ * outro cards where a cursor would be a distraction. Placement-agnostic, so it
117
+ * works for every overlay variant. Overlapping `hideMouse` overlays keep the
118
+ * cursor hidden until the last one ends, and a cursor already hidden (for
119
+ * example via `page.mouse.hide()`) is left hidden. Has no effect on
120
+ * screenshots, whose cursor is hidden by default.
121
+ */
122
+ hideMouse?: boolean;
113
123
  };
114
124
  /** Fields that only apply to a `.mp4` video overlay (a file `path`). */
115
125
  type OverlayVideoFields = {
@@ -220,7 +230,7 @@ export declare const MAX_AUDIO_LEVEL = 4;
220
230
  * is a finished still or clip, so source-only fields (`over`/`margin`/`animate`/
221
231
  * `css`/`capturePadding`) do not apply.
222
232
  */
223
- export type DependencyOverlayOptions = Pick<OverlayCommon, 'relativeTo' | 'x' | 'y' | 'width' | 'height' | 'aspectRatio' | 'fill' | 'duration' | 'crop' | 'pinToScreen'> & {
233
+ export type DependencyOverlayOptions = Pick<OverlayCommon, 'relativeTo' | 'x' | 'y' | 'width' | 'height' | 'aspectRatio' | 'fill' | 'duration' | 'crop' | 'pinToScreen' | 'hideMouse'> & {
224
234
  /**
225
235
  * Late start into the embedded VIDEO (a `'2s'`/timecode/`'50%'` position).
226
236
  * Video dependencies only; rejected when the target resolves to a screenshot.
@@ -1 +1 @@
1
- {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}