clipwise 0.6.1 → 0.7.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/dist/index.d.ts CHANGED
@@ -169,6 +169,28 @@ declare const StepActionSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject<{
169
169
  url: string;
170
170
  status?: number | undefined;
171
171
  timeout?: number | undefined;
172
+ }>, z.ZodObject<{
173
+ action: z.ZodLiteral<"smartWait">;
174
+ /** Condition to wait for */
175
+ until: z.ZodDefault<z.ZodEnum<["networkIdle", "selector", "domStable"]>>;
176
+ /** CSS selector (required when until="selector") */
177
+ selector: z.ZodOptional<z.ZodString>;
178
+ /** Maximum wait in ms */
179
+ timeout: z.ZodDefault<z.ZodNumber>;
180
+ /** Speed multiplier for the wait period in the output video (default: 8×) */
181
+ displaySpeed: z.ZodDefault<z.ZodNumber>;
182
+ }, "strip", z.ZodTypeAny, {
183
+ action: "smartWait";
184
+ timeout: number;
185
+ until: "selector" | "networkIdle" | "domStable";
186
+ displaySpeed: number;
187
+ selector?: string | undefined;
188
+ }, {
189
+ action: "smartWait";
190
+ selector?: string | undefined;
191
+ timeout?: number | undefined;
192
+ until?: "selector" | "networkIdle" | "domStable" | undefined;
193
+ displaySpeed?: number | undefined;
172
194
  }>]>;
173
195
  type StepAction = z.infer<typeof StepActionSchema>;
