@omnimedia/omnitool 1.1.0-43 → 1.1.0-44

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 (179) hide show
  1. package/package.json +17 -18
  2. package/s/demo/demo.bundle.ts +20 -40
  3. package/s/demo/routines/export-test.ts +8 -0
  4. package/s/demo/routines/playback-test.ts +21 -0
  5. package/s/demo/routines/timeline-setup.ts +24 -0
  6. package/s/demo/routines/transcode-test.ts +2 -0
  7. package/s/driver/driver-worker.ts +9 -0
  8. package/s/driver/driver.test.ts +1 -1
  9. package/s/driver/driver.ts +8 -22
  10. package/s/driver/fns/schematic.ts +6 -2
  11. package/s/driver/fns/work.ts +2 -133
  12. package/s/driver/parts/compositor.ts +178 -0
  13. package/s/driver/parts/machina.ts +19 -20
  14. package/s/index.ts +1 -0
  15. package/s/timeline/index.ts +1 -1
  16. package/s/timeline/parts/media.ts +11 -2
  17. package/s/timeline/parts/{compositor → renderers}/parts/html-tree.ts +2 -2
  18. package/s/timeline/parts/{compositor → renderers}/parts/tree-builder.ts +4 -2
  19. package/s/timeline/parts/{compositor → renderers}/playback.ts +4 -13
  20. package/s/timeline/parts/{compositor → renderers}/samplers/html.ts +19 -5
  21. package/s/timeline/parts/{compositor → renderers}/samplers/webcodecs.ts +1 -1
  22. package/s/timeline/parts/resource-pool.ts +8 -4
  23. package/s/timeline/parts/resource.ts +1 -0
  24. package/s/timeline/sugar/o.ts +8 -4
  25. package/s/timeline/sugar/omni-test.ts +14 -14
  26. package/s/timeline/sugar/omni.ts +2 -2
  27. package/s/timeline/utils/datafile.ts +14 -4
  28. package/s/timeline/utils/dummy-data.ts +3 -3
  29. package/x/demo/WebGLRenderer-Q3OV2JVE.js +2 -0
  30. package/x/demo/WebGLRenderer-Q3OV2JVE.js.map +7 -0
  31. package/x/demo/WebGPURenderer-FUFF62QA.js +2 -0
  32. package/x/demo/WebGPURenderer-FUFF62QA.js.map +7 -0
  33. package/x/demo/browserAll-PGQYU756.js +2 -0
  34. package/x/demo/browserAll-PGQYU756.js.map +7 -0
  35. package/x/demo/chunk-2RBLPWNG.js +393 -0
  36. package/x/demo/chunk-2RBLPWNG.js.map +7 -0
  37. package/x/demo/chunk-6DBMQOFE.js +42 -0
  38. package/x/demo/chunk-6DBMQOFE.js.map +7 -0
  39. package/x/demo/chunk-LAJHJD2S.js +2 -0
  40. package/x/demo/chunk-LAJHJD2S.js.map +7 -0
  41. package/x/demo/chunk-LQU5JKKZ.js +269 -0
  42. package/x/demo/chunk-LQU5JKKZ.js.map +7 -0
  43. package/x/demo/chunk-RFNLITDQ.js +327 -0
  44. package/x/demo/chunk-RFNLITDQ.js.map +7 -0
  45. package/x/demo/chunk-TBWCKYN2.js +2 -0
  46. package/x/demo/chunk-TBWCKYN2.js.map +7 -0
  47. package/x/demo/chunk-TLDBHU4V.js +15 -0
  48. package/x/demo/chunk-TLDBHU4V.js.map +7 -0
  49. package/x/demo/chunk-X2GHKWPJ.js +157 -0
  50. package/x/demo/chunk-X2GHKWPJ.js.map +7 -0
  51. package/x/demo/demo.bundle.js +18 -27
  52. package/x/demo/demo.bundle.js.map +1 -1
  53. package/x/demo/demo.bundle.min.js +2378 -534
  54. package/x/demo/demo.bundle.min.js.map +4 -4
  55. package/x/demo/routines/export-test.d.ts +2 -0
  56. package/x/demo/routines/export-test.js +7 -0
  57. package/x/demo/routines/export-test.js.map +1 -0
  58. package/x/demo/routines/playback-test.d.ts +3 -0
  59. package/x/demo/routines/playback-test.js +17 -0
  60. package/x/demo/routines/playback-test.js.map +1 -0
  61. package/x/demo/routines/timeline-setup.d.ts +6 -0
  62. package/x/demo/routines/timeline-setup.js +13 -0
  63. package/x/demo/routines/timeline-setup.js.map +1 -0
  64. package/x/demo/routines/transcode-test.js +2 -0
  65. package/x/demo/routines/transcode-test.js.map +1 -1
  66. package/x/demo/webworkerAll-3YNCLHCR.js +2 -0
  67. package/x/demo/webworkerAll-3YNCLHCR.js.map +7 -0
  68. package/x/driver/WebGLRenderer-OMRWYQIV.js +2 -0
  69. package/x/driver/WebGLRenderer-OMRWYQIV.js.map +7 -0
  70. package/x/driver/WebGPURenderer-KQJB2OJJ.js +2 -0
  71. package/x/driver/WebGPURenderer-KQJB2OJJ.js.map +7 -0
  72. package/x/driver/browserAll-YBZEJCN3.js +2 -0
  73. package/x/driver/browserAll-YBZEJCN3.js.map +7 -0
  74. package/x/driver/chunk-3L3MB5NY.js +393 -0
  75. package/x/driver/chunk-3L3MB5NY.js.map +7 -0
  76. package/x/driver/chunk-42BQ4XKE.js +269 -0
  77. package/x/driver/chunk-42BQ4XKE.js.map +7 -0
  78. package/x/driver/chunk-4HAYG3N5.js +327 -0
  79. package/x/driver/chunk-4HAYG3N5.js.map +7 -0
  80. package/x/driver/chunk-BFBY7VYB.js +42 -0
  81. package/x/driver/chunk-BFBY7VYB.js.map +7 -0
  82. package/x/driver/chunk-KM6O72WE.js +157 -0
  83. package/x/driver/chunk-KM6O72WE.js.map +7 -0
  84. package/x/driver/chunk-N6HD4WYJ.js +2 -0
  85. package/x/driver/chunk-N6HD4WYJ.js.map +7 -0
  86. package/x/driver/chunk-WCZ2O3UN.js +15 -0
  87. package/x/driver/chunk-WCZ2O3UN.js.map +7 -0
  88. package/x/driver/chunk-XWNSF3WJ.js +2 -0
  89. package/x/driver/chunk-XWNSF3WJ.js.map +7 -0
  90. package/x/driver/driver-worker.d.ts +1 -0
  91. package/x/driver/driver-worker.js +6 -0
  92. package/x/driver/driver-worker.js.map +1 -0
  93. package/x/driver/driver.d.ts +5 -4
  94. package/x/driver/driver.js +10 -20
  95. package/x/driver/driver.js.map +1 -1
  96. package/x/driver/driver.test.js +1 -1
  97. package/x/driver/driver.test.js.map +1 -1
  98. package/x/driver/driver.worker.bundle.min.js +119 -3504
  99. package/x/driver/driver.worker.bundle.min.js.map +4 -4
  100. package/x/driver/fns/host.d.ts +1 -2
  101. package/x/driver/fns/schematic.d.ts +6 -1
  102. package/x/driver/fns/work.d.ts +2 -4
  103. package/x/driver/fns/work.js +1 -100
  104. package/x/driver/fns/work.js.map +1 -1
  105. package/x/driver/parts/compositor.d.ts +15 -0
  106. package/x/driver/parts/compositor.js +152 -0
  107. package/x/driver/parts/compositor.js.map +1 -0
  108. package/x/driver/parts/machina.d.ts +0 -20
  109. package/x/driver/parts/machina.js +6 -10
  110. package/x/driver/parts/machina.js.map +1 -1
  111. package/x/driver/webworkerAll-BKJQW6P7.js +2 -0
  112. package/x/driver/webworkerAll-BKJQW6P7.js.map +7 -0
  113. package/x/features/speech/transcribe/parts/prep-audio.d.ts +1 -1
  114. package/x/features/speech/transcribe/worker.bundle.min.js +899 -899
  115. package/x/features/speech/transcribe/worker.bundle.min.js.map +4 -4
  116. package/x/index.d.ts +1 -0
  117. package/x/index.html +2 -2
  118. package/x/index.js +1 -0
  119. package/x/index.js.map +1 -1
  120. package/x/timeline/index.d.ts +1 -1
  121. package/x/timeline/index.js +1 -1
  122. package/x/timeline/index.js.map +1 -1
  123. package/x/timeline/parts/filmstrip.d.ts +1 -1
  124. package/x/timeline/parts/media.d.ts +2 -0
  125. package/x/timeline/parts/media.js +10 -2
  126. package/x/timeline/parts/media.js.map +1 -1
  127. package/x/timeline/parts/renderers/export.js.map +1 -0
  128. package/x/timeline/parts/{compositor → renderers}/parts/html-tree.js +2 -2
  129. package/x/timeline/parts/renderers/parts/html-tree.js.map +1 -0
  130. package/x/timeline/parts/renderers/parts/schedulers.js.map +1 -0
  131. package/x/timeline/parts/{compositor → renderers}/parts/tree-builder.js +4 -2
  132. package/x/timeline/parts/renderers/parts/tree-builder.js.map +1 -0
  133. package/x/timeline/parts/renderers/parts/webcodecs-tree.js.map +1 -0
  134. package/x/timeline/parts/{compositor → renderers}/playback.d.ts +2 -4
  135. package/x/timeline/parts/{compositor → renderers}/playback.js +5 -14
  136. package/x/timeline/parts/renderers/playback.js.map +1 -0
  137. package/x/timeline/parts/{compositor → renderers}/samplers/html.js +14 -5
  138. package/x/timeline/parts/renderers/samplers/html.js.map +1 -0
  139. package/x/timeline/parts/{compositor → renderers}/samplers/webcodecs.js +1 -1
  140. package/x/timeline/parts/renderers/samplers/webcodecs.js.map +1 -0
  141. package/x/timeline/parts/resource-pool.d.ts +2 -0
  142. package/x/timeline/parts/resource-pool.js +7 -4
  143. package/x/timeline/parts/resource-pool.js.map +1 -1
  144. package/x/timeline/parts/resource.d.ts +1 -0
  145. package/x/timeline/sugar/o.d.ts +4 -1
  146. package/x/timeline/sugar/o.js +4 -4
  147. package/x/timeline/sugar/o.js.map +1 -1
  148. package/x/timeline/sugar/omni-test.js +14 -7
  149. package/x/timeline/sugar/omni-test.js.map +1 -1
  150. package/x/timeline/sugar/omni.d.ts +1 -2
  151. package/x/timeline/sugar/omni.js +2 -2
  152. package/x/timeline/sugar/omni.js.map +1 -1
  153. package/x/timeline/utils/datafile.d.ts +4 -3
  154. package/x/timeline/utils/datafile.js +16 -5
  155. package/x/timeline/utils/datafile.js.map +1 -1
  156. package/x/timeline/utils/dummy-data.d.ts +1 -2
  157. package/x/timeline/utils/dummy-data.js +4 -2
  158. package/x/timeline/utils/dummy-data.js.map +1 -1
  159. package/x/timeline/parts/compositor/export.js.map +0 -1
  160. package/x/timeline/parts/compositor/parts/html-tree.js.map +0 -1
  161. package/x/timeline/parts/compositor/parts/schedulers.js.map +0 -1
  162. package/x/timeline/parts/compositor/parts/tree-builder.js.map +0 -1
  163. package/x/timeline/parts/compositor/parts/webcodecs-tree.js.map +0 -1
  164. package/x/timeline/parts/compositor/playback.js.map +0 -1
  165. package/x/timeline/parts/compositor/samplers/html.js.map +0 -1
  166. package/x/timeline/parts/compositor/samplers/webcodecs.js.map +0 -1
  167. /package/s/timeline/parts/{compositor → renderers}/export.ts +0 -0
  168. /package/s/timeline/parts/{compositor → renderers}/parts/schedulers.ts +0 -0
  169. /package/s/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.ts +0 -0
  170. /package/x/timeline/parts/{compositor → renderers}/export.d.ts +0 -0
  171. /package/x/timeline/parts/{compositor → renderers}/export.js +0 -0
  172. /package/x/timeline/parts/{compositor → renderers}/parts/html-tree.d.ts +0 -0
  173. /package/x/timeline/parts/{compositor → renderers}/parts/schedulers.d.ts +0 -0
  174. /package/x/timeline/parts/{compositor → renderers}/parts/schedulers.js +0 -0
  175. /package/x/timeline/parts/{compositor → renderers}/parts/tree-builder.d.ts +0 -0
  176. /package/x/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.d.ts +0 -0
  177. /package/x/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.js +0 -0
  178. /package/x/timeline/parts/{compositor → renderers}/samplers/html.d.ts +0 -0
  179. /package/x/timeline/parts/{compositor → renderers}/samplers/webcodecs.d.ts +0 -0
