@omnimedia/omnitool 1.1.0-5 → 1.1.0-8

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 (116) hide show
  1. package/package.json +3 -2
  2. package/s/demo/demo.css +5 -0
  3. package/s/demo/routines/transcode-test.ts +4 -2
  4. package/s/demo/routines/transitions-test.ts +2 -2
  5. package/s/driver/driver.ts +17 -9
  6. package/s/driver/fns/schematic.ts +44 -21
  7. package/s/driver/fns/work.ts +112 -97
  8. package/s/index.html.ts +6 -1
  9. package/s/timeline/index.ts +1 -0
  10. package/s/timeline/parts/basics.ts +1 -1
  11. package/s/timeline/parts/compositor/export.ts +77 -0
  12. package/s/timeline/parts/compositor/parts/html-tree.ts +37 -0
  13. package/s/timeline/parts/compositor/parts/schedulers.ts +85 -0
  14. package/s/timeline/parts/compositor/parts/tree-builder.ts +184 -0
  15. package/s/timeline/parts/compositor/parts/webcodecs-tree.ts +30 -0
  16. package/s/timeline/parts/compositor/playback.ts +81 -0
  17. package/s/timeline/parts/compositor/samplers/html.ts +115 -0
  18. package/s/timeline/parts/compositor/samplers/webcodecs.ts +60 -0
  19. package/s/timeline/parts/item.ts +38 -6
  20. package/s/timeline/parts/media.ts +21 -0
  21. package/s/timeline/parts/waveform.ts +1 -1
  22. package/s/timeline/sugar/builders.ts +102 -0
  23. package/s/timeline/sugar/o.ts +75 -16
  24. package/s/timeline/sugar/omni-test.ts +2 -2
  25. package/s/timeline/sugar/omni.ts +14 -11
  26. package/s/timeline/timeline.ts +22 -0
  27. package/s/timeline/types.ts +29 -0
  28. package/s/timeline/utils/audio-stream.ts +15 -0
  29. package/s/timeline/utils/matrix.ts +33 -0
  30. package/s/timeline/utils/video-cursor.ts +40 -0
  31. package/x/demo/demo.bundle.min.js +39 -37
  32. package/x/demo/demo.bundle.min.js.map +4 -4
  33. package/x/demo/demo.css +5 -0
  34. package/x/demo/routines/transcode-test.js +4 -2
  35. package/x/demo/routines/transcode-test.js.map +1 -1
  36. package/x/demo/routines/transitions-test.js +2 -2
  37. package/x/demo/routines/transitions-test.js.map +1 -1
  38. package/x/driver/driver.d.ts +3 -5
  39. package/x/driver/driver.js +16 -9
  40. package/x/driver/driver.js.map +1 -1
  41. package/x/driver/driver.worker.bundle.min.js +2537 -148
  42. package/x/driver/driver.worker.bundle.min.js.map +4 -4
  43. package/x/driver/fns/host.d.ts +9 -2
  44. package/x/driver/fns/schematic.d.ts +38 -20
  45. package/x/driver/fns/work.d.ts +11 -4
  46. package/x/driver/fns/work.js +105 -96
  47. package/x/driver/fns/work.js.map +1 -1
  48. package/x/features/speech/transcribe/worker.bundle.min.js +541 -541
  49. package/x/features/speech/transcribe/worker.bundle.min.js.map +4 -4
  50. package/x/index.html +13 -3
  51. package/x/index.html.js +6 -1
  52. package/x/index.html.js.map +1 -1
  53. package/x/timeline/index.d.ts +1 -0
  54. package/x/timeline/index.js +1 -0
  55. package/x/timeline/index.js.map +1 -1
  56. package/x/timeline/parts/basics.d.ts +1 -1
  57. package/x/timeline/parts/compositor/export.d.ts +9 -0
  58. package/x/timeline/parts/compositor/export.js +64 -0
  59. package/x/timeline/parts/compositor/export.js.map +1 -0
  60. package/x/timeline/parts/compositor/parts/html-tree.d.ts +3 -0
  61. package/x/timeline/parts/compositor/parts/html-tree.js +40 -0
  62. package/x/timeline/parts/compositor/parts/html-tree.js.map +1 -0
  63. package/x/timeline/parts/compositor/parts/schedulers.d.ts +15 -0
  64. package/x/timeline/parts/compositor/parts/schedulers.js +64 -0
  65. package/x/timeline/parts/compositor/parts/schedulers.js.map +1 -0
  66. package/x/timeline/parts/compositor/parts/tree-builder.d.ts +37 -0
  67. package/x/timeline/parts/compositor/parts/tree-builder.js +147 -0
  68. package/x/timeline/parts/compositor/parts/tree-builder.js.map +1 -0
  69. package/x/timeline/parts/compositor/parts/webcodecs-tree.d.ts +3 -0
  70. package/x/timeline/parts/compositor/parts/webcodecs-tree.js +28 -0
  71. package/x/timeline/parts/compositor/parts/webcodecs-tree.js.map +1 -0
  72. package/x/timeline/parts/compositor/playback.d.ts +19 -0
  73. package/x/timeline/parts/compositor/playback.js +71 -0
  74. package/x/timeline/parts/compositor/playback.js.map +1 -0
  75. package/x/timeline/parts/compositor/samplers/html.d.ts +3 -0
  76. package/x/timeline/parts/compositor/samplers/html.js +106 -0
  77. package/x/timeline/parts/compositor/samplers/html.js.map +1 -0
  78. package/x/timeline/parts/compositor/samplers/webcodecs.d.ts +2 -0
  79. package/x/timeline/parts/compositor/samplers/webcodecs.js +55 -0
  80. package/x/timeline/parts/compositor/samplers/webcodecs.js.map +1 -0
  81. package/x/timeline/parts/item.d.ts +34 -8
  82. package/x/timeline/parts/item.js +6 -3
  83. package/x/timeline/parts/item.js.map +1 -1
  84. package/x/timeline/parts/media.d.ts +3 -0
  85. package/x/timeline/parts/media.js +17 -0
  86. package/x/timeline/parts/media.js.map +1 -1
  87. package/x/timeline/parts/waveform.js +1 -1
  88. package/x/timeline/parts/waveform.js.map +1 -1
  89. package/x/timeline/sugar/builders.d.ts +96 -0
  90. package/x/timeline/sugar/builders.js +108 -0
  91. package/x/timeline/sugar/builders.js.map +1 -0
  92. package/x/timeline/sugar/o.d.ts +21 -8
  93. package/x/timeline/sugar/o.js +63 -14
  94. package/x/timeline/sugar/o.js.map +1 -1
  95. package/x/timeline/sugar/omni-test.js +1 -1
  96. package/x/timeline/sugar/omni-test.js.map +1 -1
  97. package/x/timeline/sugar/omni.d.ts +7 -3
  98. package/x/timeline/sugar/omni.js +9 -8
  99. package/x/timeline/sugar/omni.js.map +1 -1
  100. package/x/timeline/timeline.d.ts +9 -0
  101. package/x/timeline/timeline.js +22 -0
  102. package/x/timeline/timeline.js.map +1 -0
  103. package/x/timeline/types.d.ts +24 -0
  104. package/x/timeline/types.js +2 -0
  105. package/x/timeline/types.js.map +1 -0
  106. package/x/timeline/utils/audio-stream.d.ts +6 -0
  107. package/x/timeline/utils/audio-stream.js +17 -0
  108. package/x/timeline/utils/audio-stream.js.map +1 -0
  109. package/x/timeline/utils/matrix.d.ts +8 -0
  110. package/x/timeline/utils/matrix.js +26 -0
  111. package/x/timeline/utils/matrix.js.map +1 -0
  112. package/x/timeline/utils/video-cursor.d.ts +10 -0
  113. package/x/timeline/utils/video-cursor.js +36 -0
  114. package/x/timeline/utils/video-cursor.js.map +1 -0
  115. package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js +6 -6
  116. package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js.map +4 -4
@@ -1,5 +1,6 @@
1
1
  import { MapG } from "@e280/stz";
2
2
  import { Effect, Kind } from "../parts/item.js";