174
196
  declare const EffectsConfigSchema: z.ZodObject<{
@@ -186,7 +208,7 @@ declare const EffectsConfigSchema: z.ZodObject<{
186
208
  */
187
209
  intensity: z.ZodDefault<z.ZodEnum<["subtle", "light", "moderate", "strong", "dramatic"]>>;
188
210
  duration: z.ZodDefault<z.ZodNumber>;
189
- easing: z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear"]>>;
211
+ easing: z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear", "spring"]>>;
190
212
  autoZoom: z.ZodDefault<z.ZodObject<{
191
213
  followCursor: z.ZodDefault<z.ZodBoolean>;
192
214
  /** @deprecated Use `intensity` on the parent zoom config instead. */
@@ -209,7 +231,7 @@ declare const EffectsConfigSchema: z.ZodObject<{
209
231
  enabled: boolean;
210
232
  scale: number;
211
233
  intensity: "subtle" | "light" | "moderate" | "strong" | "dramatic";
212
- easing: "ease-in-out" | "ease-in" | "ease-out" | "linear";
234
+ easing: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring";
213
235
  autoZoom: {
214
236
  followCursor: boolean;
215
237
  maxScale: number;
@@ -221,7 +243,7 @@ declare const EffectsConfigSchema: z.ZodObject<{
221
243
  enabled?: boolean | undefined;
222
244
  scale?: number | undefined;
223
245
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
224
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
246
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
225
247
  autoZoom?: {
226
248
  followCursor?: boolean | undefined;
227
249
  maxScale?: number | undefined;
@@ -323,6 +345,29 @@ declare const EffectsConfigSchema: z.ZodObject<{
323
345
  actionSpeed?: number | undefined;
324
346
  transitionFrames?: number | undefined;
325
347
  }>>;
348
+ smartSpeed: z.ZodDefault<z.ZodObject<{
349
+ enabled: z.ZodDefault<z.ZodBoolean>;
350
+ /** Speed multiplier for frames during smartWait (overridden by per-action displaySpeed) */
351
+ waitSpeed: z.ZodDefault<z.ZodNumber>;
352
+ /** Speed multiplier for idle frames (no DOM/network changes) */
353
+ idleSpeed: z.ZodDefault<z.ZodNumber>;
354
+ /** Duration (ms) to ease between speed changes (prevents jarring jumps) */
355
+ transitionDuration: z.ZodDefault<z.ZodNumber>;
356
+ /** Minimum segment duration (ms) — don't speed up very short segments */
357
+ minSegmentDuration: z.ZodDefault<z.ZodNumber>;
358
+ }, "strip", z.ZodTypeAny, {
359
+ transitionDuration: number;
360
+ enabled: boolean;
361
+ idleSpeed: number;
362
+ waitSpeed: number;
363
+ minSegmentDuration: number;
364
+ }, {
365
+ transitionDuration?: number | undefined;
366
+ enabled?: boolean | undefined;
367
+ idleSpeed?: number | undefined;
368
+ waitSpeed?: number | undefined;
369
+ minSegmentDuration?: number | undefined;
370
+ }>>;
326
371
  keystroke: z.ZodDefault<z.ZodObject<{
327
372
  enabled: z.ZodDefault<z.ZodBoolean>;
328
373
  /**
@@ -389,7 +434,7 @@ declare const EffectsConfigSchema: z.ZodObject<{
389
434
  enabled: boolean;
390
435
  scale: number;
391
436
  intensity: "subtle" | "light" | "moderate" | "strong" | "dramatic";
392
- easing: "ease-in-out" | "ease-in" | "ease-out" | "linear";
437
+ easing: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring";
393
438
  autoZoom: {
394
439
  followCursor: boolean;
395
440
  maxScale: number;
@@ -431,6 +476,13 @@ declare const EffectsConfigSchema: z.ZodObject<{
431
476
  actionSpeed: number;
432
477
  transitionFrames: number;
433
478
  };
479
+ smartSpeed: {
480
+ transitionDuration: number;
481
+ enabled: boolean;
482
+ idleSpeed: number;
483
+ waitSpeed: number;
484
+ minSegmentDuration: number;
485
+ };
434
486
  keystroke: {
435
487
  padding: number;
436
488
  enabled: boolean;
@@ -455,7 +507,7 @@ declare const EffectsConfigSchema: z.ZodObject<{
455
507
  enabled?: boolean | undefined;
456
508
  scale?: number | undefined;
457
509
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
458
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
510
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
459
511
  autoZoom?: {
460
512
  followCursor?: boolean | undefined;
461
513
  maxScale?: number | undefined;
@@ -497,6 +549,13 @@ declare const EffectsConfigSchema: z.ZodObject<{
497
549
  actionSpeed?: number | undefined;
498
550
  transitionFrames?: number | undefined;
499
551
  } | undefined;
552
+ smartSpeed?: {
553
+ transitionDuration?: number | undefined;
554
+ enabled?: boolean | undefined;
555
+ idleSpeed?: number | undefined;
556
+ waitSpeed?: number | undefined;
557
+ minSegmentDuration?: number | undefined;
558
+ } | undefined;
500
559
  keystroke?: {
501
560
  padding?: number | undefined;
502
561
  enabled?: boolean | undefined;
@@ -525,6 +584,8 @@ declare const OutputConfigSchema: z.ZodObject<{
525
584
  /** @deprecated Use `preset` instead. Will be removed in v0.7. */
526
585
  quality: z.ZodDefault<z.ZodNumber>;
527
586
  preset: z.ZodOptional<z.ZodEnum<["social", "balanced", "archive"]>>;
587
+ /** Codec override: h264 (default), hevc (10-bit), av1 (smallest files, slow encode) */
588
+ codec: z.ZodDefault<z.ZodEnum<["auto", "h264", "hevc", "av1"]>>;
528
589
  outputDir: z.ZodDefault<z.ZodString>;
529
590
  filename: z.ZodDefault<z.ZodString>;
530
591
  }, "strip", z.ZodTypeAny, {
@@ -533,6 +594,7 @@ declare const OutputConfigSchema: z.ZodObject<{
533
594
  height: number;
534
595
  fps: number;
535
596
  quality: number;
597
+ codec: "auto" | "h264" | "hevc" | "av1";
536
598
  outputDir: string;
537
599
  filename: string;
538
600
  preset?: "social" | "balanced" | "archive" | undefined;
@@ -543,6 +605,7 @@ declare const OutputConfigSchema: z.ZodObject<{
543
605
  fps?: number | undefined;
544
606
  quality?: number | undefined;
545
607
  preset?: "social" | "balanced" | "archive" | undefined;
608
+ codec?: "auto" | "h264" | "hevc" | "av1" | undefined;
546
609
  outputDir?: string | undefined;
547
610
  filename?: string | undefined;
548
611
  }>;
@@ -558,7 +621,7 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
558
621
  scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
559
622
  intensity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["subtle", "light", "moderate", "strong", "dramatic"]>>>;
560
623
  duration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
561
- easing: z.ZodOptional<z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear"]>>>;
624
+ easing: z.ZodOptional<z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear", "spring"]>>>;
562
625
  autoZoom: z.ZodOptional<z.ZodDefault<z.ZodObject<{
563
626
  followCursor: z.ZodDefault<z.ZodBoolean>;
564
627
  /** @deprecated Use `intensity` on the parent zoom config instead. */
@@ -581,7 +644,7 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
581
644
  enabled?: boolean | undefined;
582
645
  scale?: number | undefined;
583
646
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
584
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
647
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
585
648
  autoZoom?: {
586
649
  followCursor: boolean;
587
650
  maxScale: number;
@@ -593,7 +656,7 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
593
656
  enabled?: boolean | undefined;
594
657
  scale?: number | undefined;
595
658
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
596
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
659
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
597
660
  autoZoom?: {
598
661
  followCursor?: boolean | undefined;
599
662
  maxScale?: number | undefined;
@@ -695,6 +758,25 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
695
758
  actionSpeed?: number | undefined;
696
759
  transitionFrames?: number | undefined;
697
760
  }>>;
761
+ smartSpeed: z.ZodOptional<z.ZodObject<{
762
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
763
+ waitSpeed: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
764
+ idleSpeed: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
765
+ transitionDuration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
766
+ minSegmentDuration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
767
+ }, "strip", z.ZodTypeAny, {
768
+ transitionDuration?: number | undefined;
769
+ enabled?: boolean | undefined;
770
+ idleSpeed?: number | undefined;
771
+ waitSpeed?: number | undefined;
772
+ minSegmentDuration?: number | undefined;
773
+ }, {
774
+ transitionDuration?: number | undefined;
775
+ enabled?: boolean | undefined;
776
+ idleSpeed?: number | undefined;
777
+ waitSpeed?: number | undefined;
778
+ minSegmentDuration?: number | undefined;
779
+ }>>;
698
780
  keystroke: z.ZodOptional<z.ZodObject<{
699
781
  enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
700
782
  showTyping: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
@@ -751,7 +833,7 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
751
833
  enabled?: boolean | undefined;
752
834
  scale?: number | undefined;
753
835
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
754
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
836
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
755
837
  autoZoom?: {
756
838
  followCursor: boolean;
757
839
  maxScale: number;
@@ -793,6 +875,13 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
793
875
  actionSpeed?: number | undefined;
794
876
  transitionFrames?: number | undefined;
795
877
  } | undefined;
878
+ smartSpeed?: {
879
+ transitionDuration?: number | undefined;
880
+ enabled?: boolean | undefined;
881
+ idleSpeed?: number | undefined;
882
+ waitSpeed?: number | undefined;
883
+ minSegmentDuration?: number | undefined;
884
+ } | undefined;
796
885
  keystroke?: {
797
886
  padding?: number | undefined;
798
887
  enabled?: boolean | undefined;
@@ -817,7 +906,7 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
817
906
  enabled?: boolean | undefined;
818
907
  scale?: number | undefined;
819
908
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
820
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
909
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
821
910
  autoZoom?: {
822
911
  followCursor?: boolean | undefined;
823
912
  maxScale?: number | undefined;
@@ -859,6 +948,13 @@ declare const StepEffectsOverrideSchema: z.ZodOptional<z.ZodObject<{
859
948
  actionSpeed?: number | undefined;
860
949
  transitionFrames?: number | undefined;
861
950
  } | undefined;
951
+ smartSpeed?: {
952
+ transitionDuration?: number | undefined;
953
+ enabled?: boolean | undefined;
954
+ idleSpeed?: number | undefined;
955
+ waitSpeed?: number | undefined;
956
+ minSegmentDuration?: number | undefined;
957
+ } | undefined;
862
958
  keystroke?: {
863
959
  padding?: number | undefined;
864
960
  enabled?: boolean | undefined;
@@ -1051,6 +1147,28 @@ declare const StepSchema: z.ZodObject<{
1051
1147
  url: string;
1052
1148
  status?: number | undefined;
1053
1149
  timeout?: number | undefined;
1150
+ }>, z.ZodObject<{
1151
+ action: z.ZodLiteral<"smartWait">;
1152
+ /** Condition to wait for */
1153
+ until: z.ZodDefault<z.ZodEnum<["networkIdle", "selector", "domStable"]>>;
1154
+ /** CSS selector (required when until="selector") */
1155
+ selector: z.ZodOptional<z.ZodString>;
1156
+ /** Maximum wait in ms */
1157
+ timeout: z.ZodDefault<z.ZodNumber>;
1158
+ /** Speed multiplier for the wait period in the output video (default: 8×) */
1159
+ displaySpeed: z.ZodDefault<z.ZodNumber>;
1160
+ }, "strip", z.ZodTypeAny, {
1161
+ action: "smartWait";
1162
+ timeout: number;
1163
+ until: "selector" | "networkIdle" | "domStable";
1164
+ displaySpeed: number;
1165
+ selector?: string | undefined;
1166
+ }, {
1167
+ action: "smartWait";
1168
+ selector?: string | undefined;
1169
+ timeout?: number | undefined;
1170
+ until?: "selector" | "networkIdle" | "domStable" | undefined;
1171
+ displaySpeed?: number | undefined;
1054
1172
  }>]>, "many">;
1055
1173
  captureDelay: z.ZodDefault<z.ZodNumber>;
1056
1174
  holdDuration: z.ZodDefault<z.ZodNumber>;
@@ -1062,7 +1180,7 @@ declare const StepSchema: z.ZodObject<{
1062
1180
  scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1063
1181
  intensity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["subtle", "light", "moderate", "strong", "dramatic"]>>>;
1064
1182
  duration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1065
- easing: z.ZodOptional<z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear"]>>>;
1183
+ easing: z.ZodOptional<z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear", "spring"]>>>;
1066
1184
  autoZoom: z.ZodOptional<z.ZodDefault<z.ZodObject<{
1067
1185
  followCursor: z.ZodDefault<z.ZodBoolean>;
1068
1186
  /** @deprecated Use `intensity` on the parent zoom config instead. */
@@ -1085,7 +1203,7 @@ declare const StepSchema: z.ZodObject<{
1085
1203
  enabled?: boolean | undefined;
1086
1204
  scale?: number | undefined;
1087
1205
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1088
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
1206
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1089
1207
  autoZoom?: {
1090
1208
  followCursor: boolean;
1091
1209
  maxScale: number;
@@ -1097,7 +1215,7 @@ declare const StepSchema: z.ZodObject<{
1097
1215
  enabled?: boolean | undefined;
1098
1216
  scale?: number | undefined;
1099
1217
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1100
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
1218
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1101
1219
  autoZoom?: {
1102
1220
  followCursor?: boolean | undefined;
1103
1221
  maxScale?: number | undefined;
@@ -1199,6 +1317,25 @@ declare const StepSchema: z.ZodObject<{
1199
1317
  actionSpeed?: number | undefined;
1200
1318
  transitionFrames?: number | undefined;
1201
1319
  }>>;
1320
+ smartSpeed: z.ZodOptional<z.ZodObject<{
1321
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
1322
+ waitSpeed: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1323
+ idleSpeed: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1324
+ transitionDuration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1325
+ minSegmentDuration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
1326
+ }, "strip", z.ZodTypeAny, {
1327
+ transitionDuration?: number | undefined;
1328
+ enabled?: boolean | undefined;
1329
+ idleSpeed?: number | undefined;
1330
+ waitSpeed?: number | undefined;
1331
+ minSegmentDuration?: number | undefined;
1332
+ }, {
1333
+ transitionDuration?: number | undefined;
1334
+ enabled?: boolean | undefined;
1335
+ idleSpeed?: number | undefined;
1336
+ waitSpeed?: number | undefined;
1337
+ minSegmentDuration?: number | undefined;
1338
+ }>>;
1202
1339
  keystroke: z.ZodOptional<z.ZodObject<{
1203
1340
  enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
1204
1341
  showTyping: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
@@ -1255,7 +1392,7 @@ declare const StepSchema: z.ZodObject<{
1255
1392
  enabled?: boolean | undefined;
1256
1393
  scale?: number | undefined;
1257
1394
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1258
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
1395
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1259
1396
  autoZoom?: {
1260
1397
  followCursor: boolean;
1261
1398
  maxScale: number;
@@ -1297,6 +1434,13 @@ declare const StepSchema: z.ZodObject<{
1297
1434
  actionSpeed?: number | undefined;
1298
1435
  transitionFrames?: number | undefined;
1299
1436
  } | undefined;
1437
+ smartSpeed?: {
1438
+ transitionDuration?: number | undefined;
1439
+ enabled?: boolean | undefined;
1440
+ idleSpeed?: number | undefined;
1441
+ waitSpeed?: number | undefined;
1442
+ minSegmentDuration?: number | undefined;
1443
+ } | undefined;
1300
1444
  keystroke?: {
1301
1445
  padding?: number | undefined;
1302
1446
  enabled?: boolean | undefined;
@@ -1321,7 +1465,7 @@ declare const StepSchema: z.ZodObject<{
1321
1465
  enabled?: boolean | undefined;
1322
1466
  scale?: number | undefined;
1323
1467
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1324
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
1468
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1325
1469
  autoZoom?: {
1326
1470
  followCursor?: boolean | undefined;
1327
1471
  maxScale?: number | undefined;
@@ -1363,6 +1507,13 @@ declare const StepSchema: z.ZodObject<{
1363
1507
  actionSpeed?: number | undefined;
1364
1508
  transitionFrames?: number | undefined;
1365
1509
  } | undefined;
1510
+ smartSpeed?: {
1511
+ transitionDuration?: number | undefined;
1512
+ enabled?: boolean | undefined;
1513
+ idleSpeed?: number | undefined;
1514
+ waitSpeed?: number | undefined;
1515
+ minSegmentDuration?: number | undefined;
1516
+ } | undefined;
1366
1517
  keystroke?: {
1367
1518
  padding?: number | undefined;
1368
1519
  enabled?: boolean | undefined;
@@ -1439,6 +1590,12 @@ declare const StepSchema: z.ZodObject<{
1439
1590
  url: string;
1440
1591
  timeout: number;
1441
1592
  status?: number | undefined;
1593
+ } | {
1594
+ action: "smartWait";
1595
+ timeout: number;
1596
+ until: "selector" | "networkIdle" | "domStable";
1597
+ displaySpeed: number;
1598
+ selector?: string | undefined;
1442
1599
  })[];
1443
1600
  captureDelay: number;
1444
1601
  holdDuration: number;
@@ -1450,7 +1607,7 @@ declare const StepSchema: z.ZodObject<{
1450
1607
  enabled?: boolean | undefined;
1451
1608
  scale?: number | undefined;
1452
1609
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1453
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
1610
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1454
1611
  autoZoom?: {
1455
1612
  followCursor: boolean;
1456
1613
  maxScale: number;
@@ -1492,6 +1649,13 @@ declare const StepSchema: z.ZodObject<{
1492
1649
  actionSpeed?: number | undefined;
1493
1650
  transitionFrames?: number | undefined;
1494
1651
  } | undefined;
1652
+ smartSpeed?: {
1653
+ transitionDuration?: number | undefined;
1654
+ enabled?: boolean | undefined;
1655
+ idleSpeed?: number | undefined;
1656
+ waitSpeed?: number | undefined;
1657
+ minSegmentDuration?: number | undefined;
1658
+ } | undefined;
1495
1659
  keystroke?: {
1496
1660
  padding?: number | undefined;
1497
1661
  enabled?: boolean | undefined;
@@ -1568,6 +1732,12 @@ declare const StepSchema: z.ZodObject<{
1568
1732
  url: string;
1569
1733
  status?: number | undefined;
1570
1734
  timeout?: number | undefined;
1735
+ } | {
1736
+ action: "smartWait";
1737
+ selector?: string | undefined;
1738
+ timeout?: number | undefined;
1739
+ until?: "selector" | "networkIdle" | "domStable" | undefined;
1740
+ displaySpeed?: number | undefined;
1571
1741
  })[];
1572
1742
  name?: string | undefined;
1573
1743
  captureDelay?: number | undefined;
@@ -1579,7 +1749,7 @@ declare const StepSchema: z.ZodObject<{
1579
1749
  enabled?: boolean | undefined;
1580
1750
  scale?: number | undefined;
1581
1751
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1582
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
1752
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1583
1753
  autoZoom?: {
1584
1754
  followCursor?: boolean | undefined;
1585
1755
  maxScale?: number | undefined;
@@ -1621,6 +1791,13 @@ declare const StepSchema: z.ZodObject<{
1621
1791
  actionSpeed?: number | undefined;
1622
1792
  transitionFrames?: number | undefined;
1623
1793
  } | undefined;
1794
+ smartSpeed?: {
1795
+ transitionDuration?: number | undefined;
1796
+ enabled?: boolean | undefined;
1797
+ idleSpeed?: number | undefined;
1798
+ waitSpeed?: number | undefined;
1799
+ minSegmentDuration?: number | undefined;
1800
+ } | undefined;
1624
1801
  keystroke?: {
1625
1802
  padding?: number | undefined;
1626
1803
  enabled?: boolean | undefined;
@@ -1694,7 +1871,7 @@ declare const ScenarioSchema: z.ZodObject<{
1694
1871
  */
1695
1872
  intensity: z.ZodDefault<z.ZodEnum<["subtle", "light", "moderate", "strong", "dramatic"]>>;
1696
1873
  duration: z.ZodDefault<z.ZodNumber>;
1697
- easing: z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear"]>>;
1874
+ easing: z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear", "spring"]>>;
1698
1875
  autoZoom: z.ZodDefault<z.ZodObject<{
1699
1876
  followCursor: z.ZodDefault<z.ZodBoolean>;
1700
1877
  /** @deprecated Use `intensity` on the parent zoom config instead. */
@@ -1717,7 +1894,7 @@ declare const ScenarioSchema: z.ZodObject<{
1717
1894
  enabled: boolean;
1718
1895
  scale: number;
1719
1896
  intensity: "subtle" | "light" | "moderate" | "strong" | "dramatic";
1720
- easing: "ease-in-out" | "ease-in" | "ease-out" | "linear";
1897
+ easing: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring";
1721
1898
  autoZoom: {
1722
1899
  followCursor: boolean;
1723
1900
  maxScale: number;
@@ -1729,7 +1906,7 @@ declare const ScenarioSchema: z.ZodObject<{
1729
1906
  enabled?: boolean | undefined;
1730
1907
  scale?: number | undefined;
1731
1908
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1732
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
1909
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1733
1910
  autoZoom?: {
1734
1911
  followCursor?: boolean | undefined;
1735
1912
  maxScale?: number | undefined;
@@ -1831,6 +2008,29 @@ declare const ScenarioSchema: z.ZodObject<{
1831
2008
  actionSpeed?: number | undefined;
1832
2009
  transitionFrames?: number | undefined;
1833
2010
  }>>;
2011
+ smartSpeed: z.ZodDefault<z.ZodObject<{
2012
+ enabled: z.ZodDefault<z.ZodBoolean>;
2013
+ /** Speed multiplier for frames during smartWait (overridden by per-action displaySpeed) */
2014
+ waitSpeed: z.ZodDefault<z.ZodNumber>;
2015
+ /** Speed multiplier for idle frames (no DOM/network changes) */
2016
+ idleSpeed: z.ZodDefault<z.ZodNumber>;
2017
+ /** Duration (ms) to ease between speed changes (prevents jarring jumps) */
2018
+ transitionDuration: z.ZodDefault<z.ZodNumber>;
2019
+ /** Minimum segment duration (ms) — don't speed up very short segments */
2020
+ minSegmentDuration: z.ZodDefault<z.ZodNumber>;
2021
+ }, "strip", z.ZodTypeAny, {
2022
+ transitionDuration: number;
2023
+ enabled: boolean;
2024
+ idleSpeed: number;
2025
+ waitSpeed: number;
2026
+ minSegmentDuration: number;
2027
+ }, {
2028
+ transitionDuration?: number | undefined;
2029
+ enabled?: boolean | undefined;
2030
+ idleSpeed?: number | undefined;
2031
+ waitSpeed?: number | undefined;
2032
+ minSegmentDuration?: number | undefined;
2033
+ }>>;
1834
2034
  keystroke: z.ZodDefault<z.ZodObject<{
1835
2035
  enabled: z.ZodDefault<z.ZodBoolean>;
1836
2036
  /**
@@ -1897,7 +2097,7 @@ declare const ScenarioSchema: z.ZodObject<{
1897
2097
  enabled: boolean;
1898
2098
  scale: number;
1899
2099
  intensity: "subtle" | "light" | "moderate" | "strong" | "dramatic";
1900
- easing: "ease-in-out" | "ease-in" | "ease-out" | "linear";
2100
+ easing: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring";
1901
2101
  autoZoom: {
1902
2102
  followCursor: boolean;
1903
2103
  maxScale: number;
@@ -1939,6 +2139,13 @@ declare const ScenarioSchema: z.ZodObject<{
1939
2139
  actionSpeed: number;
1940
2140
  transitionFrames: number;
1941
2141
  };
2142
+ smartSpeed: {
2143
+ transitionDuration: number;
2144
+ enabled: boolean;
2145
+ idleSpeed: number;
2146
+ waitSpeed: number;
2147
+ minSegmentDuration: number;
2148
+ };
1942
2149
  keystroke: {
1943
2150
  padding: number;
1944
2151
  enabled: boolean;
@@ -1963,7 +2170,7 @@ declare const ScenarioSchema: z.ZodObject<{
1963
2170
  enabled?: boolean | undefined;
1964
2171
  scale?: number | undefined;
1965
2172
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
1966
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
2173
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
1967
2174
  autoZoom?: {
1968
2175
  followCursor?: boolean | undefined;
1969
2176
  maxScale?: number | undefined;
@@ -2005,6 +2212,13 @@ declare const ScenarioSchema: z.ZodObject<{
2005
2212
  actionSpeed?: number | undefined;
2006
2213
  transitionFrames?: number | undefined;
2007
2214
  } | undefined;
2215
+ smartSpeed?: {
2216
+ transitionDuration?: number | undefined;
2217
+ enabled?: boolean | undefined;
2218
+ idleSpeed?: number | undefined;
2219
+ waitSpeed?: number | undefined;
2220
+ minSegmentDuration?: number | undefined;
2221
+ } | undefined;
2008
2222
  keystroke?: {
2009
2223
  padding?: number | undefined;
2010
2224
  enabled?: boolean | undefined;
@@ -2032,6 +2246,8 @@ declare const ScenarioSchema: z.ZodObject<{
2032
2246
  /** @deprecated Use `preset` instead. Will be removed in v0.7. */
2033
2247
  quality: z.ZodDefault<z.ZodNumber>;
2034
2248
  preset: z.ZodOptional<z.ZodEnum<["social", "balanced", "archive"]>>;
2249
+ /** Codec override: h264 (default), hevc (10-bit), av1 (smallest files, slow encode) */
2250
+ codec: z.ZodDefault<z.ZodEnum<["auto", "h264", "hevc", "av1"]>>;
2035
2251
  outputDir: z.ZodDefault<z.ZodString>;
2036
2252
  filename: z.ZodDefault<z.ZodString>;
2037
2253
  }, "strip", z.ZodTypeAny, {
@@ -2040,6 +2256,7 @@ declare const ScenarioSchema: z.ZodObject<{
2040
2256
  height: number;
2041
2257
  fps: number;
2042
2258
  quality: number;
2259
+ codec: "auto" | "h264" | "hevc" | "av1";
2043
2260
  outputDir: string;
2044
2261
  filename: string;
2045
2262
  preset?: "social" | "balanced" | "archive" | undefined;
@@ -2050,6 +2267,7 @@ declare const ScenarioSchema: z.ZodObject<{
2050
2267
  fps?: number | undefined;
2051
2268
  quality?: number | undefined;
2052
2269
  preset?: "social" | "balanced" | "archive" | undefined;
2270
+ codec?: "auto" | "h264" | "hevc" | "av1" | undefined;
2053
2271
  outputDir?: string | undefined;
2054
2272
  filename?: string | undefined;
2055
2273
  }>>;
@@ -2244,6 +2462,28 @@ declare const ScenarioSchema: z.ZodObject<{
2244
2462
  url: string;
2245
2463
  status?: number | undefined;
2246
2464
  timeout?: number | undefined;
2465
+ }>, z.ZodObject<{
2466
+ action: z.ZodLiteral<"smartWait">;
2467
+ /** Condition to wait for */
2468
+ until: z.ZodDefault<z.ZodEnum<["networkIdle", "selector", "domStable"]>>;
2469
+ /** CSS selector (required when until="selector") */
2470
+ selector: z.ZodOptional<z.ZodString>;
2471
+ /** Maximum wait in ms */
2472
+ timeout: z.ZodDefault<z.ZodNumber>;
2473
+ /** Speed multiplier for the wait period in the output video (default: 8×) */
2474
+ displaySpeed: z.ZodDefault<z.ZodNumber>;
2475
+ }, "strip", z.ZodTypeAny, {
2476
+ action: "smartWait";
2477
+ timeout: number;
2478
+ until: "selector" | "networkIdle" | "domStable";
2479
+ displaySpeed: number;
2480
+ selector?: string | undefined;
2481
+ }, {
2482
+ action: "smartWait";
2483
+ selector?: string | undefined;
2484
+ timeout?: number | undefined;
2485
+ until?: "selector" | "networkIdle" | "domStable" | undefined;
2486
+ displaySpeed?: number | undefined;
2247
2487
  }>]>, "many">;
2248
2488
  captureDelay: z.ZodDefault<z.ZodNumber>;
2249
2489
  holdDuration: z.ZodDefault<z.ZodNumber>;
@@ -2255,7 +2495,7 @@ declare const ScenarioSchema: z.ZodObject<{
2255
2495
  scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
2256
2496
  intensity: z.ZodOptional<z.ZodDefault<z.ZodEnum<["subtle", "light", "moderate", "strong", "dramatic"]>>>;
2257
2497
  duration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
2258
- easing: z.ZodOptional<z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear"]>>>;
2498
+ easing: z.ZodOptional<z.ZodDefault<z.ZodEnum<["ease-in-out", "ease-in", "ease-out", "linear", "spring"]>>>;
2259
2499
  autoZoom: z.ZodOptional<z.ZodDefault<z.ZodObject<{
2260
2500
  followCursor: z.ZodDefault<z.ZodBoolean>;
2261
2501
  /** @deprecated Use `intensity` on the parent zoom config instead. */
@@ -2278,7 +2518,7 @@ declare const ScenarioSchema: z.ZodObject<{
2278
2518
  enabled?: boolean | undefined;
2279
2519
  scale?: number | undefined;
2280
2520
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
2281
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
2521
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
2282
2522
  autoZoom?: {
2283
2523
  followCursor: boolean;
2284
2524
  maxScale: number;
@@ -2290,7 +2530,7 @@ declare const ScenarioSchema: z.ZodObject<{
2290
2530
  enabled?: boolean | undefined;
2291
2531
  scale?: number | undefined;
2292
2532
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
2293
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
2533
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
2294
2534
  autoZoom?: {
2295
2535
  followCursor?: boolean | undefined;
2296
2536
  maxScale?: number | undefined;
@@ -2392,6 +2632,25 @@ declare const ScenarioSchema: z.ZodObject<{
2392
2632
  actionSpeed?: number | undefined;
2393
2633
  transitionFrames?: number | undefined;
2394
2634
  }>>;
2635
+ smartSpeed: z.ZodOptional<z.ZodObject<{
2636
+ enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
2637
+ waitSpeed: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
2638
+ idleSpeed: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
2639
+ transitionDuration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
2640
+ minSegmentDuration: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
2641
+ }, "strip", z.ZodTypeAny, {
2642
+ transitionDuration?: number | undefined;
2643
+ enabled?: boolean | undefined;
2644
+ idleSpeed?: number | undefined;
2645
+ waitSpeed?: number | undefined;
2646
+ minSegmentDuration?: number | undefined;
2647
+ }, {
2648
+ transitionDuration?: number | undefined;
2649
+ enabled?: boolean | undefined;
2650
+ idleSpeed?: number | undefined;
2651
+ waitSpeed?: number | undefined;
2652
+ minSegmentDuration?: number | undefined;
2653
+ }>>;
2395
2654
  keystroke: z.ZodOptional<z.ZodObject<{
2396
2655
  enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
2397
2656
  showTyping: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
@@ -2448,7 +2707,7 @@ declare const ScenarioSchema: z.ZodObject<{
2448
2707
  enabled?: boolean | undefined;
2449
2708
  scale?: number | undefined;
2450
2709
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
2451
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
2710
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
2452
2711
  autoZoom?: {
2453
2712
  followCursor: boolean;
2454
2713
  maxScale: number;
@@ -2490,6 +2749,13 @@ declare const ScenarioSchema: z.ZodObject<{
2490
2749
  actionSpeed?: number | undefined;
2491
2750
  transitionFrames?: number | undefined;
2492
2751
  } | undefined;
2752
+ smartSpeed?: {
2753
+ transitionDuration?: number | undefined;
2754
+ enabled?: boolean | undefined;
2755
+ idleSpeed?: number | undefined;
2756
+ waitSpeed?: number | undefined;
2757
+ minSegmentDuration?: number | undefined;
2758
+ } | undefined;
2493
2759
  keystroke?: {
2494
2760
  padding?: number | undefined;
2495
2761
  enabled?: boolean | undefined;
@@ -2514,7 +2780,7 @@ declare const ScenarioSchema: z.ZodObject<{
2514
2780
  enabled?: boolean | undefined;
2515
2781
  scale?: number | undefined;
2516
2782
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
2517
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
2783
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
2518
2784
  autoZoom?: {
2519
2785
  followCursor?: boolean | undefined;
2520
2786
  maxScale?: number | undefined;
@@ -2556,6 +2822,13 @@ declare const ScenarioSchema: z.ZodObject<{
2556
2822
  actionSpeed?: number | undefined;
2557
2823
  transitionFrames?: number | undefined;
2558
2824
  } | undefined;
2825
+ smartSpeed?: {
2826
+ transitionDuration?: number | undefined;
2827
+ enabled?: boolean | undefined;
2828
+ idleSpeed?: number | undefined;
2829
+ waitSpeed?: number | undefined;
2830
+ minSegmentDuration?: number | undefined;
2831
+ } | undefined;
2559
2832
  keystroke?: {
2560
2833
  padding?: number | undefined;
2561
2834
  enabled?: boolean | undefined;
@@ -2632,6 +2905,12 @@ declare const ScenarioSchema: z.ZodObject<{
2632
2905
  url: string;
2633
2906
  timeout: number;
2634
2907
  status?: number | undefined;
2908
+ } | {
2909
+ action: "smartWait";
2910
+ timeout: number;
2911
+ until: "selector" | "networkIdle" | "domStable";
2912
+ displaySpeed: number;
2913
+ selector?: string | undefined;
2635
2914
  })[];
2636
2915
  captureDelay: number;
2637
2916
  holdDuration: number;
@@ -2643,7 +2922,7 @@ declare const ScenarioSchema: z.ZodObject<{
2643
2922
  enabled?: boolean | undefined;
2644
2923
  scale?: number | undefined;
2645
2924
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
2646
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
2925
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
2647
2926
  autoZoom?: {
2648
2927
  followCursor: boolean;
2649
2928
  maxScale: number;
@@ -2685,6 +2964,13 @@ declare const ScenarioSchema: z.ZodObject<{
2685
2964
  actionSpeed?: number | undefined;
2686
2965
  transitionFrames?: number | undefined;
2687
2966
  } | undefined;
2967
+ smartSpeed?: {
2968
+ transitionDuration?: number | undefined;
2969
+ enabled?: boolean | undefined;
2970
+ idleSpeed?: number | undefined;
2971
+ waitSpeed?: number | undefined;
2972
+ minSegmentDuration?: number | undefined;
2973
+ } | undefined;
2688
2974
  keystroke?: {
2689
2975
  padding?: number | undefined;
2690
2976
  enabled?: boolean | undefined;
@@ -2761,6 +3047,12 @@ declare const ScenarioSchema: z.ZodObject<{
2761
3047
  url: string;
2762
3048
  status?: number | undefined;
2763
3049
  timeout?: number | undefined;
3050
+ } | {
3051
+ action: "smartWait";
3052
+ selector?: string | undefined;
3053
+ timeout?: number | undefined;
3054
+ until?: "selector" | "networkIdle" | "domStable" | undefined;
3055
+ displaySpeed?: number | undefined;
2764
3056
  })[];
2765
3057
  name?: string | undefined;
2766
3058
  captureDelay?: number | undefined;
@@ -2772,7 +3064,7 @@ declare const ScenarioSchema: z.ZodObject<{
2772
3064
  enabled?: boolean | undefined;
2773
3065
  scale?: number | undefined;
2774
3066
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
2775
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
3067
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
2776
3068
  autoZoom?: {
2777
3069
  followCursor?: boolean | undefined;
2778
3070
  maxScale?: number | undefined;
@@ -2814,6 +3106,13 @@ declare const ScenarioSchema: z.ZodObject<{
2814
3106
  actionSpeed?: number | undefined;
2815
3107
  transitionFrames?: number | undefined;
2816
3108
  } | undefined;
3109
+ smartSpeed?: {
3110
+ transitionDuration?: number | undefined;
3111
+ enabled?: boolean | undefined;
3112
+ idleSpeed?: number | undefined;
3113
+ waitSpeed?: number | undefined;
3114
+ minSegmentDuration?: number | undefined;
3115
+ } | undefined;
2817
3116
  keystroke?: {
2818
3117
  padding?: number | undefined;
2819
3118
  enabled?: boolean | undefined;
@@ -2842,7 +3141,7 @@ declare const ScenarioSchema: z.ZodObject<{
2842
3141
  enabled: boolean;
2843
3142
  scale: number;
2844
3143
  intensity: "subtle" | "light" | "moderate" | "strong" | "dramatic";
2845
- easing: "ease-in-out" | "ease-in" | "ease-out" | "linear";
3144
+ easing: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring";
2846
3145
  autoZoom: {
2847
3146
  followCursor: boolean;
2848
3147
  maxScale: number;
@@ -2884,6 +3183,13 @@ declare const ScenarioSchema: z.ZodObject<{
2884
3183
  actionSpeed: number;
2885
3184
  transitionFrames: number;
2886
3185
  };
3186
+ smartSpeed: {
3187
+ transitionDuration: number;
3188
+ enabled: boolean;
3189
+ idleSpeed: number;
3190
+ waitSpeed: number;
3191
+ minSegmentDuration: number;
3192
+ };
2887
3193
  keystroke: {
2888
3194
  padding: number;
2889
3195
  enabled: boolean;
@@ -2913,6 +3219,7 @@ declare const ScenarioSchema: z.ZodObject<{
2913
3219
  height: number;
2914
3220
  fps: number;
2915
3221
  quality: number;
3222
+ codec: "auto" | "h264" | "hevc" | "av1";
2916
3223
  outputDir: string;
2917
3224
  filename: string;
2918
3225
  preset?: "social" | "balanced" | "archive" | undefined;
@@ -2974,6 +3281,12 @@ declare const ScenarioSchema: z.ZodObject<{
2974
3281
  url: string;
2975
3282
  timeout: number;
2976
3283
  status?: number | undefined;
3284
+ } | {
3285
+ action: "smartWait";
3286
+ timeout: number;
3287
+ until: "selector" | "networkIdle" | "domStable";
3288
+ displaySpeed: number;
3289
+ selector?: string | undefined;
2977
3290
  })[];
2978
3291
  captureDelay: number;
2979
3292
  holdDuration: number;
@@ -2985,7 +3298,7 @@ declare const ScenarioSchema: z.ZodObject<{
2985
3298
  enabled?: boolean | undefined;
2986
3299
  scale?: number | undefined;
2987
3300
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
2988
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
3301
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
2989
3302
  autoZoom?: {
2990
3303
  followCursor: boolean;
2991
3304
  maxScale: number;
@@ -3027,6 +3340,13 @@ declare const ScenarioSchema: z.ZodObject<{
3027
3340
  actionSpeed?: number | undefined;
3028
3341
  transitionFrames?: number | undefined;
3029
3342
  } | undefined;
3343
+ smartSpeed?: {
3344
+ transitionDuration?: number | undefined;
3345
+ enabled?: boolean | undefined;
3346
+ idleSpeed?: number | undefined;
3347
+ waitSpeed?: number | undefined;
3348
+ minSegmentDuration?: number | undefined;
3349
+ } | undefined;
3030
3350
  keystroke?: {
3031
3351
  padding?: number | undefined;
3032
3352
  enabled?: boolean | undefined;
@@ -3113,6 +3433,12 @@ declare const ScenarioSchema: z.ZodObject<{
3113
3433
  url: string;
3114
3434
  status?: number | undefined;
3115
3435
  timeout?: number | undefined;
3436
+ } | {
3437
+ action: "smartWait";
3438
+ selector?: string | undefined;
3439
+ timeout?: number | undefined;
3440
+ until?: "selector" | "networkIdle" | "domStable" | undefined;
3441
+ displaySpeed?: number | undefined;
3116
3442
  })[];
3117
3443
  name?: string | undefined;
3118
3444
  captureDelay?: number | undefined;
@@ -3124,7 +3450,7 @@ declare const ScenarioSchema: z.ZodObject<{
3124
3450
  enabled?: boolean | undefined;
3125
3451
  scale?: number | undefined;
3126
3452
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
3127
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
3453
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
3128
3454
  autoZoom?: {
3129
3455
  followCursor?: boolean | undefined;
3130
3456
  maxScale?: number | undefined;
@@ -3166,6 +3492,13 @@ declare const ScenarioSchema: z.ZodObject<{
3166
3492
  actionSpeed?: number | undefined;
3167
3493
  transitionFrames?: number | undefined;
3168
3494
  } | undefined;
3495
+ smartSpeed?: {
3496
+ transitionDuration?: number | undefined;
3497
+ enabled?: boolean | undefined;
3498
+ idleSpeed?: number | undefined;
3499
+ waitSpeed?: number | undefined;
3500
+ minSegmentDuration?: number | undefined;
3501
+ } | undefined;
3169
3502
  keystroke?: {
3170
3503
  padding?: number | undefined;
3171
3504
  enabled?: boolean | undefined;
@@ -3192,7 +3525,7 @@ declare const ScenarioSchema: z.ZodObject<{
3192
3525
  enabled?: boolean | undefined;
3193
3526
  scale?: number | undefined;
3194
3527
  intensity?: "subtle" | "light" | "moderate" | "strong" | "dramatic" | undefined;
3195
- easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | undefined;
3528
+ easing?: "ease-in-out" | "ease-in" | "ease-out" | "linear" | "spring" | undefined;
3196
3529
  autoZoom?: {
3197
3530
  followCursor?: boolean | undefined;
3198
3531
  maxScale?: number | undefined;
@@ -3234,6 +3567,13 @@ declare const ScenarioSchema: z.ZodObject<{
3234
3567
  actionSpeed?: number | undefined;
3235
3568
  transitionFrames?: number | undefined;
3236
3569
  } | undefined;
3570
+ smartSpeed?: {
3571
+ transitionDuration?: number | undefined;
3572
+ enabled?: boolean | undefined;
3573
+ idleSpeed?: number | undefined;
3574
+ waitSpeed?: number | undefined;
3575
+ minSegmentDuration?: number | undefined;
3576
+ } | undefined;
3237
3577
  keystroke?: {
3238
3578
  padding?: number | undefined;
3239
3579
  enabled?: boolean | undefined;
@@ -3265,6 +3605,7 @@ declare const ScenarioSchema: z.ZodObject<{
3265
3605
  fps?: number | undefined;
3266
3606
  quality?: number | undefined;
3267
3607
  preset?: "social" | "balanced" | "archive" | undefined;
3608
+ codec?: "auto" | "h264" | "hevc" | "av1" | undefined;
3268
3609
  outputDir?: string | undefined;
3269
3610
  filename?: string | undefined;
3270
3611
  } | undefined;
@@ -3311,6 +3652,10 @@ interface CapturedFrame {
3311
3652
  keystrokes?: KeystrokeEvent[];
3312
3653
  /** True when the frame was captured during a scroll action. */
3313
3654
  isScrolling?: boolean;
3655
+ /** True when the frame was captured during a smartWait period. */
3656
+ isWaitingPhase?: boolean;
3657
+ /** Speed multiplier for this frame when in a smartWait phase. */
3658
+ displaySpeed?: number;
3314
3659
  }
3315
3660
  interface ComposedFrame {
3316
3661
  index: number;
@@ -3371,6 +3716,12 @@ declare class ClipwiseRecorder {
3371
3716
  private keystrokeSessionId;
3372
3717
  private currentStepIndex;
3373
3718
  private isScrolling;
3719
+ private isWaitingPhase;
3720
+ private currentDisplaySpeed?;
3721
+ /** Tracks active infinite CSS animations (spinners/loaders). Count > 0 → loading state. */
3722
+ private activeLoaderAnimations;
3723
+ /** Whether auto-loader detection is active (derived from smartSpeed.enabled). */
3724
+ private loaderDetectionEnabled;
3374
3725
  private cursorPosition;
3375
3726
  private viewport;
3376
3727
  private deviceScaleFactor;
@@ -3550,6 +3901,15 @@ interface FrameContext {
3550
3901
  }>;
3551
3902
  /** When present, skip redundant per-frame SVG generation for background/watermark/device-frame. */
3552
3903
  staticLayers?: StaticLayers;
3904
+ /**
3905
+ * Interpolated focus point override (CSS viewport coordinates).
3906
+ * When set, zoom uses this instead of per-frame click/cursor position,
3907
+ * enabling smooth panning between adjacent click targets within a zone.
3908
+ */
3909
+ focusOverride?: {
3910
+ x: number;
3911
+ y: number;
3912
+ };
3553
3913
  }
3554
3914
 
3555
3915
  declare class CanvasRenderer {
@@ -3581,10 +3941,33 @@ declare class CanvasRenderer {
3581
3941
  * Calculate per-frame rendering context (zoom scale, click progress, cursor trail).
3582
3942
  */
3583
3943
  private calculateFrameContexts;
3944
+ /**
3945
+ * Interpolate the zoom focus point between adjacent clicks within a zone.
3946
+ *
3947
+ * Without this, the camera jumps instantly from one click position to the
3948
+ * next when a merged zone contains multiple clicks. This method produces
3949
+ * a smooth pan by linearly interpolating between the previous and next
3950
+ * click positions relative to the current frame index.
3951
+ *
3952
+ * Falls back to the nearest click position when the frame is before the
3953
+ * first click or after the last click in the lookup.
3954
+ */
3955
+ private interpolateFocusInZone;
3584
3956
  /**
3585
3957
  * Apply speed ramping: slow down near actions, speed up during idle.
3586
3958
  */
3587
3959
  private applySpeedRamp;
3960
+ /**
3961
+ * Apply smart speed: compress smartWait periods based on per-frame metadata.
3962
+ *
3963
+ * Unlike applySpeedRamp (which uses click proximity heuristics), smartSpeed
3964
+ * reads the `isWaitingPhase` flag set by the recorder during smartWait actions.
3965
+ * Frames in a waiting phase are downsampled by their `displaySpeed` multiplier.
3966
+ *
3967
+ * Streaming-compatible: each frame is independently decidable (no lookahead
3968
+ * needed), so this can run inline during streaming composition.
3969
+ */
3970
+ private applySmartSpeed;
3588
3971
  /**
3589
3972
  * Returns true when no effect requires the full frame array upfront.
3590
3973
  *
@@ -3611,6 +3994,15 @@ declare class CanvasRenderer {
3611
3994
  * using the same applyTransitionsToStream() logic as composeStream().
3612
3995
  */
3613
3996
  composeStreamOnline(source: AsyncIterable<CapturedFrame>): AsyncGenerator<ComposedFrame>;
3997
+ /**
3998
+ * Inline async filter for smartSpeed in streaming pipelines.
3999
+ *
4000
+ * Applies ease-in at the start of a waiting phase: the first
4001
+ * `transitionMargin` frames are kept at normal speed so the loader
4002
+ * is visible, then frames are skipped at displaySpeed rate.
4003
+ * When waiting ends, frames immediately return to normal speed.
4004
+ */
4005
+ private filterSmartSpeedInline;
3614
4006
  /**
3615
4007
  * Worker-pool online streaming: dispatches frame i to a worker as soon as
3616
4008
  * frame i + transitionFrames has arrived from the source.
@@ -3871,6 +4263,57 @@ declare function calculatePanOffset(focusPoint: {
3871
4263
  * Smoothly interpolate (lerp) between current and target zoom values.
3872
4264
  */
3873
4265
  declare function lerpZoom(current: number, target: number, factor: number): number;
4266
+ type ZoomEasing = "cubic" | "spring";
4267
+ /**
4268
+ * Critically-damped spring easing — smoother than cubic for zoom transitions.
4269
+ *
4270
+ * Unlike cubic bezier which has a symmetric S-curve, spring easing has a
4271
+ * faster initial response and a more natural deceleration. This produces
4272
+ * the "Screen Studio feel" where zooms snap to their target fluidly.
4273
+ *
4274
+ * The function solves x(t) = 1 - (1 + ωt) · e^(-ωt) for a critically-damped
4275
+ * harmonic oscillator (no overshoot, no bounce).
4276
+ *
4277
+ * @param t - Progress in [0, 1]
4278
+ */
4279
+ declare function springEasing(t: number): number;
4280
+ /**
4281
+ * Apply the selected easing function.
4282
+ */
4283
+ declare function applyZoomEasing(t: number, easing?: ZoomEasing): number;
4284
+ interface ZoomZone {
4285
+ /** First click frame index in the zone */
4286
+ start: number;
4287
+ /** Last click frame index in the zone */
4288
+ end: number;
4289
+ }
4290
+ /**
4291
+ * Merge nearby clicks into continuous "zoom zones".
4292
+ *
4293
+ * When two clicks are fewer than `mergeGap` frames apart, they belong to the
4294
+ * same zone. Frames INSIDE a zone stay at full zoom (with smooth pan between
4295
+ * focus points), frames OUTSIDE ease in/out with transition curves.
4296
+ *
4297
+ * This eliminates the jarring zoom-out → zoom-in pattern that occurs when
4298
+ * multiple interactions happen in the same UI region.
4299
+ *
4300
+ * @param clickLookup Sorted click frame indices from buildZoomClickLookup()
4301
+ * @param mergeGap Maximum frame gap to merge (default: transitionFrames × 1.5)
4302
+ */
4303
+ declare function mergeClickZones(clickLookup: readonly number[], mergeGap: number): ZoomZone[];
4304
+ /**
4305
+ * Calculate adaptive zoom scale using merged click zones + spring easing.
4306
+ *
4307
+ * - Inside a zone → full maxScale (smooth hold)
4308
+ * - Transition in/out → spring-eased interpolation
4309
+ * - Outside all zones → 1.0 (no zoom)
4310
+ *
4311
+ * This is the recommended API for Phase 2 and later — replaces
4312
+ * calculateAdaptiveZoomFromLookup() when zone-aware zoom is enabled.
4313
+ *
4314
+ * O(log z) per call via binary search on zones.
4315
+ */
4316
+ declare function calculateAdaptiveZoomFromZones(zones: readonly ZoomZone[], currentIndex: number, maxScale: number, transitionFrames: number, easing?: ZoomEasing): number;
3874
4317
 
3875
4318
  type CursorEffect = EffectsConfig["cursor"];
3876
4319
  /**
@@ -3967,4 +4410,4 @@ interface ValidationResult {
3967
4410
  */
3968
4411
  declare function validateScenario(scenario: Scenario): ValidationResult;
3969
4412
 
3970
- export { type AudioConfig, CanvasRenderer, type CapturedFrame, ClipwiseRecorder, type ComposedFrame, type ConcurrentResult, ConcurrentSession, type EffectsConfig, type FrameContext, type KeystrokeEvent, type OutputConfig, type PipelineProgress, type RecordingHandle, type RecordingSession, type Scenario, type Step, type StepAction, type StepEffectsOverride, StreamingSession, type TransitionType, ZOOM_INTENSITY_SCALES, type ZoomIntensity, applyBlur, applyCrossfade, applySlide, applyTransition, buildZoomClickLookup, calculateAdaptiveZoom, calculateAdaptiveZoomFromLookup, calculateAdaptiveZoomInWindow, calculatePanOffset, encodeGif, encodeMp4, encodeMp4Stream, lerpZoom, loadScenario, parseScenario, renderCursorHighlight, renderCursorTrail, renderKeystrokeHud, renderWatermark, resolveZoomScale, savePngSequence, validateScenario };
4413
+ export { type AudioConfig, CanvasRenderer, type CapturedFrame, ClipwiseRecorder, type ComposedFrame, type ConcurrentResult, ConcurrentSession, type EffectsConfig, type FrameContext, type KeystrokeEvent, type OutputConfig, type PipelineProgress, type RecordingHandle, type RecordingSession, type Scenario, type Step, type StepAction, type StepEffectsOverride, StreamingSession, type TransitionType, ZOOM_INTENSITY_SCALES, type ZoomEasing, type ZoomIntensity, type ZoomZone, applyBlur, applyCrossfade, applySlide, applyTransition, applyZoomEasing, buildZoomClickLookup, calculateAdaptiveZoom, calculateAdaptiveZoomFromLookup, calculateAdaptiveZoomFromZones, calculateAdaptiveZoomInWindow, calculatePanOffset, encodeGif, encodeMp4, encodeMp4Stream, lerpZoom, loadScenario, mergeClickZones, parseScenario, renderCursorHighlight, renderCursorTrail, renderKeystrokeHud, renderWatermark, resolveZoomScale, savePngSequence, springEasing, validateScenario };