@omnimedia/omnitool 1.1.0-93 → 1.1.0-94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -181,6 +181,7 @@ const transcriber = await makeTranscriber({
181
181
 
182
182
  `o.captions(video, transcript, options)` creates captions for a video or audio.
183
183
  `o.captions` uses `captionPresets.default` preset.
184
+ The generated caption id is stored on the source item as `captionId`.
184
185
  use `o.captions.presets` to choose from available pre-styled captions.
185
186
  pass `styles` in options to override preset styles.
186
187
  transcript chunk timestamps are in seconds.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnimedia/omnitool",
3
- "version": "1.1.0-93",
3
+ "version": "1.1.0-94",
4
4
  "description": "open source video processing tools",
5
5
  "license": "MIT",
6
6
  "author": "Przemysław Gałęzki",
@@ -89,6 +89,7 @@ export namespace Item {
89
89
  spatialId?: Id
90
90
  animationIds?: Id[]
91
91
  filterIds?: Id[]
92
+ captionId?: Id
92
93
  }
93
94
 
94
95
  export type Audio = {
@@ -98,6 +99,7 @@ export namespace Item {
98
99
  start: number
99
100
  duration: number
100
101
  gain?: number
102
+ captionId?: Id
101
103
  }
102
104
 
103
105
  export type Text = {
@@ -346,6 +346,7 @@ export class O {
346
346
  start: options?.start ?? item.start,
347
347
  duration: options?.duration ?? item.duration,
348
348
  })
349
+ this.set<CaptionSourceItem>(item.id, {captionId: caption.id})
349
350
  return this.stack(caption, item)
350
351
  }) as CaptionAction
351
352
 
@@ -7322,7 +7322,7 @@ fn rand(co: vec2<f32>, seed: f32) -> f32
7322
7322
  vec2 uv = vTextureCoord.xy;
7323
7323
  gl_FragColor = transition(vTextureCoord);
7324
7324
  }