@@ -1,27 +1,26 @@
1
- import {WebMediaInfo} from "web-demuxer"
2
1
 
3
- type Events =
4
- | {type: "config", config: {audio: AudioDecoderConfig, video: VideoDecoderConfig}}
5
- | {type: "info", data: WebMediaInfo}
6
- | {type: "encoderQueueSize", size: number}
7
-
8
- type Handler = (event: Events) => void
2
+ // type Events =
3
+ // | {type: "config", config: {audio: AudioDecoderConfig, video: VideoDecoderConfig}}
4
+ // | {type: "info", data: WebMediaInfo}
5
+ // | {type: "encoderQueueSize", size: number}
6
+ //
7
+ // type Handler = (event: Events) => void
9
8
 
10
9
  export class Machina {
11
10
  count = 0
12
11
 
13
- #handlers = new Map<number, Handler>()
14
-
15
- register(id: number, handler: Handler) {
16
- this.#handlers.set(id, handler)
17
- }
18
-
19
- unregister(id: number) {
20
- this.#handlers.delete(id)
21
- }
22
-
23
- dispatch(id: number, event: Events) {
24
- this.#handlers.get(id)?.(event)
25
- }
12
+ // #handlers = new Map<number, Handler>()
13
+ //
14
+ // register(id: number, handler: Handler) {
15
+ // this.#handlers.set(id, handler)
16
+ // }
17
+ //
18
+ // unregister(id: number) {
19
+ // this.#handlers.delete(id)
20
+ // }
21
+ //
22
+ // dispatch(id: number, event: Events) {
23
+ // this.#handlers.get(id)?.(event)
24
+ // }
26
25
  }
27
26
 
package/s/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
 
2
2
  export * from "./driver/driver.js"
3
+ export * from "./driver/driver-worker.js"
3
4
  export * from "./timeline/index.js"
4
5
 
@@ -6,7 +6,7 @@ export * from "./parts/resource-pool.js"
6
6
  export * from "./parts/resource.js"
7
7
  export * from "./parts/filmstrip.js"
8
8
  export * from "./parts/waveform.js"
9
- export * from "./parts/compositor/playback.js"
9
+ export * from "./parts/renderers/playback.js"
10
10
 
11
11
  export * from "./sugar/o.js"
12
12
  export * from "./sugar/omni.js"
@@ -14,13 +14,22 @@ export class Media {
14
14
 
15
15
  static async analyze(datafile: Datafile) {
16
16
  const media = new this(datafile)
17
- media.duration = 10
18
- const {video, audio} = await this.#has("/assets/temp/gl.mp4")
17
+ const duration = await this.duration(datafile.url) * 1000
18
+ media.duration = duration
19
+ const {video, audio} = await this.#has(datafile.url)
19
20
  media.hasAudio = audio
20
21
  media.hasVideo = video
21
22
  return media
22
23
  }
23
24
 
25
+ static async duration(source: DecoderSource) {
26
+ const input = new Input({
27
+ formats: ALL_FORMATS,
28
+ source: await loadDecoderSource(source)
29
+ })
30
+ return input.computeDuration()
31
+ }
32
+
24
33
  static async #has(source: DecoderSource) {
25
34
  const input = new Input({
26
35
  formats: ALL_FORMATS,
@@ -18,9 +18,9 @@ class HTMLNodeBuilder extends TreeBuilder<AudioPlaybackComponent> {
18
18
  composeAudio_Sequence(children: Node<AudioPlaybackComponent>[]) {
19
19
  return {
20
20
  onTimeUpdate: (time: number) => {
21
- let localTime = time
21
+ let localTime = Math.round(time)
22
22
  for (const child of children) {
23
- if (localTime < child.duration) {
23
+ if (localTime <= child.duration) {
24
24
  if (child.audio) child.audio.onTimeUpdate(localTime)
25
25
  break
26
26
  }
@@ -66,6 +66,7 @@ export abstract class TreeBuilder<T> {
66
66
  if (t < 0 || t >= root.duration)
67
67
  return []
68
68
  else return [{
69
+ id: root.id,
69
70
  kind: "text",
70
71
  content: root.content,
71
72
  style: styleItem?.style,
@@ -110,9 +111,9 @@ export abstract class TreeBuilder<T> {
110
111
  #composeVisuals_Sequence(children: Node<T>[]): VisualComponent {
111
112
  return {
112
113
  sampleAt: async (time) => {
113
- let localTime = time
114
+ let localTime = Math.round(time)
114
115
  for (const child of children) {
115
- if (localTime < child.duration) return child.visuals ? child.visuals.sampleAt(localTime) : []
116
+ if (localTime <= child.duration) return child.visuals ? child.visuals.sampleAt(localTime) : []
116
117
  localTime -= child.duration
117
118
  }
118
119
  return []
@@ -183,6 +184,7 @@ export abstract class TreeBuilder<T> {
183
184
  const to = await incomingNode.visuals.sampleAt(localTime) as ImageLayer[]
184
185
  if(!from[0]?.frame || !to[0]?.frame) return []
185
186
  return [{
187
+ id: transitionItem.id,
186
188
  kind: "transition",
187
189
  name: "circle",
188
190
  progress,
@@ -22,24 +22,17 @@ export class VideoPlayer {
22
22
  public canvas: HTMLCanvasElement,
23
23
  private root: Node<AudioPlaybackComponent>,
24
24
  private sampler: HTMLSampler,
25
- private resolveMedia: ResolveMedia = _hash => "/assets/temp/gl.mp4"
26
25
  ) {
27
26
  this.#controller.setFPS(30)
28
27
  }
29
28
 
30
- get context() {
31
- return this.canvas.getContext("2d")!
32
- }
33
-
34
- static async create(driver: Driver, timeline: TimelineFile) {
29
+ static async create(driver: Driver, timeline: TimelineFile, resolveMedia: ResolveMedia) {
35
30
  const rootItem = new Map(timeline.items.map(i => [i.id, i])).get(timeline.rootId)!
36
31
  const items = new Map(timeline.items.map(i => [i.id, i]))
37
- const sampler = makeHtmlSampler(() => "/assets/temp/gl.mp4")
32
+ const sampler = makeHtmlSampler(resolveMedia)
38
33
  const root = await buildHTMLNodeTree(rootItem, items, sampler)
39
- const canvas = document.createElement("canvas")
40
- canvas.width = 1920
41
- canvas.height = 1080
42
- return new this(driver, canvas, root, sampler)
34
+ const view = driver.compositor.pixi.renderer.canvas
35
+ return new this(driver, view, root, sampler)
43
36
  }
44
37
 
45
38
  async #tick(ms: number) {
@@ -48,7 +41,6 @@ export class VideoPlayer {
48
41
  this.root.audio?.onTimeUpdate(tt)
49
42
  const layers = await this.root.visuals?.sampleAt(tt) ?? []
50
43
  const frame = await this.driver.composite(layers)
51
- this.context.drawImage(frame, 0, 0)
52
44
  frame.close()
53
45
  if (ms >= duration) this.pause()
54
46
  }
@@ -73,7 +65,6 @@ export class VideoPlayer {
73
65
  this.root.audio?.onTimeUpdate(ms)
74
66
  const layers = await this.root.visuals?.sampleAt(ms) ?? []
75
67
  const frame = await this.driver.composite(layers)
76
- this.context.drawImage(frame, 0, 0)
77
68
  frame.close()
78
69
  }
79
70
 
@@ -45,11 +45,16 @@ export function makeHtmlSampler(resolveMedia: (hash: string) => DecoderSource):
45
45
  // if paused seek otherwise play
46
46
  visuals: {
47
47
  sampleAt: async (ms) => {
48
- if (ms < 0 || ms >= item.duration)
48
+ const mediaTime = item.start + ms
49
+ const endTime = item.start + item.duration
50
+
51
+ if (mediaTime < item.start || mediaTime >= endTime) {
52
+ video.pause()
49
53
  return []
54
+ }
50
55
 
51
56
  if(video.paused && paused) {
52
- await seek(video, ms / 1000)
57
+ await seek(video, mediaTime / 1000)
53
58
  }
54
59
 
55
60
  if(video.paused && !paused) {
@@ -57,7 +62,7 @@ export function makeHtmlSampler(resolveMedia: (hash: string) => DecoderSource):
57
62
  }
58
63
 
59
64
  const frame = new VideoFrame(video)
60
- return frame ? [{kind: "image", frame, matrix}] : []
65
+ return frame ? [{kind: "image", frame, matrix, id: item.id}] : []
61
66
  }
62
67
  }
63
68
  }
@@ -68,13 +73,22 @@ export function makeHtmlSampler(resolveMedia: (hash: string) => DecoderSource):
68
73
  duration: item.duration,
69
74
  audio: {
70
75
  onTimeUpdate: async (ms) => {
71
- const localTime = item.start + ms
76
+ const mediaTime = item.start + ms
77
+ const endTime = item.start + item.duration
78
+
79
+ if (mediaTime < item.start || mediaTime >= endTime) {
80
+ audio.pause()
81
+ return []
82
+ }
83
+
72
84
  if(audio.paused && paused) {
73
- await seek(audio, localTime / 1000)
85
+ await seek(audio, mediaTime / 1000)
74
86
  }
87
+
75
88
  if(audio.paused && !paused) {
76
89
  await audio.play()
77
90
  }
91
+
78
92
  return []
79
93
  }
80
94
  }
@@ -31,7 +31,7 @@ export function makeWebCodecsSampler(
31
31
  visuals: {
32
32
  sampleAt: async (ms: number) => {
33
33
  const frame = await cursor.atOrNear(baseUs + toUs(ms))
34
- return frame ? [{kind: "image", frame, matrix}] : []
34
+ return frame ? [{kind: "image", frame, matrix, id: item.id}] : []
35
35
  }
36
36
  }
37
37
  }
@@ -1,27 +1,31 @@
1
1
 
2
- import {MapG} from "@e280/stz"
2
+ import {GMap} from "@e280/stz"
3
3
  import {Hash} from "./basics.js"
4
4
  import {Media} from "./media.js"
5
5
  import {Resource} from "./resource.js"
6
6
  import {Datafile} from "../utils/datafile.js"
7
7
 
8
8
  export class ResourcePool {
9
- #map = new MapG<Hash, Resource.Any>
9
+ #map = new GMap<Hash, Resource.Any>
10
10
 
11
11
  /** store a media file (avoids duplicates via hash) */
12
12
  async store(datafile: Datafile) {
13
13
  const media = await Media.analyze(datafile)
14
14
  const {hash} = media.datafile.checksum
15
- const {filename, bytes} = media.datafile
15
+ const {filename, bytes, url} = media.datafile
16
16
 
17
17
  if (this.#map.has(hash)) {
18
18
  const alreadyExists = this.#map.require(hash)
19
19
  alreadyExists.filename = filename
20
20
  }
21
21
  else
22
- this.#map.set(hash, {kind: "media", filename, bytes})
22
+ this.#map.set(hash, {kind: "media", filename, bytes, url})
23
23
 
24
24
  return media
25
25
  }
26
+
27
+ require(hash: string) {
28
+ return this.#map.require(hash)
29
+ }
26
30
  }
27
31
 
@@ -4,6 +4,7 @@ export namespace Resource {
4
4
  kind: "media"
5
5
  filename: string
6
6
  bytes: Uint8Array
7
+ url: string
7
8
  }
8
9
 
9
10
  export type Any = Media
@@ -114,16 +114,20 @@ export class O {
114
114
  return item
115
115
  }
116
116
 
117
- text = (content: string, styles?: TextStyleOptions): Item.Text => {
117
+ text = (content: string, options?: {
118
+ duration?: number,
119
+ styles?: TextStyleOptions
120
+ }): Item.Text => {
121
+
118
122
  const item = {
119
123
  id: this.#getId(),
120
124
  content,
121
125
  kind: Kind.Text,
122
- duration: 2000
126
+ duration: options?.duration ?? 2000
123
127
  } as Item.Text
124
128
 
125
- if(styles)
126
- item.styleId = this.textStyle(styles).id
129
+ if(options?.styles)
130
+ item.styleId = this.textStyle(options.styles).id
127
131
 
128
132
  this.register(item)
129
133
  return item
@@ -1,7 +1,7 @@
1
1
 
2
2
  import {Omni} from "./omni.js"
3
3
  import {Driver} from "../../driver/driver.js"
4
- import {dummyData} from "../utils/dummy-data.js"
4
+ // import {dummyData} from "../utils/dummy-data.js"
5
5
 
6
6
  const driver = await Driver.setup()
7
7
  //
@@ -14,27 +14,27 @@ const omni = new Omni(driver)
14
14
  // load in some media resources
15
15
  //
16
16
 
17
- const {mediaA, mediaB} = await omni.load({
18
- mediaA: dummyData(),
19
- mediaB: dummyData(),
20
- })
17
+ // const {mediaA, mediaB} = await omni.load({
18
+ // mediaA: dummyData(),
19
+ // mediaB: dummyData(),
20
+ // })
21
21
 
22
22
  //
23
23
  // create a timeline
24
24
  //
25
25
 
26
- const timeline = omni.timeline(o => o.sequence(
27
- o.video(mediaA),
28
- o.transition.crossfade(600),
29
- o.stack(
30
- o.video(mediaB),
31
- o.text("hello world"),
32
- ),
33
- ))
26
+ // const timeline = omni.timeline(o => o.sequence(
27
+ // o.video(mediaA),
28
+ // o.transition.crossfade(600),
29
+ // o.stack(
30
+ // o.video(mediaB),
31
+ // o.text("hello world"),
32
+ // ),
33
+ // ))
34
34
 
35
35
  //
36
36
  // log the timeline
37
37
  //
38
38
 
39
- console.log(JSON.stringify(timeline, undefined, " "))
39
+ // console.log(JSON.stringify(timeline, undefined, " "))
40
40
 
@@ -5,7 +5,7 @@ import {Media} from "../parts/media.js"
5
5
  import {Driver} from "../../driver/driver.js"
6
6
  import {Datafile} from "../utils/datafile.js"
7
7
  import {TimelineFile} from "../parts/basics.js"
8
- import {Export} from "../parts/compositor/export.js"
8
+ import {Export} from "../parts/renderers/export.js"
9
9
  import {ResourcePool} from "../parts/resource-pool.js"
10
10
  import {RenderConfig} from "../../driver/fns/schematic.js"
11
11
 
@@ -38,7 +38,7 @@ export class Omni {
38
38
  return o.state.project
39
39
  }
40
40
 
41
- render = async (timeline: TimelineFile, config: RenderConfig) => {
41
+ render = async (timeline: TimelineFile) => {
42
42
  await this.#export.render(timeline)
43
43
  }
44
44
  }
@@ -3,19 +3,29 @@ import {Checksum} from "./checksum.js"
3
3
 
4
4
  export class Datafile {
5
5
  constructor(
6
+ public url: string,
6
7
  public bytes: Uint8Array,
7
8
  public filename: string,
8
9
  public checksum: Checksum,
9
10
  ) {}
10
11
 
11
- static async make(bytes: Uint8Array, name?: string) {
12
+ static async make(file: Blob, name?: string) {
13
+ const buffer = await file.arrayBuffer()
14
+ const bytes = new Uint8Array(buffer)
12
15
  const checksum = await Checksum.make(bytes)
13
16
  const filename = name ?? checksum.nickname
14
- return new this(bytes, filename, checksum)
17
+ const url = URL.createObjectURL(file)
18
+ return new this(url, bytes, filename, checksum)
15
19
  }
16
20
 
17
- static async load(_path: string): Promise<Datafile> {
18
- throw new Error("TODO implement")
21
+ static async load(path: string) {
22
+ // const file = await fetch(path)
23
+ // const buffer = await file.arrayBuffer()
24
+ // const bytes = new Uint8Array(buffer)
25
+ // const filename = file?.headers.get('Content-Disposition')?.split('filename=')[1] ?? "file"
26
+ // console.log(filename)
27
+ // const checksum = await Checksum.make(bytes)
28
+ // return new this(path, bytes, filename, checksum)
19
29
  }
20
30
  }
21
31
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  import {Datafile} from "./datafile.js"
3
3
 
4
- export const dummyData = () => Datafile.make(
5
- new Uint8Array([0xDE, 0xAD, 0xBE, 0xEF])
6
- )
4
+ // export const dummyData = () => Datafile.make(
5
+ // new Uint8Array([0xDE, 0xAD, 0xBE, 0xEF])
6
+ // )
7
7
 
@@ -0,0 +1,2 @@
1
+ import{a}from"./chunk-X2GHKWPJ.js";import"./chunk-RFNLITDQ.js";import"./chunk-LQU5JKKZ.js";export{a as WebGLRenderer};
2
+ //# sourceMappingURL=WebGLRenderer-Q3OV2JVE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"./chunk-6DBMQOFE.js";import"./chunk-TBWCKYN2.js";import"./chunk-RFNLITDQ.js";import"./chunk-LQU5JKKZ.js";export{a as WebGPURenderer};
2
+ //# sourceMappingURL=WebGPURenderer-FUFF62QA.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as i,b as o,c as m,d as p,e}from"./chunk-TLDBHU4V.js";import"./chunk-LAJHJD2S.js";import"./chunk-2RBLPWNG.js";import"./chunk-TBWCKYN2.js";import{O as t,e as r}from"./chunk-LQU5JKKZ.js";r.add(i);r.mixin(t,o);r.add(m);r.mixin(t,p);r.add(e);
2
+ //# sourceMappingURL=browserAll-PGQYU756.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/pixi.js/src/accessibility/init.ts", "../../node_modules/pixi.js/src/events/init.ts", "../../node_modules/pixi.js/src/dom/init.ts"],
4
+ "sourcesContent": ["import { extensions } from '../extensions/Extensions';\nimport { Container } from '../scene/container/Container';\nimport { AccessibilitySystem } from './AccessibilitySystem';\nimport { accessibilityTarget } from './accessibilityTarget';\n\nextensions.add(AccessibilitySystem);\nextensions.mixin(Container, accessibilityTarget);\n", "import { extensions } from '../extensions/Extensions';\nimport { Container } from '../scene/container/Container';\nimport { EventSystem } from './EventSystem';\nimport { FederatedContainer } from './FederatedEventTarget';\n\nextensions.add(EventSystem);\nextensions.mixin(Container, FederatedContainer);\n", "import { extensions } from '../extensions/Extensions';\nimport { DOMPipe } from './DOMPipe';\n\nexport * from './index';\n\nextensions.add(DOMPipe);\n"],
5
+ "mappings": "kMAKAA,EAAW,IAAIC,CAAmB,EAClCD,EAAW,MAAME,EAAWC,CAAmB,ECD/CC,EAAW,IAAIC,CAAW,EAC1BD,EAAW,MAAME,EAAWC,CAAkB,ECD9CC,EAAW,IAAIC,CAAO",
6
+ "names": ["extensions", "AccessibilitySystem", "Container", "accessibilityTarget", "extensions", "EventSystem", "Container", "FederatedContainer", "extensions", "DOMPipe"]
7
+ }