3
+ import { Video, Gap, Sequence, Stack, Text, Spatial, Audio, Transition } from "./builders.js";
3
4
  export class O {
4
5
  #nextId = 0;
5
6
  #items = new MapG();
@@ -14,35 +15,83 @@ export class O {
14
15
  get items() {
15
16
  return [...this.#items.values()];
16
17
  }
17
- sequence = (...items) => ({
18
+ get itemsMap() {
19
+ return this.#items;
20
+ }
21
+ spatial = (transform) => {
22
+ const item = {
23
+ id: this.#getId(),
24
+ kind: Kind.Spatial,
25
+ transform
26
+ };
27
+ const spatial = new Spatial(item);
28
+ this.register(spatial);
29
+ return spatial;
30
+ };
31
+ sequence = (...items) => new Sequence(this, {
18
32
  id: this.#getId(),
19
33
  kind: Kind.Sequence,
20
- children: items.map(item => this.register(item)),
34
+ childrenIds: items.map((item) => this.register(item))
21
35
  });
22
- stack = (...items) => ({
23
- id: this.#getId(),
36
+ stack = (...items) => new Stack(this, {
24
37
  kind: Kind.Stack,
25
- children: items.map(item => this.register(item)),
26
- });
27
- clip = (media, start, duration) => ({
28
38
  id: this.#getId(),
29
- kind: Kind.Clip,
30
- mediaHash: media.datafile.checksum.hash,
31
- start: start ?? 0,
32
- duration: duration ?? media.duration,
39
+ childrenIds: items.map(item => this.register(item))
33
40
  });
34
- text = (content) => ({
41
+ video = (media, options) => {
42
+ if (!media.hasVideo)
43
+ throw new Error(`Video clip error: media "${media.datafile.filename}" has no video track.`);
44
+ const item = {
45
+ kind: Kind.Video,
46
+ id: this.#getId(),
47
+ mediaHash: media.datafile.checksum.hash,
48
+ start: options?.start ?? 0,
49
+ duration: options?.duration ?? media.duration
50
+ };
51
+ return new Video(item);
52
+ };
53
+ audio = (media, options) => {
54
+ if (!media.hasAudio)
55
+ throw new Error(`Audio clip error: media "${media.datafile.filename}" has no audio track.`);
56
+ const item = {
57
+ kind: Kind.Audio,
58
+ id: this.#getId(),
59
+ mediaHash: media.datafile.checksum.hash,
60
+ start: options?.start ?? 0,
61
+ duration: options?.duration ?? media.duration
62
+ };
63
+ return new Audio(item);
64
+ };
65
+ text = (content) => new Text({
35
66
  id: this.#getId(),
36
- kind: Kind.Text,
37
67
  content,
68
+ kind: Kind.Text,
69
+ color: "#FFFFF"
70
+ });
71
+ gap = (duration) => new Gap({
72
+ id: this.#getId(),
73
+ kind: Kind.Gap,
74
+ duration
38
75
  });
39
76
  transition = {
40
- crossfade: (duration) => ({
77
+ crossfade: (duration) => new Transition({
41
78
  id: this.#getId(),
42
79
  kind: Kind.Transition,
43
80
  effect: Effect.Crossfade,
44
81
  duration,
45
82
  }),
46
83
  };
84
+ transform = (options) => {
85
+ const position = [
86
+ options?.position?.[0] ?? 0,
87
+ options?.position?.[1] ?? 0
88
+ ];
89
+ const scale = [
90
+ options?.scale?.[0] ?? 1,
91
+ options?.scale?.[1] ?? 1
92
+ ];
93
+ const rotation = options?.rotation ?? 0;
94
+ return [position, scale, rotation];
95
+ };
47
96
  }
48
97
  //# sourceMappingURL=o.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"o.js","sourceRoot":"","sources":["../../../s/timeline/sugar/o.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAG9B,OAAO,EAAC,MAAM,EAAQ,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAEnD,MAAM,OAAO,CAAC;IACb,OAAO,GAAG,CAAC,CAAA;IACX,MAAM,GAAG,IAAI,IAAI,EAAgB,CAAA;IAEjC,MAAM;QACL,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;IACtB,CAAC;IAED,QAAQ,CAAC,IAAc;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAC,EAAE,CAAA;IACf,CAAC;IAED,IAAI,KAAK;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,QAAQ,GAAG,CAAC,GAAG,KAAiB,EAAiB,EAAE,CAAC,CAAC;QACpD,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,QAAQ;QACnB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChD,CAAC,CAAA;IAEF,KAAK,GAAG,CAAC,GAAG,KAAiB,EAAc,EAAE,CAAC,CAAC;QAC9C,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChD,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,KAAY,EAAE,KAAc,EAAE,QAAiB,EAAa,EAAE,CAAC,CAAC;QACvE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;QACvC,KAAK,EAAE,KAAK,IAAI,CAAC;QACjB,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ;KACpC,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,OAAe,EAAa,EAAE,CAAC,CAAC;QACvC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO;KACP,CAAC,CAAA;IAEF,UAAU,GAAG;QACZ,SAAS,EAAE,CAAC,QAAgB,EAAmB,EAAE,CAAC,CAAC;YAClD,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,QAAQ;SACR,CAAC;KACF,CAAA;CACD"}
1
+ {"version":3,"file":"o.js","sourceRoot":"","sources":["../../../s/timeline/sugar/o.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ const { mediaA, mediaB } = await omni.load({
14
14
  //
15
15
  // create a timeline
16
16
  //
17
- const timeline = omni.timeline(o => o.sequence(o.clip(mediaA), o.transition.crossfade(600), o.stack(o.clip(mediaB), o.text("hello world"))));
17
+ const timeline = omni.timeline(o => o.sequence(o.video(mediaA), o.transition.crossfade(600), o.stack(o.video(mediaB), o.text("hello world"))));
18
18
  //
19
19
  // log the timeline
20
20
  //
@@ -1 +1 @@
1
- {"version":3,"file":"omni-test.js","sourceRoot":"","sources":["../../../s/timeline/sugar/omni-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAA;AAEhD,EAAE;AACF,yBAAyB;AACzB,EAAE;AAEF,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;AAEvB,EAAE;AACF,+BAA+B;AAC/B,EAAE;AAEF,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IACxC,MAAM,EAAE,SAAS,EAAE;IACnB,MAAM,EAAE,SAAS,EAAE;CACnB,CAAC,CAAA;AAEF,EAAE;AACF,oBAAoB;AACpB,EAAE;AAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAC7C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EACd,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAC3B,CAAC,CAAC,KAAK,CACN,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EACd,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CACrB,CACD,CAAC,CAAA;AAEF,EAAE;AACF,mBAAmB;AACnB,EAAE;AAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"omni-test.js","sourceRoot":"","sources":["../../../s/timeline/sugar/omni-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAA;AAEhD,EAAE;AACF,yBAAyB;AACzB,EAAE;AAEF,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;AAEvB,EAAE;AACF,+BAA+B;AAC/B,EAAE;AAEF,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IACxC,MAAM,EAAE,SAAS,EAAE;IACnB,MAAM,EAAE,SAAS,EAAE;CACnB,CAAC,CAAA;AAEF,EAAE;AACF,oBAAoB;AACpB,EAAE;AAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAC7C,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EACf,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAC3B,CAAC,CAAC,KAAK,CACN,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EACf,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CACrB,CACD,CAAC,CAAA;AAEF,EAAE;AACF,mBAAmB;AACnB,EAAE;AAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA"}
@@ -1,11 +1,15 @@
1
1
  import { O } from "./o.js";
2
- import { Item } from "../parts/item.js";
2
+ import { Timeline } from "../timeline.js";
3
3
  import { Media } from "../parts/media.js";
4
- import { TimelineFile } from "../parts/basics.js";
4
+ import { TimelineItem } from "./builders.js";
5
5
  import { Datafile } from "../utils/datafile.js";
6
+ import { TimelineFile } from "../parts/basics.js";
6
7
  import { ResourcePool } from "../parts/resource-pool.js";
8
+ import { RenderConfig } from "../../driver/fns/schematic.js";
7
9
  export declare class Omni {
10
+ #private;
8
11
  resources: ResourcePool;
9
12
  load: <S extends Record<string, Promise<Datafile>>>(spec: S) => Promise<{ [K in keyof S]: Media; }>;
10
- timeline: (fn: (o: O) => Item.Sequence) => TimelineFile;
13
+ timeline: (fn: (o: O) => TimelineItem) => Timeline;
14
+ render: (timeline: TimelineFile, config: RenderConfig) => Promise<void>;
11
15
  }
@@ -1,20 +1,21 @@
1
1
  import { O } from "./o.js";
2
+ import { Timeline } from "../timeline.js";
3
+ import { Export } from "../parts/compositor/export.js";
2
4
  import { ResourcePool } from "../parts/resource-pool.js";
3
5
  export class Omni {
4
6
  resources = new ResourcePool();
7
+ #export = new Export();
5
8
  load = async (spec) => {
6
9
  return Object.fromEntries(await Promise.all(Object.entries(spec).map(async ([key, value]) => [key, await this.resources.store(await value)])));
7
10
  };
8
11
  timeline = (fn) => {
9
12
  const o = new O();
10
- const sequence = fn(o);
11
- return {
12
- format: "timeline",
13
- info: "https://omniclip.app/",
14
- version: 0,
15
- root: o.register(sequence),
16
- items: o.items,
17
- };
13
+ const root = fn(o);
14
+ o.register(root);
15
+ return new Timeline(root, o.itemsMap);
16
+ };
17
+ render = async (timeline, config) => {
18
+ await this.#export.render(timeline);
18
19
  };
19
20
  }
20
21
  //# sourceMappingURL=omni.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"omni.js","sourceRoot":"","sources":["../../../s/timeline/sugar/omni.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,QAAQ,CAAA;AAKxB,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAA;AAEtD,MAAM,OAAO,IAAI;IAChB,SAAS,GAAG,IAAI,YAAY,EAAE,CAAA;IAE9B,IAAI,GAAG,KAAK,EAA8C,IAAO,EAAE,EAAE;QACpE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CACnE,KAAK,EAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CACrE,CAAC,CAA4B,CAAA;IAC/B,CAAC,CAAA;IAED,QAAQ,GAAG,CAAC,EAA2B,EAAgB,EAAE;QACxD,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QACtB,OAAO;YACN,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;SACd,CAAA;IACF,CAAC,CAAA;CACD"}
1
+ {"version":3,"file":"omni.js","sourceRoot":"","sources":["../../../s/timeline/sugar/omni.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAKvC,OAAO,EAAC,MAAM,EAAC,MAAM,+BAA+B,CAAA;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAA;AAGtD,MAAM,OAAO,IAAI;IAChB,SAAS,GAAG,IAAI,YAAY,EAAE,CAAA;IAC9B,OAAO,GAAG,IAAI,MAAM,EAAE,CAAA;IAEtB,IAAI,GAAG,KAAK,EAA8C,IAAO,EAAE,EAAE;QACpE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CACnE,KAAK,EAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CACrE,CAAC,CAA4B,CAAA;IAC/B,CAAC,CAAA;IAED,QAAQ,GAAG,CAAC,EAA0B,EAAY,EAAE;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,GAAG,KAAK,EAAE,QAAsB,EAAE,MAAoB,EAAE,EAAE;QAC/D,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC,CAAA;CACD"}
@@ -0,0 +1,9 @@
1
+ import { TimelineItem } from "./sugar/builders.js";
2
+ import { Id, TimelineFile } from "./parts/basics.js";
3
+ export declare class Timeline {
4
+ root: TimelineItem;
5
+ private items;
6
+ constructor(root: TimelineItem, items: Map<Id, TimelineItem>);
7
+ require<T extends TimelineItem>(id: Id): T;
8
+ toJSON(): TimelineFile;
9
+ }
@@ -0,0 +1,22 @@
1
+ export class Timeline {
2
+ root;
3
+ items;
4
+ constructor(root, items) {
5
+ this.root = root;
6
+ this.items = items;
7
+ }
8
+ require(id) {
9
+ const item = this.items.get(id);
10
+ return item;
11
+ }
12
+ toJSON() {
13
+ return {
14
+ format: "timeline",
15
+ info: "https://omniclip.app/",
16
+ version: 0,
17
+ rootId: this.root.item.id,
18
+ items: Array.from(this.items.values()).map(item => item.toJSON())
19
+ };
20
+ }
21
+ }
22
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../s/timeline/timeline.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,QAAQ;IACA;IAA4B;IAA/C,YAAmB,IAAkB,EAAU,KAA4B;QAAxD,SAAI,GAAJ,IAAI,CAAc;QAAU,UAAK,GAAL,KAAK,CAAuB;IAAG,CAAC;IAE/E,OAAO,CAAyB,EAAM;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,OAAO,IAAS,CAAA;IAClB,CAAC;IAED,MAAM;QACJ,OAAO;YACR,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SAC/D,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ export type Interpolation = "linear" | "catmullRom";
2
+ export type Keyframe<Value = number> = [time: number, value: Value];
3
+ export type Keyframes<Value = number> = Keyframe<Value>[];
4
+ export type Vec2 = [x: number, y: number];
5
+ export type Transform = [position: Vec2, scale: Vec2, rotation: number];
6
+ export type TrackVec2 = {
7
+ x: Keyframes;
8
+ y: Keyframes;
9
+ };
10
+ export type Anim<T> = {
11
+ terp: Interpolation;
12
+ track: T;
13
+ };
14
+ export type Animations = Anim<TrackTransform>;
15
+ export type TrackTransform = {
16
+ position: TrackVec2;
17
+ scale: TrackVec2;
18
+ rotation: Keyframes;
19
+ };
20
+ export type TransformOptions = {
21
+ position?: Vec2;
22
+ scale?: Vec2;
23
+ rotation?: number;
24
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/timeline/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare class AudioStream {
2
+ private reader;
3
+ constructor(reader: ReadableStreamDefaultReader<AudioData>);
4
+ stream(): AsyncGenerator<AudioData>;
5
+ cancel: () => Promise<void>;
6
+ }
@@ -0,0 +1,17 @@
1
+ export class AudioStream {
2
+ reader;
3
+ constructor(reader) {
4
+ this.reader = reader;
5
+ }
6
+ async *stream() {
7
+ while (true) {
8
+ const { done, value: hit } = await this.reader.read();
9
+ if (done) {
10
+ break;
11
+ }
12
+ yield hit;
13
+ }
14
+ }
15
+ cancel = async () => await this.reader.cancel();
16
+ }
17
+ //# sourceMappingURL=audio-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-stream.js","sourceRoot":"","sources":["../../../s/timeline/utils/audio-stream.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACH;IAApB,YAAoB,MAA8C;QAA9C,WAAM,GAAN,MAAM,CAAwC;IAAG,CAAC;IAEtE,KAAK,CAAC,CAAC,MAAM;QACZ,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;YACnD,IAAI,IAAI,EAAE,CAAC;gBACV,MAAK;YACN,CAAC;YACD,MAAM,GAAG,CAAA;QACV,CAAC;IACF,CAAC;IAED,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;CAC/C"}
@@ -0,0 +1,8 @@
1
+ import { Matrix } from "pixi.js";
2
+ import { Transform } from "../types.js";
3
+ export declare const transformToMat6: (t: Transform) => Mat6;
4
+ export declare const mat6ToMatrix: ([a, b, c, d, tx, ty]: Mat6) => Matrix;
5
+ export declare const transformToMatrix: (t: Transform) => Matrix;
6
+ export declare const mul6: (local: Mat6, parent: Mat6) => Mat6;
7
+ export declare const I6: Mat6;
8
+ export type Mat6 = [a: number, b: number, c: number, d: number, tx: number, ty: number];
@@ -0,0 +1,26 @@
1
+ import { Matrix } from "pixi.js";
2
+ export const transformToMat6 = (t) => {
3
+ const [pos, scl, rotDeg] = t;
4
+ const [x, y] = pos;
5
+ const [sx, sy] = scl;
6
+ const r = rotDeg * Math.PI / 180;
7
+ const cos = Math.cos(r);
8
+ const sin = Math.sin(r);
9
+ return [cos * sx, sin * sx, -sin * sy, cos * sy, x, y];
10
+ };
11
+ export const mat6ToMatrix = ([a, b, c, d, tx, ty]) => new Matrix(a, b, c, d, tx, ty);
12
+ export const transformToMatrix = (t) => mat6ToMatrix(transformToMat6(t));
13
+ export const mul6 = (local, parent) => {
14
+ const [a1, b1, c1, d1, tx1, ty1] = local;
15
+ const [a2, b2, c2, d2, tx2, ty2] = parent;
16
+ return [
17
+ a1 * a2 + c1 * b2,
18
+ b1 * a2 + d1 * b2,
19
+ a1 * c2 + c1 * d2,
20
+ b1 * c2 + d1 * d2,
21
+ a1 * tx2 + c1 * ty2 + tx1,
22
+ b1 * tx2 + d1 * ty2 + ty1
23
+ ];
24
+ };
25
+ export const I6 = [1, 0, 0, 1, 0, 0];
26
+ //# sourceMappingURL=matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../../s/timeline/utils/matrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,SAAS,CAAA;AAG9B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAY,EAAQ,EAAE;IACrD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAA;IAClB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAA;IACpB,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAA;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACvB,OAAO,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AACvD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAO,EAAU,EAAE,CAClE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAE/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAY,EAAE,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAW,EAAE,MAAY,EAAQ,EAAE;IACvD,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;IACxC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAA;IACzC,OAAO;QACN,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QACjB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QACjB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QACjB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QACjB,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG;QACzB,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG;KACzB,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,EAAE,GAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A stateful, forward-only frame cursor for a single clip instance.
3
+ * It efficiently reads a video stream to find the frame nearest to a target timestamp.
4
+ */
5
+ export declare class VideoCursor {
6
+ private reader;
7
+ constructor(reader: ReadableStreamDefaultReader<VideoFrame>);
8
+ atOrNear(targetUs: number): Promise<VideoFrame | undefined>;
9
+ cancel: () => Promise<void>;
10
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * A stateful, forward-only frame cursor for a single clip instance.
3
+ * It efficiently reads a video stream to find the frame nearest to a target timestamp.
4
+ */
5
+ export class VideoCursor {
6
+ reader;
7
+ constructor(reader) {
8
+ this.reader = reader;
9
+ }
10
+ async atOrNear(targetUs) {
11
+ let prev = null;
12
+ while (true) {
13
+ const { done, value: hit } = await this.reader.read();
14
+ if (done) {
15
+ const out = prev ? new VideoFrame(prev) : undefined;
16
+ prev?.close();
17
+ return out;
18
+ }
19
+ const hitUs = hit.timestamp ?? 0;
20
+ if (hitUs >= targetUs) {
21
+ const prevUs = prev?.timestamp ?? Number.NEGATIVE_INFINITY;
22
+ const usePrev = !!prev && Math.abs(prevUs - targetUs) < Math.abs(hitUs - targetUs);
23
+ const chosen = usePrev ? prev : hit;
24
+ const other = usePrev ? hit : prev;
25
+ const copy = new VideoFrame(chosen);
26
+ chosen.close();
27
+ other?.close();
28
+ return copy;
29
+ }
30
+ prev?.close();
31
+ prev = hit;
32
+ }
33
+ }
34
+ cancel = async () => await this.reader.cancel();
35
+ }
36
+ //# sourceMappingURL=video-cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-cursor.js","sourceRoot":"","sources":["../../../s/timeline/utils/video-cursor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,MAA+C;QAA/C,WAAM,GAAN,MAAM,CAAyC;IAAG,CAAC;IAEvE,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,IAAI,IAAI,GAAsB,IAAI,CAAA;QAClC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;YAEnD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBACnD,IAAI,EAAE,KAAK,EAAE,CAAA;gBACb,OAAO,GAAG,CAAA;YACZ,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,IAAI,CAAC,CAAA;YAChC,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC,iBAAiB,CAAA;gBAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAA;gBAElF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAK,CAAC,CAAC,CAAC,GAAG,CAAA;gBACpC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;gBAElC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;gBACnC,MAAM,CAAC,KAAK,EAAE,CAAA;gBACd,KAAK,EAAE,KAAK,EAAE,CAAA;gBACd,OAAO,IAAI,CAAA;YACb,CAAC;YAED,IAAI,EAAE,KAAK,EAAE,CAAA;YACb,IAAI,GAAG,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;CAChD"}
@@ -1,8 +1,8 @@
1
- function ae(t,e){return{error:r=>t.error({...e,...r}),rpcRequest:r=>t.rpcRequest({...e,...r}),rpcError:r=>t.rpcError({...e,...r})}}var _=()=>t=>({plain:t.none,errMessage:t.mix(t.brightRed,t.bold),errName:t.red,errStack:t.mix(t.red,t.dim),timestamp:t.blue,timestampErr:t.red});function he(){return _()}var y=Object.freeze({black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m",bgBlack:"\x1B[40m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m",bgMagenta:"\x1B[45m",bgCyan:"\x1B[46m",bgWhite:"\x1B[47m",bgBrightBlack:"\x1B[100m",bgBrightRed:"\x1B[101m",bgBrightGreen:"\x1B[102m",bgBrightYellow:"\x1B[103m",bgBrightBlue:"\x1B[104m",bgBrightMagenta:"\x1B[105m",bgBrightCyan:"\x1B[106m",bgBrightWhite:"\x1B[107m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",inverse:"\x1B[7m",hidden:"\x1B[8m",strikethrough:"\x1B[9m",reset:"\x1B[0m"});var H=()=>({none:t=>t,uncolor:Ae,mix:qe,hex:_e,rgb:ge,bgRgb:He});function Ae(t){return t.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"")}function qe(...t){return e=>{for(let r of t)e=r(e);return e}}function _e(t){t=t.replace(/^#/,"");let e,r,o,n;if(t.length===3)e=parseInt(t.split("").map(s=>s+s).join(""),16);else if(t.length===6)e=parseInt(t,16);else throw new Error("Invalid hex color");return r=e>>16&255,o=e>>8&255,n=e&255,ge(r,o,n)}function ge(t,e,r){let o=`\x1B[38;2;${t};${e};${r}m`;return n=>`${o}${n}${y.reset}`}function He(t,e,r){let o=`\x1B[48;2;${t};${e};${r}m`;return n=>`${o}${n}${y.reset}`}var M={...Object.fromEntries(Object.entries(y).map(([t])=>[t,e=>e])),...H()};var $={...Object.fromEntries(Object.entries(y).map(([t,e])=>[t,r=>`${e}${r}${y.reset}`])),...H()};function ce(){return typeof Deno<"u"&&typeof Deno.version<"u"}function ue(){return typeof process<"u"&&process.versions&&process.versions.node}function xe(){return ue()?process.env.FORCE_COLOR||process.stdout.isTTY&&process.env.TERM!=="dumb":ce()?Deno.env.get("FORCE_COLOR")||Deno.isatty(Deno.stdout.rid)&&Deno.env.get("TERM")!=="dumb":!1}var pe=()=>xe()?$:M;var U=()=>({colors:t,theme:e})=>{let r=e(t);function o(i){let a=i.stack?`
1
+ function pe(e,t){return{error:r=>e.error({...t,...r}),rpcRequest:r=>e.rpcRequest({...t,...r}),rpcError:r=>e.rpcError({...t,...r})}}var N=()=>e=>({plain:e.none,errMessage:e.mix(e.brightRed,e.bold),errName:e.red,errStack:e.mix(e.red,e.dim),timestamp:e.blue,timestampErr:e.red});function ke(){return N()}var b=Object.freeze({black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m",bgBlack:"\x1B[40m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m",bgMagenta:"\x1B[45m",bgCyan:"\x1B[46m",bgWhite:"\x1B[47m",bgBrightBlack:"\x1B[100m",bgBrightRed:"\x1B[101m",bgBrightGreen:"\x1B[102m",bgBrightYellow:"\x1B[103m",bgBrightBlue:"\x1B[104m",bgBrightMagenta:"\x1B[105m",bgBrightCyan:"\x1B[106m",bgBrightWhite:"\x1B[107m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",inverse:"\x1B[7m",hidden:"\x1B[8m",strikethrough:"\x1B[9m",reset:"\x1B[0m"});var _=()=>({none:e=>e,uncolor:Qe,mix:Ke,hex:Ge,rgb:Se,bgRgb:Xe});function Qe(e){return e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"")}function Ke(...e){return t=>{for(let r of e)t=r(t);return t}}function Ge(e){e=e.replace(/^#/,"");let t,r,o,n;if(e.length===3)t=parseInt(e.split("").map(s=>s+s).join(""),16);else if(e.length===6)t=parseInt(e,16);else throw new Error("Invalid hex color");return r=t>>16&255,o=t>>8&255,n=t&255,Se(r,o,n)}function Se(e,t,r){let o=`\x1B[38;2;${e};${t};${r}m`;return n=>`${o}${n}${b.reset}`}function Xe(e,t,r){let o=`\x1B[48;2;${e};${t};${r}m`;return n=>`${o}${n}${b.reset}`}var A={...Object.fromEntries(Object.entries(b).map(([e])=>[e,t=>t])),..._()};var P={...Object.fromEntries(Object.entries(b).map(([e,t])=>[e,r=>`${t}${r}${b.reset}`])),..._()};function me(){return typeof Deno<"u"&&typeof Deno.version<"u"}function le(){return typeof process<"u"&&process.versions&&process.versions.node}function Ee(){return le()?process.env.FORCE_COLOR||process.stdout.isTTY&&process.env.TERM!=="dumb":me()?Deno.env.get("FORCE_COLOR")||Deno.isatty(Deno.stdout.rid)&&Deno.env.get("TERM")!=="dumb":!1}var de=()=>Ee()?P:A;var L=()=>({colors:e,theme:t})=>{let r=t(e);function o(i){let c=i.stack?`
2
2
  `+i.stack+`
3
- `:"";return[r.errName(i.name+":"),r.errMessage(i.message)].join(" ")+r.errStack(a)}function n(i){return i&&i instanceof Error?o(i):i}function s(i){return i&&i instanceof Error?o(i):r.errMessage(i)}return{stdout:i=>i.map(n),stderr:i=>i.map(s)}};function I(...t){return e=>({stdout:r=>{for(let o of t)r=o(e).stdout(r);return r},stderr:r=>{for(let o of t)r=o(e).stderr(r);return r}})}function Ue(){return{icon:"\u{1F6A8}",now:()=>Date.now()}}var F=t=>({colors:e,theme:r})=>{let o={...Ue(),...t},n=r(e),s=new Date(o.now()),i=s.getUTCFullYear().toString().padStart(4,"0"),a=(s.getUTCMonth()+1).toString().padStart(2,"0"),c=s.getUTCDate().toString().padStart(2,"0"),u=`${i}-${a}-${c}`,p=s.getUTCHours().toString().padStart(2,"0"),m=s.getUTCMinutes().toString().padStart(2,"0"),O=s.getUTCSeconds().toString().padStart(2,"0"),se=s.getUTCMilliseconds().toString().padStart(3,"0"),ie=`${p}:${m}:${O}.${se}`,q=`${u}::${ie}`;return{stdout:T=>[n.timestamp(q),...T],stderr:T=>[n.timestampErr(q),...[o.icon].filter(Boolean),...T]}};function be(){return I(U(),F())}var N=()=>({stdout:async t=>{await Deno.stdout.write(new TextEncoder().encode(t+`
4
- `))},stderr:async t=>{await Deno.stderr.write(new TextEncoder().encode(t+`
5
- `))}});var L=()=>({stdout:async t=>void process.stdout.write(t+`
6
- `),stderr:async t=>void process.stderr.write(t+`
7
- `)});var Y=()=>({stdout:async t=>console.log(t),stderr:async t=>console.error(t)});var ye=()=>ce()?N():ue()?L():Y();var we=()=>({stdout:async()=>{},stderr:async()=>{}});function ve(){return()=>({stdout:t=>t,stderr:t=>t})}var R=class t{static writers={auto:ye,void:we,deno:N,node:L,console:Y};static colors={auto:pe,colorful:()=>$,colorless:()=>M};static themes={auto:he,basic:_};static shapers={auto:be,none:ve,errors:U,timestamp:F};writer=t.writers.auto();colors=t.colors.auto();theme=t.themes.auto();shaper=t.shapers.auto();async log(...e){await this.writer.stdout(this.shaper(this).stdout(e).join(" "))}async error(...e){await this.writer.stderr(this.shaper(this).stderr(e).join(" "))}setWriter(e){return this.writer=e,this}setColors(e){return this.colors=e,this}setTheme(e){return this.theme=e,this}setShaper(...e){return this.shaper=I(...e),this}};var P=class extends R{static dummy(){return new this().setWriter(R.writers.void())}rpcRequest=async({request:e,...r})=>{let o=this.colors.none;this.log(...this.#e(r),o(`${e.method}()`))};rpcError=async({request:e,error:r,...o})=>{this.error(...this.#e(o),`${e.method}()`,r)};#e({meta:e,label:r,remote:o}){let n=this.colors.mix(this.colors.blue,this.colors.dim),s=this.colors.mix(this.colors.cyan,this.colors.dim);return[e?this.#t(e):void 0,r||void 0,o===void 0?void 0:o?n("<-"):s("->")].filter(Boolean)}#t(e){let{headers:r}=e.request;return[this.colors.yellow(`[${e.ip}]`),this.colors.green(r.origin?r.origin:"(no-origin)")].join(" ")}};var l=class extends P{rpcRequest=async()=>{}};var d=Object.freeze({eq(t,e){if(t.length!==e.length)return!1;for(let r=0;r<=t.length;r++)if(t.at(r)!==e.at(r))return!1;return!0},random(t){return crypto.getRandomValues(new Uint8Array(t))}});var v=Object.freeze({fromBytes(t){return[...t].map(e=>e.toString(16).padStart(2,"0")).join("")},toBytes(t){if(t.length%2!==0)throw new Error("must have even number of hex characters");let e=new Uint8Array(t.length/2);for(let r=0;r<t.length;r+=2)e[r/2]=parseInt(t.slice(r,r+2),16);return e},random(t=32){return this.fromBytes(d.random(t))},string(t){return v.fromBytes(t)},bytes(t){return v.toBytes(t)}});var me=58,J="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",fe=Object.freeze({fromBytes(t){let e=BigInt("0x"+v.fromBytes(t)),r="";for(;e>0;){let o=e%BigInt(me);e=e/BigInt(me),r=J[Number(o)]+r}for(let o of t)if(o===0)r=J[0]+r;else break;return r},toBytes(t){let e=BigInt(0);for(let i of t){let a=J.indexOf(i);if(a===-1)throw new Error(`Invalid character '${i}' in base58 string`);e=e*BigInt(me)+BigInt(a)}let r=e.toString(16);r.length%2!==0&&(r="0"+r);let o=v.toBytes(r),n=0;for(let i of t)if(i===J[0])n++;else break;let s=new Uint8Array(n+o.length);return s.set(o,n),s},random(t=32){return this.fromBytes(d.random(t))},string(t){return fe.fromBytes(t)},bytes(t){return fe.toBytes(t)}});var ke=class{lexicon;static lexicons=Object.freeze({base2:{characters:"01"},hex:{characters:"0123456789abcdef"},base36:{characters:"0123456789abcdefghijklmnopqrstuvwxyz"},base58:{characters:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"},base62:{characters:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"},base64url:{negativePrefix:"~",characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},base64:{characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",padding:{character:"=",size:4}}});lookup;negativePrefix;constructor(e){this.lexicon=e,this.lookup=Object.fromEntries([...e.characters].map((r,o)=>[r,o])),this.negativePrefix=e.negativePrefix??"-"}toBytes(e){let r=Math.log2(this.lexicon.characters.length);if(Number.isInteger(r)){let a=0,c=0,u=[];for(let p of e){if(p===this.lexicon.padding?.character)continue;let m=this.lookup[p];if(m===void 0)throw new Error(`Invalid character: ${p}`);for(a=a<<r|m,c+=r;c>=8;)c-=8,u.push(a>>c&255)}return new Uint8Array(u)}let o=0n,n=BigInt(this.lexicon.characters.length),s=!1;e.startsWith(this.negativePrefix)&&(e=e.slice(this.negativePrefix.length),s=!0);for(let a of e){let c=this.lookup[a];if(c===void 0)throw new Error(`Invalid character: ${a}`);o=o*n+BigInt(c)}let i=[];for(;o>0n;)i.unshift(Number(o%256n)),o=o/256n;return new Uint8Array(i)}fromBytes(e){let r=Math.log2(this.lexicon.characters.length);if(Number.isInteger(r)){let i=0,a=0,c="";for(let u of e)for(i=i<<8|u,a+=8;a>=r;){a-=r;let p=i>>a&(1<<r)-1;c+=this.lexicon.characters[p]}if(a>0){let u=i<<r-a&(1<<r)-1;c+=this.lexicon.characters[u]}if(this.lexicon.padding)for(;c.length%this.lexicon.padding.size!==0;)c+=this.lexicon.padding.character;return c}let o=0n;for(let i of e)o=(o<<8n)+BigInt(i);if(o===0n)return this.lexicon.characters[0];let n=BigInt(this.lexicon.characters.length),s="";for(;o>0n;)s=this.lexicon.characters[Number(o%n)]+s,o=o/n;return s}toInteger(e){if(!e)return 0;let r=0n,o=!1,n=BigInt(this.lexicon.characters.length);e.startsWith(this.negativePrefix)&&(e=e.slice(this.negativePrefix.length),o=!0);for(let s of e){let i=this.lookup[s];if(i===void 0)throw new Error(`Invalid character: ${s}`);r=r*n+BigInt(i)}return Number(o?-r:r)}fromInteger(e){e=Math.floor(e);let r=e<0,o=BigInt(r?-e:e);if(o===0n)return this.lexicon.characters[0];let n=BigInt(this.lexicon.characters.length),s="";for(;o>0n;)s=this.lexicon.characters[Number(o%n)]+s,o=o/n;return r?`${this.negativePrefix}${s}`:s}random(e=32){return this.fromBytes(d.random(e))}};var le=Object.freeze({fromBytes(t){return typeof btoa=="function"?btoa(String.fromCharCode(...t)):Buffer.from(t).toString("base64")},toBytes(t){return typeof atob=="function"?Uint8Array.from(atob(t),e=>e.charCodeAt(0)):Uint8Array.from(Buffer.from(t,"base64"))},random(t=32){return this.fromBytes(d.random(t))},string(t){return le.fromBytes(t)},bytes(t){return le.toBytes(t)}});var Be=Object.freeze({fromBytes(t){return new TextDecoder().decode(t)},toBytes(t){return new TextEncoder().encode(t)},string(t){return Be.fromBytes(t)},bytes(t){return Be.toBytes(t)}});var V=Object.freeze({set:t=>t!=null,unset:t=>t==null,boolean:t=>typeof t=="boolean",number:t=>typeof t=="number",string:t=>typeof t=="string",bigint:t=>typeof t=="bigint",object:t=>typeof t=="object"&&t!==null,array:t=>Array.isArray(t),fn:t=>typeof t=="function",symbol:t=>typeof t=="symbol"});var W=class extends Error{milliseconds;name=this.constructor.name;constructor(e){super(`deadline exceeded (${(e/1e3).toFixed(1)} seconds)`),this.milliseconds=e}};function Z(t,e){return t<=0||t===1/0?e():new Promise((r,o)=>{let n=setTimeout(()=>o(new W(t)),t);e().then(r).catch(o).finally(()=>clearTimeout(n))})}function f(){let t,e,r=new Promise((n,s)=>{t=n,e=s});function o(n){return n.then(t).catch(e),r}return{promise:r,resolve:t,reject:e,entangle:o}}function Se(t,e){let r=t;for(let o of e)if(r=r[o],V.unset(r))break;return r}function Fe(t){return{map:e=>Ee(t,e),filter:e=>Te(t,e)}}Fe.pipe=Object.freeze({map:t=>e=>Ee(e,t),filter:t=>e=>Te(e,t)});var Ee=(t,e)=>Object.fromEntries(Object.entries(t).map(([r,o])=>[r,e(o,r)])),Te=(t,e)=>Object.fromEntries(Object.entries(t).filter(([r,o])=>e(o,r)));function Ne(){let t=new Set;function e(s){return t.add(s),()=>{t.delete(s)}}async function r(...s){await Promise.all([...t].map(i=>i(...s)))}async function o(){let{promise:s,resolve:i}=f(),a=e((...c)=>{i(c),a()});return s}function n(){t.clear()}return e.pub=r,e.sub=e,e.on=e,e.next=o,e.clear=n,r.pub=r,r.sub=e,r.on=e,r.next=o,r.clear=n,[r,e]}function G(t){let e=Ne()[0];return t&&e.sub(t),e}var g=class{#e=[];add(...e){return this.#e.push(...e),this}disposable(e){return this.bag(e,()=>e.dispose())}bag(e,r){return this.add(()=>r(e)),e}dispose(){for(let e of this.#e.reverse())e();this.#e=[]}};var w;(function(t){t.version="2.0";function e(r){return"id"in r?r.id:null}t.getId=e,t.errorCodes={serverError:-32e3,unexposedError:-32001}})(w||(w={}));var Q=class extends Error{name=this.constructor.name},k=class extends Error{name=this.constructor.name};async function Re({tap:t,request:e,action:r}){let o=w.getId(e);try{let n=await r();return o===null?null:{id:o,result:n,jsonrpc:w.version}}catch(n){return t.rpcError({request:e,error:n}),o===null?null:{id:o,jsonrpc:w.version,error:n instanceof Q?{code:w.errorCodes.serverError,message:n.message}:{code:w.errorCodes.unexposedError,message:"unexposed error"}}}}function K(t){let e=t.tap??new l;return async r=>{let o=r.method.split("."),n=Se(t.fns,o),s=async()=>await n(...r.params);return e.rpcRequest({request:r}),await Re({tap:e,request:r,action:s})}}var je=Symbol("tune"),Le=Symbol("query"),Ye=Symbol("notify"),Je=Symbol("settings");function Ce(t){function e(r){let o={notify:void 0};return new Proxy(()=>{},{apply:(n,s,i)=>t(r,i,o),get:(n,s)=>{if(s!=="then")return s===je?i=>(...a)=>t(r,a,{...o,...i}):s===Ye?(...i)=>t(r,i,{...o,notify:!0}):s===Le?(...i)=>t(r,i,{...o,notify:!1}):s===Je?o:(n[s]||(n[s]=e([...r,s])),n[s])},set:(n,s,i)=>(n[s]=i,!0)})}return e([])}function B(t){let{endpoint:e,tap:r=new l}=t,o=1;return Ce(async(n,s,i)=>{let a=i.notify??t.notify??!1,c=i.transfer,u={jsonrpc:"2.0",method:n.join("."),params:s},p=a?u:{...u,id:o++};r.rpcRequest({request:p});let m=await e(p,{transfer:c});if(a&&!m)return null;if(!m)throw new k("response was null, but shouldn't be, because the request was not a notification");if("error"in m)throw new k(t.label?`${t.label}: ${m.error.message}`:m.error.message);return m.result})}function D(t){return B({endpoint:K(t),tap:t.tap})}var S=class{recv=G();sendRequest=G();sendResponse=G();static makeEntangledPair({origin:e="example.e280.org"}={}){let r=new this,o=new this,n=[r.sendRequest.sub(i=>o.recv(i,{origin:e})),r.sendResponse.sub(i=>o.recv(i,{origin:e})),o.sendRequest.sub(i=>r.recv(i,{origin:e})),o.sendResponse.sub(i=>r.recv(i,{origin:e}))];return[r,o,()=>n.forEach(i=>i())]}};function X(t,e){return t.addEventListener("message",e),()=>t.removeEventListener("message",e)}function Oe(t,e){return async(r,{transfer:o}={})=>{if("id"in r){let n=f();return e(r,o,n.promise),t.wait(r.id,r.method).then(s=>(n.resolve(s),s))}else{let n=Promise.resolve(null);return e(r,o,n),n}}}function Me(t){let e=[],r=[];for(let o of Array.isArray(t)?t:[t])"method"in o?e.push(o):r.push(o);return{requests:e,responses:r}}async function $e(t,e){let r=(await Promise.all(e.map(async o=>t(o)))).filter(o=>o!==null);return r.length===0?null:r.length===1?r[0]:r}var j=class extends S{#e=new g;constructor(e){super(),this.#e.add(this.sendRequest.sub((r,o)=>e.postMessage(r,o)),this.sendResponse.sub((r,o)=>e.postMessage(r,o)),X(e,r=>this.recv(r.data,r)))}dispose(){this.#e.dispose()}};var ee=class{remote;transfer;constructor(e){this.remote=e}};var de=Object.freeze({timeout:6e4,maxRequestBytes:1e7});var te=class{timeout;pending=new Map;constructor(e){this.timeout=e}async wait(e,r){let o=f();return this.pending.set(e,{method:r,deferred:o}),await Z(this.timeout,()=>o.promise).catch(n=>{throw n instanceof W&&(n.message=`request #${e} ${r}(), ${n.message}`),n})}deliverResponse(e){let r=this.pending.get(e.id);r&&("error"in e?r.deferred.reject(new k(e.error.message)):r.deferred.resolve(e))}};var E=class{options;remote;remoteEndpoint;#e;#t=new g;constructor(e){this.options=e;let{conduit:r,tap:o}=e;this.#e=new te(e.timeout??de.timeout),this.remoteEndpoint=Oe(this.#e,r.sendRequest.pub.bind(r.sendRequest)),this.remote=B({endpoint:this.remoteEndpoint,tap:o&&ae(o,{remote:!0})}),this.#t.add(r.recv.sub(n=>this.recv(n)))}async recv(e){let r=new ee(this.remote),{conduit:o,rpc:n,tap:s}=this.options,{requests:i,responses:a}=Me(e);for(let m of a)this.#e.deliverResponse(m);if(!n)return;let c=await n(r),u=K({fns:c,tap:s&&ae(s,{remote:!1})}),p=await $e(u,i);p&&await o.sendResponse(p,r.transfer)}dispose(){this.#t.dispose()}};var x={derive:{host:t=>({host:t.remote.host,get transfer(){return t.transfer},set transfer(e){t.transfer=e}}),work:t=>({work:t.remote,get transfer(){return t.transfer},set transfer(e){t.transfer=e}})},mock:{host:()=>({host:void 0,transfer:void 0}),work:()=>({work:void 0,transfer:void 0})}};var b=new l;async function Ie(t,e,r={}){let o=r.tap??b,n=new E({tap:o,timeout:r.timeout??1/0,conduit:new j(t.getSelf()),rpc:async s=>e(x.derive.host(s))});return await n.remote.infra.ready(),n.remote.host}var C=class{worker;messenger;constructor(e,r){this.worker=e,this.messenger=r}static async make(e,r){let o=r.tap??b,n=r.label??"comrade",s=e.loadWorker(r.workerUrl,n),i=f(),a={async ready(){i.resolve()}},c=new E({tap:o,timeout:r.timeout??1/0,conduit:new j(s),rpc:async u=>({infra:a,host:r.setupHost(x.derive.work(u))})});return await i.promise,new this(s,c)}get work(){return this.messenger.remote}terminate(){this.worker.terminate()}};var re=class{threads;static async make(e,r){let o=r.workerCount??e.guessOptimalThreadCount(),n=await Promise.all([...Array(o)].map(async(s,i)=>C.make(e,{...r,label:r.label??`${r.label??"comrade"}_${i+1}`})));return new this(n,{tap:r.tap})}work;#e=new Set;#t=[];constructor(e,r={}){this.threads=e;let o=r.tap??b,n=async(s,i)=>this.#o({request:s,prom:f(),transfer:i?.transfer});this.work=B({tap:o,endpoint:n}),e.forEach(s=>this.#e.add(s))}get threadCount(){return this.threads.length}terminate(){for(let e of this.threads)e.terminate()}#o(e){return this.#t.push(e),this.#r(),e.prom.promise}#r(){for(;this.#e.size>0&&this.#t.length>0;){let e=[...this.#e].pop();this.#e.delete(e);let r=this.#t.shift();this.#e.delete(e);let o=e.messenger.remoteEndpoint(r.request,{transfer:r.transfer});r.prom.entangle(o).finally(()=>{this.#e.add(e),this.#r()})}}};var Pe=t=>({thread:e=>C.make(t,e),cluster:e=>re.make(t,e),worker:(e,r={})=>Ie(t,e,r),work:e=>e,host:e=>e,mocks(e){let{setupWork:r,setupHost:o,tap:n=b}=e,s=x.mock.host(),i=x.mock.work();return i.work=D({tap:n,fns:r(s)}),s.host=D({tap:n,fns:o(i)}),{workShell:i,hostShell:s,work:i.work,host:s.host}},mockWork(e,r=b){let o=x.mock.host(),n=x.mock.work();return n.work=D({tap:r,fns:e(o)}),{workShell:n,hostShell:o,work:n.work,mockHost:s=>(o.host=D({tap:r,fns:s(n)}),{workShell:n,hostShell:o,work:n.work,host:o.host})}}});var We=()=>({getSelf(){return self},guessOptimalThreadCount(){let t=navigator.hardwareConcurrency??1;return Math.max(1,t-1)},loadWorker(t,e){return new window.Worker(t,{name:e,type:"module"})},async loadWasm(t){return WebAssembly.instantiateStreaming(fetch(t))}});var Qe=We(),oe=Pe(Qe);import{WhisperTextStreamer as Xe}from"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js";import{pipeline as Ke}from"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js";var ne=class{task;instance=null;model=null;constructor(e){this.task=e}async createInstance(e,r){return this.model=e,this.instance=await Ke(this.task,this.model,{dtype:{encoder_model:this.model==="onnx-community/whisper-large-v3-turbo"?"fp16":"fp32",decoder_model_merged:"q4"},device:"webgpu",progress_callback:r})}};var z=new ne("automatic-speech-recognition"),A,De=oe.work(t=>({async transcribe({audio:e,model:r,language:o,duration:n}){let s=r.startsWith("distil-whisper/");(!z.model||z.model!==r)&&(z.instance?.dispose()?.(),z.instance=null,A=await z.createInstance(r,h=>{h.progress&&t.host.updateModelLoadProgress({id:h.file,progress:h.progress})}));let i=A.processor.feature_extractor.config.chunk_length/A.model.config.max_source_positions,a=s?20:30,c=s?3:5,u=0,p=null,m=0,O=0,se=a-c,ie=()=>{let h=u*se;return Math.min(h/n,1)},q=new Xe(A.tokenizer,{time_precision:i,token_callback_function:()=>{p??=performance.now(),++m>1&&(O=m/(performance.now()-p)*1e3,t.host.updateTps(O))},callback_function:h=>{t.host.deliverTranscriptionChunk(h)},on_finalize:()=>{p=null,m=0,u++;let h=ie();t.host.updateTranscribeProgress(h)}}),T=await A(e,{top_k:0,do_sample:!1,chunk_length_s:a,stride_length_s:c,language:o,task:"transcribe",return_timestamps:"word",force_full_sequences:!1,streamer:q});return T?{tps:O,...T}:null}}));await oe.worker(De);
3
+ `:"";return[r.errName(i.name+":"),r.errMessage(i.message)].join(" ")+r.errStack(c)}function n(i){return i&&i instanceof Error?o(i):i}function s(i){return i&&i instanceof Error?o(i):r.errMessage(i)}return{stdout:i=>i.map(n),stderr:i=>i.map(s)}};function M(...e){return t=>({stdout:r=>{for(let o of e)r=o(t).stdout(r);return r},stderr:r=>{for(let o of e)r=o(t).stderr(r);return r}})}function et(){return{icon:"\u{1F6A8}",now:()=>Date.now()}}var V=e=>({colors:t,theme:r})=>{let o={...et(),...e},n=r(t),s=new Date(o.now()),i=s.getUTCFullYear().toString().padStart(4,"0"),c=(s.getUTCMonth()+1).toString().padStart(2,"0"),a=s.getUTCDate().toString().padStart(2,"0"),u=`${i}-${c}-${a}`,f=s.getUTCHours().toString().padStart(2,"0"),p=s.getUTCMinutes().toString().padStart(2,"0"),z=s.getUTCSeconds().toString().padStart(2,"0"),ue=s.getUTCMilliseconds().toString().padStart(3,"0"),fe=`${f}:${p}:${z}.${ue}`,U=`${u}::${fe}`;return{stdout:O=>[n.timestamp(U),...O],stderr:O=>[n.timestampErr(U),...[o.icon].filter(Boolean),...O]}};function je(){return M(L(),V())}var Y=()=>({stdout:async e=>{await Deno.stdout.write(new TextEncoder().encode(e+`
4
+ `))},stderr:async e=>{await Deno.stderr.write(new TextEncoder().encode(e+`
5
+ `))}});var Z=()=>({stdout:async e=>void process.stdout.write(e+`
6
+ `),stderr:async e=>void process.stderr.write(e+`
7
+ `)});var J=()=>({stdout:async e=>console.log(e),stderr:async e=>console.error(e)});var Te=()=>me()?Y():le()?Z():J();var Oe=()=>({stdout:async()=>{},stderr:async()=>{}});function Re(){return()=>({stdout:e=>e,stderr:e=>e})}var R=class e{static writers={auto:Te,void:Oe,deno:Y,node:Z,console:J};static colors={auto:de,colorful:()=>P,colorless:()=>A};static themes={auto:ke,basic:N};static shapers={auto:je,none:Re,errors:L,timestamp:V};writer=e.writers.auto();colors=e.colors.auto();theme=e.themes.auto();shaper=e.shapers.auto();async log(...t){await this.writer.stdout(this.shaper(this).stdout(t).join(" "))}async error(...t){await this.writer.stderr(this.shaper(this).stderr(t).join(" "))}setWriter(t){return this.writer=t,this}setColors(t){return this.colors=t,this}setTheme(t){return this.theme=t,this}setShaper(...t){return this.shaper=M(...t),this}};var $=class extends R{static dummy(){return new this().setWriter(R.writers.void())}rpcRequest=async({request:t,...r})=>{let o=this.colors.none;this.log(...this.#e(r),o(`${t.method}()`))};rpcError=async({request:t,error:r,...o})=>{this.error(...this.#e(o),`${t.method}()`,r)};#e({meta:t,label:r,remote:o}){let n=this.colors.mix(this.colors.blue,this.colors.dim),s=this.colors.mix(this.colors.cyan,this.colors.dim);return[t?this.#t(t):void 0,r||void 0,o===void 0?void 0:o?n("<-"):s("->")].filter(Boolean)}#t(t){let{headers:r}=t.request;return[this.colors.yellow(`[${t.ip}]`),this.colors.green(r.origin?r.origin:"(no-origin)")].join(" ")}};var m=class extends ${rpcRequest=async()=>{}};var l=Object.freeze({eq(e,t){if(e.length!==t.length)return!1;for(let r=0;r<=e.length;r++)if(e.at(r)!==t.at(r))return!1;return!0},random(e){return crypto.getRandomValues(new Uint8Array(e))}});var B=Object.freeze({fromBytes(e){return[...e].map(t=>t.toString(16).padStart(2,"0")).join("")},toBytes(e){if(e.length%2!==0)throw new Error("must have even number of hex characters");let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=parseInt(e.slice(r,r+2),16);return t},random(e=32){return this.fromBytes(l.random(e))},string(e){return B.fromBytes(e)},bytes(e){return B.toBytes(e)}});var he=58,Q="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",ge=Object.freeze({fromBytes(e){let t=BigInt("0x"+B.fromBytes(e)),r="";for(;t>0;){let o=t%BigInt(he);t=t/BigInt(he),r=Q[Number(o)]+r}for(let o of e)if(o===0)r=Q[0]+r;else break;return r},toBytes(e){let t=BigInt(0);for(let i of e){let c=Q.indexOf(i);if(c===-1)throw new Error(`Invalid character '${i}' in base58 string`);t=t*BigInt(he)+BigInt(c)}let r=t.toString(16);r.length%2!==0&&(r="0"+r);let o=B.toBytes(r),n=0;for(let i of e)if(i===Q[0])n++;else break;let s=new Uint8Array(n+o.length);return s.set(o,n),s},random(e=32){return this.fromBytes(l.random(e))},string(e){return ge.fromBytes(e)},bytes(e){return ge.toBytes(e)}});var Ce=class{lexicon;static lexicons=Object.freeze({base2:{characters:"01"},hex:{characters:"0123456789abcdef"},base36:{characters:"0123456789abcdefghijklmnopqrstuvwxyz"},base58:{characters:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"},base62:{characters:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"},base64url:{negativePrefix:"~",characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},base64:{characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",padding:{character:"=",size:4}}});lookup;negativePrefix;constructor(t){this.lexicon=t,this.lookup=Object.fromEntries([...t.characters].map((r,o)=>[r,o])),this.negativePrefix=t.negativePrefix??"-"}toBytes(t){let r=Math.log2(this.lexicon.characters.length);if(Number.isInteger(r)){let c=0,a=0,u=[];for(let f of t){if(f===this.lexicon.padding?.character)continue;let p=this.lookup[f];if(p===void 0)throw new Error(`Invalid character: ${f}`);for(c=c<<r|p,a+=r;a>=8;)a-=8,u.push(c>>a&255)}return new Uint8Array(u)}let o=0n,n=BigInt(this.lexicon.characters.length),s=!1;t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),s=!0);for(let c of t){let a=this.lookup[c];if(a===void 0)throw new Error(`Invalid character: ${c}`);o=o*n+BigInt(a)}let i=[];for(;o>0n;)i.unshift(Number(o%256n)),o=o/256n;return new Uint8Array(i)}fromBytes(t){let r=Math.log2(this.lexicon.characters.length);if(Number.isInteger(r)){let i=0,c=0,a="";for(let u of t)for(i=i<<8|u,c+=8;c>=r;){c-=r;let f=i>>c&(1<<r)-1;a+=this.lexicon.characters[f]}if(c>0){let u=i<<r-c&(1<<r)-1;a+=this.lexicon.characters[u]}if(this.lexicon.padding)for(;a.length%this.lexicon.padding.size!==0;)a+=this.lexicon.padding.character;return a}let o=0n;for(let i of t)o=(o<<8n)+BigInt(i);if(o===0n)return this.lexicon.characters[0];let n=BigInt(this.lexicon.characters.length),s="";for(;o>0n;)s=this.lexicon.characters[Number(o%n)]+s,o=o/n;return s}toInteger(t){if(!t)return 0;let r=0n,o=!1,n=BigInt(this.lexicon.characters.length);t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),o=!0);for(let s of t){let i=this.lookup[s];if(i===void 0)throw new Error(`Invalid character: ${s}`);r=r*n+BigInt(i)}return Number(o?-r:r)}fromInteger(t){t=Math.floor(t);let r=t<0,o=BigInt(r?-t:t);if(o===0n)return this.lexicon.characters[0];let n=BigInt(this.lexicon.characters.length),s="";for(;o>0n;)s=this.lexicon.characters[Number(o%n)]+s,o=o/n;return r?`${this.negativePrefix}${s}`:s}random(t=32){return this.fromBytes(l.random(t))}};var xe=Object.freeze({fromBytes(e){return typeof btoa=="function"?btoa(String.fromCharCode(...e)):Buffer.from(e).toString("base64")},toBytes(e){return typeof atob=="function"?Uint8Array.from(atob(e),t=>t.charCodeAt(0)):Uint8Array.from(Buffer.from(e,"base64"))},random(e=32){return this.fromBytes(l.random(e))},string(e){return xe.fromBytes(e)},bytes(e){return xe.toBytes(e)}});var Ie=Object.freeze({fromBytes(e){return new TextDecoder().decode(e)},toBytes(e){return new TextEncoder().encode(e)},string(e){return Ie.fromBytes(e)},bytes(e){return Ie.toBytes(e)}});var K=Object.freeze({set:e=>e!=null,unset:e=>e==null,boolean:e=>typeof e=="boolean",number:e=>typeof e=="number",string:e=>typeof e=="string",bigint:e=>typeof e=="bigint",object:e=>typeof e=="object"&&e!==null,array:e=>Array.isArray(e),fn:e=>typeof e=="function",symbol:e=>typeof e=="symbol"});var D=class extends Error{milliseconds;name=this.constructor.name;constructor(t){super(`deadline exceeded (${(t/1e3).toFixed(1)} seconds)`),this.milliseconds=t}};function G(e,t){return e<=0||e===1/0?t():new Promise((r,o)=>{let n=setTimeout(()=>o(new D(e)),e);t().then(r).catch(o).finally(()=>clearTimeout(n))})}function v(){let e,t,r=new Promise((n,s)=>{e=n,t=s});function o(n){return n.then(e).catch(t),r}return{promise:r,resolve:e,reject:t,entangle:o}}function ze(e,t){let r=e;for(let o of t)if(r=r[o],K.unset(r))break;return r}function tt(e){return{map:t=>Ae(e,t),filter:t=>Pe(e,t)}}tt.pipe=Object.freeze({map:e=>t=>Ae(t,e),filter:e=>t=>Pe(t,e)});var Ae=(e,t)=>Object.fromEntries(Object.entries(e).map(([r,o])=>[r,t(o,r)])),Pe=(e,t)=>Object.fromEntries(Object.entries(e).filter(([r,o])=>t(o,r)));function rt(){let e=new Set;function t(s){return e.add(s),()=>{e.delete(s)}}async function r(...s){await Promise.all([...e].map(i=>i(...s)))}async function o(){let{promise:s,resolve:i}=v(),c=t((...a)=>{i(a),c()});return s}function n(){e.clear()}return t.pub=r,t.sub=t,t.on=t,t.next=o,t.clear=n,r.pub=r,r.sub=t,r.on=t,r.next=o,r.clear=n,[r,t]}function X(e){let t=rt()[0];return e&&t.sub(e),t}var g=class{#e=[];add(...t){return this.#e.push(...t),this}disposable(t){return this.bag(t,()=>t.dispose())}bag(t,r){return this.add(()=>r(t)),t}dispose(){for(let t of this.#e.reverse())t();this.#e=[]}};var w;(function(e){e.version="2.0";function t(r){return"id"in r?r.id:null}e.getId=t,e.errorCodes={serverError:-32e3,unexposedError:-32001}})(w||(w={}));var ee=class extends Error{name=this.constructor.name},k=class extends Error{name=this.constructor.name};async function Me({tap:e,request:t,action:r}){let o=w.getId(t);try{let n=await r();return o===null?null:{id:o,result:n,jsonrpc:w.version}}catch(n){return e.rpcError({request:t,error:n}),o===null?null:{id:o,jsonrpc:w.version,error:n instanceof ee?{code:w.errorCodes.serverError,message:n.message}:{code:w.errorCodes.unexposedError,message:"unexposed error"}}}}function te(e){let t=e.tap??new m;return async r=>{let o=r.method.split("."),n=ze(e.fns,o),s=async()=>await n(...r.params);return t.rpcRequest({request:r}),await Me({tap:t,request:r,action:s})}}var $e=Symbol("tune"),ot=Symbol("query"),nt=Symbol("notify"),st=Symbol("settings");function De(e){function t(r){let o={notify:void 0};return new Proxy(()=>{},{apply:(n,s,i)=>e(r,i,o),get:(n,s)=>{if(s!=="then")return s===$e?i=>(...c)=>e(r,c,{...o,...i}):s===nt?(...i)=>e(r,i,{...o,notify:!0}):s===ot?(...i)=>e(r,i,{...o,notify:!1}):s===st?o:(n[s]||(n[s]=t([...r,s])),n[s])},set:(n,s,i)=>(n[s]=i,!0)})}return t([])}function S(e){let{endpoint:t,tap:r=new m}=e,o=1;return De(async(n,s,i)=>{let c=i.notify??e.notify??!1,a=i.transfer,u={jsonrpc:"2.0",method:n.join("."),params:s},f=c?u:{...u,id:o++};r.rpcRequest({request:f});let p=await t(f,{transfer:a});if(c&&!p)return null;if(!p)throw new k("response was null, but shouldn't be, because the request was not a notification");if("error"in p)throw new k(e.label?`${e.label}: ${p.error.message}`:p.error.message);return p.result})}function q(e){return S({endpoint:te(e),tap:e.tap})}var E=class{recv=X();sendRequest=X();sendResponse=X();static makeEntangledPair({origin:t="example.e280.org"}={}){let r=new this,o=new this,n=[r.sendRequest.sub(i=>o.recv(i,{origin:t})),r.sendResponse.sub(i=>o.recv(i,{origin:t})),o.sendRequest.sub(i=>r.recv(i,{origin:t})),o.sendResponse.sub(i=>r.recv(i,{origin:t}))];return[r,o,()=>n.forEach(i=>i())]}};function re(e,t){return e.addEventListener("message",t),()=>e.removeEventListener("message",t)}function qe(e,t){return async(r,{transfer:o}={})=>{if("id"in r){let n=v();return t(r,o,n.promise),e.wait(r.id,r.method).then(s=>(n.resolve(s),s))}else{let n=Promise.resolve(null);return t(r,o,n),n}}}function We(e){let t=[],r=[];for(let o of Array.isArray(e)?e:[e])"method"in o?t.push(o):r.push(o);return{requests:t,responses:r}}async function Fe(e,t){let r=(await Promise.all(t.map(async o=>e(o)))).filter(o=>o!==null);return r.length===0?null:r.length===1?r[0]:r}var C=class extends E{#e=new g;constructor(t){super(),this.#e.add(this.sendRequest.sub((r,o)=>t.postMessage(r,o)),this.sendResponse.sub((r,o)=>t.postMessage(r,o)),re(t,r=>this.recv(r.data,r)))}dispose(){this.#e.dispose()}};var oe=class{remote;transfer;constructor(t){this.remote=t}};var ye=Object.freeze({timeout:6e4,maxRequestBytes:1e7});var ne=class{timeout;pending=new Map;constructor(t){this.timeout=t}async wait(t,r){let o=v();return this.pending.set(t,{method:r,deferred:o}),await G(this.timeout,()=>o.promise).catch(n=>{throw n instanceof D&&(n.message=`request #${t} ${r}(), ${n.message}`),n})}deliverResponse(t){let r=this.pending.get(t.id);r&&("error"in t?r.deferred.reject(new k(t.error.message)):r.deferred.resolve(t))}};var j=class{options;remote;remoteEndpoint;#e;#t=new g;constructor(t){this.options=t;let{conduit:r,tap:o}=t;this.#e=new ne(t.timeout??ye.timeout),this.remoteEndpoint=qe(this.#e,r.sendRequest.pub.bind(r.sendRequest)),this.remote=S({endpoint:this.remoteEndpoint,tap:o&&pe(o,{remote:!0})}),this.#t.add(r.recv.sub(n=>this.recv(n)))}async recv(t){let r=new oe(this.remote),{conduit:o,rpc:n,tap:s}=this.options,{requests:i,responses:c}=We(t);for(let p of c)this.#e.deliverResponse(p);if(!n)return;let a=await n(r),u=te({fns:a,tap:s&&pe(s,{remote:!1})}),f=await Fe(u,i);f&&await o.sendResponse(f,r.transfer)}dispose(){this.#t.dispose()}};var x={derive:{host:e=>({host:e.remote.host,get transfer(){return e.transfer},set transfer(t){e.transfer=t}}),work:e=>({work:e.remote,get transfer(){return e.transfer},set transfer(t){e.transfer=t}})},mock:{host:()=>({host:void 0,transfer:void 0}),work:()=>({work:void 0,transfer:void 0})}};var y=new m;async function He(e,t,r={}){let o=r.tap??y,n=new j({tap:o,timeout:r.timeout??1/0,conduit:new C(e.getSelf()),rpc:async s=>t(x.derive.host(s))});return await n.remote.infra.ready(),n.remote.host}var d=Object.freeze({eq(e,t){if(e.length!==t.length)return!1;for(let r=0;r<=e.length;r++)if(e.at(r)!==t.at(r))return!1;return!0},random(e){return crypto.getRandomValues(new Uint8Array(e))}});var T=Object.freeze({fromBytes(e){return[...e].map(t=>t.toString(16).padStart(2,"0")).join("")},toBytes(e){if(e.length%2!==0)throw new Error("must have even number of hex characters");let t=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=parseInt(e.slice(r,r+2),16);return t},random(e=32){return this.fromBytes(d.random(e))},string(e){return T.fromBytes(e)},bytes(e){return T.toBytes(e)}});var be=58,se="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",we=Object.freeze({fromBytes(e){let t=BigInt("0x"+T.fromBytes(e)),r="";for(;t>0;){let o=t%BigInt(be);t=t/BigInt(be),r=se[Number(o)]+r}for(let o of e)if(o===0)r=se[0]+r;else break;return r},toBytes(e){let t=BigInt(0);for(let i of e){let c=se.indexOf(i);if(c===-1)throw new Error(`Invalid character '${i}' in base58 string`);t=t*BigInt(be)+BigInt(c)}let r=t.toString(16);r.length%2!==0&&(r="0"+r);let o=T.toBytes(r),n=0;for(let i of e)if(i===se[0])n++;else break;let s=new Uint8Array(n+o.length);return s.set(o,n),s},random(e=32){return this.fromBytes(d.random(e))},string(e){return we.fromBytes(e)},bytes(e){return we.toBytes(e)}});var Ue=class{lexicon;static lexicons=Object.freeze({base2:{characters:"01"},hex:{characters:"0123456789abcdef"},base36:{characters:"0123456789abcdefghijklmnopqrstuvwxyz"},base58:{characters:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"},base62:{characters:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"},base64url:{negativePrefix:"~",characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},base64:{characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",padding:{character:"=",size:4}}});lookup;negativePrefix;constructor(t){this.lexicon=t,this.lookup=Object.fromEntries([...t.characters].map((r,o)=>[r,o])),this.negativePrefix=t.negativePrefix??"-"}toBytes(t){let r=Math.log2(this.lexicon.characters.length);if(Number.isInteger(r)){let c=0,a=0,u=[];for(let f of t){if(f===this.lexicon.padding?.character)continue;let p=this.lookup[f];if(p===void 0)throw new Error(`Invalid character: ${f}`);for(c=c<<r|p,a+=r;a>=8;)a-=8,u.push(c>>a&255)}return new Uint8Array(u)}let o=0n,n=BigInt(this.lexicon.characters.length),s=!1;t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),s=!0);for(let c of t){let a=this.lookup[c];if(a===void 0)throw new Error(`Invalid character: ${c}`);o=o*n+BigInt(a)}let i=[];for(;o>0n;)i.unshift(Number(o%256n)),o=o/256n;return new Uint8Array(i)}fromBytes(t){let r=Math.log2(this.lexicon.characters.length);if(Number.isInteger(r)){let i=0,c=0,a="";for(let u of t)for(i=i<<8|u,c+=8;c>=r;){c-=r;let f=i>>c&(1<<r)-1;a+=this.lexicon.characters[f]}if(c>0){let u=i<<r-c&(1<<r)-1;a+=this.lexicon.characters[u]}if(this.lexicon.padding)for(;a.length%this.lexicon.padding.size!==0;)a+=this.lexicon.padding.character;return a}let o=0n;for(let i of t)o=(o<<8n)+BigInt(i);if(o===0n)return this.lexicon.characters[0];let n=BigInt(this.lexicon.characters.length),s="";for(;o>0n;)s=this.lexicon.characters[Number(o%n)]+s,o=o/n;return s}toInteger(t){if(!t)return 0;let r=0n,o=!1,n=BigInt(this.lexicon.characters.length);t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),o=!0);for(let s of t){let i=this.lookup[s];if(i===void 0)throw new Error(`Invalid character: ${s}`);r=r*n+BigInt(i)}return Number(o?-r:r)}fromInteger(t){t=Math.floor(t);let r=t<0,o=BigInt(r?-t:t);if(o===0n)return this.lexicon.characters[0];let n=BigInt(this.lexicon.characters.length),s="";for(;o>0n;)s=this.lexicon.characters[Number(o%n)]+s,o=o/n;return r?`${this.negativePrefix}${s}`:s}random(t=32){return this.fromBytes(d.random(t))}};var Be=Object.freeze({fromBytes(e){return typeof btoa=="function"?btoa(String.fromCharCode(...e)):Buffer.from(e).toString("base64")},toBytes(e){return typeof atob=="function"?Uint8Array.from(atob(e),t=>t.charCodeAt(0)):Uint8Array.from(Buffer.from(e,"base64"))},random(e=32){return this.fromBytes(d.random(e))},string(e){return Be.fromBytes(e)},bytes(e){return Be.toBytes(e)}});var Ne=Object.freeze({fromBytes(e){return new TextDecoder().decode(e)},toBytes(e){return new TextEncoder().encode(e)},string(e){return Ne.fromBytes(e)},bytes(e){return Ne.toBytes(e)}});var ve=Object.freeze({set:e=>e!=null,unset:e=>e==null,boolean:e=>typeof e=="boolean",number:e=>typeof e=="number",string:e=>typeof e=="string",bigint:e=>typeof e=="bigint",object:e=>typeof e=="object"&&e!==null,array:e=>Array.isArray(e),fn:e=>typeof e=="function",symbol:e=>typeof e=="symbol"});function W(){let e,t,r=new Promise((n,s)=>{e=n,t=s});function o(n){return n.then(e).catch(t),r}return{promise:r,resolve:e,reject:t,entangle:o}}function ut(e){return{map:t=>_e(e,t),filter:t=>Le(e,t)}}ut.pipe=Object.freeze({map:e=>t=>_e(t,e),filter:e=>t=>Le(t,e)});var _e=(e,t)=>Object.fromEntries(Object.entries(e).map(([r,o])=>[r,t(o,r)])),Le=(e,t)=>Object.fromEntries(Object.entries(e).filter(([r,o])=>t(o,r)));var I=class{worker;messenger;constructor(t,r){this.worker=t,this.messenger=r}static async make(t,r){let o=r.tap??y,n=r.label??"comrade",s=t.loadWorker(r.workerUrl,n),i=W(),c={async ready(){i.resolve()}},a=new j({tap:o,timeout:r.timeout??1/0,conduit:new C(s),rpc:async u=>({infra:c,host:r.setupHost(x.derive.work(u))})});return await i.promise,new this(s,a)}get work(){return this.messenger.remote}terminate(){this.worker.terminate()}};var ie=class{threads;static async make(t,r){let o=r.workerCount??t.guessOptimalThreadCount(),n=await Promise.all([...Array(o)].map(async(s,i)=>I.make(t,{...r,label:r.label??`${r.label??"comrade"}_${i+1}`})));return new this(n,{tap:r.tap})}work;#e=new Set;#t=[];constructor(t,r={}){this.threads=t;let o=r.tap??y,n=async(s,i)=>this.#o({request:s,prom:W(),transfer:i?.transfer});this.work=S({tap:o,endpoint:n}),t.forEach(s=>this.#e.add(s))}get threadCount(){return this.threads.length}terminate(){for(let t of this.threads)t.terminate()}#o(t){return this.#t.push(t),this.#r(),t.prom.promise}#r(){for(;this.#e.size>0&&this.#t.length>0;){let t=[...this.#e].pop();this.#e.delete(t);let r=this.#t.shift();this.#e.delete(t);let o=t.messenger.remoteEndpoint(r.request,{transfer:r.transfer});r.prom.entangle(o).finally(()=>{this.#e.add(t),this.#r()})}}};var Ve=e=>({thread:t=>I.make(e,t),cluster:t=>ie.make(e,t),worker:(t,r={})=>He(e,t,r),work:t=>t,host:t=>t,mocks(t){let{setupWork:r,setupHost:o,tap:n=y}=t,s=x.mock.host(),i=x.mock.work();return i.work=q({tap:n,fns:r(s)}),s.host=q({tap:n,fns:o(i)}),{workShell:i,hostShell:s,work:i.work,host:s.host}},mockWork(t,r=y){let o=x.mock.host(),n=x.mock.work();return n.work=q({tap:r,fns:t(o)}),{workShell:n,hostShell:o,work:n.work,mockHost:s=>(o.host=q({tap:r,fns:s(n)}),{workShell:n,hostShell:o,work:n.work,host:o.host})}}});var Ye=()=>({getSelf(){return self},guessOptimalThreadCount(){let e=navigator.hardwareConcurrency??1;return Math.max(1,e-1)},loadWorker(e,t){return new window.Worker(e,{name:t,type:"module"})},async loadWasm(e){return WebAssembly.instantiateStreaming(fetch(e))}});var ft=Ye(),ce=Ve(ft);import{WhisperTextStreamer as mt}from"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js";import{pipeline as pt}from"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js";var ae=class{task;instance=null;model=null;constructor(t){this.task=t}async createInstance(t,r){return this.model=t,this.instance=await pt(this.task,this.model,{dtype:{encoder_model:this.model==="onnx-community/whisper-large-v3-turbo"?"fp16":"fp32",decoder_model_merged:"q4"},device:"webgpu",progress_callback:r})}};var F=new ae("automatic-speech-recognition"),H,Ze=ce.work(e=>({async transcribe({audio:t,model:r,language:o,duration:n}){let s=r.startsWith("distil-whisper/");(!F.model||F.model!==r)&&(F.instance?.dispose()?.(),F.instance=null,H=await F.createInstance(r,h=>{h.progress&&e.host.updateModelLoadProgress({id:h.file,progress:h.progress})}));let i=H.processor.feature_extractor.config.chunk_length/H.model.config.max_source_positions,c=s?20:30,a=s?3:5,u=0,f=null,p=0,z=0,ue=c-a,fe=()=>{let h=u*ue;return Math.min(h/n,1)},U=new mt(H.tokenizer,{time_precision:i,token_callback_function:()=>{f??=performance.now(),++p>1&&(z=p/(performance.now()-f)*1e3,e.host.updateTps(z))},callback_function:h=>{e.host.deliverTranscriptionChunk(h)},on_finalize:()=>{f=null,p=0,u++;let h=fe();e.host.updateTranscribeProgress(h)}}),O=await H(t,{top_k:0,do_sample:!1,chunk_length_s:c,stride_length_s:a,language:o,task:"transcribe",return_timestamps:"word",force_full_sequences:!1,streamer:U});return O?{tps:z,...O}:null}}));await ce.worker(Ze);
8
8
  //# sourceMappingURL=worker.bundle.min.js.map