7325
- `;function td({name:r,renderer:e}){let t=ed.default.find(c=>c.name===r),n=new $t,o=new ne,i=new Qt({}),s=new Qt({}),a=new k({glProgram:new P({vertex:Zm,fragment:Jm(t.glsl)}),resources:{from:i,to:s,uniforms:{...ma.basics,...ma.custom(t)}}});return n.filters=[a],{render({width:c,height:l,from:f,to:u,progress:m}){return(n.width!==c||n.height!==l)&&(n.setSize({width:c,height:l}),o.source.resize(c,l)),i.resource=f,s.resource=u,i.update(),s.update(),a.resources.uniforms.uniforms.progress=m,e.render({container:n,target:o,clear:!1,width:c,height:l}),o}}}var ai=class{pixi;onPointerDown=ke();onPointerMove=ke();onPointerUp=ke();onDispose=ke();static async setup(){let e=await Vs({width:1920,height:1080,preference:"webgl",background:"black",preferWebGLVersion:2}),t=new Di;return t.interactive=!0,new this({renderer:e,stage:t})}constructor(e){this.pixi=e}#e=new Map;#t=new Map;#r=new WeakMap;async composite(e){let{stage:t,renderer:n}=this.pixi;this.#d(this.#m(e));let{dispose:o}=await this.#n(e,t);n.render(t);let i=new VideoFrame(n.canvas,{timestamp:0,duration:0});return o(),i}getActiveObject(e){return this.#t.get(e)?.sprite}async#n(e,t){if(Array.isArray(e)){let n=[];for(let o of[...e].reverse()){let i=await this.#n(o,t);n.push(i.dispose)}return{dispose:()=>n.forEach(o=>o())}}switch(e.kind){case"text":return this.#o(e,t);case"image":return this.#c(e,t);case"transition":return this.#i(e,t);case"gap":return this.pixi?.renderer.clear(),{dispose:()=>{}};default:return console.warn("Unknown layer kind",e.kind),{dispose:()=>{}}}}#o(e,t){let n=this.#f(e);return n.text=e.content,e.style&&(n.style=e.style),this.#s(n,e.matrix),this.#a(n,e.alpha),this.#l(n,e.crop),this.#u(n,e.filters),t.addChild(n),{dispose:()=>{}}}#c(e,t){let n=this.#f(e);n.texture&&n.texture!==ne.EMPTY&&n.texture.destroy(!0);let o=ne.from(e.frame);return n.texture=o,this.#s(n,e.matrix),this.#a(n,e.alpha),this.#l(n,e.crop),this.#u(n,e.filters),t.addChild(n),{dispose:()=>{e.frame.close()}}}#i({from:e,to:t,progress:n,name:o},i){let a=(this.#e.get(o)??(this.#e.set(o,td({name:"circle",renderer:this.pixi.renderer})),this.#e.get(o))).render({from:e,to:t,progress:n,width:e.displayWidth,height:e.displayHeight}),c=new $t(a);return i.addChild(c),{dispose:()=>c.destroy(!1)}}#s(e,t){if(!t)return;let n=Km(t);e.setFromMatrix(n)}#a(e,t){e.alpha=t??1}#l(e,t){let n=this.#r.get(e);if(n&&(e.mask===n&&(e.mask=null),n.removeFromParent(),n.clear()),!t||t.every(h=>h===0))return;let[o,i,s,a]=t,c=e.mask;e.mask=null;let l=e.getLocalBounds();e.mask=c;let f=l.x+l.width*a,u=l.y+l.height*o,m=l.width*Math.max(0,1-a-i),d=l.height*Math.max(0,1-o-s),p=n??new Ri;p.clear(),p.beginFill(16777215),p.drawRect(f,u,m,d),p.endFill(),e.addChild(p),e.mask=p,this.#r.set(e,p)}#u(e,t){if(!t?.length){e.filters=null;return}e.filters=t.map(n=>{switch(n.type){case"ColorMatrixFilter":{let{matrix:o,...i}=n.params??{},s=new Nt(i);return o&&(s.matrix=o),s}case"EmbossFilter":return new Er(n.params?.strength);case"PixelateFilter":return new Dr(n.params?.size);default:{let o=Xm(n.type);return o?new o(n.params):void 0}}}).filter(n=>!!n)}#f(e){let t=this.#t.get(e.id);if(t)return t.sprite;switch(e.kind){case"text":{let n=new Sn({text:e.content,style:e.style});n.eventMode="static";let o=a=>this.onPointerDown.publish({event:a,id:e.id,object:n}),i=a=>this.onPointerUp.publish({event:a,id:e.id,object:n}),s=a=>this.onPointerUp.publish({event:a,id:e.id,object:n});return n.on("pointerdown",o),n.on("pointerup",i),n.on("pointermove",s),this.#t.set(e.id,{sprite:n,dispose:()=>{this.onDispose.publish({id:e.id,object:n}),n.off("pointermove",s),n.off("pointerdown",o),n.off("pointerup",i)}}).get(e.id)?.sprite}case"image":{let n=new $t;n.eventMode="static";let o=a=>this.onPointerDown.publish({event:a,id:e.id,object:n}),i=a=>this.onPointerUp.publish({event:a,id:e.id,object:n}),s=a=>this.onPointerUp.publish({event:a,id:e.id,object:n});return n.on("pointerdown",o),n.on("pointermove",s),n.on("pointerup",i),this.#t.set(e.id,{sprite:n,dispose:()=>{this.onDispose.publish({id:e.id,object:n}),n.off("pointerdown",o),n.off("pointermove",s),n.off("pointerup",i)}}).get(e.id)?.sprite}}}#m(e){let t=new Set,n=o=>{if(Array.isArray(o))for(let i of o)n(i);else t.add(o.id)};return n(e),t}#d(e){for(let t of this.#t.keys())if(!e.has(t)){let{sprite:n,dispose:o}=this.#t.get(t);o(),n.destroy(!0),this.#t.delete(t)}}};var rd=r=>ir.host(e=>({async world(){r.count++}}));async function ye(r){return r instanceof Blob?new vn(r):new yn(r)}var ci=class{machina;thread;compositor;static async setup(e){let t=new Go,n=await ir.thread({label:"OmnitoolDriver",workerUrl:e?.workerUrl??"/node_modules/@omnimedia/omnitool/x/driver/driver.worker.bundle.min.js",setupHost:rd(t)}),o=await ai.setup();return new this(t,n,o)}constructor(e,t,n){this.machina=e,this.thread=t,this.compositor=n}async hello(){return this.thread.work.hello()}async getAudioDuration(e){let n=await new fe({source:await ye(e),formats:ge}).getPrimaryAudioTrack();if(!n)throw new Error("primary audio track not found");return await n.computeDuration()}async getVideoDuration(e){return await(await new fe({source:await ye(e),formats:ge}).getPrimaryVideoTrack())?.computeDuration()}decodeVideo(e){let t=null,{port1:n,port2:o}=new MessageChannel,i=new TransformStream({async transform(s,a){let c=await e.onFrame?.(s)??s;t?.close(),a.enqueue(c),t=c}});return this.thread.work.decodeVideo[rr]({transfer:[i.writable,o]})({source:e.source,cancel:o,video:i.writable,start:e.start,end:e.end}),{readable:i.readable,cancel(){n.postMessage("close"),n.close()}}}decodeAudio(e){let t=new TransformStream,{port1:n,port2:o}=new MessageChannel;return this.thread.work.decodeAudio[rr]({transfer:[t.writable,o]})({source:e.source,cancel:o,audio:t.writable,start:e.start,end:e.end}),{readable:t.readable,cancel(){n.postMessage("close"),n.close()}}}encode({audio:e,video:t,config:n}){let{readable:o,writable:i}=new TransformStream,s=[e,t,i].filter(En.happy),a=this.thread.work.encode[rr]({transfer:s})({audio:e,video:t,config:n,writable:i});return{readable:o,done:a}}async composite(e){return await this.compositor.composite(e)}};var b=(r,e,t,n)=>({type:"number",min:r,max:e,default:t,...n===void 0?{}:{step:n}}),tt=r=>({type:"color",default:r}),Ve=r=>({type:"boolean",default:r}),li=(r,e)=>({type:"choice",options:r,default:e}),ee=r=>({type:"object",properties:r}),o0=r=>({type:"array",items:r}),nd=[3,5,7,9,11,13,15,17,19,21,23,25],i0={TRANSPARENT:0,ORIGINAL:1,LOOP:2,CLAMP:3,MIRROR:4},H=()=>(r,e={})=>({type:r,schema:e}),ui={adjustment:H()("AdjustmentFilter",{gamma:b(0,5,1),saturation:b(0,5,1),contrast:b(0,5,1),brightness:b(0,5,1),red:b(0,5,1),green:b(0,5,1),blue:b(0,5,1),alpha:b(0,1,1,.01)}),advancedBloom:H()("AdvancedBloomFilter",{threshold:b(.1,.9,.5,.01),bloomScale:b(.5,1.5,1,.01),brightness:b(.5,1.5,1,.01),blur:b(0,20,8,.1),quality:b(1,20,4,1)}),alpha:H()("AlphaFilter",{alpha:b(0,1,1,.01)}),ascii:H()("AsciiFilter",{size:b(2,20,8,1),color:tt("#ffffff"),replaceColor:Ve(!1)}),backdropBlur:H()("BackdropBlurFilter",{strength:b(0,100,8,.1),quality:b(1,10,4,1)}),bevel:H()("BevelFilter",{rotation:b(0,360,45,1),thickness:b(0,10,2,.1),lightColor:tt("#ffffff"),lightAlpha:b(0,1,.7,.01),shadowColor:tt("#000000"),shadowAlpha:b(0,1,.7,.01)}),bloom:H()("BloomFilter",{strength:ee({x:b(0,20,2,.1),y:b(0,20,2,.1)}),quality:b(1,20,4,1),resolution:b(.25,4,1,.01),kernelSize:li([5,7,9,11,13,15],5)}),blur:H()("BlurFilter",{strength:b(0,100,8,.1),quality:b(1,10,4,1)}),bulgePinch:H()("BulgePinchFilter",{radius:b(0,1e3,100,1),strength:b(-1,1,1,.01),center:ee({x:b(0,1,.5,.01),y:b(0,1,.5,.01)})}),colorGradient:H()("ColorGradientFilter"),colorMatrix:H()("ColorMatrixFilter"),colorOverlay:H()("ColorOverlayFilter",{color:tt("#ff0000"),alpha:b(0,1,.5,.01)}),colorReplace:H()("ColorReplaceFilter",{originalColor:tt("#ff0000"),targetColor:tt("#000000"),tolerance:b(0,1,.4,.01)}),convolution:H()("ConvolutionFilter",{width:b(0,500,300,1),height:b(0,500,300,1),matrix:o0([b(0,1,0),b(0,1,.5,.01),b(0,1,0),b(0,1,.5,.01),b(0,1,1,.01),b(0,1,.5,.01),b(0,1,0),b(0,1,.5,.01),b(0,1,0)])}),crossHatch:H()("CrossHatchFilter"),crt:H()("CRTFilter",{curvature:b(0,10,1,.01),lineWidth:b(0,5,3,.01),lineContrast:b(0,1,.3,.01),verticalLine:Ve(!1),noise:b(0,1,.2,.01),noiseSize:b(1,10,1,.1),vignetting:b(0,1,.3,.01),vignettingAlpha:b(0,1,1,.01),vignettingBlur:b(0,1,.3,.01),seed:b(0,1,0,.01),time:b(.5,20,.5,.01)}),dot:H()("DotFilter",{scale:b(.3,1,1,.01),angle:b(0,5,5,.01),grayscale:Ve(!0)}),dropShadow:H()("DropShadowFilter",{blur:b(0,20,2,.1),quality:b(1,20,3,1),alpha:b(0,1,.5,.01),offset:ee({x:b(-50,50,4,1),y:b(-50,50,4,1)}),color:tt("#000000"),shadowOnly:Ve(!1)}),emboss:H()("EmbossFilter",{strength:b(0,20,5,.1)}),glitch:H()("GlitchFilter",{slices:b(0,64,5,1),seed:b(0,1,.5,.01),offset:b(-400,400,100,1),direction:b(-180,180,0,1),fillMode:li(i0,"LOOP"),average:Ve(!1),minSize:b(0,64,8,1),sampleSize:b(1,2048,512,1),red:ee({x:b(-50,50,2,1),y:b(-50,50,2,1)}),blue:ee({x:b(-50,50,10,1),y:b(-50,50,-4,1)}),green:ee({x:b(-50,50,-10,1),y:b(-50,50,4,1)})}),glow:H()("GlowFilter",{distance:b(0,20,15,.1),innerStrength:b(0,20,0,.1),outerStrength:b(0,20,2,.1),color:tt("#ffffff"),quality:b(0,1,.2,.01),alpha:b(0,1,1,.01),knockout:Ve(!1)}),godray:H()("GodrayFilter",{time:b(0,1,0,.01),gain:b(0,1,.6,.01),lacunarity:b(0,5,2.75,.01),alpha:b(0,1,1,.01),parallel:Ve(!0),angle:b(-60,60,30,1),center:ee({x:b(-100,2012,956,1),y:b(-1e3,-100,-100,1)})}),grayscale:H()("GrayscaleFilter"),hslAdjustment:H()("HslAdjustmentFilter",{hue:b(-180,180,0,1),saturation:b(-1,1,0,.01),lightness:b(-1,1,0,.01),colorize:Ve(!1),alpha:b(0,1,1,.01)}),kawaseBlur:H()("KawaseBlurFilter",{strength:b(0,20,4,.1),quality:b(1,20,3,1),pixelSize:ee({x:b(0,10,1,.1),y:b(0,10,1,.1)})}),motionBlur:H()("MotionBlurFilter",{velocity:ee({x:b(-90,90,40,1),y:b(-90,90,40,1)}),kernelSize:li(nd,15),offset:b(-150,150,0,1)}),multiColorReplace:H()("MultiColorReplaceFilter"),noise:H()("NoiseFilter",{noise:b(0,1,.5,.01),seed:b(.01,10,.5,.01)}),oldFilm:H()("OldFilmFilter",{sepia:b(0,1,.3,.01),noise:b(0,1,.3,.01),noiseSize:b(1,10,1,.1),scratch:b(-1,1,.5,.01),scratchDensity:b(0,1,.3,.01),scratchWidth:b(1,20,1,.1),vignetting:b(0,1,.3,.01),vignettingAlpha:b(0,1,1,.01),vignettingBlur:b(0,1,.3,.01)}),outline:H()("OutlineFilter",{thickness:b(0,10,4,.1),color:tt("#000000"),alpha:b(0,1,1,.01),knockout:Ve(!1)}),pixelate:H()("PixelateFilter",{size:ee({x:b(4,40,10,1),y:b(4,40,10,1)})}),radialBlur:H()("RadialBlurFilter",{angle:b(-180,180,20,1),radius:b(-1,1912,300,1),center:ee({x:b(0,1912,956,1),y:b(0,920,460,1)}),kernelSize:li(nd,15)}),reflection:H()("ReflectionFilter",{mirror:Ve(!0),boundary:b(0,1,.5,.01),amplitude:ee({start:b(0,50,0,.1),end:b(0,50,20,.1)}),waveLength:ee({start:b(10,200,30,1),end:b(10,200,100,1)}),alpha:ee({start:b(0,1,1,.01),end:b(0,1,1,.01)}),time:b(0,20,0,.01)}),rgbSplit:H()("RGBSplitFilter",{red:ee({x:b(-20,20,-10,1),y:b(-20,20,0,1)}),blue:ee({x:b(-20,20,0,1),y:b(-20,20,0,1)}),green:ee({x:b(-20,20,0,1),y:b(-20,20,10,1)})}),shockwave:H()("ShockwaveFilter",{speed:b(500,2e3,500,1),amplitude:b(1,100,30,1),wavelength:b(2,400,160,1),brightness:b(.2,2,1,.01),radius:b(100,2e3,-1,1),center:ee({x:b(0,1912,956,1),y:b(0,920,460,1)})}),simplexNoise:H()("SimplexNoiseFilter",{strength:b(0,1,.5,.01),noiseScale:b(0,50,10,.1),offsetX:b(0,5,0,.01),offsetY:b(0,5,0,.01),offsetZ:b(0,5,0,.01),step:b(-1,1,-1,.01)}),tiltShift:H()("TiltShiftFilter",{blur:b(0,200,100,.1),gradientBlur:b(0,1e3,600,1),start:ee({x:b(0,1912,0,1),y:b(0,920,460,1)}),end:ee({x:b(0,1912,1912,1),y:b(0,920,460,1)})}),twist:H()("TwistFilter",{angle:b(-10,10,4,.01),radius:b(0,1912,200,1),offset:ee({x:b(0,1912,956,1),y:b(0,920,460,1)})}),zoomBlur:H()("ZoomBlurFilter",{strength:b(.01,.5,.1,.01),center:ee({x:b(0,1912,956,1),y:b(0,920,460,1)}),innerRadius:b(0,956,80,1),radius:b(0,956,-1,1)})};var G;(function(r){r[r.Sequence=0]="Sequence",r[r.Stack=1]="Stack",r[r.Video=2]="Video",r[r.Audio=3]="Audio",r[r.Text=4]="Text",r[r.Gap=5]="Gap",r[r.Spatial=6]="Spatial",r[r.Animation=7]="Animation",r[r.Transition=8]="Transition",r[r.TextStyle=9]="TextStyle",r[r.Filter=10]="Filter",r[r.Caption=11]="Caption"})(G||(G={}));var fi;(function(r){r[r.Crossfade=0]="Crossfade"})(fi||(fi={}));var mi=class{datafile;duration=0;hasVideo=!1;hasAudio=!1;constructor(e){this.datafile=e}static async analyze(e){let t=new this(e),n=await this.duration(e.url)*1e3;t.duration=n;let{video:o,audio:i}=await this.#e(e.url);return t.hasAudio=i,t.hasVideo=o,t}static async duration(e){let n=await new fe({formats:ge,source:await ye(e)}).computeDuration();return Number(n.toFixed(5))}static async#e(e){let t=new fe({formats:ge,source:await ye(e)});return{audio:!!await t.getPrimaryAudioTrack(),video:!!await t.getPrimaryVideoTrack()}}};var di=class{#e=new zn;async store(e){let t=await mi.analyze(e),{hash:n}=t.datafile.checksum,{filename:o,bytes:i,url:s,blob:a}=t.datafile;if(this.#e.has(n)){let c=this.#e.require(n);c.filename=o}else this.#e.set(n,{kind:"media",filename:o,bytes:i,url:s,blob:a,duration:t.duration});return t}require(e){return this.#e.require(e)}};var pi=class r{videoTrack;options;#e;#t=new Map;#r=[0,0];constructor(e,t){this.videoTrack=e,this.options=t,this.#e=new cn(e,t.canvasSinkOptions)}static async init(e,t){let o=await new fe({formats:ge,source:await ye(e)}).getPrimaryVideoTrack();if(o)return new r(o,{frequency:t.frequency??1,canvasSinkOptions:t.canvasSinkOptions??{width:80,height:50,fit:"fill"},onChange:t.onChange,onPlaceholders:t.onPlaceholders});throw new Error("Source has no video track")}set frequency(e){e!==this.options.frequency&&(this.options.frequency=e,this.#a())}get frequency(){return this.options.frequency}#n([e,t],n=1){let o=t-e;return[e-o*n,t+o*n]}async#o(){let[e,t]=this.#r,n=new Set,o=await this.videoTrack.computeDuration();for(let i=Math.max(0,e);i<=t;i+=this.options.frequency)i>=0&&i<=o&&n.add(i);this.options.onPlaceholders?.([...n])}async#c(){let[e,t]=this.#r,n=new Set,o=await this.videoTrack.computeDuration();for(let c=Math.max(0,e);c<=t;c+=this.options.frequency)c>=0&&c<=o&&n.add(c);let i=[...n].filter(c=>!this.#t.has(c)),s=0;for await(let c of this.#e.canvasesAtTimestamps(i))if(c){let l=i[s++];this.#t.set(l,c)}for(let c of this.#t.keys())n.has(c)||this.#t.delete(c);let a=[...this.#t.entries()].map(([c,l])=>({time:c,canvas:l}));this.options.onChange(a)}set range(e){let[t,n]=e,o=n-t,[i,s]=this.#r,a=i+o,c=s-o,l=t<a,f=n>c;!l&&!f||(this.#r=this.#n(e,2),this.#a())}#i=null;#s=!1;async#a(){if(this.#o(),this.#i){this.#s=!0;return}this.#i=this.#c(),await this.#i,this.#i=null,this.#s&&(this.#s=!1,await this.#a())}getThumbnail(e){return this.#t.get(e)}};var xt={slideIn:{type:"motion",label:"Slide in",defaults:{duration:700,from:[-400,0],to:[0,0],terp:"easeOut"},transform:{from:{position:[-400,0]},to:{position:[0,0]}}},slideOut:{type:"motion",label:"Slide out",defaults:{duration:700,from:[0,0],to:[400,0],terp:"easeIn"},transform:{from:{position:[0,0]},to:{position:[400,0]}}},spinIn:{type:"motion",label:"Spin in",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeOut"},transform:{from:{scale:[0,0],rotation:-180},to:{scale:[1,1],rotation:0}}},spinOut:{type:"motion",label:"Spin out",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeIn"},transform:{from:{scale:[1,1],rotation:0},to:{scale:[0,0],rotation:180}}},zoomIn:{type:"motion",label:"Zoom in",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeOut"},transform:{from:{scale:[0,0]},to:{scale:[1,1]}}},zoomOut:{type:"motion",label:"Zoom out",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeIn"},transform:{from:{scale:[1,1]},to:{scale:[0,0]}}},bounceIn:{type:"motion",label:"Bounce in",defaults:{duration:700,from:[0,0],to:[0,0],terp:"bounce"},transform:{from:{scale:[0,0]},to:{scale:[1,1]}}},bounceOut:{type:"motion",label:"Bounce out",defaults:{duration:700,from:[0,0],to:[0,0],terp:"bounce"},transform:{from:{scale:[1,1]},to:{scale:[0,0]}}},fadeIn:{type:"scalar",label:"Fade in",defaults:{duration:700,from:0,to:1,terp:"easeIn"}},fadeOut:{type:"scalar",label:"Fade out",defaults:{duration:700,from:1,to:0,terp:"easeOut"}}};var Tn={transform:{type:"transform",defaultTerp:"linear",channels:[{path:"position.x",type:"number",default:0,unit:"pixel"},{path:"position.y",type:"number",default:0,unit:"pixel"},{path:"scale.x",type:"number",default:1,unit:"scale"},{path:"scale.y",type:"number",default:1,unit:"scale"},{path:"rotation",type:"number",default:0,unit:"degree"}]},opacity:{type:"scalar",defaultTerp:"linear",channels:[{type:"number",default:1,unit:"ratio",range:[0,1]}]}},s0={...Tn};function od(r,e,t){let n=Object.entries(xt).map(([o,i])=>{let s=i.type==="motion"?a=>{let c=a?.offset??0;return e(a?.terp??i.defaults.terp,[[c,t({...i.transform.from,...a?.from===void 0?{}:{position:a.from}})],[c+(a?.duration??i.defaults.duration),t({...i.transform.to,...a?.to===void 0?{}:{position:a.to}})]])}:a=>{let c=a?.offset??0;return r(a?.terp??i.defaults.terp,[[c,a?.from??i.defaults.from],[c+(a?.duration??i.defaults.duration),a?.to??i.defaults.to]])};return[o,s]});return Object.fromEntries(n)}var hi={default:{styles:{fontFamily:"Arial",fontSize:56,fill:"#ffffff",align:"center",wordWrap:!0,wordWrapWidth:1440},transform:{position:[240,860]}}},a0={maxChars:42,maxDuration:3500,maxSilence:750};function da(r,e){let{maxChars:t,maxDuration:n,maxSilence:o}={...a0,...e},i=[],s=null;for(let{timestamp:[a,c],text:l}of r.chunks){let[f,u]=[a*1e3,c*1e3],m=l.trim();if(!Number.isFinite(f)||!Number.isFinite(u)||!m)continue;if(!s){s={text:m,timestamp:[f,u]};continue}let[d,p]=s.timestamp,h=`${s.text} ${m}`.trim();h.length>t||u-d>n||f-p>o?(i.push(s),s={text:m,timestamp:[f,u]}):s={text:h,timestamp:[d,u]}}return s&&i.push(s),i}function id(r,e){let t=da(r,e);return Math.max(0,...t.map(n=>n.timestamp[1]))}var sd=()=>({model:"onnx-community/whisper-tiny_timestamped",dtype:"q4",device:"wasm",chunkLength:20,strideLength:3});async function ad(r,e){let t=await e.arrayBuffer(),o=await new AudioContext({sampleRate:16e3}).decodeAudioData(t),i;if(o.numberOfChannels===2){let a=Math.sqrt(2),c=o.getChannelData(0),l=o.getChannelData(1);i=new Float32Array(c.length);for(let f=0;f<o.length;++f)i[f]=a*(c[f]+l[f])/2}else i=o.getChannelData(0);let s=await r.getAudioDuration(e);return{audio:i,duration:s}}async function cd({driver:r,spec:e,workerUrl:t,onLoading:n}){let o=Li(),i=Li(),s=await ir.thread({label:"OmnitoolSpeechTranscriber",workerUrl:t,setupHost:()=>({loading:async a=>n(a),deliverReport:async a=>o.pub(a),deliverTranscription:async a=>i.pub(a)})});return await s.work.prepare(e),{transcribe:Pa(async a=>{let{source:c,language:l}=a,{audio:f,duration:u}=await ad(r,c),m=_a(o(a.onReport),i(a.onTranscription)),d=await s.work.transcribe({duration:u,language:l,audio:f.buffer});return m(),d}),dispose:()=>s.terminate()}}function ld(r,e){let t=typeof window<"u"&&window.devicePixelRatio||1,n=document.createElement("canvas");n.width=e.width*t,n.height=e.height*t,n.style.width=`${e.width}px`,n.style.height=`${e.height}px`;let o=n.getContext("2d");if(!o)return n;o.scale(t,t),o.fillStyle=e.color;let i=e.height/2,s=Math.max(1,e.width),a=r.length/s;for(let c=0;c<s;c++){let l=Math.floor(c*a),f=Math.max(l+1,Math.floor((c+1)*a)),u=0;for(let d=l;d<f&&d<r.length;d++)r[d]>u&&(u=r[d]);let m=u*e.height;o.fillRect(c,i-m/2,1,m)}return n}var pa=[2048,1024,512,256,128,64,32];async function ud(r,e){let t=await r.getAudioDuration(e)??0,n=r.decodeAudio({source:e}).readable,o=pa[pa.length-1],i=[],s=0,a=0,c=0;for await(let u of n){c||=u.sampleRate;let m=u.numberOfFrames,d=new Float32Array(m);u.copyTo(d,{planeIndex:0});for(let p=0;p<d.length;p++){let h=Math.abs(d[p]);h>s&&(s=h),a++,a>=o&&(i.push(s),s=0,a=0)}u.close()}a>0&&i.push(s);let l=new Float32Array(i),f=pa.map(u=>{let m=Math.max(1,Math.round(u/o)),d=m===1?l:c0(l,m);return{samplesPerPeak:u,peaks:d,peaksPerSecond:c>0?c/u:0}});return{duration:t,levels:f}}function c0(r,e){let t=new Float32Array(Math.ceil(r.length/e));for(let n=0;n<t.length;n++){let o=0,i=n*e,s=Math.min(i+e,r.length);for(let a=i;a<s;a++)r[a]>o&&(o=r[a]);t[n]=o}return t}var l0=4096,gi=class r{#e=new Map;#t=[0,0];#r=[0,0];#n;#o;#c;#i=!1;color;duration;tileSize;tileHeight;preloadMargin;constructor(e,t,n){this.#o=e,this.duration=t,this.tileSize=n.tileSize??1,this.#n=n.zoom??(n.tileWidth??256)/this.tileSize,this.tileHeight=n.tileHeight??96,this.preloadMargin=n.preloadMargin??2,this.color=n.color??"rgb(3, 148, 129)",this.#c=n.onChange}static async init(e,t,n={}){let{duration:o,levels:i}=await ud(e,t);return new r(i,o,n)}set zoom(e){let t=Math.max(1,e);t!==this.#n&&(this.#n=t,this.#e.clear(),this.#a())}get zoom(){return this.#n}get range(){return this.#r}#s([e,t],n=1){let o=t-e;return[Math.max(0,e-o*n),Math.min(this.duration,t+o*n)]}set range(e){this.#r=e;let[t,n]=e,o=n-t,[i,s]=this.#t,a=i>0,c=s<this.duration,l=!a||t>=i+o,f=!c||n<=s-o;l&&f||(this.#t=this.#s(e,this.preloadMargin),this.#a())}#a(){this.#i||(this.#i=!0,queueMicrotask(()=>{this.#i=!1,this.#l()}))}#l(){let[e,t]=this.#t,n=new Set,o=this.#f(),i=Math.max(0,Math.floor(e/this.tileSize)*this.tileSize),s=Math.min(this.duration,t);for(let a=i;a<=s;a+=this.tileSize)n.add(a);for(let a of n)if(!this.#e.has(a)){let c=Math.min(a+this.tileSize,this.duration);this.#e.set(a,this.#u(a,c,o))}for(let a of this.#e.keys())n.has(a)||this.#e.delete(a);this.#p()}#u(e,t,n){let o=this.#m(n,e,t);return{startTime:e,endTime:t,peaks:o,canvas:ld(o,{width:this.#d(e,t),height:this.tileHeight,color:this.color})}}#f(){return this.#o.find(e=>e.peaksPerSecond>=this.#n)??this.#o[this.#o.length-1]}#m(e,t,n){if(!e.peaksPerSecond)return new Float32Array;let o=Math.max(0,Math.floor(t*e.peaksPerSecond)),i=Math.max(o+1,Math.min(e.peaks.length,Math.ceil(n*e.peaksPerSecond)));return e.peaks.slice(o,i)}#d(e,t){return Math.min(l0,Math.max(1,Math.ceil((t-e)*this.#n)))}#p(){this.#c&&this.#c([...this.#e.values()].sort((e,t)=>e.startTime-t.startTime))}getTiles(){return this.#e}};var X=r=>r;var Rr=r=>r;var fd=()=>{let r=!1,e=Rr(60),t=1e3/e,n=0,o=0,i=ke(),s=null,a=l=>{if(requestAnimationFrame(a),!!r)for(n=l;l-o>=t;)o+=t,s?.(),s=null,i()};async function*c(){for(n=performance.now(),o=n,requestAnimationFrame(a);;)await new Promise(l=>s=l),yield}return{play(){r||(r=!0,n=performance.now(),o=n)},pause(){r=!1},setFPS(l){e=l,t=1e3/e},isPlaying(){return r},ticks:c,onTick:i}},md=async(r,e)=>{let t=X(1e3/r.fps),n=r.duration/1e3,o=Math.ceil(n*r.fps);for(let i=0;i<o;i++){let s=X(i*t);await e(s,i)}};var wn=r=>r;var ha=class{keys;index;constructor(e,t){this.keys=e,this.index=t}near(e){return this.keys[Math.max(0,Math.min(this.keys.length-1,this.index+e))][1]}},dd=r=>r,Cn=r=>dd((e,t)=>r(e,t.near(0),t.near(1))),kn=(r,e,t)=>e+(t-e)*r,u0={linear:Cn(kn),ease:Cn((r,e,t)=>{let n=r<.5?4*r*r*r:1-Math.pow(-2*r+2,3)/2;return kn(n,e,t)}),easeIn:Cn((r,e,t)=>kn(r*r*r,e,t)),easeOut:Cn((r,e,t)=>kn(1-Math.pow(1-r,3),e,t)),bounce:Cn((r,e,t)=>{let i=r<.36363636363636365?7.5625*r*r:r<.7272727272727273?7.5625*(r-.5454545454545454)**2+.75:r<.9090909090909091?7.5625*(r-.8181818181818182)**2+.9375:7.5625*(r-.9545454545454546)**2+.984375;return kn(i,e,t)}),catmullRom:dd((r,e)=>{let t=e.near(-1),n=e.near(0),o=e.near(1),i=e.near(2),s=r*r,a=s*r;return .5*(2*n+(-t+o)*r+(2*t-5*n+4*o-i)*s+(-t+3*n-3*o+i)*a)})},pd=(r,e,t,n)=>{let o=u0[r];if(!o)throw new Error(`unknown terp "${r}"`);return o(e,new ha(t,n))};var Mr=(r,e,t,n=0)=>{if(e.length===0)return n;if(e.length===1)return e[0][1];let o=[...e].sort((u,m)=>u[0]-m[0]);if(r<=o[0][0])return o[0][1];let i=o[o.length-1];if(r>=i[0])return i[1];let s=0;for(let u=0;u<o.length-1;u++){let m=o[u],d=o[u+1];if(r>=m[0]&&r<=d[0]){s=u;break}}let[a]=o[s],[c]=o[s+1],l=c-a,f=l===0?0:(r-a)/l;return pd(t,f,o,s)},hd=(r,e)=>[[Mr(r,e.track.position.x,e.terp),Mr(r,e.track.position.y,e.terp)],[Mr(r,e.track.scale.x,e.terp,1),Mr(r,e.track.scale.y,e.terp,1)],Mr(r,e.track.rotation,e.terp)],gd=(r,e)=>Mr(r,e.track,e.terp);function f0(r){return"duration"in r}function vd(r){let e=[],t=new Map(r.timeline.items.map(n=>[n.id,n]));return ga(r.timeline.rootId,t,r.from,{sequence:()=>{},stack:()=>{},video:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i}),text:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i}),caption:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i}),audio:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i})}),e}function yd(r,e,t,n){let o=Ym;for(let i of e)o=xd(r,i.item,o,i.localTime);return xd(r,t,o,n)}function xd(r,e,t,n){let o=t;if("spatialId"in e&&e.spatialId){let i=r.get(e.spatialId);if(i?.enabled){let s=ua(i.transform);o=fa(s,o)}}if("animationIds"in e&&e.animationIds)for(let i of e.animationIds){let s=r.get(i),a=s?.anims.transform;if(s?.enabled&&a&&m0(a,n)){let c=ua(hd(n,a));o=fa(c,o)}}return o}function ga(r,e,t,n,o=[]){let i=e.get(r);if(i)switch(i.kind){case G.Stack:n.stack(i,t,o);for(let s of i.childrenIds)ga(s,e,t,n,[...o,{item:i,localTime:t}]);break;case G.Sequence:{n.sequence(i,t,o);let s=X(0);for(let a of i.childrenIds){let c=e.get(a);if(!c)continue;let l=Ur(c.id,e);if(l<=0)continue;let f=X(s+l);if(t>=f){s=f;continue}let u=X(Math.max(0,t-s));ga(a,e,u,n,[...o,{item:i,localTime:t}]),s=f}break}case G.Video:n.video(i,t,o);break;case G.Text:n.text(i,t,o);break;case G.Caption:n.caption(i,t,o);break;case G.Audio:n.audio(i,t,o);break}}function Wt(r,e){return Ur(r,new Map(e.items.map(t=>[t.id,t])))}function Ur(r,e){let t=e.get(r);if(!t)return X(0);switch(t.kind){case G.Sequence:{let n=t.childrenIds.map(i=>e.get(i)).filter(Boolean),o=X(0);for(let i=0;i<n.length;i++){let s=n[i];if(s.kind===G.Transition){let a=n[i-1],c=n[i+1];if(a&&c&&a.kind!==G.Transition&&c.kind!==G.Transition){let l=Ur(a.id,e),f=Ur(c.id,e),u=Math.max(0,Math.min(s.duration,l,f));o=X(o-u)}continue}o=X(o+Ur(s.id,e))}return o}case G.Stack:{let n=X(0);for(let o of t.childrenIds){let i=Ur(o,e);i>n&&(n=i)}return n}default:return f0(t)?t.duration:X(0)}}function bd(r,e,t){if(!("animationIds"in e)||e.animationIds===void 0)return 1;let n=1;for(let o of e.animationIds){let i=r.items.get(o),s=i?.anims.opacity;i?.enabled&&s&&Br(s.track,t)&&(n=gd(t,s))}return n}function Br(r,e){if(r.length===0)return!1;let t=r[0][0],n=r[0][0];for(let[o]of r)t=Math.min(t,o),n=Math.max(n,o);return e>=t&&e<=n}function m0(r,e){return Br(r.track.position.x,e)||Br(r.track.position.y,e)||Br(r.track.scale.x,e)||Br(r.track.scale.y,e)||Br(r.track.rotation,e)}var xi=class{resolveMedia;#e=new Map;constructor(e){this.resolveMedia=e}async getSink(e){let t=this.#e.get(e);if(t)return t.sink;let n=new fe({formats:ge,source:await ye(this.resolveMedia(e))}),o=await n.getPrimaryVideoTrack(),s=!!o&&await o.canDecode()&&o?new ut(o):null;return this.#e.set(e,{input:n,sink:s}),s}};async function Sd(r,e,t,n){let[o,i]=await Promise.all([t,n]),s=o.find(l=>l.kind==="image")?.frame,a=i.find(l=>l.kind==="image")?.frame,c=[...o.filter(l=>l.kind!=="image"),...i.filter(l=>l.kind!=="image")];return s&&a?[{id:r.id,kind:"transition",name:"circle",progress:e,from:s,to:a},...c]:c}async function Td(r,e,t,n){let o=d0(r,e,t);if(!o)return[];let i=[...n,{item:e,localTime:t}];return o.isTransitioning?Sd(o.transition,o.progress,jt(r,o.outgoing,o.outgoingTime,i),jt(r,o.incoming,o.incomingTime,i)):jt(r,o.item,o.localTime,i)}function d0(r,e,t){let n=e.childrenIds.map(i=>r.items.get(i)).filter(i=>!!i),o=X(0);for(let i=0;i<n.length;i++){let s=n[i];if(s.kind===G.Transition)continue;let a=o,c=Wt(s.id,r.timeline),l=X(a+c),f=n[i+1];if(!(f?.kind===G.Transition)){if(t<l)return{isTransitioning:!1,item:s,localTime:X(t-a)};o=l;continue}let m=f,d=n[i+2];if(!d||d.kind===G.Transition){o=l;continue}let p=Wt(d.id,r.timeline),h=Math.max(0,Math.min(m.duration,c,p)),x=X(l-h);if(t<x)return{isTransitioning:!1,item:s,localTime:X(t-a)};if(t<l){let y=X(t-x),v=X(t-a);return{isTransitioning:!0,incoming:d,outgoing:s,outgoingTime:v,incomingTime:y,progress:h>0?y/h:1,transition:m}}o=x,i++}return null}async function jt(r,e,t,n){let o=yd(r.items,n,e,t),i=bd(r,e,t),s="spatialId"in e&&e.spatialId?r.items.get(e.spatialId)?.crop:void 0,a="filterIds"in e&&e.filterIds?e.filterIds.map(c=>r.items.get(c)).filter(c=>!!c?.enabled).map(c=>({type:c.type,params:c.params})):void 0;switch(e.kind){case G.Stack:{let c=[...n,{item:e,localTime:t}];return(await Promise.all(e.childrenIds.map(f=>r.items.get(f)).filter(f=>!!f).map(f=>jt(r,f,t,c)))).flat()}case G.Sequence:return Td(r,e,t,n);case G.Video:{if(t<0||t>=e.duration)return[];let c=await r.videoSampler(e,t);return c?[{kind:"image",frame:c,matrix:o,alpha:i,crop:s,filters:a,id:e.id}]:[]}case G.Text:{if(t<0||t>=e.duration)return[];let c=e.styleId?r.items.get(e.styleId)?.style:void 0;return[{id:e.id,kind:"text",content:e.content,style:c,matrix:o,alpha:i,crop:s,filters:a}]}case G.Caption:{if(t<0||t>=e.duration)return[];let c=e.start+t,l=da(e.transcript,e).find(u=>{let[m,d]=u.timestamp;return c>=m&&c<d});if(!l)return[];let f=e.styleId?r.items.get(e.styleId)?.style:void 0;return[{id:e.id,kind:"text",content:l.text,style:f,matrix:o,alpha:i,crop:s,filters:a}]}case G.Gap:return[{id:e.id,kind:"gap"}];default:return[]}}function wd(r){return async(e,t)=>{let n=await r.getSink(e.mediaHash),o=e.start+t,i=await n?.getSample(o/1e3),s=i?.toVideoFrame();return i?.close(),s??void 0}}function vi(r,e){let t=new xi(r),n=e??wd(t);return{async sample(o,i){let s=new Map(o.items.map(c=>[c.id,c])),a=s.get(o.rootId);return a?jt({videoSampler:n,timeline:o,items:s},a,i,[]):[]}}}var yi=class{driver;resolveMedia;timeline;#e=new Map;#t;constructor(e,t,n){this.driver=e,this.resolveMedia=t,this.timeline=n,this.#t=vi(this.resolveMedia,(o,i)=>{let s=Cd(X(o.start+i)),a=this.#e.get(o.id);if(!a){let c=this.resolveMedia(o.mediaHash),l=Cd(X(o.start+o.duration));a=this.createCursor(c,s,l),this.#e.set(o.id,a)}return a.next(s)})}sample(e){return this.#t.sample(this.timeline,e)}async cancel(){await Promise.all([...this.#e.values()].map(e=>e.cancel())),this.#e.clear()}},Xt=class extends yi{#e=-1/0;next(e){if(e<this.#e)throw new Error(`Forward-only cursor regression: ${e}ms < ${this.#e}ms`);return this.#e=e,this.sample(e)}createCursor(e,t,n){let o=this.driver.decodeVideo({source:e,start:t/1e6,end:n/1e6}),i=o.readable.getReader(),s=null,a=null,c=!1,l=async()=>{if(c)return null;let{done:f,value:u}=await i.read();if(f)return c=!0,null;let m=new VideoFrame(u);return u.close(),m};return{async next(f){if(s??=await l(),!!s)for(;;){a??=l();let u=await a;if(!u)return new VideoFrame(s);let m=s.timestamp??-1/0,d=u.timestamp??m;if(d<f){s.close(),s=u,a=null;continue}if(Math.abs(d-f)<Math.abs(m-f)){s.close(),s=u,a=null;continue}return new VideoFrame(s)}},async cancel(){let f=a;a=null,c=!0,(await f?.catch(()=>null))?.close(),s?.close(),s=null,o.cancel()}}}},Pn=class extends yi{#e=1/0;next(e){if(e>this.#e)throw new Error(`Reverse-only cursor regression: ${e}ms > ${this.#e}ms`);return this.#e=e,this.sample(e)}createCursor(e,t,n){let s=[],a=1/0,c=-1/0,l=null,f=null,u=null,m=0,d=Promise.resolve(),p=null,h=!1,x=()=>{for(let T of s)T.close();s=[]},y=()=>{m++===0&&(d=new Promise(T=>p=T))},v=()=>{--m===0&&(p?.(),p=null)},S=async()=>{if(f)return f;l=new fe({source:await ye(e),formats:ge});let T=await l.getPrimaryVideoTrack();return f=T&&await T.canDecode()?new ut(T):null,f},C=async T=>{y();let E=Math.min(n,T+1),I=Math.max(t,E-1e6),M=[],L=await S();if(L)for await(let V of L.samples(I/1e6,E/1e6))M.push(V.toVideoFrame()),V.close();return v(),{frames:M,windowStart:I,windowEnd:E}},_=async T=>{x();let E=await C(T);s=E.frames,a=E.windowStart,c=E.windowEnd};return{async next(T){if(h)return;if(T<a||T>c)if(u){let M=await u;if(u=null,h){for(let L of M.frames)L.close();return}if(T>=M.windowStart&&T<=M.windowEnd)x(),s=M.frames,a=M.windowStart,c=M.windowEnd;else{for(let L of M.frames)L.close();await _(T)}}else await _(T);!u&&T<a+5e5&&a>t&&(u=C(a-1));let E,I=1/0;for(let M of s){let L=Math.abs((M.timestamp??T)-T);L<I&&(E=M,I=L)}return E?new VideoFrame(E):void 0},async cancel(){h=!0;let T=u;u=null;let E=await T?.catch(()=>null);if(E)for(let I of E.frames)I.close();await d,x(),l?.dispose(),l=null,f=null}}}},Cd=r=>Math.round(r*1e3);async function kd(r,e,t){return(await Promise.all(e.map(async({item:o,localTime:i})=>{if(o.kind!==G.Audio)return;let s=await r.getSink(o.mediaHash);if(!s)return;let a=o.start+i,c=wn((t-a)/1e3),l=s.samples(a/1e3),f=await l.next();if(f.done)return;let u=f.value,m=l.next();return{offset:c,gain:o.gain??1,get currentSample(){return u},timelineTime:()=>wn(c+u.timestamp),output:()=>({sample:u,timestamp:c+u.timestamp,gain:o.gain??1}),advance:async()=>{let d=await m;return d.done?!1:(u=d.value,m=l.next(),!0)}}}))).filter(o=>!!o)}var bi=class{resolveMedia;#e=new Map;constructor(e){this.resolveMedia=e}async getSink(e){let t=this.#e.get(e);if(t)return t.sink;let n=new fe({formats:ge,source:await ye(this.resolveMedia(e))}),o=await n.getPrimaryAudioTrack(),s=!!o&&await o.canDecode()&&o?new ln(o):null;return this.#e.set(e,{input:n,sink:s}),s}};function Pd(r){let e={index:0,stream:r[0],time:r[0].timelineTime()};for(let[t,n]of r.entries()){let o=n.timelineTime();o<e.time&&(e={time:o,stream:n,index:t})}return e}function Si(r){let e=new bi(r);return{async*sampleAudio(t,n){let o=vd({timeline:t,from:n}),i=await kd(e,o,n);for(;i.length>0;){let{stream:s,index:a}=Pd(i);yield s.output(),await s.advance()||i.splice(a,1)}}}}var Ti=class{driver;timeline;resolveMedia;audioSampler;seekVisualSampler;playVisualSampler=null;reversePlayVisualSampler=null;#e=X(0);#t=null;#r=1;#n=fd();onTick=this.#n.onTick;audioContext=new AudioContext({sampleRate:48e3});audioGain=this.audioContext.createGain();audioNodes=new Set;#o=null;constructor(e,t,n){this.driver=e,this.timeline=t,this.resolveMedia=n,this.audioGain.connect(this.audioContext.destination),this.audioGain.gain.value=.7**2,this.seekVisualSampler=vi(this.resolveMedia),this.audioSampler=Si(this.resolveMedia),this.#c()}update(e){this.timeline=e}get isPlaying(){return this.#n.isPlaying()}async#c(){for await(let e of this.#n.ticks()){let t=this.currentTime,n=this.#r>=0?await this.playVisualSampler?.next(t)??[]:await this.reversePlayVisualSampler?.next(t)??[];(await this.driver.composite(n)).close(),(this.#r>=0?t>=this.duration:t<=0)&&this.pause()}}async seek(e){return this.pause(),this.#e=e,await this.seekVisualSampler.sample(this.timeline,e)}async start(){this.#n.isPlaying()||(await this.audioContext.resume(),this.#e=this.currentTime,this.#t=this.audioContext.currentTime,this.#s(),this.playVisualSampler=new Xt(this.driver,this.resolveMedia,this.timeline),this.reversePlayVisualSampler=new Pn(this.driver,this.resolveMedia,this.timeline),this.#n.play(),this.#a())}pause(){this.#e=this.currentTime,this.#n.pause(),this.#s(),this.playVisualSampler&&(this.playVisualSampler.cancel(),this.playVisualSampler=null),this.reversePlayVisualSampler&&(this.reversePlayVisualSampler.cancel(),this.reversePlayVisualSampler=null)}get duration(){return Wt(this.timeline.rootId,this.timeline)}get currentTime(){if(!this.#n.isPlaying()||this.#t===null)return this.#e;let e=(this.audioContext.currentTime-this.#t)*1e3,t=this.#e+e*this.#r;return X(Math.max(0,Math.min(this.duration,t)))}get playbackRate(){return this.#r}set playbackRate(e){if(!Number.isFinite(e)||e===0)throw new Error(`Invalid playback rate "${e}".`);this.#e=this.currentTime,this.#t=this.#n.isPlaying()?this.audioContext.currentTime:null;let t=this.#r<0;this.#r=e,this.#n.isPlaying()&&(t&&e>0?(this.playVisualSampler?.cancel(),this.playVisualSampler=new Xt(this.driver,this.resolveMedia,this.timeline)):!t&&e<0&&(this.reversePlayVisualSampler?.cancel(),this.reversePlayVisualSampler=new Pn(this.driver,this.resolveMedia,this.timeline)),this.#i())}setFps(e){this.#n.setFPS(e)}#i(){this.#s(),this.#a()}#s(){this.#o?.abort(),this.#o=null;for(let e of this.audioNodes)e.stop();this.audioNodes.clear()}async#a(){if(this.#r!==1)return;let e=wn(this.#e/1e3);this.#o=new AbortController;let t=this.#o.signal,n=this.audioContext;if(this.#t!==null)for await(let{sample:o,timestamp:i}of this.audioSampler.sampleAudio(this.timeline,X(e*1e3))){if(t.aborted||!this.#n.isPlaying())return;for(;i-(n.currentTime-this.#t+e)>.75;)await new Promise(c=>setTimeout(c,25));let s=n.createBufferSource();s.buffer=o.toAudioBuffer(),s.connect(this.audioGain),s.onended=()=>this.audioNodes.delete(s),this.audioNodes.add(s);let a=this.#t+i-e;a>=n.currentTime?s.start(a):s.start(n.currentTime,n.currentTime-a)}}};var wi=class{driver;canvas;playback;#e=null;#t=null;constructor(e,t,n){this.driver=e,this.playback=new Ti(e,n,t),this.canvas=e.compositor.pixi.renderer.canvas}async play(){await this.playback.start()}pause(){this.playback.pause()}seek(e){return this.#e=e,this.#t??=this.#r().finally(()=>this.#t=null)}setFPS(e){this.playback.setFps(Rr(e))}get isSeeking(){return this.#t!==null}get isPlaying(){return this.playback.isPlaying}get duration(){return this.playback.duration}get currentTime(){return this.playback.currentTime}get playbackRate(){return this.playback.playbackRate}set playbackRate(e){this.playback.playbackRate=e}async update(e){this.playback.update(e),this.isPlaying||await this.seek(this.currentTime)}async#r(){for(;this.#e!==null;){let e=this.#e;this.#e=null;let t=await this.playback.seek(X(e));(await this.driver.composite(t)).close()}}};var Kt=class{state;constructor(e){this.state=e}require(e){return e===void 0?void 0:this.state.timeline.items.find(n=>n.id===e)}get timeline(){return this.state.timeline}getId(){return ze.toInteger(ze.random())}#e(e){this.state.timeline=e(this.state.timeline)}register(e){this.#e(t=>({...t,items:[...t.items,e]}))}textStyle=e=>{let t={id:this.getId(),kind:G.TextStyle,style:e};return this.register(t),t};spatial=(e,t)=>{let n={id:this.getId(),kind:G.Spatial,transform:e??this.transform(),crop:t,enabled:!0};return this.register(n),n};#t=e=>{let t={id:this.getId(),kind:G.Animation,anims:e,enabled:!0};return this.register(t),t};#r=(e,t)=>{let n={...e,animationIds:[...e.animationIds??[],t.id]};return this.set(e.id,n),n};anim={scalar:(e,t)=>({terp:e,track:t}),vec2:(e,t)=>{let n={x:[],y:[]};for(let[o,[i,s]]of t)n.x.push([o,i]),n.y.push([o,s]);return{terp:e,track:n}},transform:(e,t)=>{let n={position:{x:[],y:[]},scale:{x:[],y:[]},rotation:[]};for(let[o,[i,s,a]]of t)n.position.x.push([o,i[0]]),n.position.y.push([o,i[1]]),n.scale.x.push([o,s[0]]),n.scale.y.push([o,s[1]]),n.rotation.push([o,a]);return{terp:e,track:n}}};#n=od((e,t)=>({terp:e,track:t}),(e,t)=>this.anim.transform(e,t),e=>this.transform(e));#o=e=>{let t=o=>{let i={id:this.getId(),kind:G.Filter,type:e,params:o,enabled:!0};return this.register(i),i},n=((o,i)=>{let s=t(i),a={...o,filterIds:[...o.filterIds??[],s.id]};return this.set(o.id,a),a});return n.make=t,n};#c=()=>{let e=Object.entries(ui).map(([t,n])=>[t,this.#o(n.type)]);return Object.fromEntries(e)};filter=this.#c();#i=(e,t,n)=>e==="transform"?this.anim.transform(t,n):this.anim.scalar(t,n);#s=e=>{let t=(o,i)=>this.#t({[e]:this.#i(e,o,i)}),n=((o,i,s)=>{let a=t(i,s);return this.#r(o,a)});return n.make=t,n};#a=e=>{let t=o=>{let i=xt[e],s=this.#n[e](o);return this.#t(i.type==="motion"?{transform:s}:{opacity:s})},n=((o,i)=>{let s=t(i);return this.#r(o,s)});return n.make=t,n};#l=()=>{let e=Object.keys(Tn).map(t=>[t,this.#s(t)]);return Object.fromEntries(e)};#u=()=>{let e=Object.keys(xt).map(t=>[t,this.#a(t)]);return Object.fromEntries(e)};animate={...this.#l(),presets:this.#u()};sequence=(...e)=>{let t={id:this.getId(),kind:G.Sequence,childrenIds:e.map(n=>n.id)};return this.register(t),t};stack=(...e)=>{let t={kind:G.Stack,id:this.getId(),childrenIds:e.map(n=>n.id)};return this.register(t),t};video=(e,t)=>{if(!e.hasVideo)throw new Error(`Video clip error: media "${e.datafile.filename}" has no video track.`);let n={kind:G.Video,id:this.getId(),mediaHash:e.datafile.checksum.hash,start:t?.start??0,duration:t?.duration??e.duration};return this.register(n),n};audio=(e,t)=>{if(!e.hasAudio)throw new Error(`Audio clip error: media "${e.datafile.filename}" has no audio track.`);let n={kind:G.Audio,id:this.getId(),mediaHash:e.datafile.checksum.hash,start:t?.start??0,duration:t?.duration??e.duration,gain:t?.gain??1};return this.register(n),n};text=(e,t)=>{let n={id:this.getId(),content:e,kind:G.Text,duration:t?.duration??2e3};return t?.styles&&(n.styleId=this.textStyle(t.styles).id),this.register(n),n};#f=(e,t,n)=>{let o=n?.start??0,i=n?.duration??Math.max(0,id(e,n)-o),s={id:this.getId(),kind:G.Caption,transcript:e,start:o,duration:i,maxChars:n?.maxChars,maxDuration:n?.maxDuration,maxSilence:n?.maxSilence};return s.styleId=this.textStyle(n?.styles??t.styles).id,s.spatialId=this.spatial(this.transform(t.transform)).id,this.register(s),s};#m=e=>{let t=(o,i)=>this.#f(o,e,i),n=((o,i,s)=>{let a=t(i,{...s,start:s?.start??o.start,duration:s?.duration??o.duration});return this.stack(a,o)});return n.make=t,n};#d=()=>{let e=Object.entries(hi).map(([t,n])=>[t,this.#m(n)]);return Object.fromEntries(e)};captions=Object.assign(this.#m(hi.default),{presets:this.#d()});gap=e=>{let t={id:this.getId(),kind:G.Gap,duration:e};return this.register(t),t};transition={crossfade:e=>{let t={id:this.getId(),kind:G.Transition,effect:fi.Crossfade,duration:e};return this.register(t),t}};transform=e=>{let t=[e?.position?.[0]??0,e?.position?.[1]??0],n=[e?.scale?.[0]??1,e?.scale?.[1]??1],o=e?.rotation??0;return[t,n,o]};addChildren(e,...t){this.#e(n=>(n.items.find(({id:i})=>i===e.id).childrenIds.push(...t.map(i=>i.id)),n))}set=(e,t)=>{this.#e(n=>({...n,items:n.items.map(o=>o.id===e?{...o,...t}:o)}))}};function p0(r){let e=((t,n)=>o=>r(o)(t(o),n));return e.make=t=>n=>r(n).make(t),e}function h0(){let e=Object.keys(ui).map(t=>[t,p0(n=>n.filter[t])]);return Object.fromEntries(e)}var HF=h0();function g0(r){let e=((t,n,o)=>i=>r(i)(t(i),n,o));return e.make=(t,n)=>o=>r(o).make(t,n),e}function x0(){let r=Object.keys(Tn).map(e=>[e,g0(t=>t.animate[e])]);return Object.fromEntries(r)}function v0(r){let e=((t,n)=>o=>o.animate.presets[r](t(o),n));return e.make=t=>n=>n.animate.presets[r].make(t),e}function y0(){let r=Object.keys(xt).map(e=>[e,v0(e)]);return Object.fromEntries(r)}var WF={...x0(),presets:y0()};var Ci=class{#e;#t;constructor(e={}){this.#e=e.chunkFrames??1024,this.#t=e.clamp??!0}async*mix(e){let t=this.#e,n=null,o=null,i=[],s=0,a=0;for await(let c of e){if(o===null)o=c.planes.length,n=c.sampleRate;else{if(c.planes.length!==o)throw new Error("Channel count changed");if(c.sampleRate!==n)throw new Error("Sample rate changed")}let l=Math.round(c.timestamp*n),f=c.planes[0]?.length??0;for(;s+t<=l;)yield this.#r(i,s,o,n),s+=t;i.push({startFrame:l,endFrame:l+f,data:c.planes}),a=Math.max(a,l+f)}if(o!==null&&n!==null)for(;s<a;)yield this.#r(i,s,o,n),s+=t}#r(e,t,n,o){let i=this.#e,s=new Float32Array(n*i),a=t+i;for(let c=0;c<n;c++){let l=c*i,f=s.subarray(l,l+i);for(let u of e){let m=u.data[c];if(!m)continue;let d=Math.max(t,u.startFrame),p=Math.min(a,u.endFrame);if(d>=p)continue;let h=d-t,x=d-u.startFrame,y=p-d;for(let v=0;v<y;v++)f[h+v]+=m[x+v]}if(this.#t)for(let u=0;u<i;u++){let m=f[u];f[u]=m<-1?-1:m>1?1:m}}for(let c=e.length-1;c>=0;c--)e[c].endFrame<=a&&e.splice(c,1);return{planar:s,sampleRate:o,channels:n,frames:i,startFrame:t}}};var b0=(r,e,t)=>{if(e===t)return r;let n=t/e,o=Math.max(1,Math.round(r.length*n)),i=new Float32Array(o);for(let s=0;s<o;s++){let a=s/n,c=Math.floor(a),l=Math.min(c+1,r.length-1),f=a-c;i[s]=r[c]*(1-f)+r[l]*f}return i},_d=(r,e)=>{let t=r.numberOfChannels,n=new Array(t),o=0;for(let i=0;i<t;i++){let s=new Float32Array(r.numberOfFrames);r.copyTo(s,{planeIndex:i,format:"f32-planar"});let a=b0(s,r.sampleRate,e);n[i]=a,o=a.length}return{data:n,frames:o}};var Id=(r,e)=>{if(e!==1)for(let t of r)for(let n=0;n<t.length;n++)t[n]*=e};function Ad({timeline:r,resolveMedia:e}){let t=new Ci,n=S0(r,e),o=new TransformStream,i=o.writable.getWriter();async function s(){for await(let a of t.mix(n)){let c=new AudioData({format:"f32-planar",sampleRate:a.sampleRate,numberOfFrames:a.frames,numberOfChannels:a.channels,timestamp:Math.round(a.startFrame/a.sampleRate*1e6),data:new Float32Array(a.planar)});await i.write(c)}await i.close()}return s(),o.readable}async function*S0(r,e){let t=Si(e);for await(let{sample:n,timestamp:o,gain:i}of t.sampleAudio(r,X(0))){let{data:s}=_d(n,48e3);Id(s,i),yield{planes:s,sampleRate:48e3,timestamp:o},n.close()}}function Fd({timeline:r,fps:e,driver:t,resolveMedia:n}){let o=new TransformStream,i=o.writable.getWriter(),s=new Xt(t,n,r),a=1/e,c=Wt(r.rootId,r);async function l(){await md({fps:e,duration:c},async(f,u)=>{let m=await s.next(f),d=await t.composite(m),p=new VideoFrame(d,{timestamp:Math.round(u*a*1e6),duration:Math.round(a*1e6)});await i.write(p),d.close()}),await i.close()}return l(),o.readable}function Ed(r){let e=Ad({...r}),t=Fd({...r});return r.driver.encode({video:t,audio:e,config:{audio:{codec:"opus",bitrate:128e3},video:{codec:"vp9",bitrate:1e6}}})}var ki=class{driver;resources=new di;constructor(e){this.driver=e}load=async e=>Object.fromEntries(await Promise.all(Object.entries(e).map(async([t,n])=>[t,await this.resources.store(await n)])));timeline=e=>{let t=new Kt({timeline:{format:"timeline",info:"https://omniclip.app/",version:0,items:[],rootId:0}}),n=e(t);return t.timeline.rootId=n.id,t.timeline};playback=async e=>new wi(this.driver,t=>this.resources.require(t).url,e);render=async(e,t=30)=>Ed({timeline:e,fps:Rr(t),driver:this.driver,resolveMedia:n=>this.resources.require(n).url})};var Pi=class{data;bytes;hash;nickname;constructor(e,t,n,o){this.data=e,this.bytes=t,this.hash=n,this.nickname=o}static async make(e){let t=new Uint8Array(e),n=new Uint8Array(await crypto.subtle.digest("SHA-256",t)),o=Fn.fromBytes(n),i=ka.sigil.fromBytes(n);return new this(e,n,o,i)}};var _i=class{url;bytes;blob;filename;checksum;constructor(e,t,n,o,i){this.url=e,this.bytes=t,this.blob=n,this.filename=o,this.checksum=i}static async make(e,t){let n=await e.arrayBuffer(),o=new Uint8Array(n),i=await Pi.make(o),s=t??i.nickname,a=URL.createObjectURL(e);return new this(a,o,e,s,i)}static async load(e){}};async function Dd(r,e,t){let n=t.querySelector(".play"),o=t.querySelector(".stop"),i=t.querySelector(".scrub"),s=t.querySelector(".playhead"),a=t.querySelector(".timecode"),c=t.querySelector(".player-canvas"),l=new Kt({timeline:r}),f=await e.playback(r);c.replaceChildren(f.canvas),n.disabled=!1,o.disabled=!1,n.addEventListener("click",()=>f.play()),o.addEventListener("click",()=>f.pause()),i.max=String(Math.ceil(f.duration));let u=!1;f.playback.onTick.on(()=>d(f.currentTime,f.duration));let m=(p,h)=>{a.textContent=`${zd(p)} / ${zd(h)}`};i.addEventListener("input",async()=>{u=!0;let p=Math.max(0,Math.min(+i.value,f.duration));m(p,f.duration),await f.seek(p)}),i.addEventListener("change",async()=>{u=!1;let p=Math.max(0,Math.min(+i.value,f.duration));await f.seek(p)});let d=(p,h)=>{let x=Math.max(0,Math.min(p,h));u||(i.value=String(Math.round(x)));let y=h?x/h*100:0;s.style.left=`${y}%`,m(x,h)};await f.update(l.timeline)}function zd(r){let e=Math.max(0,r),t=Math.floor(e/1e3),n=Math.floor(t/60),o=t%60,i=Math.floor(e%1e3);return`${n}:${String(o).padStart(2,"0")}.${String(i).padStart(3,"0")}`}async function Rd(r,e,t){let n=t.querySelector(".waveform-canvas"),o=t.querySelector(".width");n.replaceChildren(),n.style.position="relative",n.style.height="96px",n.style.overflow="hidden";let i=await gi.init(r,e,{tileHeight:96,onChange:()=>s()}),s=()=>{let a=+o.value,c=Od(a,i.duration);i.zoom=c,n.style.width=`${a}px`,n.replaceChildren(...[...i.getTiles().values()].map(l=>(l.canvas.style.position="absolute",l.canvas.style.top="0",l.canvas.style.left=`${l.startTime*Od(a,i.duration)}px`,l.canvas.style.height="100%",l.canvas)))};o.oninput=s,i.range=[0,i.duration]}function Od(r,e){return e>0?r/e:0}async function xa(r,e){let t=await cd({driver:r,spec:sd(),workerUrl:new URL("/features/speech/transcribe/worker.bundle.min.js",import.meta.url),onLoading:a=>console.log("transcriber loading",a)}),n=new ki(r),{videoA:o}=await n.load({videoA:_i.make(e)}),i=await t.transcribe({source:e,language:"english",onReport:a=>console.log("transcriber report",a),onTranscription:a=>console.log("transcribing",a)});return{timeline:n.timeline(a=>{let c=a.text("content",{duration:3e3}),l=a.animate.opacity.make("easeIn",[[0,0],[700,1],[2200,1],[3e3,.35]]),f=a.textStyle({fill:"green",fontSize:100}),u=a.spatial(a.transform({position:[240,160],scale:[1.4,1.4],rotation:.08}),[.15,.1,.05,.2]),m=a.spatial(),d=a.animate.transform.make("linear",[[0,a.transform({position:[-320,80],scale:[.7,.7]})],[1e3,a.transform({position:[120,80],scale:[1,1]})],[2e3,a.transform({position:[200,40],scale:[1.35,1.35],rotation:8})],[3e3,a.transform({position:[320,0],scale:[1.15,1.15],rotation:0})]]),p=a.video(o,{duration:6e3,start:3e3});return a.set(c.id,{styleId:f.id,spatialId:m.id,animationIds:[l.id,d.id]}),a.set(p.id,{spatialId:u.id}),a.sequence(a.stack(c,a.captions(p,i,{maxChars:34,maxDuration:2800,maxSilence:450,styles:{fontFamily:"Arial",fontSize:64,fill:"#ffffff",align:"center",wordWrap:!0,wordWrapWidth:1280,stroke:{color:"#000000",width:6}}}),a.audio(o,{start:3e3})),a.gap(500),a.video(o,{duration:7e3,start:5e3}))}),omni:n}}async function Md(r,e){let t=e.querySelector(".range"),n=e.querySelector(".range-view"),o=e.querySelector(".range-size"),i=e.querySelector(".frequency"),s=e.querySelector(".frequency-view"),a=e.querySelector(".filmstrip"),c=1/10,l=.5;a.replaceChildren();let f=await pi.init(r,{onChange(u){let m=u.sort((d,p)=>d.time-p.time);a.replaceChildren(...m.map(({time:d,canvas:p})=>T0(d,p.canvas)))},frequency:c,canvasSinkOptions:{width:80,height:50,fit:"fill"}});o.oninput=()=>{l=+o.value;let u=+t.value,m=u+l;f.range=[u,m],n.textContent=`visible time range: [${u}, ${m}]`},t.oninput=()=>{let u=+t.value,m=u+l;f.range=[u,m],n.textContent=`visible time range: [${u}, ${m}]`},i.oninput=()=>{f.frequency=1/+i.value,s.textContent=`frame every ${f.frequency.toFixed(3)} second (${i.value} frames per second)`},f.range=[10,10.5]}function T0(r,e){let t=document.createElement("div");t.style.position="relative",t.style.display="inline-block",t.style.marginRight="4px",t.appendChild(e);let n=document.createElement("div");return n.textContent=`${r.toFixed(2)}s`,n.style.position="absolute",n.style.top="2px",n.style.right="4px",n.style.fontSize="10px",n.style.color="white",n.style.background="rgba(0,0,0,0.6)",n.style.padding="2px 4px",n.style.borderRadius="4px",n.style.pointerEvents="none",t.appendChild(n),t}function Bd(r,e){let t={width:1920,height:1080},n=document.createElement("canvas");n.width=t.width,n.height=t.height;let o=n.getContext("2d");async function i(){let s=r.decodeVideo({source:e,async onFrame(m){let d=await r.composite([{id:0,kind:"image",frame:m},{id:1,kind:"text",content:"omnitool",style:{fontSize:50,fill:"green"}}]);return m.close(),o?.drawImage(d,0,0),d}}),a=r.decodeAudio({source:e}),{readable:c,done:l}=r.encode({video:s.readable,audio:a.readable,config:{audio:{codec:"opus",bitrate:128e3},video:{codec:"vp9",bitrate:1e6}}}),u=await(await window.showSaveFilePicker()).createWritable();await Promise.all([c.pipeTo(u),l])}return{canvas:n,run:i}}var Nr=await ci.setup({workerUrl:new URL("../driver/driver.worker.bundle.min.js",import.meta.url)}),w0=document.querySelector("[data-demo='transcode']"),C0=document.querySelector("[data-demo='filmstrip']"),k0=document.querySelector("[data-demo='waveform']"),Ud=document.querySelector("[data-demo='playback']"),Yt=document.querySelector("[data-demo='export']"),Nd=Yt.querySelector("[data-action='export']"),Ii=null;await Nr.thread.work.hello(),Nr.machina.count===1?console.log("\u2705 driver works"):console.error("\u274C FAIL driver call didn't work");var Lr=(r,e)=>{let t=r.querySelector(".progress"),n=r.querySelector(".status");!t||!n||(e==="running"?(t.removeAttribute("value"),n.textContent="running"):e==="done"?(t.value=1,n.textContent="done"):(t.value=0,n.textContent="idle"))},va=(r,e)=>{let t=r.querySelector("input[type='file']"),n=r.querySelector("[data-action='run']");n.disabled=!0,t.addEventListener("input",()=>{n.disabled=!t.files?.length}),n.addEventListener("click",async()=>{let o=t.files?.[0];if(o){n.disabled=!0,Lr(r,"running");try{await e(o,r),Lr(r,"done")}finally{n.disabled=!1}}})};va(w0,async(r,e)=>{let t=e.querySelector(".demo-preview"),n=Bd(Nr,r);t.replaceChildren(n.canvas),await n.run()});va(C0,async(r,e)=>{await Md(r,e)});va(k0,async(r,e)=>{await Rd(Nr,r,e)});{let r=Ud.querySelector("input[type='file']");r.addEventListener("input",async()=>{let e=r.files?.[0];if(!e)return;let{timeline:t,omni:n}=await xa(Nr,e);await Dd(t,n,Ud)})}{let r=Yt.querySelector("input[type='file']");r.addEventListener("input",async()=>{let e=r.files?.[0];if(!e)return;Lr(Yt,"running");let{timeline:t,omni:n}=await xa(Nr,e);Ii={timeline:t,omni:n},Nd.disabled=!1;let o=Yt.querySelector(".demo-preview"),i=await n.playback(t);await i.seek(0),o.replaceChildren(i.canvas),Lr(Yt,"done")})}Nd.addEventListener("click",async()=>{Ii&&(Lr(Yt,"running"),await Ii.omni.render(Ii.timeline),Lr(Yt,"done"))});
7325
+ `;function td({name:r,renderer:e}){let t=ed.default.find(c=>c.name===r),n=new $t,o=new ne,i=new Qt({}),s=new Qt({}),a=new k({glProgram:new P({vertex:Zm,fragment:Jm(t.glsl)}),resources:{from:i,to:s,uniforms:{...ma.basics,...ma.custom(t)}}});return n.filters=[a],{render({width:c,height:l,from:f,to:u,progress:m}){return(n.width!==c||n.height!==l)&&(n.setSize({width:c,height:l}),o.source.resize(c,l)),i.resource=f,s.resource=u,i.update(),s.update(),a.resources.uniforms.uniforms.progress=m,e.render({container:n,target:o,clear:!1,width:c,height:l}),o}}}var ai=class{pixi;onPointerDown=ke();onPointerMove=ke();onPointerUp=ke();onDispose=ke();static async setup(){let e=await Vs({width:1920,height:1080,preference:"webgl",background:"black",preferWebGLVersion:2}),t=new Di;return t.interactive=!0,new this({renderer:e,stage:t})}constructor(e){this.pixi=e}#e=new Map;#t=new Map;#r=new WeakMap;async composite(e){let{stage:t,renderer:n}=this.pixi;this.#d(this.#m(e));let{dispose:o}=await this.#n(e,t);n.render(t);let i=new VideoFrame(n.canvas,{timestamp:0,duration:0});return o(),i}getActiveObject(e){return this.#t.get(e)?.sprite}async#n(e,t){if(Array.isArray(e)){let n=[];for(let o of[...e].reverse()){let i=await this.#n(o,t);n.push(i.dispose)}return{dispose:()=>n.forEach(o=>o())}}switch(e.kind){case"text":return this.#o(e,t);case"image":return this.#c(e,t);case"transition":return this.#i(e,t);case"gap":return this.pixi?.renderer.clear(),{dispose:()=>{}};default:return console.warn("Unknown layer kind",e.kind),{dispose:()=>{}}}}#o(e,t){let n=this.#f(e);return n.text=e.content,e.style&&(n.style=e.style),this.#s(n,e.matrix),this.#a(n,e.alpha),this.#l(n,e.crop),this.#u(n,e.filters),t.addChild(n),{dispose:()=>{}}}#c(e,t){let n=this.#f(e);n.texture&&n.texture!==ne.EMPTY&&n.texture.destroy(!0);let o=ne.from(e.frame);return n.texture=o,this.#s(n,e.matrix),this.#a(n,e.alpha),this.#l(n,e.crop),this.#u(n,e.filters),t.addChild(n),{dispose:()=>{e.frame.close()}}}#i({from:e,to:t,progress:n,name:o},i){let a=(this.#e.get(o)??(this.#e.set(o,td({name:"circle",renderer:this.pixi.renderer})),this.#e.get(o))).render({from:e,to:t,progress:n,width:e.displayWidth,height:e.displayHeight}),c=new $t(a);return i.addChild(c),{dispose:()=>c.destroy(!1)}}#s(e,t){if(!t)return;let n=Km(t);e.setFromMatrix(n)}#a(e,t){e.alpha=t??1}#l(e,t){let n=this.#r.get(e);if(n&&(e.mask===n&&(e.mask=null),n.removeFromParent(),n.clear()),!t||t.every(h=>h===0))return;let[o,i,s,a]=t,c=e.mask;e.mask=null;let l=e.getLocalBounds();e.mask=c;let f=l.x+l.width*a,u=l.y+l.height*o,m=l.width*Math.max(0,1-a-i),d=l.height*Math.max(0,1-o-s),p=n??new Ri;p.clear(),p.beginFill(16777215),p.drawRect(f,u,m,d),p.endFill(),e.addChild(p),e.mask=p,this.#r.set(e,p)}#u(e,t){if(!t?.length){e.filters=null;return}e.filters=t.map(n=>{switch(n.type){case"ColorMatrixFilter":{let{matrix:o,...i}=n.params??{},s=new Nt(i);return o&&(s.matrix=o),s}case"EmbossFilter":return new Er(n.params?.strength);case"PixelateFilter":return new Dr(n.params?.size);default:{let o=Xm(n.type);return o?new o(n.params):void 0}}}).filter(n=>!!n)}#f(e){let t=this.#t.get(e.id);if(t)return t.sprite;switch(e.kind){case"text":{let n=new Sn({text:e.content,style:e.style});n.eventMode="static";let o=a=>this.onPointerDown.publish({event:a,id:e.id,object:n}),i=a=>this.onPointerUp.publish({event:a,id:e.id,object:n}),s=a=>this.onPointerUp.publish({event:a,id:e.id,object:n});return n.on("pointerdown",o),n.on("pointerup",i),n.on("pointermove",s),this.#t.set(e.id,{sprite:n,dispose:()=>{this.onDispose.publish({id:e.id,object:n}),n.off("pointermove",s),n.off("pointerdown",o),n.off("pointerup",i)}}).get(e.id)?.sprite}case"image":{let n=new $t;n.eventMode="static";let o=a=>this.onPointerDown.publish({event:a,id:e.id,object:n}),i=a=>this.onPointerUp.publish({event:a,id:e.id,object:n}),s=a=>this.onPointerUp.publish({event:a,id:e.id,object:n});return n.on("pointerdown",o),n.on("pointermove",s),n.on("pointerup",i),this.#t.set(e.id,{sprite:n,dispose:()=>{this.onDispose.publish({id:e.id,object:n}),n.off("pointerdown",o),n.off("pointermove",s),n.off("pointerup",i)}}).get(e.id)?.sprite}}}#m(e){let t=new Set,n=o=>{if(Array.isArray(o))for(let i of o)n(i);else t.add(o.id)};return n(e),t}#d(e){for(let t of this.#t.keys())if(!e.has(t)){let{sprite:n,dispose:o}=this.#t.get(t);o(),n.destroy(!0),this.#t.delete(t)}}};var rd=r=>ir.host(e=>({async world(){r.count++}}));async function ye(r){return r instanceof Blob?new vn(r):new yn(r)}var ci=class{machina;thread;compositor;static async setup(e){let t=new Go,n=await ir.thread({label:"OmnitoolDriver",workerUrl:e?.workerUrl??"/node_modules/@omnimedia/omnitool/x/driver/driver.worker.bundle.min.js",setupHost:rd(t)}),o=await ai.setup();return new this(t,n,o)}constructor(e,t,n){this.machina=e,this.thread=t,this.compositor=n}async hello(){return this.thread.work.hello()}async getAudioDuration(e){let n=await new fe({source:await ye(e),formats:ge}).getPrimaryAudioTrack();if(!n)throw new Error("primary audio track not found");return await n.computeDuration()}async getVideoDuration(e){return await(await new fe({source:await ye(e),formats:ge}).getPrimaryVideoTrack())?.computeDuration()}decodeVideo(e){let t=null,{port1:n,port2:o}=new MessageChannel,i=new TransformStream({async transform(s,a){let c=await e.onFrame?.(s)??s;t?.close(),a.enqueue(c),t=c}});return this.thread.work.decodeVideo[rr]({transfer:[i.writable,o]})({source:e.source,cancel:o,video:i.writable,start:e.start,end:e.end}),{readable:i.readable,cancel(){n.postMessage("close"),n.close()}}}decodeAudio(e){let t=new TransformStream,{port1:n,port2:o}=new MessageChannel;return this.thread.work.decodeAudio[rr]({transfer:[t.writable,o]})({source:e.source,cancel:o,audio:t.writable,start:e.start,end:e.end}),{readable:t.readable,cancel(){n.postMessage("close"),n.close()}}}encode({audio:e,video:t,config:n}){let{readable:o,writable:i}=new TransformStream,s=[e,t,i].filter(En.happy),a=this.thread.work.encode[rr]({transfer:s})({audio:e,video:t,config:n,writable:i});return{readable:o,done:a}}async composite(e){return await this.compositor.composite(e)}};var b=(r,e,t,n)=>({type:"number",min:r,max:e,default:t,...n===void 0?{}:{step:n}}),tt=r=>({type:"color",default:r}),Ve=r=>({type:"boolean",default:r}),li=(r,e)=>({type:"choice",options:r,default:e}),ee=r=>({type:"object",properties:r}),o0=r=>({type:"array",items:r}),nd=[3,5,7,9,11,13,15,17,19,21,23,25],i0={TRANSPARENT:0,ORIGINAL:1,LOOP:2,CLAMP:3,MIRROR:4},H=()=>(r,e={})=>({type:r,schema:e}),ui={adjustment:H()("AdjustmentFilter",{gamma:b(0,5,1),saturation:b(0,5,1),contrast:b(0,5,1),brightness:b(0,5,1),red:b(0,5,1),green:b(0,5,1),blue:b(0,5,1),alpha:b(0,1,1,.01)}),advancedBloom:H()("AdvancedBloomFilter",{threshold:b(.1,.9,.5,.01),bloomScale:b(.5,1.5,1,.01),brightness:b(.5,1.5,1,.01),blur:b(0,20,8,.1),quality:b(1,20,4,1)}),alpha:H()("AlphaFilter",{alpha:b(0,1,1,.01)}),ascii:H()("AsciiFilter",{size:b(2,20,8,1),color:tt("#ffffff"),replaceColor:Ve(!1)}),backdropBlur:H()("BackdropBlurFilter",{strength:b(0,100,8,.1),quality:b(1,10,4,1)}),bevel:H()("BevelFilter",{rotation:b(0,360,45,1),thickness:b(0,10,2,.1),lightColor:tt("#ffffff"),lightAlpha:b(0,1,.7,.01),shadowColor:tt("#000000"),shadowAlpha:b(0,1,.7,.01)}),bloom:H()("BloomFilter",{strength:ee({x:b(0,20,2,.1),y:b(0,20,2,.1)}),quality:b(1,20,4,1),resolution:b(.25,4,1,.01),kernelSize:li([5,7,9,11,13,15],5)}),blur:H()("BlurFilter",{strength:b(0,100,8,.1),quality:b(1,10,4,1)}),bulgePinch:H()("BulgePinchFilter",{radius:b(0,1e3,100,1),strength:b(-1,1,1,.01),center:ee({x:b(0,1,.5,.01),y:b(0,1,.5,.01)})}),colorGradient:H()("ColorGradientFilter"),colorMatrix:H()("ColorMatrixFilter"),colorOverlay:H()("ColorOverlayFilter",{color:tt("#ff0000"),alpha:b(0,1,.5,.01)}),colorReplace:H()("ColorReplaceFilter",{originalColor:tt("#ff0000"),targetColor:tt("#000000"),tolerance:b(0,1,.4,.01)}),convolution:H()("ConvolutionFilter",{width:b(0,500,300,1),height:b(0,500,300,1),matrix:o0([b(0,1,0),b(0,1,.5,.01),b(0,1,0),b(0,1,.5,.01),b(0,1,1,.01),b(0,1,.5,.01),b(0,1,0),b(0,1,.5,.01),b(0,1,0)])}),crossHatch:H()("CrossHatchFilter"),crt:H()("CRTFilter",{curvature:b(0,10,1,.01),lineWidth:b(0,5,3,.01),lineContrast:b(0,1,.3,.01),verticalLine:Ve(!1),noise:b(0,1,.2,.01),noiseSize:b(1,10,1,.1),vignetting:b(0,1,.3,.01),vignettingAlpha:b(0,1,1,.01),vignettingBlur:b(0,1,.3,.01),seed:b(0,1,0,.01),time:b(.5,20,.5,.01)}),dot:H()("DotFilter",{scale:b(.3,1,1,.01),angle:b(0,5,5,.01),grayscale:Ve(!0)}),dropShadow:H()("DropShadowFilter",{blur:b(0,20,2,.1),quality:b(1,20,3,1),alpha:b(0,1,.5,.01),offset:ee({x:b(-50,50,4,1),y:b(-50,50,4,1)}),color:tt("#000000"),shadowOnly:Ve(!1)}),emboss:H()("EmbossFilter",{strength:b(0,20,5,.1)}),glitch:H()("GlitchFilter",{slices:b(0,64,5,1),seed:b(0,1,.5,.01),offset:b(-400,400,100,1),direction:b(-180,180,0,1),fillMode:li(i0,"LOOP"),average:Ve(!1),minSize:b(0,64,8,1),sampleSize:b(1,2048,512,1),red:ee({x:b(-50,50,2,1),y:b(-50,50,2,1)}),blue:ee({x:b(-50,50,10,1),y:b(-50,50,-4,1)}),green:ee({x:b(-50,50,-10,1),y:b(-50,50,4,1)})}),glow:H()("GlowFilter",{distance:b(0,20,15,.1),innerStrength:b(0,20,0,.1),outerStrength:b(0,20,2,.1),color:tt("#ffffff"),quality:b(0,1,.2,.01),alpha:b(0,1,1,.01),knockout:Ve(!1)}),godray:H()("GodrayFilter",{time:b(0,1,0,.01),gain:b(0,1,.6,.01),lacunarity:b(0,5,2.75,.01),alpha:b(0,1,1,.01),parallel:Ve(!0),angle:b(-60,60,30,1),center:ee({x:b(-100,2012,956,1),y:b(-1e3,-100,-100,1)})}),grayscale:H()("GrayscaleFilter"),hslAdjustment:H()("HslAdjustmentFilter",{hue:b(-180,180,0,1),saturation:b(-1,1,0,.01),lightness:b(-1,1,0,.01),colorize:Ve(!1),alpha:b(0,1,1,.01)}),kawaseBlur:H()("KawaseBlurFilter",{strength:b(0,20,4,.1),quality:b(1,20,3,1),pixelSize:ee({x:b(0,10,1,.1),y:b(0,10,1,.1)})}),motionBlur:H()("MotionBlurFilter",{velocity:ee({x:b(-90,90,40,1),y:b(-90,90,40,1)}),kernelSize:li(nd,15),offset:b(-150,150,0,1)}),multiColorReplace:H()("MultiColorReplaceFilter"),noise:H()("NoiseFilter",{noise:b(0,1,.5,.01),seed:b(.01,10,.5,.01)}),oldFilm:H()("OldFilmFilter",{sepia:b(0,1,.3,.01),noise:b(0,1,.3,.01),noiseSize:b(1,10,1,.1),scratch:b(-1,1,.5,.01),scratchDensity:b(0,1,.3,.01),scratchWidth:b(1,20,1,.1),vignetting:b(0,1,.3,.01),vignettingAlpha:b(0,1,1,.01),vignettingBlur:b(0,1,.3,.01)}),outline:H()("OutlineFilter",{thickness:b(0,10,4,.1),color:tt("#000000"),alpha:b(0,1,1,.01),knockout:Ve(!1)}),pixelate:H()("PixelateFilter",{size:ee({x:b(4,40,10,1),y:b(4,40,10,1)})}),radialBlur:H()("RadialBlurFilter",{angle:b(-180,180,20,1),radius:b(-1,1912,300,1),center:ee({x:b(0,1912,956,1),y:b(0,920,460,1)}),kernelSize:li(nd,15)}),reflection:H()("ReflectionFilter",{mirror:Ve(!0),boundary:b(0,1,.5,.01),amplitude:ee({start:b(0,50,0,.1),end:b(0,50,20,.1)}),waveLength:ee({start:b(10,200,30,1),end:b(10,200,100,1)}),alpha:ee({start:b(0,1,1,.01),end:b(0,1,1,.01)}),time:b(0,20,0,.01)}),rgbSplit:H()("RGBSplitFilter",{red:ee({x:b(-20,20,-10,1),y:b(-20,20,0,1)}),blue:ee({x:b(-20,20,0,1),y:b(-20,20,0,1)}),green:ee({x:b(-20,20,0,1),y:b(-20,20,10,1)})}),shockwave:H()("ShockwaveFilter",{speed:b(500,2e3,500,1),amplitude:b(1,100,30,1),wavelength:b(2,400,160,1),brightness:b(.2,2,1,.01),radius:b(100,2e3,-1,1),center:ee({x:b(0,1912,956,1),y:b(0,920,460,1)})}),simplexNoise:H()("SimplexNoiseFilter",{strength:b(0,1,.5,.01),noiseScale:b(0,50,10,.1),offsetX:b(0,5,0,.01),offsetY:b(0,5,0,.01),offsetZ:b(0,5,0,.01),step:b(-1,1,-1,.01)}),tiltShift:H()("TiltShiftFilter",{blur:b(0,200,100,.1),gradientBlur:b(0,1e3,600,1),start:ee({x:b(0,1912,0,1),y:b(0,920,460,1)}),end:ee({x:b(0,1912,1912,1),y:b(0,920,460,1)})}),twist:H()("TwistFilter",{angle:b(-10,10,4,.01),radius:b(0,1912,200,1),offset:ee({x:b(0,1912,956,1),y:b(0,920,460,1)})}),zoomBlur:H()("ZoomBlurFilter",{strength:b(.01,.5,.1,.01),center:ee({x:b(0,1912,956,1),y:b(0,920,460,1)}),innerRadius:b(0,956,80,1),radius:b(0,956,-1,1)})};var G;(function(r){r[r.Sequence=0]="Sequence",r[r.Stack=1]="Stack",r[r.Video=2]="Video",r[r.Audio=3]="Audio",r[r.Text=4]="Text",r[r.Gap=5]="Gap",r[r.Spatial=6]="Spatial",r[r.Animation=7]="Animation",r[r.Transition=8]="Transition",r[r.TextStyle=9]="TextStyle",r[r.Filter=10]="Filter",r[r.Caption=11]="Caption"})(G||(G={}));var fi;(function(r){r[r.Crossfade=0]="Crossfade"})(fi||(fi={}));var mi=class{datafile;duration=0;hasVideo=!1;hasAudio=!1;constructor(e){this.datafile=e}static async analyze(e){let t=new this(e),n=await this.duration(e.url)*1e3;t.duration=n;let{video:o,audio:i}=await this.#e(e.url);return t.hasAudio=i,t.hasVideo=o,t}static async duration(e){let n=await new fe({formats:ge,source:await ye(e)}).computeDuration();return Number(n.toFixed(5))}static async#e(e){let t=new fe({formats:ge,source:await ye(e)});return{audio:!!await t.getPrimaryAudioTrack(),video:!!await t.getPrimaryVideoTrack()}}};var di=class{#e=new zn;async store(e){let t=await mi.analyze(e),{hash:n}=t.datafile.checksum,{filename:o,bytes:i,url:s,blob:a}=t.datafile;if(this.#e.has(n)){let c=this.#e.require(n);c.filename=o}else this.#e.set(n,{kind:"media",filename:o,bytes:i,url:s,blob:a,duration:t.duration});return t}require(e){return this.#e.require(e)}};var pi=class r{videoTrack;options;#e;#t=new Map;#r=[0,0];constructor(e,t){this.videoTrack=e,this.options=t,this.#e=new cn(e,t.canvasSinkOptions)}static async init(e,t){let o=await new fe({formats:ge,source:await ye(e)}).getPrimaryVideoTrack();if(o)return new r(o,{frequency:t.frequency??1,canvasSinkOptions:t.canvasSinkOptions??{width:80,height:50,fit:"fill"},onChange:t.onChange,onPlaceholders:t.onPlaceholders});throw new Error("Source has no video track")}set frequency(e){e!==this.options.frequency&&(this.options.frequency=e,this.#a())}get frequency(){return this.options.frequency}#n([e,t],n=1){let o=t-e;return[e-o*n,t+o*n]}async#o(){let[e,t]=this.#r,n=new Set,o=await this.videoTrack.computeDuration();for(let i=Math.max(0,e);i<=t;i+=this.options.frequency)i>=0&&i<=o&&n.add(i);this.options.onPlaceholders?.([...n])}async#c(){let[e,t]=this.#r,n=new Set,o=await this.videoTrack.computeDuration();for(let c=Math.max(0,e);c<=t;c+=this.options.frequency)c>=0&&c<=o&&n.add(c);let i=[...n].filter(c=>!this.#t.has(c)),s=0;for await(let c of this.#e.canvasesAtTimestamps(i))if(c){let l=i[s++];this.#t.set(l,c)}for(let c of this.#t.keys())n.has(c)||this.#t.delete(c);let a=[...this.#t.entries()].map(([c,l])=>({time:c,canvas:l}));this.options.onChange(a)}set range(e){let[t,n]=e,o=n-t,[i,s]=this.#r,a=i+o,c=s-o,l=t<a,f=n>c;!l&&!f||(this.#r=this.#n(e,2),this.#a())}#i=null;#s=!1;async#a(){if(this.#o(),this.#i){this.#s=!0;return}this.#i=this.#c(),await this.#i,this.#i=null,this.#s&&(this.#s=!1,await this.#a())}getThumbnail(e){return this.#t.get(e)}};var xt={slideIn:{type:"motion",label:"Slide in",defaults:{duration:700,from:[-400,0],to:[0,0],terp:"easeOut"},transform:{from:{position:[-400,0]},to:{position:[0,0]}}},slideOut:{type:"motion",label:"Slide out",defaults:{duration:700,from:[0,0],to:[400,0],terp:"easeIn"},transform:{from:{position:[0,0]},to:{position:[400,0]}}},spinIn:{type:"motion",label:"Spin in",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeOut"},transform:{from:{scale:[0,0],rotation:-180},to:{scale:[1,1],rotation:0}}},spinOut:{type:"motion",label:"Spin out",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeIn"},transform:{from:{scale:[1,1],rotation:0},to:{scale:[0,0],rotation:180}}},zoomIn:{type:"motion",label:"Zoom in",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeOut"},transform:{from:{scale:[0,0]},to:{scale:[1,1]}}},zoomOut:{type:"motion",label:"Zoom out",defaults:{duration:700,from:[0,0],to:[0,0],terp:"easeIn"},transform:{from:{scale:[1,1]},to:{scale:[0,0]}}},bounceIn:{type:"motion",label:"Bounce in",defaults:{duration:700,from:[0,0],to:[0,0],terp:"bounce"},transform:{from:{scale:[0,0]},to:{scale:[1,1]}}},bounceOut:{type:"motion",label:"Bounce out",defaults:{duration:700,from:[0,0],to:[0,0],terp:"bounce"},transform:{from:{scale:[1,1]},to:{scale:[0,0]}}},fadeIn:{type:"scalar",label:"Fade in",defaults:{duration:700,from:0,to:1,terp:"easeIn"}},fadeOut:{type:"scalar",label:"Fade out",defaults:{duration:700,from:1,to:0,terp:"easeOut"}}};var Tn={transform:{type:"transform",defaultTerp:"linear",channels:[{path:"position.x",type:"number",default:0,unit:"pixel"},{path:"position.y",type:"number",default:0,unit:"pixel"},{path:"scale.x",type:"number",default:1,unit:"scale"},{path:"scale.y",type:"number",default:1,unit:"scale"},{path:"rotation",type:"number",default:0,unit:"degree"}]},opacity:{type:"scalar",defaultTerp:"linear",channels:[{type:"number",default:1,unit:"ratio",range:[0,1]}]}},s0={...Tn};function od(r,e,t){let n=Object.entries(xt).map(([o,i])=>{let s=i.type==="motion"?a=>{let c=a?.offset??0;return e(a?.terp??i.defaults.terp,[[c,t({...i.transform.from,...a?.from===void 0?{}:{position:a.from}})],[c+(a?.duration??i.defaults.duration),t({...i.transform.to,...a?.to===void 0?{}:{position:a.to}})]])}:a=>{let c=a?.offset??0;return r(a?.terp??i.defaults.terp,[[c,a?.from??i.defaults.from],[c+(a?.duration??i.defaults.duration),a?.to??i.defaults.to]])};return[o,s]});return Object.fromEntries(n)}var hi={default:{styles:{fontFamily:"Arial",fontSize:56,fill:"#ffffff",align:"center",wordWrap:!0,wordWrapWidth:1440},transform:{position:[240,860]}}},a0={maxChars:42,maxDuration:3500,maxSilence:750};function da(r,e){let{maxChars:t,maxDuration:n,maxSilence:o}={...a0,...e},i=[],s=null;for(let{timestamp:[a,c],text:l}of r.chunks){let[f,u]=[a*1e3,c*1e3],m=l.trim();if(!Number.isFinite(f)||!Number.isFinite(u)||!m)continue;if(!s){s={text:m,timestamp:[f,u]};continue}let[d,p]=s.timestamp,h=`${s.text} ${m}`.trim();h.length>t||u-d>n||f-p>o?(i.push(s),s={text:m,timestamp:[f,u]}):s={text:h,timestamp:[d,u]}}return s&&i.push(s),i}function id(r,e){let t=da(r,e);return Math.max(0,...t.map(n=>n.timestamp[1]))}var sd=()=>({model:"onnx-community/whisper-tiny_timestamped",dtype:"q4",device:"wasm",chunkLength:20,strideLength:3});async function ad(r,e){let t=await e.arrayBuffer(),o=await new AudioContext({sampleRate:16e3}).decodeAudioData(t),i;if(o.numberOfChannels===2){let a=Math.sqrt(2),c=o.getChannelData(0),l=o.getChannelData(1);i=new Float32Array(c.length);for(let f=0;f<o.length;++f)i[f]=a*(c[f]+l[f])/2}else i=o.getChannelData(0);let s=await r.getAudioDuration(e);return{audio:i,duration:s}}async function cd({driver:r,spec:e,workerUrl:t,onLoading:n}){let o=Li(),i=Li(),s=await ir.thread({label:"OmnitoolSpeechTranscriber",workerUrl:t,setupHost:()=>({loading:async a=>n(a),deliverReport:async a=>o.pub(a),deliverTranscription:async a=>i.pub(a)})});return await s.work.prepare(e),{transcribe:Pa(async a=>{let{source:c,language:l}=a,{audio:f,duration:u}=await ad(r,c),m=_a(o(a.onReport),i(a.onTranscription)),d=await s.work.transcribe({duration:u,language:l,audio:f.buffer});return m(),d}),dispose:()=>s.terminate()}}function ld(r,e){let t=typeof window<"u"&&window.devicePixelRatio||1,n=document.createElement("canvas");n.width=e.width*t,n.height=e.height*t,n.style.width=`${e.width}px`,n.style.height=`${e.height}px`;let o=n.getContext("2d");if(!o)return n;o.scale(t,t),o.fillStyle=e.color;let i=e.height/2,s=Math.max(1,e.width),a=r.length/s;for(let c=0;c<s;c++){let l=Math.floor(c*a),f=Math.max(l+1,Math.floor((c+1)*a)),u=0;for(let d=l;d<f&&d<r.length;d++)r[d]>u&&(u=r[d]);let m=u*e.height;o.fillRect(c,i-m/2,1,m)}return n}var pa=[2048,1024,512,256,128,64,32];async function ud(r,e){let t=await r.getAudioDuration(e)??0,n=r.decodeAudio({source:e}).readable,o=pa[pa.length-1],i=[],s=0,a=0,c=0;for await(let u of n){c||=u.sampleRate;let m=u.numberOfFrames,d=new Float32Array(m);u.copyTo(d,{planeIndex:0});for(let p=0;p<d.length;p++){let h=Math.abs(d[p]);h>s&&(s=h),a++,a>=o&&(i.push(s),s=0,a=0)}u.close()}a>0&&i.push(s);let l=new Float32Array(i),f=pa.map(u=>{let m=Math.max(1,Math.round(u/o)),d=m===1?l:c0(l,m);return{samplesPerPeak:u,peaks:d,peaksPerSecond:c>0?c/u:0}});return{duration:t,levels:f}}function c0(r,e){let t=new Float32Array(Math.ceil(r.length/e));for(let n=0;n<t.length;n++){let o=0,i=n*e,s=Math.min(i+e,r.length);for(let a=i;a<s;a++)r[a]>o&&(o=r[a]);t[n]=o}return t}var l0=4096,gi=class r{#e=new Map;#t=[0,0];#r=[0,0];#n;#o;#c;#i=!1;color;duration;tileSize;tileHeight;preloadMargin;constructor(e,t,n){this.#o=e,this.duration=t,this.tileSize=n.tileSize??1,this.#n=n.zoom??(n.tileWidth??256)/this.tileSize,this.tileHeight=n.tileHeight??96,this.preloadMargin=n.preloadMargin??2,this.color=n.color??"rgb(3, 148, 129)",this.#c=n.onChange}static async init(e,t,n={}){let{duration:o,levels:i}=await ud(e,t);return new r(i,o,n)}set zoom(e){let t=Math.max(1,e);t!==this.#n&&(this.#n=t,this.#e.clear(),this.#a())}get zoom(){return this.#n}get range(){return this.#r}#s([e,t],n=1){let o=t-e;return[Math.max(0,e-o*n),Math.min(this.duration,t+o*n)]}set range(e){this.#r=e;let[t,n]=e,o=n-t,[i,s]=this.#t,a=i>0,c=s<this.duration,l=!a||t>=i+o,f=!c||n<=s-o;l&&f||(this.#t=this.#s(e,this.preloadMargin),this.#a())}#a(){this.#i||(this.#i=!0,queueMicrotask(()=>{this.#i=!1,this.#l()}))}#l(){let[e,t]=this.#t,n=new Set,o=this.#f(),i=Math.max(0,Math.floor(e/this.tileSize)*this.tileSize),s=Math.min(this.duration,t);for(let a=i;a<=s;a+=this.tileSize)n.add(a);for(let a of n)if(!this.#e.has(a)){let c=Math.min(a+this.tileSize,this.duration);this.#e.set(a,this.#u(a,c,o))}for(let a of this.#e.keys())n.has(a)||this.#e.delete(a);this.#p()}#u(e,t,n){let o=this.#m(n,e,t);return{startTime:e,endTime:t,peaks:o,canvas:ld(o,{width:this.#d(e,t),height:this.tileHeight,color:this.color})}}#f(){return this.#o.find(e=>e.peaksPerSecond>=this.#n)??this.#o[this.#o.length-1]}#m(e,t,n){if(!e.peaksPerSecond)return new Float32Array;let o=Math.max(0,Math.floor(t*e.peaksPerSecond)),i=Math.max(o+1,Math.min(e.peaks.length,Math.ceil(n*e.peaksPerSecond)));return e.peaks.slice(o,i)}#d(e,t){return Math.min(l0,Math.max(1,Math.ceil((t-e)*this.#n)))}#p(){this.#c&&this.#c([...this.#e.values()].sort((e,t)=>e.startTime-t.startTime))}getTiles(){return this.#e}};var X=r=>r;var Rr=r=>r;var fd=()=>{let r=!1,e=Rr(60),t=1e3/e,n=0,o=0,i=ke(),s=null,a=l=>{if(requestAnimationFrame(a),!!r)for(n=l;l-o>=t;)o+=t,s?.(),s=null,i()};async function*c(){for(n=performance.now(),o=n,requestAnimationFrame(a);;)await new Promise(l=>s=l),yield}return{play(){r||(r=!0,n=performance.now(),o=n)},pause(){r=!1},setFPS(l){e=l,t=1e3/e},isPlaying(){return r},ticks:c,onTick:i}},md=async(r,e)=>{let t=X(1e3/r.fps),n=r.duration/1e3,o=Math.ceil(n*r.fps);for(let i=0;i<o;i++){let s=X(i*t);await e(s,i)}};var wn=r=>r;var ha=class{keys;index;constructor(e,t){this.keys=e,this.index=t}near(e){return this.keys[Math.max(0,Math.min(this.keys.length-1,this.index+e))][1]}},dd=r=>r,Cn=r=>dd((e,t)=>r(e,t.near(0),t.near(1))),kn=(r,e,t)=>e+(t-e)*r,u0={linear:Cn(kn),ease:Cn((r,e,t)=>{let n=r<.5?4*r*r*r:1-Math.pow(-2*r+2,3)/2;return kn(n,e,t)}),easeIn:Cn((r,e,t)=>kn(r*r*r,e,t)),easeOut:Cn((r,e,t)=>kn(1-Math.pow(1-r,3),e,t)),bounce:Cn((r,e,t)=>{let i=r<.36363636363636365?7.5625*r*r:r<.7272727272727273?7.5625*(r-.5454545454545454)**2+.75:r<.9090909090909091?7.5625*(r-.8181818181818182)**2+.9375:7.5625*(r-.9545454545454546)**2+.984375;return kn(i,e,t)}),catmullRom:dd((r,e)=>{let t=e.near(-1),n=e.near(0),o=e.near(1),i=e.near(2),s=r*r,a=s*r;return .5*(2*n+(-t+o)*r+(2*t-5*n+4*o-i)*s+(-t+3*n-3*o+i)*a)})},pd=(r,e,t,n)=>{let o=u0[r];if(!o)throw new Error(`unknown terp "${r}"`);return o(e,new ha(t,n))};var Mr=(r,e,t,n=0)=>{if(e.length===0)return n;if(e.length===1)return e[0][1];let o=[...e].sort((u,m)=>u[0]-m[0]);if(r<=o[0][0])return o[0][1];let i=o[o.length-1];if(r>=i[0])return i[1];let s=0;for(let u=0;u<o.length-1;u++){let m=o[u],d=o[u+1];if(r>=m[0]&&r<=d[0]){s=u;break}}let[a]=o[s],[c]=o[s+1],l=c-a,f=l===0?0:(r-a)/l;return pd(t,f,o,s)},hd=(r,e)=>[[Mr(r,e.track.position.x,e.terp),Mr(r,e.track.position.y,e.terp)],[Mr(r,e.track.scale.x,e.terp,1),Mr(r,e.track.scale.y,e.terp,1)],Mr(r,e.track.rotation,e.terp)],gd=(r,e)=>Mr(r,e.track,e.terp);function f0(r){return"duration"in r}function vd(r){let e=[],t=new Map(r.timeline.items.map(n=>[n.id,n]));return ga(r.timeline.rootId,t,r.from,{sequence:()=>{},stack:()=>{},video:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i}),text:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i}),caption:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i}),audio:(n,o,i)=>e.push({item:n,localTime:o,ancestors:i})}),e}function yd(r,e,t,n){let o=Ym;for(let i of e)o=xd(r,i.item,o,i.localTime);return xd(r,t,o,n)}function xd(r,e,t,n){let o=t;if("spatialId"in e&&e.spatialId){let i=r.get(e.spatialId);if(i?.enabled){let s=ua(i.transform);o=fa(s,o)}}if("animationIds"in e&&e.animationIds)for(let i of e.animationIds){let s=r.get(i),a=s?.anims.transform;if(s?.enabled&&a&&m0(a,n)){let c=ua(hd(n,a));o=fa(c,o)}}return o}function ga(r,e,t,n,o=[]){let i=e.get(r);if(i)switch(i.kind){case G.Stack:n.stack(i,t,o);for(let s of i.childrenIds)ga(s,e,t,n,[...o,{item:i,localTime:t}]);break;case G.Sequence:{n.sequence(i,t,o);let s=X(0);for(let a of i.childrenIds){let c=e.get(a);if(!c)continue;let l=Ur(c.id,e);if(l<=0)continue;let f=X(s+l);if(t>=f){s=f;continue}let u=X(Math.max(0,t-s));ga(a,e,u,n,[...o,{item:i,localTime:t}]),s=f}break}case G.Video:n.video(i,t,o);break;case G.Text:n.text(i,t,o);break;case G.Caption:n.caption(i,t,o);break;case G.Audio:n.audio(i,t,o);break}}function Wt(r,e){return Ur(r,new Map(e.items.map(t=>[t.id,t])))}function Ur(r,e){let t=e.get(r);if(!t)return X(0);switch(t.kind){case G.Sequence:{let n=t.childrenIds.map(i=>e.get(i)).filter(Boolean),o=X(0);for(let i=0;i<n.length;i++){let s=n[i];if(s.kind===G.Transition){let a=n[i-1],c=n[i+1];if(a&&c&&a.kind!==G.Transition&&c.kind!==G.Transition){let l=Ur(a.id,e),f=Ur(c.id,e),u=Math.max(0,Math.min(s.duration,l,f));o=X(o-u)}continue}o=X(o+Ur(s.id,e))}return o}case G.Stack:{let n=X(0);for(let o of t.childrenIds){let i=Ur(o,e);i>n&&(n=i)}return n}default:return f0(t)?t.duration:X(0)}}function bd(r,e,t){if(!("animationIds"in e)||e.animationIds===void 0)return 1;let n=1;for(let o of e.animationIds){let i=r.items.get(o),s=i?.anims.opacity;i?.enabled&&s&&Br(s.track,t)&&(n=gd(t,s))}return n}function Br(r,e){if(r.length===0)return!1;let t=r[0][0],n=r[0][0];for(let[o]of r)t=Math.min(t,o),n=Math.max(n,o);return e>=t&&e<=n}function m0(r,e){return Br(r.track.position.x,e)||Br(r.track.position.y,e)||Br(r.track.scale.x,e)||Br(r.track.scale.y,e)||Br(r.track.rotation,e)}var xi=class{resolveMedia;#e=new Map;constructor(e){this.resolveMedia=e}async getSink(e){let t=this.#e.get(e);if(t)return t.sink;let n=new fe({formats:ge,source:await ye(this.resolveMedia(e))}),o=await n.getPrimaryVideoTrack(),s=!!o&&await o.canDecode()&&o?new ut(o):null;return this.#e.set(e,{input:n,sink:s}),s}};async function Sd(r,e,t,n){let[o,i]=await Promise.all([t,n]),s=o.find(l=>l.kind==="image")?.frame,a=i.find(l=>l.kind==="image")?.frame,c=[...o.filter(l=>l.kind!=="image"),...i.filter(l=>l.kind!=="image")];return s&&a?[{id:r.id,kind:"transition",name:"circle",progress:e,from:s,to:a},...c]:c}async function Td(r,e,t,n){let o=d0(r,e,t);if(!o)return[];let i=[...n,{item:e,localTime:t}];return o.isTransitioning?Sd(o.transition,o.progress,jt(r,o.outgoing,o.outgoingTime,i),jt(r,o.incoming,o.incomingTime,i)):jt(r,o.item,o.localTime,i)}function d0(r,e,t){let n=e.childrenIds.map(i=>r.items.get(i)).filter(i=>!!i),o=X(0);for(let i=0;i<n.length;i++){let s=n[i];if(s.kind===G.Transition)continue;let a=o,c=Wt(s.id,r.timeline),l=X(a+c),f=n[i+1];if(!(f?.kind===G.Transition)){if(t<l)return{isTransitioning:!1,item:s,localTime:X(t-a)};o=l;continue}let m=f,d=n[i+2];if(!d||d.kind===G.Transition){o=l;continue}let p=Wt(d.id,r.timeline),h=Math.max(0,Math.min(m.duration,c,p)),x=X(l-h);if(t<x)return{isTransitioning:!1,item:s,localTime:X(t-a)};if(t<l){let y=X(t-x),v=X(t-a);return{isTransitioning:!0,incoming:d,outgoing:s,outgoingTime:v,incomingTime:y,progress:h>0?y/h:1,transition:m}}o=x,i++}return null}async function jt(r,e,t,n){let o=yd(r.items,n,e,t),i=bd(r,e,t),s="spatialId"in e&&e.spatialId?r.items.get(e.spatialId)?.crop:void 0,a="filterIds"in e&&e.filterIds?e.filterIds.map(c=>r.items.get(c)).filter(c=>!!c?.enabled).map(c=>({type:c.type,params:c.params})):void 0;switch(e.kind){case G.Stack:{let c=[...n,{item:e,localTime:t}];return(await Promise.all(e.childrenIds.map(f=>r.items.get(f)).filter(f=>!!f).map(f=>jt(r,f,t,c)))).flat()}case G.Sequence:return Td(r,e,t,n);case G.Video:{if(t<0||t>=e.duration)return[];let c=await r.videoSampler(e,t);return c?[{kind:"image",frame:c,matrix:o,alpha:i,crop:s,filters:a,id:e.id}]:[]}case G.Text:{if(t<0||t>=e.duration)return[];let c=e.styleId?r.items.get(e.styleId)?.style:void 0;return[{id:e.id,kind:"text",content:e.content,style:c,matrix:o,alpha:i,crop:s,filters:a}]}case G.Caption:{if(t<0||t>=e.duration)return[];let c=e.start+t,l=da(e.transcript,e).find(u=>{let[m,d]=u.timestamp;return c>=m&&c<d});if(!l)return[];let f=e.styleId?r.items.get(e.styleId)?.style:void 0;return[{id:e.id,kind:"text",content:l.text,style:f,matrix:o,alpha:i,crop:s,filters:a}]}case G.Gap:return[{id:e.id,kind:"gap"}];default:return[]}}function wd(r){return async(e,t)=>{let n=await r.getSink(e.mediaHash),o=e.start+t,i=await n?.getSample(o/1e3),s=i?.toVideoFrame();return i?.close(),s??void 0}}function vi(r,e){let t=new xi(r),n=e??wd(t);return{async sample(o,i){let s=new Map(o.items.map(c=>[c.id,c])),a=s.get(o.rootId);return a?jt({videoSampler:n,timeline:o,items:s},a,i,[]):[]}}}var yi=class{driver;resolveMedia;timeline;#e=new Map;#t;constructor(e,t,n){this.driver=e,this.resolveMedia=t,this.timeline=n,this.#t=vi(this.resolveMedia,(o,i)=>{let s=Cd(X(o.start+i)),a=this.#e.get(o.id);if(!a){let c=this.resolveMedia(o.mediaHash),l=Cd(X(o.start+o.duration));a=this.createCursor(c,s,l),this.#e.set(o.id,a)}return a.next(s)})}sample(e){return this.#t.sample(this.timeline,e)}async cancel(){await Promise.all([...this.#e.values()].map(e=>e.cancel())),this.#e.clear()}},Xt=class extends yi{#e=-1/0;next(e){if(e<this.#e)throw new Error(`Forward-only cursor regression: ${e}ms < ${this.#e}ms`);return this.#e=e,this.sample(e)}createCursor(e,t,n){let o=this.driver.decodeVideo({source:e,start:t/1e6,end:n/1e6}),i=o.readable.getReader(),s=null,a=null,c=!1,l=async()=>{if(c)return null;let{done:f,value:u}=await i.read();if(f)return c=!0,null;let m=new VideoFrame(u);return u.close(),m};return{async next(f){if(s??=await l(),!!s)for(;;){a??=l();let u=await a;if(!u)return new VideoFrame(s);let m=s.timestamp??-1/0,d=u.timestamp??m;if(d<f){s.close(),s=u,a=null;continue}if(Math.abs(d-f)<Math.abs(m-f)){s.close(),s=u,a=null;continue}return new VideoFrame(s)}},async cancel(){let f=a;a=null,c=!0,(await f?.catch(()=>null))?.close(),s?.close(),s=null,o.cancel()}}}},Pn=class extends yi{#e=1/0;next(e){if(e>this.#e)throw new Error(`Reverse-only cursor regression: ${e}ms > ${this.#e}ms`);return this.#e=e,this.sample(e)}createCursor(e,t,n){let s=[],a=1/0,c=-1/0,l=null,f=null,u=null,m=0,d=Promise.resolve(),p=null,h=!1,x=()=>{for(let T of s)T.close();s=[]},y=()=>{m++===0&&(d=new Promise(T=>p=T))},v=()=>{--m===0&&(p?.(),p=null)},S=async()=>{if(f)return f;l=new fe({source:await ye(e),formats:ge});let T=await l.getPrimaryVideoTrack();return f=T&&await T.canDecode()?new ut(T):null,f},C=async T=>{y();let E=Math.min(n,T+1),I=Math.max(t,E-1e6),M=[],L=await S();if(L)for await(let V of L.samples(I/1e6,E/1e6))M.push(V.toVideoFrame()),V.close();return v(),{frames:M,windowStart:I,windowEnd:E}},_=async T=>{x();let E=await C(T);s=E.frames,a=E.windowStart,c=E.windowEnd};return{async next(T){if(h)return;if(T<a||T>c)if(u){let M=await u;if(u=null,h){for(let L of M.frames)L.close();return}if(T>=M.windowStart&&T<=M.windowEnd)x(),s=M.frames,a=M.windowStart,c=M.windowEnd;else{for(let L of M.frames)L.close();await _(T)}}else await _(T);!u&&T<a+5e5&&a>t&&(u=C(a-1));let E,I=1/0;for(let M of s){let L=Math.abs((M.timestamp??T)-T);L<I&&(E=M,I=L)}return E?new VideoFrame(E):void 0},async cancel(){h=!0;let T=u;u=null;let E=await T?.catch(()=>null);if(E)for(let I of E.frames)I.close();await d,x(),l?.dispose(),l=null,f=null}}}},Cd=r=>Math.round(r*1e3);async function kd(r,e,t){return(await Promise.all(e.map(async({item:o,localTime:i})=>{if(o.kind!==G.Audio)return;let s=await r.getSink(o.mediaHash);if(!s)return;let a=o.start+i,c=wn((t-a)/1e3),l=s.samples(a/1e3),f=await l.next();if(f.done)return;let u=f.value,m=l.next();return{offset:c,gain:o.gain??1,get currentSample(){return u},timelineTime:()=>wn(c+u.timestamp),output:()=>({sample:u,timestamp:c+u.timestamp,gain:o.gain??1}),advance:async()=>{let d=await m;return d.done?!1:(u=d.value,m=l.next(),!0)}}}))).filter(o=>!!o)}var bi=class{resolveMedia;#e=new Map;constructor(e){this.resolveMedia=e}async getSink(e){let t=this.#e.get(e);if(t)return t.sink;let n=new fe({formats:ge,source:await ye(this.resolveMedia(e))}),o=await n.getPrimaryAudioTrack(),s=!!o&&await o.canDecode()&&o?new ln(o):null;return this.#e.set(e,{input:n,sink:s}),s}};function Pd(r){let e={index:0,stream:r[0],time:r[0].timelineTime()};for(let[t,n]of r.entries()){let o=n.timelineTime();o<e.time&&(e={time:o,stream:n,index:t})}return e}function Si(r){let e=new bi(r);return{async*sampleAudio(t,n){let o=vd({timeline:t,from:n}),i=await kd(e,o,n);for(;i.length>0;){let{stream:s,index:a}=Pd(i);yield s.output(),await s.advance()||i.splice(a,1)}}}}var Ti=class{driver;timeline;resolveMedia;audioSampler;seekVisualSampler;playVisualSampler=null;reversePlayVisualSampler=null;#e=X(0);#t=null;#r=1;#n=fd();onTick=this.#n.onTick;audioContext=new AudioContext({sampleRate:48e3});audioGain=this.audioContext.createGain();audioNodes=new Set;#o=null;constructor(e,t,n){this.driver=e,this.timeline=t,this.resolveMedia=n,this.audioGain.connect(this.audioContext.destination),this.audioGain.gain.value=.7**2,this.seekVisualSampler=vi(this.resolveMedia),this.audioSampler=Si(this.resolveMedia),this.#c()}update(e){this.timeline=e}get isPlaying(){return this.#n.isPlaying()}async#c(){for await(let e of this.#n.ticks()){let t=this.currentTime,n=this.#r>=0?await this.playVisualSampler?.next(t)??[]:await this.reversePlayVisualSampler?.next(t)??[];(await this.driver.composite(n)).close(),(this.#r>=0?t>=this.duration:t<=0)&&this.pause()}}async seek(e){return this.pause(),this.#e=e,await this.seekVisualSampler.sample(this.timeline,e)}async start(){this.#n.isPlaying()||(await this.audioContext.resume(),this.#e=this.currentTime,this.#t=this.audioContext.currentTime,this.#s(),this.playVisualSampler=new Xt(this.driver,this.resolveMedia,this.timeline),this.reversePlayVisualSampler=new Pn(this.driver,this.resolveMedia,this.timeline),this.#n.play(),this.#a())}pause(){this.#e=this.currentTime,this.#n.pause(),this.#s(),this.playVisualSampler&&(this.playVisualSampler.cancel(),this.playVisualSampler=null),this.reversePlayVisualSampler&&(this.reversePlayVisualSampler.cancel(),this.reversePlayVisualSampler=null)}get duration(){return Wt(this.timeline.rootId,this.timeline)}get currentTime(){if(!this.#n.isPlaying()||this.#t===null)return this.#e;let e=(this.audioContext.currentTime-this.#t)*1e3,t=this.#e+e*this.#r;return X(Math.max(0,Math.min(this.duration,t)))}get playbackRate(){return this.#r}set playbackRate(e){if(!Number.isFinite(e)||e===0)throw new Error(`Invalid playback rate "${e}".`);this.#e=this.currentTime,this.#t=this.#n.isPlaying()?this.audioContext.currentTime:null;let t=this.#r<0;this.#r=e,this.#n.isPlaying()&&(t&&e>0?(this.playVisualSampler?.cancel(),this.playVisualSampler=new Xt(this.driver,this.resolveMedia,this.timeline)):!t&&e<0&&(this.reversePlayVisualSampler?.cancel(),this.reversePlayVisualSampler=new Pn(this.driver,this.resolveMedia,this.timeline)),this.#i())}setFps(e){this.#n.setFPS(e)}#i(){this.#s(),this.#a()}#s(){this.#o?.abort(),this.#o=null;for(let e of this.audioNodes)e.stop();this.audioNodes.clear()}async#a(){if(this.#r!==1)return;let e=wn(this.#e/1e3);this.#o=new AbortController;let t=this.#o.signal,n=this.audioContext;if(this.#t!==null)for await(let{sample:o,timestamp:i}of this.audioSampler.sampleAudio(this.timeline,X(e*1e3))){if(t.aborted||!this.#n.isPlaying())return;for(;i-(n.currentTime-this.#t+e)>.75;)await new Promise(c=>setTimeout(c,25));let s=n.createBufferSource();s.buffer=o.toAudioBuffer(),s.connect(this.audioGain),s.onended=()=>this.audioNodes.delete(s),this.audioNodes.add(s);let a=this.#t+i-e;a>=n.currentTime?s.start(a):s.start(n.currentTime,n.currentTime-a)}}};var wi=class{driver;canvas;playback;#e=null;#t=null;constructor(e,t,n){this.driver=e,this.playback=new Ti(e,n,t),this.canvas=e.compositor.pixi.renderer.canvas}async play(){await this.playback.start()}pause(){this.playback.pause()}seek(e){return this.#e=e,this.#t??=this.#r().finally(()=>this.#t=null)}setFPS(e){this.playback.setFps(Rr(e))}get isSeeking(){return this.#t!==null}get isPlaying(){return this.playback.isPlaying}get duration(){return this.playback.duration}get currentTime(){return this.playback.currentTime}get playbackRate(){return this.playback.playbackRate}set playbackRate(e){this.playback.playbackRate=e}async update(e){this.playback.update(e),this.isPlaying||await this.seek(this.currentTime)}async#r(){for(;this.#e!==null;){let e=this.#e;this.#e=null;let t=await this.playback.seek(X(e));(await this.driver.composite(t)).close()}}};var Kt=class{state;constructor(e){this.state=e}require(e){return e===void 0?void 0:this.state.timeline.items.find(n=>n.id===e)}get timeline(){return this.state.timeline}getId(){return ze.toInteger(ze.random())}#e(e){this.state.timeline=e(this.state.timeline)}register(e){this.#e(t=>({...t,items:[...t.items,e]}))}textStyle=e=>{let t={id:this.getId(),kind:G.TextStyle,style:e};return this.register(t),t};spatial=(e,t)=>{let n={id:this.getId(),kind:G.Spatial,transform:e??this.transform(),crop:t,enabled:!0};return this.register(n),n};#t=e=>{let t={id:this.getId(),kind:G.Animation,anims:e,enabled:!0};return this.register(t),t};#r=(e,t)=>{let n={...e,animationIds:[...e.animationIds??[],t.id]};return this.set(e.id,n),n};anim={scalar:(e,t)=>({terp:e,track:t}),vec2:(e,t)=>{let n={x:[],y:[]};for(let[o,[i,s]]of t)n.x.push([o,i]),n.y.push([o,s]);return{terp:e,track:n}},transform:(e,t)=>{let n={position:{x:[],y:[]},scale:{x:[],y:[]},rotation:[]};for(let[o,[i,s,a]]of t)n.position.x.push([o,i[0]]),n.position.y.push([o,i[1]]),n.scale.x.push([o,s[0]]),n.scale.y.push([o,s[1]]),n.rotation.push([o,a]);return{terp:e,track:n}}};#n=od((e,t)=>({terp:e,track:t}),(e,t)=>this.anim.transform(e,t),e=>this.transform(e));#o=e=>{let t=o=>{let i={id:this.getId(),kind:G.Filter,type:e,params:o,enabled:!0};return this.register(i),i},n=((o,i)=>{let s=t(i),a={...o,filterIds:[...o.filterIds??[],s.id]};return this.set(o.id,a),a});return n.make=t,n};#c=()=>{let e=Object.entries(ui).map(([t,n])=>[t,this.#o(n.type)]);return Object.fromEntries(e)};filter=this.#c();#i=(e,t,n)=>e==="transform"?this.anim.transform(t,n):this.anim.scalar(t,n);#s=e=>{let t=(o,i)=>this.#t({[e]:this.#i(e,o,i)}),n=((o,i,s)=>{let a=t(i,s);return this.#r(o,a)});return n.make=t,n};#a=e=>{let t=o=>{let i=xt[e],s=this.#n[e](o);return this.#t(i.type==="motion"?{transform:s}:{opacity:s})},n=((o,i)=>{let s=t(i);return this.#r(o,s)});return n.make=t,n};#l=()=>{let e=Object.keys(Tn).map(t=>[t,this.#s(t)]);return Object.fromEntries(e)};#u=()=>{let e=Object.keys(xt).map(t=>[t,this.#a(t)]);return Object.fromEntries(e)};animate={...this.#l(),presets:this.#u()};sequence=(...e)=>{let t={id:this.getId(),kind:G.Sequence,childrenIds:e.map(n=>n.id)};return this.register(t),t};stack=(...e)=>{let t={kind:G.Stack,id:this.getId(),childrenIds:e.map(n=>n.id)};return this.register(t),t};video=(e,t)=>{if(!e.hasVideo)throw new Error(`Video clip error: media "${e.datafile.filename}" has no video track.`);let n={kind:G.Video,id:this.getId(),mediaHash:e.datafile.checksum.hash,start:t?.start??0,duration:t?.duration??e.duration};return this.register(n),n};audio=(e,t)=>{if(!e.hasAudio)throw new Error(`Audio clip error: media "${e.datafile.filename}" has no audio track.`);let n={kind:G.Audio,id:this.getId(),mediaHash:e.datafile.checksum.hash,start:t?.start??0,duration:t?.duration??e.duration,gain:t?.gain??1};return this.register(n),n};text=(e,t)=>{let n={id:this.getId(),content:e,kind:G.Text,duration:t?.duration??2e3};return t?.styles&&(n.styleId=this.textStyle(t.styles).id),this.register(n),n};#f=(e,t,n)=>{let o=n?.start??0,i=n?.duration??Math.max(0,id(e,n)-o),s={id:this.getId(),kind:G.Caption,transcript:e,start:o,duration:i,maxChars:n?.maxChars,maxDuration:n?.maxDuration,maxSilence:n?.maxSilence};return s.styleId=this.textStyle(n?.styles??t.styles).id,s.spatialId=this.spatial(this.transform(t.transform)).id,this.register(s),s};#m=e=>{let t=(o,i)=>this.#f(o,e,i),n=((o,i,s)=>{let a=t(i,{...s,start:s?.start??o.start,duration:s?.duration??o.duration});return this.set(o.id,{captionId:a.id}),this.stack(a,o)});return n.make=t,n};#d=()=>{let e=Object.entries(hi).map(([t,n])=>[t,this.#m(n)]);return Object.fromEntries(e)};captions=Object.assign(this.#m(hi.default),{presets:this.#d()});gap=e=>{let t={id:this.getId(),kind:G.Gap,duration:e};return this.register(t),t};transition={crossfade:e=>{let t={id:this.getId(),kind:G.Transition,effect:fi.Crossfade,duration:e};return this.register(t),t}};transform=e=>{let t=[e?.position?.[0]??0,e?.position?.[1]??0],n=[e?.scale?.[0]??1,e?.scale?.[1]??1],o=e?.rotation??0;return[t,n,o]};addChildren(e,...t){this.#e(n=>(n.items.find(({id:i})=>i===e.id).childrenIds.push(...t.map(i=>i.id)),n))}set=(e,t)=>{this.#e(n=>({...n,items:n.items.map(o=>o.id===e?{...o,...t}:o)}))}};function p0(r){let e=((t,n)=>o=>r(o)(t(o),n));return e.make=t=>n=>r(n).make(t),e}function h0(){let e=Object.keys(ui).map(t=>[t,p0(n=>n.filter[t])]);return Object.fromEntries(e)}var HF=h0();function g0(r){let e=((t,n,o)=>i=>r(i)(t(i),n,o));return e.make=(t,n)=>o=>r(o).make(t,n),e}function x0(){let r=Object.keys(Tn).map(e=>[e,g0(t=>t.animate[e])]);return Object.fromEntries(r)}function v0(r){let e=((t,n)=>o=>o.animate.presets[r](t(o),n));return e.make=t=>n=>n.animate.presets[r].make(t),e}function y0(){let r=Object.keys(xt).map(e=>[e,v0(e)]);return Object.fromEntries(r)}var WF={...x0(),presets:y0()};var Ci=class{#e;#t;constructor(e={}){this.#e=e.chunkFrames??1024,this.#t=e.clamp??!0}async*mix(e){let t=this.#e,n=null,o=null,i=[],s=0,a=0;for await(let c of e){if(o===null)o=c.planes.length,n=c.sampleRate;else{if(c.planes.length!==o)throw new Error("Channel count changed");if(c.sampleRate!==n)throw new Error("Sample rate changed")}let l=Math.round(c.timestamp*n),f=c.planes[0]?.length??0;for(;s+t<=l;)yield this.#r(i,s,o,n),s+=t;i.push({startFrame:l,endFrame:l+f,data:c.planes}),a=Math.max(a,l+f)}if(o!==null&&n!==null)for(;s<a;)yield this.#r(i,s,o,n),s+=t}#r(e,t,n,o){let i=this.#e,s=new Float32Array(n*i),a=t+i;for(let c=0;c<n;c++){let l=c*i,f=s.subarray(l,l+i);for(let u of e){let m=u.data[c];if(!m)continue;let d=Math.max(t,u.startFrame),p=Math.min(a,u.endFrame);if(d>=p)continue;let h=d-t,x=d-u.startFrame,y=p-d;for(let v=0;v<y;v++)f[h+v]+=m[x+v]}if(this.#t)for(let u=0;u<i;u++){let m=f[u];f[u]=m<-1?-1:m>1?1:m}}for(let c=e.length-1;c>=0;c--)e[c].endFrame<=a&&e.splice(c,1);return{planar:s,sampleRate:o,channels:n,frames:i,startFrame:t}}};var b0=(r,e,t)=>{if(e===t)return r;let n=t/e,o=Math.max(1,Math.round(r.length*n)),i=new Float32Array(o);for(let s=0;s<o;s++){let a=s/n,c=Math.floor(a),l=Math.min(c+1,r.length-1),f=a-c;i[s]=r[c]*(1-f)+r[l]*f}return i},_d=(r,e)=>{let t=r.numberOfChannels,n=new Array(t),o=0;for(let i=0;i<t;i++){let s=new Float32Array(r.numberOfFrames);r.copyTo(s,{planeIndex:i,format:"f32-planar"});let a=b0(s,r.sampleRate,e);n[i]=a,o=a.length}return{data:n,frames:o}};var Id=(r,e)=>{if(e!==1)for(let t of r)for(let n=0;n<t.length;n++)t[n]*=e};function Ad({timeline:r,resolveMedia:e}){let t=new Ci,n=S0(r,e),o=new TransformStream,i=o.writable.getWriter();async function s(){for await(let a of t.mix(n)){let c=new AudioData({format:"f32-planar",sampleRate:a.sampleRate,numberOfFrames:a.frames,numberOfChannels:a.channels,timestamp:Math.round(a.startFrame/a.sampleRate*1e6),data:new Float32Array(a.planar)});await i.write(c)}await i.close()}return s(),o.readable}async function*S0(r,e){let t=Si(e);for await(let{sample:n,timestamp:o,gain:i}of t.sampleAudio(r,X(0))){let{data:s}=_d(n,48e3);Id(s,i),yield{planes:s,sampleRate:48e3,timestamp:o},n.close()}}function Fd({timeline:r,fps:e,driver:t,resolveMedia:n}){let o=new TransformStream,i=o.writable.getWriter(),s=new Xt(t,n,r),a=1/e,c=Wt(r.rootId,r);async function l(){await md({fps:e,duration:c},async(f,u)=>{let m=await s.next(f),d=await t.composite(m),p=new VideoFrame(d,{timestamp:Math.round(u*a*1e6),duration:Math.round(a*1e6)});await i.write(p),d.close()}),await i.close()}return l(),o.readable}function Ed(r){let e=Ad({...r}),t=Fd({...r});return r.driver.encode({video:t,audio:e,config:{audio:{codec:"opus",bitrate:128e3},video:{codec:"vp9",bitrate:1e6}}})}var ki=class{driver;resources=new di;constructor(e){this.driver=e}load=async e=>Object.fromEntries(await Promise.all(Object.entries(e).map(async([t,n])=>[t,await this.resources.store(await n)])));timeline=e=>{let t=new Kt({timeline:{format:"timeline",info:"https://omniclip.app/",version:0,items:[],rootId:0}}),n=e(t);return t.timeline.rootId=n.id,t.timeline};playback=async e=>new wi(this.driver,t=>this.resources.require(t).url,e);render=async(e,t=30)=>Ed({timeline:e,fps:Rr(t),driver:this.driver,resolveMedia:n=>this.resources.require(n).url})};var Pi=class{data;bytes;hash;nickname;constructor(e,t,n,o){this.data=e,this.bytes=t,this.hash=n,this.nickname=o}static async make(e){let t=new Uint8Array(e),n=new Uint8Array(await crypto.subtle.digest("SHA-256",t)),o=Fn.fromBytes(n),i=ka.sigil.fromBytes(n);return new this(e,n,o,i)}};var _i=class{url;bytes;blob;filename;checksum;constructor(e,t,n,o,i){this.url=e,this.bytes=t,this.blob=n,this.filename=o,this.checksum=i}static async make(e,t){let n=await e.arrayBuffer(),o=new Uint8Array(n),i=await Pi.make(o),s=t??i.nickname,a=URL.createObjectURL(e);return new this(a,o,e,s,i)}static async load(e){}};async function Dd(r,e,t){let n=t.querySelector(".play"),o=t.querySelector(".stop"),i=t.querySelector(".scrub"),s=t.querySelector(".playhead"),a=t.querySelector(".timecode"),c=t.querySelector(".player-canvas"),l=new Kt({timeline:r}),f=await e.playback(r);c.replaceChildren(f.canvas),n.disabled=!1,o.disabled=!1,n.addEventListener("click",()=>f.play()),o.addEventListener("click",()=>f.pause()),i.max=String(Math.ceil(f.duration));let u=!1;f.playback.onTick.on(()=>d(f.currentTime,f.duration));let m=(p,h)=>{a.textContent=`${zd(p)} / ${zd(h)}`};i.addEventListener("input",async()=>{u=!0;let p=Math.max(0,Math.min(+i.value,f.duration));m(p,f.duration),await f.seek(p)}),i.addEventListener("change",async()=>{u=!1;let p=Math.max(0,Math.min(+i.value,f.duration));await f.seek(p)});let d=(p,h)=>{let x=Math.max(0,Math.min(p,h));u||(i.value=String(Math.round(x)));let y=h?x/h*100:0;s.style.left=`${y}%`,m(x,h)};await f.update(l.timeline)}function zd(r){let e=Math.max(0,r),t=Math.floor(e/1e3),n=Math.floor(t/60),o=t%60,i=Math.floor(e%1e3);return`${n}:${String(o).padStart(2,"0")}.${String(i).padStart(3,"0")}`}async function Rd(r,e,t){let n=t.querySelector(".waveform-canvas"),o=t.querySelector(".width");n.replaceChildren(),n.style.position="relative",n.style.height="96px",n.style.overflow="hidden";let i=await gi.init(r,e,{tileHeight:96,onChange:()=>s()}),s=()=>{let a=+o.value,c=Od(a,i.duration);i.zoom=c,n.style.width=`${a}px`,n.replaceChildren(...[...i.getTiles().values()].map(l=>(l.canvas.style.position="absolute",l.canvas.style.top="0",l.canvas.style.left=`${l.startTime*Od(a,i.duration)}px`,l.canvas.style.height="100%",l.canvas)))};o.oninput=s,i.range=[0,i.duration]}function Od(r,e){return e>0?r/e:0}async function xa(r,e){let t=await cd({driver:r,spec:sd(),workerUrl:new URL("/features/speech/transcribe/worker.bundle.min.js",import.meta.url),onLoading:a=>console.log("transcriber loading",a)}),n=new ki(r),{videoA:o}=await n.load({videoA:_i.make(e)}),i=await t.transcribe({source:e,language:"english",onReport:a=>console.log("transcriber report",a),onTranscription:a=>console.log("transcribing",a)});return{timeline:n.timeline(a=>{let c=a.text("content",{duration:3e3}),l=a.animate.opacity.make("easeIn",[[0,0],[700,1],[2200,1],[3e3,.35]]),f=a.textStyle({fill:"green",fontSize:100}),u=a.spatial(a.transform({position:[240,160],scale:[1.4,1.4],rotation:.08}),[.15,.1,.05,.2]),m=a.spatial(),d=a.animate.transform.make("linear",[[0,a.transform({position:[-320,80],scale:[.7,.7]})],[1e3,a.transform({position:[120,80],scale:[1,1]})],[2e3,a.transform({position:[200,40],scale:[1.35,1.35],rotation:8})],[3e3,a.transform({position:[320,0],scale:[1.15,1.15],rotation:0})]]),p=a.video(o,{duration:6e3,start:3e3});return a.set(c.id,{styleId:f.id,spatialId:m.id,animationIds:[l.id,d.id]}),a.set(p.id,{spatialId:u.id}),a.sequence(a.stack(c,a.captions(p,i,{maxChars:34,maxDuration:2800,maxSilence:450,styles:{fontFamily:"Arial",fontSize:64,fill:"#ffffff",align:"center",wordWrap:!0,wordWrapWidth:1280,stroke:{color:"#000000",width:6}}}),a.audio(o,{start:3e3})),a.gap(500),a.video(o,{duration:7e3,start:5e3}))}),omni:n}}async function Md(r,e){let t=e.querySelector(".range"),n=e.querySelector(".range-view"),o=e.querySelector(".range-size"),i=e.querySelector(".frequency"),s=e.querySelector(".frequency-view"),a=e.querySelector(".filmstrip"),c=1/10,l=.5;a.replaceChildren();let f=await pi.init(r,{onChange(u){let m=u.sort((d,p)=>d.time-p.time);a.replaceChildren(...m.map(({time:d,canvas:p})=>T0(d,p.canvas)))},frequency:c,canvasSinkOptions:{width:80,height:50,fit:"fill"}});o.oninput=()=>{l=+o.value;let u=+t.value,m=u+l;f.range=[u,m],n.textContent=`visible time range: [${u}, ${m}]`},t.oninput=()=>{let u=+t.value,m=u+l;f.range=[u,m],n.textContent=`visible time range: [${u}, ${m}]`},i.oninput=()=>{f.frequency=1/+i.value,s.textContent=`frame every ${f.frequency.toFixed(3)} second (${i.value} frames per second)`},f.range=[10,10.5]}function T0(r,e){let t=document.createElement("div");t.style.position="relative",t.style.display="inline-block",t.style.marginRight="4px",t.appendChild(e);let n=document.createElement("div");return n.textContent=`${r.toFixed(2)}s`,n.style.position="absolute",n.style.top="2px",n.style.right="4px",n.style.fontSize="10px",n.style.color="white",n.style.background="rgba(0,0,0,0.6)",n.style.padding="2px 4px",n.style.borderRadius="4px",n.style.pointerEvents="none",t.appendChild(n),t}function Bd(r,e){let t={width:1920,height:1080},n=document.createElement("canvas");n.width=t.width,n.height=t.height;let o=n.getContext("2d");async function i(){let s=r.decodeVideo({source:e,async onFrame(m){let d=await r.composite([{id:0,kind:"image",frame:m},{id:1,kind:"text",content:"omnitool",style:{fontSize:50,fill:"green"}}]);return m.close(),o?.drawImage(d,0,0),d}}),a=r.decodeAudio({source:e}),{readable:c,done:l}=r.encode({video:s.readable,audio:a.readable,config:{audio:{codec:"opus",bitrate:128e3},video:{codec:"vp9",bitrate:1e6}}}),u=await(await window.showSaveFilePicker()).createWritable();await Promise.all([c.pipeTo(u),l])}return{canvas:n,run:i}}var Nr=await ci.setup({workerUrl:new URL("../driver/driver.worker.bundle.min.js",import.meta.url)}),w0=document.querySelector("[data-demo='transcode']"),C0=document.querySelector("[data-demo='filmstrip']"),k0=document.querySelector("[data-demo='waveform']"),Ud=document.querySelector("[data-demo='playback']"),Yt=document.querySelector("[data-demo='export']"),Nd=Yt.querySelector("[data-action='export']"),Ii=null;await Nr.thread.work.hello(),Nr.machina.count===1?console.log("\u2705 driver works"):console.error("\u274C FAIL driver call didn't work");var Lr=(r,e)=>{let t=r.querySelector(".progress"),n=r.querySelector(".status");!t||!n||(e==="running"?(t.removeAttribute("value"),n.textContent="running"):e==="done"?(t.value=1,n.textContent="done"):(t.value=0,n.textContent="idle"))},va=(r,e)=>{let t=r.querySelector("input[type='file']"),n=r.querySelector("[data-action='run']");n.disabled=!0,t.addEventListener("input",()=>{n.disabled=!t.files?.length}),n.addEventListener("click",async()=>{let o=t.files?.[0];if(o){n.disabled=!0,Lr(r,"running");try{await e(o,r),Lr(r,"done")}finally{n.disabled=!1}}})};va(w0,async(r,e)=>{let t=e.querySelector(".demo-preview"),n=Bd(Nr,r);t.replaceChildren(n.canvas),await n.run()});va(C0,async(r,e)=>{await Md(r,e)});va(k0,async(r,e)=>{await Rd(Nr,r,e)});{let r=Ud.querySelector("input[type='file']");r.addEventListener("input",async()=>{let e=r.files?.[0];if(!e)return;let{timeline:t,omni:n}=await xa(Nr,e);await Dd(t,n,Ud)})}{let r=Yt.querySelector("input[type='file']");r.addEventListener("input",async()=>{let e=r.files?.[0];if(!e)return;Lr(Yt,"running");let{timeline:t,omni:n}=await xa(Nr,e);Ii={timeline:t,omni:n},Nd.disabled=!1;let o=Yt.querySelector(".demo-preview"),i=await n.playback(t);await i.seek(0),o.replaceChildren(i.canvas),Lr(Yt,"done")})}Nd.addEventListener("click",async()=>{Ii&&(Lr(Yt,"running"),await Ii.omni.render(Ii.timeline),Lr(Yt,"done"))});
7326
7326
  /*! Bundled license information:
7327
7327
 
7328
7328
  mediabunny/dist/modules/src/misc.js: