framefields 2.2.0-beta.1 → 2.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/effects/index.d.mts +1 -1
- package/dist/effects/index.mjs +1 -1
- package/dist/index--1jnkoBj.d.mts.map +1 -1
- package/dist/{index-DLbtJPrc.d.mts → index-HyzpJrHe.d.mts} +31 -10
- package/dist/index-HyzpJrHe.d.mts.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +3 -3
- package/dist/preview/index.mjs +1 -1
- package/dist/{preview-BQ3BhcVX.mjs → preview-BXu7FyvN.mjs} +2 -2
- package/dist/{preview-BQ3BhcVX.mjs.map → preview-BXu7FyvN.mjs.map} +1 -1
- package/dist/preview-engine/{chunk-Z457JJCO.mjs → chunk-3NXJVSZY.mjs} +1 -1
- package/dist/preview-engine/{chunk-HFUA47QH.mjs → chunk-6RSP766E.mjs} +1 -1
- package/dist/preview-engine/chunk-HCZCEOV5.mjs +174 -0
- package/dist/preview-engine/chunk-X6HUH6K4.mjs +1 -0
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-HVTQ2B3H.mjs → renderers-NYK2NDZJ.mjs} +1 -1
- package/dist/renderer/index.mjs +1 -1
- package/dist/renderer-BkV_xpMb.mjs +3 -0
- package/dist/{renderer-dc39dBVA.mjs → renderer-CqT2vxa4.mjs} +989 -101
- package/dist/renderer-CqT2vxa4.mjs.map +1 -0
- package/dist/{renderer-DzDZlez7.mjs → renderer-Dqdega0-.mjs} +6 -3
- package/dist/renderer-Dqdega0-.mjs.map +1 -0
- package/package.json +55 -55
- package/dist/index-DLbtJPrc.d.mts.map +0 -1
- package/dist/preview-engine/chunk-7OMK352W.mjs +0 -1
- package/dist/preview-engine/chunk-K7M5EIFC.mjs +0 -98
- package/dist/renderer-CZKFEf_6.mjs +0 -3
- package/dist/renderer-DzDZlez7.mjs.map +0 -1
- package/dist/renderer-dc39dBVA.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as ot}from"./chunk-LKYN3BM2.mjs";import{o as Ut,p as C,q as T,r as Mt}from"./chunk-RQLMW6MA.mjs";import{c as yt,d as xt,e as $}from"./chunk-
|
|
1
|
+
import{a as ot}from"./chunk-LKYN3BM2.mjs";import{o as Ut,p as C,q as T,r as Mt}from"./chunk-RQLMW6MA.mjs";import{c as yt,d as xt,e as $}from"./chunk-X6HUH6K4.mjs";import{a as St,b as it,d as wt,e as A}from"./chunk-XETMNJVV.mjs";import{a as vt,b as bt}from"./chunk-ATLWPS6N.mjs";import{e as O,s as G,t as M,v as Gt}from"./chunk-LQENNFBA.mjs";import{a as D,b as gt}from"./chunk-IQC2I5A5.mjs";import{d as Pt}from"./chunk-HYBAPT6I.mjs";import{e as x}from"./chunk-BVF64D6H.mjs";x();var E=class{constructor(t,e){this.url=t;this.isHeadless=e}url;isHeadless;input=null;initPromise=null;iterator=null;iteratorStartTimestamp=-1;currentFetchId=0;fetchLock=Promise.resolve();destroyed=!1;async init(){if(!this.input)return this.initPromise?this.initPromise:(this.destroyed=!1,this.initPromise=(async()=>{try{let t=await A.acquire(this.url);this.destroyed?A.release(this.url):this.input=t}catch(t){throw this.initPromise=null,t}})(),this.initPromise)}destroy(){this.destroyed=!0,this.iterator?.return(),this.input&&(A.release(this.url),this.input=null),this.initPromise=null,this.onDestroy()}},st=class extends E{canvasSink=null;videoSampleSink=null;currentFrame=null;nextFrame=null;currentSample=null;nextSample=null;headlessQueue=[];isDecoding=!1;decodeBuffer=null;nextRequest=null;pushHeadlessQueue(t){let e=this.headlessQueue.findIndex(r=>r.timestamp>t.timestamp);e===-1?this.headlessQueue.push(t):this.headlessQueue.splice(e,0,t)}async fillHeadlessQueue(t){if(this.iterator)for(;this.headlessQueue.length<2;){let e=await this.iterator.next();if(this.currentFetchId!==t){e.value?.close?.();return}if(e.done||!e.value)break;this.pushHeadlessQueue(e.value)}}async closeIterator(t){if(t)try{await t.return()}catch{}}resetSinks(){let t=this.iterator;if(this.iterator=null,t)try{t.return()}catch{}this.canvasSink=null,this.videoSampleSink=null,this.currentFrame=null,this.nextFrame=null,this.currentSample?.close(),this.currentSample=null,this.nextSample?.close(),this.nextSample=null;for(let e of this.headlessQueue)try{e.close()}catch{}this.headlessQueue=[],this.decodeBuffer=null,this.iteratorStartTimestamp=-1}onDestroy(){this.resetSinks()}async startIterator(t,e){if(!this.canvasSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;this.iterator=this.canvasSink.canvases(r);let n=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed)return;this.currentFrame=n.value??null;let s=await this.iterator.next();this.currentFetchId!==e||this.destroyed||(this.nextFrame=s.value??null,this.iteratorStartTimestamp=r)}async startIteratorHeadless(t,e){if(!this.videoSampleSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;for(let s of this.headlessQueue)s.close();this.headlessQueue=[];let n=Math.max(0,r-.1);this.iterator=this.videoSampleSink.samples(n),await this.fillHeadlessQueue(e),!(this.currentFetchId!==e||this.destroyed)&&(this.iteratorStartTimestamp=r)}async getFrame(t){if(await this.init(),this.destroyed||!this.input)return null;let e=Math.max(0,Number.isFinite(t)?t:0);return this.isDecoding?(this.nextRequest&&this.nextRequest.resolve(null),new Promise((r,i)=>{this.nextRequest={timestampSec:e,resolve:r,reject:i}})):this.executeDecode(e)}async executeDecode(t){this.isDecoding=!0;try{return await this.performDecode(t)}finally{if(this.isDecoding=!1,this.nextRequest){let e=this.nextRequest;this.nextRequest=null,this.executeDecode(e.timestampSec).then(e.resolve).catch(e.reject)}}}async performDecodeHeadless(t,e){if(!this.videoSampleSink){if(this.destroyed||!this.input)return null;let h=await this.input.getPrimaryVideoTrack();if(!h)return null;this.videoSampleSink=new St(h)}let r=1e-4;if((!this.iterator||t<this.iteratorStartTimestamp-r||this.headlessQueue.length>0&&t<this.headlessQueue[0].timestamp-.01||this.headlessQueue.length>0&&t-this.headlessQueue[0].timestamp>1)&&(await this.startIteratorHeadless(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;;){if(await this.fillHeadlessQueue(e),this.currentFetchId!==e||this.destroyed||!this.input)return null;if(this.headlessQueue.length>=2&&this.headlessQueue[1].timestamp<=t+r){this.headlessQueue.shift()?.close();continue}break}let s=this.headlessQueue[0];if(!s)return null;let a=s.displayWidth,o=s.displayHeight,c=a*o*4,l=this.decodeBuffer;return(!l||l.length!==c)&&(l=new Uint8Array(c),this.decodeBuffer=l),await s.copyTo(l,{format:"RGBA"}),this.currentFetchId!==e||this.destroyed||!this.input?null:(gt(l),{width:a,height:o,buffer:l})}async performDecodeInternal(t){this.currentFetchId++;let e=this.currentFetchId;if(this.isHeadless)return this.performDecodeHeadless(t,e);if(!this.canvasSink){if(this.destroyed||!this.input)return null;let a=await this.input.getPrimaryVideoTrack();if(!a)return null;this.canvasSink=new it(a,{poolSize:3,alpha:!0})}let r=1e-4;if((!this.iterator||t<this.iteratorStartTimestamp-r||this.currentFrame&&t<this.currentFrame.timestamp-.01||this.currentFrame&&t-this.currentFrame.timestamp>1)&&(await this.startIterator(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;this.nextFrame&&this.nextFrame.timestamp<=t+r;)if(this.currentFrame=this.nextFrame,this.nextFrame=null,this.iterator){let a=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed||!this.input)return null;this.nextFrame=a.value??null}if(!this.currentFrame)return null;let s=this.currentFrame.canvas;return{width:s.width,height:s.height,canvas:s}}async performDecode(t){let e=Math.max(0,Number.isFinite(t)?t:0);try{return await this.performDecodeInternal(e)}catch(r){let i=r;if(i?.name==="InputDisposedError"||i?.message?.includes("disposed")||this.destroyed||!this.input)return null;this.resetSinks();try{if(!this.isHeadless&&this.input&&!this.destroyed){let n=await this.input.getPrimaryVideoTrack();if(n&&!this.destroyed)return this.canvasSink=new it(n,{poolSize:3,alpha:!0,decoderOptions:{hardwareAcceleration:"prefer-software"}}),await this.performDecodeInternal(e)}}catch{}throw r}}},nt=class extends E{audioSink=null;onDestroy(){this.audioSink=null}async startIterator(t,e){this.audioSink&&(this.iterator?.return(),this.iterator=this.audioSink.buffers(t),this.iteratorStartTimestamp=t)}async*getBuffers(t){try{if(await this.init(),this.destroyed||!this.input)return;if(!this.audioSink){let i=await this.input.getPrimaryAudioTrack();if(!i)return;this.audioSink=new wt(i)}(!this.iterator||Math.abs(t-this.iteratorStartTimestamp)>.05)&&(this.currentFetchId++,await this.startIterator(t,this.currentFetchId));let r=this.currentFetchId;if(!this.iterator)return;for await(let i of this.iterator){if(this.currentFetchId!==r||this.destroyed||!this.input)break;this.iteratorStartTimestamp=i.timestamp+i.duration,yield i}}catch(e){let r=e;if(r?.name==="InputDisposedError"||r?.message?.includes("disposed")||this.destroyed||!this.input)return;throw e}finally{let e=this.currentFetchId;this.currentFetchId===e&&(this.iterator=null)}}},at=class{videoDecoders=new Map;audioDecoders=new Map;lastAccessed=new Map;touchKey(t){this.lastAccessed.set(t,Date.now())}destroy(){for(let t of this.videoDecoders.values())try{t.destroy()}catch{}this.videoDecoders.clear();for(let t of this.audioDecoders.values())try{t.destroy()}catch{}this.audioDecoders.clear(),this.lastAccessed.clear()}prune(t=3e5){let e=Date.now();for(let[r,i]of this.lastAccessed.entries())if(e-i>t){let n=this.videoDecoders.get(r);n&&(n.destroy(),this.videoDecoders.delete(r));let s=this.audioDecoders.get(r);s&&(s.destroy(),this.audioDecoders.delete(r)),this.lastAccessed.delete(r)}}getVideo(t,e,r){let i=`${t}-${e}-${r??"default"}`,n=this.videoDecoders.get(i);return n||(n=new st(t,e),this.videoDecoders.set(i,n)),this.touchKey(i),this.prune(),n}getAudio(t,e){let r=`${t}-${e??"default"}`,i=this.audioDecoders.get(r);return i||(i=new nt(t,!1),this.audioDecoders.set(r,i)),this.touchKey(r),this.prune(),i}clearNode(t){for(let[e,r]of this.videoDecoders)e.includes(t)&&(r.destroy(),this.videoDecoders.delete(e),this.lastAccessed.delete(e));for(let[e,r]of this.audioDecoders)e.includes(t)&&(r.destroy(),this.audioDecoders.delete(e),this.lastAccessed.delete(e))}},te=new at;x();x();var Bt=`
|
|
2
2
|
struct CompositeUniforms {
|
|
3
3
|
blendMode : u32,
|
|
4
4
|
padding1 : u32,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as t}from"./chunk-K7M5EIFC.mjs";import{a as $}from"./chunk-FJH5A2PV.mjs";import{h as j}from"./chunk-63SFBHEH.mjs";import{d,e as c}from"./chunk-BVF64D6H.mjs";c();c();c();c();c();c();function _(r){return typeof d<"u"?d.env?.[r]:void 0}function J(){let r=_("FRAMEFIELDS_STRICT_PROPS");return r==="1"||r==="true"}function Ee(){return J()||_("NODE_ENV")!=="production"}var Z=new Set;function K(r){if(J())throw new Error(r);Z.has(r)||(Z.add(r),console.warn(`[framefields] ${r}`))}function U(r){if(typeof r!="object"||r===null||Array.isArray(r)||j(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}function we(r,e){let n=Array.from({length:e.length+1},(l,i)=>i);for(let l=1;l<=r.length;l++){let i=n[0];n[0]=l;for(let s=1;s<=e.length;s++){let u=n[s];n[s]=Math.min(n[s]+1,n[s-1]+1,i+(r[l-1]===e[s-1]?0:1)),i=u}}return n[e.length]}function ve(r,e){let n,l=Number.POSITIVE_INFINITY,i=r.toLowerCase();for(let u of e){let p=u.toLowerCase(),m=p.includes(i)||i.includes(p)?1:we(i,p);m<l&&(l=m,n=u)}return n&&l<=Math.max(2,Math.ceil(r.length/2))?` Did you mean "${n}"?`:` Known props: ${e.join(", ")}.`}function Me(r,e,n){if(typeof e=="number"){let{min:l,max:i}=n,s=l!==void 0&&e<l,u=i!==void 0&&e>i;if(s||u||Number.isNaN(e)){let p=l!==void 0&&i!==void 0?`${l} to ${i}`:l!==void 0?`\u2265 ${l}`:`\u2264 ${i}`;K(Number.isNaN(e)?`${r} is NaN`:`${r} = ${e} is outside ${p}`)}return}n.enum&&(typeof e=="string"||typeof e=="boolean")&&!n.enum.includes(e)&&K(`${r} = ${JSON.stringify(e)} is not one of ${n.enum.map(l=>JSON.stringify(l)).join(", ")}`)}function Q(r,e,n){let l=Object.keys(n);for(let[i,s]of Object.entries(e)){if(s===void 0)continue;let u=n[i];if(!u){K(`${r}: unknown prop "${i}".${ve(i,l)}`);continue}j(s)||typeof s=="function"||(u.props&&U(s)?Q(`${r}.${i}`,s,u.props):Me(`${r}.${i}`,s,u))}}function Re(r){return typeof r=="object"&&r!==null?structuredClone(r):r}function o(r,e,n,l){let i=n;Ee()&&Q(r,i,l);let s={};for(let[u,p]of Object.entries(e))s[u]=Re(p);for(let[u,p]of Object.entries(i)){if(p===void 0)continue;let m=s[u];s[u]=U(m)&&U(p)?{...m,...Object.fromEntries(Object.entries(p).filter(([,Ce])=>Ce!==void 0))}:p}return s}c();var a={AudioCompressor:{threshold:{min:-60,max:0},ratio:{min:1,max:100},attack:{min:1e-4,max:1},release:{min:.01,max:5},knee:{min:0,max:24},makeupGain:{min:0,max:24}},AudioDelay:{delayTime:{min:.001,max:5},feedback:{min:0,max:.95},wet:{min:0,max:1},dry:{min:0,max:1},pingPong:{}},AudioFade:{fadeInDuration:{min:0,max:60},fadeOutDuration:{min:0,max:60},fadeInCurve:{enum:["linear","exponential","scurve"]},fadeOutCurve:{enum:["linear","exponential","scurve"]}},AudioNoiseGate:{threshold:{min:-120,max:0},attack:{min:1e-4,max:1},hold:{min:.001,max:5},release:{min:.01,max:5},range:{min:-120,max:0}},AudioParametricEq:{type:{enum:["lowShelf","highShelf","peak","lowPass","highPass","notch"]},frequency:{min:20,max:2e4},gain:{min:-24,max:24},q:{min:.01,max:10}},AudioReverb:{roomSize:{min:0,max:.98},damping:{min:0,max:1},wet:{min:0,max:1},dry:{min:0,max:1},width:{min:0,max:1}},Blur:{blurType:{enum:["Gaussian","Box","Median","Motion","Bilateral","Edge-preserving","Radial","Zoom"]},strength:{min:0,max:100},angle:{min:0,max:360},sigmaColor:{min:.01,max:1},centerX:{min:0,max:1},centerY:{min:0,max:1},partialBlur:{},radius:{min:.01,max:1},radiusY:{min:0,max:1},shape:{enum:["ellipse","circle","rect"]}},CameraParallax3D:{motionPreset:{enum:["Custom","DollyZoom","Orbit","FlyThrough","HandheldShake","RackFocus"]},panX:{min:-1,max:1},panY:{min:-1,max:1},dollyZ:{min:-1,max:1},fov:{min:15,max:120},parallaxAmount:{min:0,max:2},dofAperture:{min:0,max:1},focusPlane:{min:0,max:1},edgeDilation:{min:0,max:1},depthInvert:{}},ChannelMerger:{colorSpace:{enum:["RGBA","HSLA","CMYK","LAB"]},defaultChannel4:{min:0,max:1}},ChannelSplitter:{colorSpace:{enum:["RGBA","HSLA","CMYK","LAB"]}},ColorBalance:{shadows:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},midtones:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},highlights:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},preserveLuminosity:{}},ColorKey:{keyColor:{},similarity:{min:0,max:1},smoothness:{min:0,max:1},spillSuppression:{min:0,max:1},colorSpace:{enum:["YUV","RGB"]},spillSuppressionType:{enum:["Desaturate","Neutralize","None"]}},CornerPin:{points:{}},DisplacementMap:{strengthX:{min:0,max:500},strengthY:{min:0,max:500},xChannel:{enum:["Red","Green","Blue","Alpha","Luminance"]},yChannel:{enum:["Red","Green","Blue","Alpha","Luminance"]},wrapMode:{enum:["Clamp","Repeat","Mirror"]}},ExtractLUT:{strategy:{enum:["deterministic","statistical"]},samplePoints:{min:10,max:500}},Flip:{horizontal:{},vertical:{},diagonal:{},mode:{enum:["horizontal","vertical","both","diagonal","antiDiagonal","custom"]},symmetry:{enum:["none","leftToRight","rightToLeft","topToBottom","bottomToTop","quadrant"]}},KenBurns:{keyframes:{},motionBlurSize:{min:0,max:10},movementStyle:{enum:["spline","direct"]},aspectRatio:{enum:["input","16:9","9:16","21:9","9:21","1:1","4:3","3:2","2:3","4:5","5:4"]}},LayerStyle:{dropShadow:{props:{enabled:{},color:{},opacity:{min:0,max:1},angle:{min:0,max:360},distance:{min:0,max:500},spread:{min:0,max:100},size:{min:0,max:250},blendMode:{}}},innerShadow:{props:{enabled:{},color:{},opacity:{min:0,max:1},angle:{min:0,max:360},distance:{min:0,max:500},choke:{min:0,max:100},size:{min:0,max:250},blendMode:{}}},outerGlow:{props:{enabled:{},color:{},opacity:{min:0,max:1},size:{min:0,max:250},spread:{min:0,max:100},blendMode:{}}},innerGlow:{props:{enabled:{},color:{},opacity:{min:0,max:1},size:{min:0,max:250},spread:{min:0,max:100},blendMode:{}}},stroke:{props:{enabled:{},size:{min:0,max:100},position:{enum:["inside","center","outside"]},color:{},opacity:{min:0,max:1},blendMode:{}}},bevelEmboss:{props:{enabled:{},style:{enum:["InnerBevel","OuterBevel","Emboss","PillowEmboss"]},technique:{enum:["Smooth","ChiselHard","ChiselSoft"]},depth:{min:1,max:1e3},direction:{enum:["Up","Down"]},size:{min:0,max:250},soften:{min:0,max:50},angle:{min:0,max:360},altitude:{min:0,max:90},highlightColor:{},highlightOpacity:{min:0,max:1},shadowColor:{},shadowOpacity:{min:0,max:1}}},colorOverlay:{props:{enabled:{},color:{},opacity:{min:0,max:1},blendMode:{}}},dropShadowAngleHandleId:{},dropShadowDistanceHandleId:{},dropShadowSpreadHandleId:{},dropShadowSizeHandleId:{},dropShadowOpacityHandleId:{},innerShadowAngleHandleId:{},innerShadowDistanceHandleId:{},innerShadowChokeHandleId:{},innerShadowSizeHandleId:{},innerShadowOpacityHandleId:{},outerGlowSizeHandleId:{},outerGlowSpreadHandleId:{},outerGlowOpacityHandleId:{},innerGlowSizeHandleId:{},innerGlowSpreadHandleId:{},innerGlowOpacityHandleId:{},strokeSizeHandleId:{},strokeOpacityHandleId:{},bevelEmbossDepthHandleId:{},bevelEmbossSizeHandleId:{},bevelEmbossSoftenHandleId:{},bevelEmbossAngleHandleId:{},bevelEmbossAltitudeHandleId:{},bevelEmbossHighlightOpacityHandleId:{},bevelEmbossShadowOpacityHandleId:{},colorOverlayOpacityHandleId:{}},Liquify:{operations:{}},MaskMath:{operation:{enum:["Union","Intersect","Subtract","Difference","Invert","Dilate","Erode","Choke","Feather"]},radius:{min:0,max:200},threshold:{min:0,max:1},clampMin:{min:0,max:1},clampMax:{min:0,max:1},channelA:{enum:["Alpha","Luminance","Red","Green","Blue"]},channelB:{enum:["Alpha","Luminance","Red","Green","Blue"]},binarize:{},invertResult:{},outputFormat:{enum:["WhiteWithAlpha","GrayscaleRGB","AlphaOnly","PassthroughRGB"]}},MeshWarp:{cols:{min:2,max:12},rows:{min:2,max:12},points:{}},NoiseGenerator:{noiseType:{enum:["Perlin","Simplex","Voronoi"]},outputType:{enum:["Image","Video"]},width:{min:16,max:4096},height:{min:16,max:4096},scale:{min:.1,max:100},octaves:{min:1,max:8},persistence:{min:0,max:1},lacunarity:{min:1,max:4},speed:{min:0,max:10},colorStart:{},colorEnd:{},durationMs:{min:1,max:6e4},fps:{min:1,max:120}},Paint:{width:{min:1,max:16384},height:{min:1,max:16384},maintainAspect:{},aspectRatio:{},backgroundColor:{},strokes:{}},PatchHeal:{patches:{},centerX:{min:0,max:1},centerY:{min:0,max:1},offsetX:{min:-4096,max:4096},offsetY:{min:-4096,max:4096},radius:{min:1,max:500},sourceRadius:{min:1,max:500},feather:{min:0,max:100},opacity:{min:0,max:1},mode:{enum:["Clone","SeamlessHeal","TextureTransfer"]}},ProceduralVFX:{effectType:{enum:["Smoke","Fire","Rain","Sparks","Snow","Dust","Lightning","Magic","LensFlare","Embers","EnergyBeam"]},outputType:{enum:["Image","Video"]},width:{min:16,max:4096},height:{min:16,max:4096},density:{min:0,max:1},scale:{min:.001,max:10},speed:{min:0,max:10},intensity:{min:0,max:1},seed:{min:0,max:1e6},colorStart:{},colorEnd:{},durationMs:{min:100,max:1e5},fps:{min:1,max:120}},RefineEdge:{decontaminateAmount:{min:0,max:1},radius:{min:.5,max:50},smooth:{min:0,max:100},feather:{min:0,max:50},shiftEdge:{min:-100,max:100},matteChannel:{enum:["Alpha","Luminance","Red","Green","Blue"]},outputMode:{enum:["Composite","MatteOnly","DecontaminatedRGB"]}},RefractionCaustics3D:{ior:{min:1,max:2.5},dispersion:{min:0,max:.2},refractionScale:{min:0,max:2},causticBrightness:{min:0,max:2},causticScale:{min:.1,max:5},fluidRipples:{min:0,max:1},rippleSpeed:{min:0,max:5},roughness:{min:0,max:1},specularIntensity:{min:0,max:2},lightPosX:{min:0,max:1},lightPosY:{min:0,max:1},tintColor:{},tintStrength:{min:0,max:1},depthInvert:{},depthScale:{min:.1,max:5}},ResizerScaler:{aspectRatioPreset:{enum:["9:16","16:9","1:1","4:5","21:9","custom"]},resolutionPreset:{enum:["4k","1080p","720p","480p","custom"]},targetWidth:{min:1,max:8192},targetHeight:{min:1,max:8192},fitMode:{enum:["cover","contain","stretch","manual"]},zoom:{min:1,max:1e3},offsetX:{min:-8192,max:8192},offsetY:{min:-8192,max:8192},backgroundMode:{enum:["solid","blurred","gradient","transparent"]},backgroundColor:{},backgroundColor2:{},blurRadius:{min:0,max:100},backgroundBrightness:{min:0,max:1},anchorX:{enum:["left","center","right"]},anchorY:{enum:["top","center","bottom"]}},Rotate:{angle:{},fit:{enum:["cover","contain","fill"]},scale:{min:.01,max:20}},StereoPanning:{pan:{min:-1,max:1}},Vignette:{strength:{min:0,max:100},radius:{min:.1,max:2},softness:{min:0,max:1},roundness:{min:0,max:1},centerX:{min:0,max:1},centerY:{min:0,max:1}}};var Ae={threshold:-24,ratio:4,attack:.003,release:.25,knee:6,makeupGain:0},b=class extends t{op="AudioCompressor";constructor(e={}){super(o("AudioCompressor",Ae,e,a.AudioCompressor))}},ke={delayTime:.25,feedback:.4,wet:.3,dry:1,pingPong:!1},f=class extends t{op="AudioDelay";constructor(e={}){super(o("AudioDelay",ke,e,a.AudioDelay))}},De={fadeInDuration:0,fadeOutDuration:0,fadeInCurve:"linear",fadeOutCurve:"linear"},h=class extends t{op="AudioFade";constructor(e={}){super(o("AudioFade",De,e,a.AudioFade))}},Be={threshold:-40,attack:.005,hold:.05,release:.1,range:-80},P=class extends t{op="AudioNoiseGate";constructor(e={}){super(o("AudioNoiseGate",Be,e,a.AudioNoiseGate))}},Ie={type:"peak",frequency:1e3,gain:0,q:1},y=class extends t{op="AudioParametricEq";constructor(e={}){super(o("AudioParametricEq",Ie,e,a.AudioParametricEq))}},Te={roomSize:.5,damping:.5,wet:.3,dry:1,width:1},g=class extends t{op="AudioReverb";constructor(e={}){super(o("AudioReverb",Te,e,a.AudioReverb))}},He={blurType:"Gaussian",strength:5,angle:0,sigmaColor:.1,centerX:.5,centerY:.5,partialBlur:!1,radius:.3,radiusY:0,shape:"circle"},N=class extends t{op="Blur";constructor(e={}){super(o("Blur",He,e,a.Blur))}},Le={motionPreset:"DollyZoom",panX:0,panY:0,dollyZ:0,fov:50,parallaxAmount:.6,dofAperture:.3,focusPlane:.4,edgeDilation:.5,depthInvert:!1},x=class extends t{op="CameraParallax3D";constructor(e={}){super(o("CameraParallax3D",Le,e,a.CameraParallax3D))}},Ge={colorSpace:"RGBA",defaultChannel4:1},S=class extends t{op="ChannelMerger";constructor(e={}){super(o("ChannelMerger",Ge,e,a.ChannelMerger))}},Oe={colorSpace:"RGBA"},C=class extends t{op="ChannelSplitter";constructor(e={}){super(o("ChannelSplitter",Oe,e,a.ChannelSplitter))}},ze={shadows:{cyanRed:0,magentaGreen:0,yellowBlue:0},midtones:{cyanRed:0,magentaGreen:0,yellowBlue:0},highlights:{cyanRed:0,magentaGreen:0,yellowBlue:0},preserveLuminosity:!0},E=class extends t{op="ColorBalance";constructor(e={}){super(o("ColorBalance",ze,e,a.ColorBalance))}},Fe={keyColor:"#00ff00",similarity:.4,smoothness:.1,spillSuppression:.2,colorSpace:"YUV",spillSuppressionType:"Desaturate"},w=class extends t{op="ColorKey";constructor(e={}){super(o("ColorKey",Fe,e,a.ColorKey))}},Ve={},v=class extends t{op="CornerPin";constructor(e={}){super(o("CornerPin",Ve,e,a.CornerPin))}},Ye={strengthX:50,strengthY:50,xChannel:"Red",yChannel:"Green",wrapMode:"Clamp"},M=class extends t{op="DisplacementMap";constructor(e={}){super(o("DisplacementMap",Ye,e,a.DisplacementMap))}},Xe={strategy:"deterministic",samplePoints:150},R=class extends t{op="ExtractLUT";constructor(e={}){super(o("ExtractLUT",Xe,e,a.ExtractLUT))}},qe={horizontal:!0,vertical:!1,diagonal:!1,mode:"horizontal",symmetry:"none"},A=class extends t{op="Flip";constructor(e={}){super(o("Flip",qe,e,a.Flip))}},We={keyframes:[],motionBlurSize:1.5,movementStyle:"spline",aspectRatio:"input"},k=class extends t{op="KenBurns";constructor(e={}){super(o("KenBurns",We,e,a.KenBurns))}},Ne={dropShadow:{enabled:!1,color:"#000000",opacity:.75,angle:120,distance:10,spread:0,size:10,blendMode:"multiply"},innerShadow:{enabled:!1,color:"#000000",opacity:.75,angle:120,distance:5,choke:0,size:5,blendMode:"multiply"},outerGlow:{enabled:!1,color:"#ffffff",opacity:.75,size:15,spread:0,blendMode:"screen"},innerGlow:{enabled:!1,color:"#ffffff",opacity:.75,size:15,spread:0,blendMode:"screen"},stroke:{enabled:!1,size:2,position:"outside",color:"#ffffff",opacity:1,blendMode:"normal"},bevelEmboss:{enabled:!1,style:"InnerBevel",technique:"Smooth",depth:100,direction:"Up",size:5,soften:0,angle:120,altitude:30,highlightColor:"#ffffff",highlightOpacity:.75,shadowColor:"#000000",shadowOpacity:.75},colorOverlay:{enabled:!1,color:"#ff0000",opacity:1,blendMode:"normal"}},D=class extends t{op="LayerStyle";constructor(e={}){super(o("LayerStyle",Ne,e,a.LayerStyle))}},je={operations:[]},B=class extends t{op="Liquify";constructor(e={}){super(o("Liquify",je,e,a.Liquify))}},Ke={operation:"Union",radius:0,threshold:.5,clampMin:0,clampMax:1,channelA:"Alpha",channelB:"Alpha",binarize:!1,invertResult:!1,outputFormat:"WhiteWithAlpha"},I=class extends t{op="MaskMath";constructor(e={}){super(o("MaskMath",Ke,e,a.MaskMath))}},Ue={cols:3,rows:3},T=class extends t{op="MeshWarp";constructor(e={}){super(o("MeshWarp",Ue,e,a.MeshWarp))}},$e={noiseType:"Perlin",outputType:"Image",width:512,height:512,scale:10,octaves:4,persistence:.5,lacunarity:2,speed:1,colorStart:"#000000",colorEnd:"#ffffff",durationMs:5e3,fps:30},H=class extends t{op="NoiseGenerator";constructor(e={}){super(o("NoiseGenerator",$e,e,a.NoiseGenerator))}},Ze={width:1080,height:1080,maintainAspect:!0,backgroundColor:"#ffffff"},L=class extends t{op="Paint";constructor(e={}){super(o("Paint",Ze,e,a.Paint))}},_e={centerX:.5,centerY:.5,offsetX:50,offsetY:0,radius:25,sourceRadius:25,feather:50,opacity:1,mode:"SeamlessHeal"},G=class extends t{op="PatchHeal";constructor(e={}){super(o("PatchHeal",_e,e,a.PatchHeal))}},Je={effectType:"Smoke",outputType:"Video",width:1080,height:1080,density:.6,scale:.01,speed:1,intensity:.8,seed:1234,colorStart:"#ffffff",colorEnd:"#ff5500",durationMs:5e3,fps:30},O=class extends t{op="ProceduralVFX";constructor(e={}){super(o("ProceduralVFX",Je,e,a.ProceduralVFX))}},Qe={decontaminateAmount:.7,radius:2,smooth:5,feather:.5,shiftEdge:0,matteChannel:"Alpha",outputMode:"Composite"},z=class extends t{op="RefineEdge";constructor(e={}){super(o("RefineEdge",Qe,e,a.RefineEdge))}},er={ior:1.52,dispersion:.04,refractionScale:.5,causticBrightness:.6,causticScale:1,fluidRipples:0,rippleSpeed:1,roughness:0,specularIntensity:.8,lightPosX:.5,lightPosY:.2,tintColor:"#ffffff",tintStrength:0,depthInvert:!1,depthScale:1},F=class extends t{op="RefractionCaustics3D";constructor(e={}){super(o("RefractionCaustics3D",er,e,a.RefractionCaustics3D))}},rr={aspectRatioPreset:"16:9",resolutionPreset:"1080p",targetWidth:1920,targetHeight:1080,fitMode:"contain",zoom:100,offsetX:0,offsetY:0,backgroundMode:"solid",backgroundColor:"#000000FF",backgroundColor2:"#000000FF",blurRadius:40,backgroundBrightness:.6,anchorX:"center",anchorY:"center"},V=class extends t{op="ResizerScaler";constructor(e={}){super(o("ResizerScaler",rr,e,a.ResizerScaler))}},tr={angle:90,fit:"cover",scale:1},Y=class extends t{op="Rotate";constructor(e={}){super(o("Rotate",tr,e,a.Rotate))}},nr={pan:0},X=class extends t{op="StereoPanning";constructor(e={}){super(o("StereoPanning",nr,e,a.StereoPanning))}},ar={strength:50,radius:1,softness:.5,roundness:.5,centerX:.5,centerY:.5},q=class extends t{op="Vignette";constructor(e={}){super(o("Vignette",ar,e,a.Vignette))}};function or(r){return{partialBlur:!0,centerX:r.center.x,centerY:r.center.y,radius:r.bounds.width.multiply(.55),radiusY:r.bounds.height.multiply(.55),shape:"ellipse",strength:r.active.multiply(25)}}var W=class extends N{constructor(e={}){let{track:n,...l}=e;super(n?{...or(n),...lr(l)}:l)}};function lr(r){return Object.fromEntries(Object.entries(r).filter(([,e])=>e!==void 0))}c();var ir={audioCompressor:r=>new b(r),audioDelay:r=>new f(r),audioFade:r=>new h(r),audioNoiseGate:r=>new P(r),audioParametricEq:r=>new y(r),audioReverb:r=>new g(r),blur:r=>new W(r),cameraParallax3D:r=>new x(r),channelMerger:r=>new S(r),channelSplitter:r=>new C(r),colorBalance:r=>new E(r),colorKey:r=>new w(r),cornerPin:r=>new v(r),displacementMap:r=>new M(r),extractLUT:r=>new R(r),flip:r=>new A(r),kenBurns:r=>new k(r),layerStyle:r=>new D(r),liquify:r=>new B(r),maskMath:r=>new I(r),meshWarp:r=>new T(r),noiseGenerator:r=>new H(r),paint:r=>new L(r),patchHeal:r=>new G(r),proceduralVFX:r=>new O(r),refineEdge:r=>new z(r),refractionCaustics3D:r=>new F(r),resizerScaler:r=>new V(r),rotate:r=>new Y(r),stereoPanning:r=>new X(r),vignette:r=>new q(r)};var ee=class extends t{op="Levels";constructor(e={}){let n={inBlack:0,inWhite:1,outBlack:0,outWhite:1};super({master:e.master??{...n},red:e.red??{...n},green:e.green??{...n},blue:e.blue??{...n},...e})}},re=class extends t{op="FilmGrain";constructor(e={}){super({strength:e.strength??15,size:e.size??1.5,monochrome:e.monochrome??!0,animated:e.animated??!0,speed:e.speed??50,shadows:e.shadows??.2,midtones:e.midtones??1,highlights:e.highlights??.2,...e})}},te=class extends t{op;constructor(e,n={}){super(n),this.op=e}},ne=class extends t{op="AudioSignalExtractor";constructor(e={}){super({extractionMode:e.extractionMode??"rms_envelope",attackMs:e.attackMs??10,releaseMs:e.releaseMs??120,sensitivity:e.sensitivity??1,noiseFloorDb:e.noiseFloorDb??-48,dynamicRangeDb:e.dynamicRangeDb??48,autoRange:e.autoRange??!0,smoothing:e.smoothing??.15,curve:e.curve??"linear",beatThreshold:e.beatThreshold??.08,beatDecayMs:e.beatDecayMs??80,previewMode:e.previewMode??"envelope",nodeId:e.nodeId??"audio_extractor",...e})}async extract(e,n={}){return $.extract(e,{extractionMode:this.extractionMode,attackMs:this.attackMs,releaseMs:this.releaseMs,sensitivity:this.sensitivity,noiseFloorDb:this.noiseFloorDb,dynamicRangeDb:this.dynamicRangeDb,smoothing:this.smoothing,curve:this.curve,beatThreshold:this.beatThreshold,beatDecayMs:this.beatDecayMs,previewMode:this.previewMode,...n})}},ae=class extends t{op="Curves";constructor(e={}){super({...e,curveType:e.curveType??"rgb",master:e.master??[{x:0,y:0},{x:1,y:1}],red:e.red??[{x:0,y:0},{x:1,y:1}],green:e.green??[{x:0,y:0},{x:1,y:1}],blue:e.blue??[{x:0,y:0},{x:1,y:1}],hueVsHue:e.hueVsHue??[{x:0,y:.5},{x:1,y:.5}],hueVsSat:e.hueVsSat??[{x:0,y:1},{x:1,y:1}],lumVsSat:e.lumVsSat??[{x:0,y:1},{x:1,y:1}],satVsSat:e.satVsSat??[{x:0,y:1},{x:1,y:1}]})}},oe=class extends t{op="SelectiveColor";constructor(e={}){let n={cyan:0,magenta:0,yellow:0,black:0};super({...e,method:e.method??"Relative",reds:{...n,...e.reds},yellows:{...n,...e.yellows},greens:{...n,...e.greens},cyans:{...n,...e.cyans},blues:{...n,...e.blues},magentas:{...n,...e.magentas},whites:{...n,...e.whites},neutrals:{...n,...e.neutrals},blacks:{...n,...e.blacks}})}},le=class extends t{op="GradientMap";constructor(e={}){let n=[{position:0,color:"#000000"},{position:1,color:"#ffffff"}];super({...e,stops:e.stops??n,smooth:e.smooth??!0,dither:e.dither??!0,opacity:e.opacity??1})}},ie=class extends t{op="ShadowsHighlights";constructor(e={}){super({...e,shadowAmount:e.shadowAmount??0,shadowTonalWidth:e.shadowTonalWidth??50,shadowRadius:e.shadowRadius??30,highlightAmount:e.highlightAmount??0,highlightTonalWidth:e.highlightTonalWidth??50,highlightRadius:e.highlightRadius??30,colorCorrection:e.colorCorrection??0,midtoneContrast:e.midtoneContrast??0})}},se=class extends t{op="ApplyLUT";constructor(e={}){super({...e,lutUrl:e.lutUrl??"",intensity:e.intensity??1})}},ue=class extends t{op="UnsharpMask";constructor(e={}){super({...e,amount:e.amount??100,radius:e.radius??1.5,threshold:e.threshold??3})}},ce=class extends t{op="HighPass";constructor(e={}){super({...e,radius:e.radius??3,contrastBoost:e.contrastBoost??1,monochrome:e.monochrome??!0})}},pe=class extends t{op="HalftoneScreen";constructor(e={}){super({...e,mode:e.mode??"Monochrome",dotShape:e.dotShape??"Circle",frequency:e.frequency??30,angle:e.angle??45,contrast:e.contrast??1,dotColor:e.dotColor??"#000000",paperColor:e.paperColor??"#ffffff",smooth:e.smooth??!0,invert:e.invert??!1,cyanAngle:e.cyanAngle??15,magentaAngle:e.magentaAngle??75,yellowAngle:e.yellowAngle??0,blackAngle:e.blackAngle??45,opacity:e.opacity??1})}},de=class extends t{op="TileOffset";constructor(e={}){super({...e,offsetX:e.offsetX??0,offsetY:e.offsetY??0,wrap:e.wrap??!0,edgeMode:e.edgeMode??"wrap"})}},me=class extends t{op="MotionBlur";constructor(e={}){super({...e,shutterAngle:e.shutterAngle??180,samples:e.samples??16,maxVelocity:e.maxVelocity??64,shutterCurve:e.shutterCurve??"gaussian",depthAware:e.depthAware??!0})}},be=class extends t{op="SSAO";constructor(e={}){super({...e,radius:e.radius??45,bias:e.bias??.025,intensity:e.intensity??1.5,kernelSamples:e.kernelSamples??16,blurRadius:e.blurRadius??4})}},fe=class extends t{op="PBRGlass";constructor(e={}){super({...e,ior:e.ior??1.49,roughness:e.roughness??.15,transmission:e.transmission??.92,dispersion:e.dispersion??.015,fresnelPower:e.fresnelPower??5,tintColor:e.tintColor??"#ffffff"})}},he=class extends t{op="DepthOfField";constructor(e={}){super({...e,focusDistance:e.focusDistance??500,focalLength:e.focalLength??50,aperture:e.aperture??2.8,maxBlur:e.maxBlur??16,quality:e.quality??"high"})}},Pe=class extends t{op="Crop";constructor(e={}){super({cropType:e.cropType??"rect",leftPercentage:e.leftPercentage??0,topPercentage:e.topPercentage??0,widthPercentage:e.widthPercentage??100,heightPercentage:e.heightPercentage??100,roundness:e.roundness??0,...e})}},ye=class extends t{op="Vision";constructor(e={}){super({enableDetection:e.enableDetection!==!1,enableSegmentation:e.enableSegmentation===!0,enablePose:e.enablePose===!0,enableMatte:e.enableMatte===!0,confidence:e.confidence??.3,variant:e.variant??"s",mode:e.mode??"passthrough",matteSource:e.matteSource??"instance",...e})}},ge=class extends t{op="Relight3D";constructor(e={}){super({lightType:e.lightType??"Point",intensity:e.intensity??1,lightPosX:e.lightPosX??.5,lightPosY:e.lightPosY??.5,lightPosZ:e.lightPosZ??.3,lightRadius:e.lightRadius??.8,spotConeAngle:e.spotConeAngle??45,specularRoughness:e.specularRoughness??.35,specularStrength:e.specularStrength??.7,metallic:e.metallic??0,ambientIntensity:e.ambientIntensity??.4,volumetricDensity:e.volumetricDensity??.2,depthScale:e.depthScale??1,depthInvert:e.depthInvert??!1,lightColor:e.lightColor??"#ffffff",ambientColor:e.ambientColor??"#ffffff",normalMap:e.normalMap,...e})}},xe=class extends t{op="TemporalDeflicker";constructor(e={}){super({blendWeight:e.blendWeight??.35,disocclusionThreshold:e.disocclusionThreshold??.15,maxMotionPixels:e.maxMotionPixels??64,scale:e.scale??.5,windowSize:e.windowSize??2,...e})}},Se=class extends t{op="Modulate";constructor(e={}){super({hue:e.hue??0,brightness:e.brightness??1,contrast:e.contrast??1,exposure:e.exposure??0,saturation:e.saturation??1,sepia:e.sepia??0,...e})}};export{a,b,f as c,h as d,P as e,y as f,g,x as h,S as i,C as j,E as k,w as l,v as m,M as n,R as o,A as p,k as q,D as r,B as s,I as t,T as u,H as v,L as w,G as x,O as y,z,F as A,V as B,Y as C,X as D,q as E,W as F,ir as G,ee as H,re as I,te as J,ne as K,ae as L,oe as M,le as N,ie as O,se as P,ue as Q,ce as R,pe as S,de as T,me as U,be as V,fe as W,he as X,Pe as Y,ye as Z,ge as _,xe as $,Se as aa};
|
|
1
|
+
import{a as t}from"./chunk-HCZCEOV5.mjs";import{a as $}from"./chunk-FJH5A2PV.mjs";import{h as j}from"./chunk-63SFBHEH.mjs";import{d,e as c}from"./chunk-BVF64D6H.mjs";c();c();c();c();c();c();function _(r){return typeof d<"u"?d.env?.[r]:void 0}function J(){let r=_("FRAMEFIELDS_STRICT_PROPS");return r==="1"||r==="true"}function Ee(){return J()||_("NODE_ENV")!=="production"}var Z=new Set;function K(r){if(J())throw new Error(r);Z.has(r)||(Z.add(r),console.warn(`[framefields] ${r}`))}function U(r){if(typeof r!="object"||r===null||Array.isArray(r)||j(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}function we(r,e){let n=Array.from({length:e.length+1},(l,i)=>i);for(let l=1;l<=r.length;l++){let i=n[0];n[0]=l;for(let s=1;s<=e.length;s++){let u=n[s];n[s]=Math.min(n[s]+1,n[s-1]+1,i+(r[l-1]===e[s-1]?0:1)),i=u}}return n[e.length]}function ve(r,e){let n,l=Number.POSITIVE_INFINITY,i=r.toLowerCase();for(let u of e){let p=u.toLowerCase(),m=p.includes(i)||i.includes(p)?1:we(i,p);m<l&&(l=m,n=u)}return n&&l<=Math.max(2,Math.ceil(r.length/2))?` Did you mean "${n}"?`:` Known props: ${e.join(", ")}.`}function Me(r,e,n){if(typeof e=="number"){let{min:l,max:i}=n,s=l!==void 0&&e<l,u=i!==void 0&&e>i;if(s||u||Number.isNaN(e)){let p=l!==void 0&&i!==void 0?`${l} to ${i}`:l!==void 0?`\u2265 ${l}`:`\u2264 ${i}`;K(Number.isNaN(e)?`${r} is NaN`:`${r} = ${e} is outside ${p}`)}return}n.enum&&(typeof e=="string"||typeof e=="boolean")&&!n.enum.includes(e)&&K(`${r} = ${JSON.stringify(e)} is not one of ${n.enum.map(l=>JSON.stringify(l)).join(", ")}`)}function Q(r,e,n){let l=Object.keys(n);for(let[i,s]of Object.entries(e)){if(s===void 0)continue;let u=n[i];if(!u){K(`${r}: unknown prop "${i}".${ve(i,l)}`);continue}j(s)||typeof s=="function"||(u.props&&U(s)?Q(`${r}.${i}`,s,u.props):Me(`${r}.${i}`,s,u))}}function Re(r){return typeof r=="object"&&r!==null?structuredClone(r):r}function o(r,e,n,l){let i=n;Ee()&&Q(r,i,l);let s={};for(let[u,p]of Object.entries(e))s[u]=Re(p);for(let[u,p]of Object.entries(i)){if(p===void 0)continue;let m=s[u];s[u]=U(m)&&U(p)?{...m,...Object.fromEntries(Object.entries(p).filter(([,Ce])=>Ce!==void 0))}:p}return s}c();var a={AudioCompressor:{threshold:{min:-60,max:0},ratio:{min:1,max:100},attack:{min:1e-4,max:1},release:{min:.01,max:5},knee:{min:0,max:24},makeupGain:{min:0,max:24}},AudioDelay:{delayTime:{min:.001,max:5},feedback:{min:0,max:.95},wet:{min:0,max:1},dry:{min:0,max:1},pingPong:{}},AudioFade:{fadeInDuration:{min:0,max:60},fadeOutDuration:{min:0,max:60},fadeInCurve:{enum:["linear","exponential","scurve"]},fadeOutCurve:{enum:["linear","exponential","scurve"]}},AudioNoiseGate:{threshold:{min:-120,max:0},attack:{min:1e-4,max:1},hold:{min:.001,max:5},release:{min:.01,max:5},range:{min:-120,max:0}},AudioParametricEq:{type:{enum:["lowShelf","highShelf","peak","lowPass","highPass","notch"]},frequency:{min:20,max:2e4},gain:{min:-24,max:24},q:{min:.01,max:10}},AudioReverb:{roomSize:{min:0,max:.98},damping:{min:0,max:1},wet:{min:0,max:1},dry:{min:0,max:1},width:{min:0,max:1}},Blur:{blurType:{enum:["Gaussian","Box","Median","Motion","Bilateral","Edge-preserving","Radial","Zoom"]},strength:{min:0,max:100},angle:{min:0,max:360},sigmaColor:{min:.01,max:1},centerX:{min:0,max:1},centerY:{min:0,max:1},partialBlur:{},radius:{min:.01,max:1},radiusY:{min:0,max:1},shape:{enum:["ellipse","circle","rect"]}},CameraParallax3D:{motionPreset:{enum:["Custom","DollyZoom","Orbit","FlyThrough","HandheldShake","RackFocus"]},panX:{min:-1,max:1},panY:{min:-1,max:1},dollyZ:{min:-1,max:1},fov:{min:15,max:120},parallaxAmount:{min:0,max:2},dofAperture:{min:0,max:1},focusPlane:{min:0,max:1},edgeDilation:{min:0,max:1},depthInvert:{}},ChannelMerger:{colorSpace:{enum:["RGBA","HSLA","CMYK","LAB"]},defaultChannel4:{min:0,max:1}},ChannelSplitter:{colorSpace:{enum:["RGBA","HSLA","CMYK","LAB"]}},ColorBalance:{shadows:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},midtones:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},highlights:{props:{cyanRed:{min:-100,max:100},magentaGreen:{min:-100,max:100},yellowBlue:{min:-100,max:100}}},preserveLuminosity:{}},ColorKey:{keyColor:{},similarity:{min:0,max:1},smoothness:{min:0,max:1},spillSuppression:{min:0,max:1},colorSpace:{enum:["YUV","RGB"]},spillSuppressionType:{enum:["Desaturate","Neutralize","None"]}},CornerPin:{points:{}},DisplacementMap:{strengthX:{min:0,max:500},strengthY:{min:0,max:500},xChannel:{enum:["Red","Green","Blue","Alpha","Luminance"]},yChannel:{enum:["Red","Green","Blue","Alpha","Luminance"]},wrapMode:{enum:["Clamp","Repeat","Mirror"]}},ExtractLUT:{strategy:{enum:["deterministic","statistical"]},samplePoints:{min:10,max:500}},Flip:{horizontal:{},vertical:{},diagonal:{},mode:{enum:["horizontal","vertical","both","diagonal","antiDiagonal","custom"]},symmetry:{enum:["none","leftToRight","rightToLeft","topToBottom","bottomToTop","quadrant"]}},KenBurns:{keyframes:{},motionBlurSize:{min:0,max:10},movementStyle:{enum:["spline","direct"]},aspectRatio:{enum:["input","16:9","9:16","21:9","9:21","1:1","4:3","3:2","2:3","4:5","5:4"]}},LayerStyle:{dropShadow:{props:{enabled:{},color:{},opacity:{min:0,max:1},angle:{min:0,max:360},distance:{min:0,max:500},spread:{min:0,max:100},size:{min:0,max:250},blendMode:{}}},innerShadow:{props:{enabled:{},color:{},opacity:{min:0,max:1},angle:{min:0,max:360},distance:{min:0,max:500},choke:{min:0,max:100},size:{min:0,max:250},blendMode:{}}},outerGlow:{props:{enabled:{},color:{},opacity:{min:0,max:1},size:{min:0,max:250},spread:{min:0,max:100},blendMode:{}}},innerGlow:{props:{enabled:{},color:{},opacity:{min:0,max:1},size:{min:0,max:250},spread:{min:0,max:100},blendMode:{}}},stroke:{props:{enabled:{},size:{min:0,max:100},position:{enum:["inside","center","outside"]},color:{},opacity:{min:0,max:1},blendMode:{}}},bevelEmboss:{props:{enabled:{},style:{enum:["InnerBevel","OuterBevel","Emboss","PillowEmboss"]},technique:{enum:["Smooth","ChiselHard","ChiselSoft"]},depth:{min:1,max:1e3},direction:{enum:["Up","Down"]},size:{min:0,max:250},soften:{min:0,max:50},angle:{min:0,max:360},altitude:{min:0,max:90},highlightColor:{},highlightOpacity:{min:0,max:1},shadowColor:{},shadowOpacity:{min:0,max:1}}},colorOverlay:{props:{enabled:{},color:{},opacity:{min:0,max:1},blendMode:{}}},dropShadowAngleHandleId:{},dropShadowDistanceHandleId:{},dropShadowSpreadHandleId:{},dropShadowSizeHandleId:{},dropShadowOpacityHandleId:{},innerShadowAngleHandleId:{},innerShadowDistanceHandleId:{},innerShadowChokeHandleId:{},innerShadowSizeHandleId:{},innerShadowOpacityHandleId:{},outerGlowSizeHandleId:{},outerGlowSpreadHandleId:{},outerGlowOpacityHandleId:{},innerGlowSizeHandleId:{},innerGlowSpreadHandleId:{},innerGlowOpacityHandleId:{},strokeSizeHandleId:{},strokeOpacityHandleId:{},bevelEmbossDepthHandleId:{},bevelEmbossSizeHandleId:{},bevelEmbossSoftenHandleId:{},bevelEmbossAngleHandleId:{},bevelEmbossAltitudeHandleId:{},bevelEmbossHighlightOpacityHandleId:{},bevelEmbossShadowOpacityHandleId:{},colorOverlayOpacityHandleId:{}},Liquify:{operations:{}},MaskMath:{operation:{enum:["Union","Intersect","Subtract","Difference","Invert","Dilate","Erode","Choke","Feather"]},radius:{min:0,max:200},threshold:{min:0,max:1},clampMin:{min:0,max:1},clampMax:{min:0,max:1},channelA:{enum:["Alpha","Luminance","Red","Green","Blue"]},channelB:{enum:["Alpha","Luminance","Red","Green","Blue"]},binarize:{},invertResult:{},outputFormat:{enum:["WhiteWithAlpha","GrayscaleRGB","AlphaOnly","PassthroughRGB"]}},MeshWarp:{cols:{min:2,max:12},rows:{min:2,max:12},points:{}},NoiseGenerator:{noiseType:{enum:["Perlin","Simplex","Voronoi"]},outputType:{enum:["Image","Video"]},width:{min:16,max:4096},height:{min:16,max:4096},scale:{min:.1,max:100},octaves:{min:1,max:8},persistence:{min:0,max:1},lacunarity:{min:1,max:4},speed:{min:0,max:10},colorStart:{},colorEnd:{},durationMs:{min:1,max:6e4},fps:{min:1,max:120}},Paint:{width:{min:1,max:16384},height:{min:1,max:16384},maintainAspect:{},aspectRatio:{},backgroundColor:{},strokes:{}},PatchHeal:{patches:{},centerX:{min:0,max:1},centerY:{min:0,max:1},offsetX:{min:-4096,max:4096},offsetY:{min:-4096,max:4096},radius:{min:1,max:500},sourceRadius:{min:1,max:500},feather:{min:0,max:100},opacity:{min:0,max:1},mode:{enum:["Clone","SeamlessHeal","TextureTransfer"]}},ProceduralVFX:{effectType:{enum:["Smoke","Fire","Rain","Sparks","Snow","Dust","Lightning","Magic","LensFlare","Embers","EnergyBeam"]},outputType:{enum:["Image","Video"]},width:{min:16,max:4096},height:{min:16,max:4096},density:{min:0,max:1},scale:{min:.001,max:10},speed:{min:0,max:10},intensity:{min:0,max:1},seed:{min:0,max:1e6},colorStart:{},colorEnd:{},durationMs:{min:100,max:1e5},fps:{min:1,max:120}},RefineEdge:{decontaminateAmount:{min:0,max:1},radius:{min:.5,max:50},smooth:{min:0,max:100},feather:{min:0,max:50},shiftEdge:{min:-100,max:100},matteChannel:{enum:["Alpha","Luminance","Red","Green","Blue"]},outputMode:{enum:["Composite","MatteOnly","DecontaminatedRGB"]}},RefractionCaustics3D:{ior:{min:1,max:2.5},dispersion:{min:0,max:.2},refractionScale:{min:0,max:2},causticBrightness:{min:0,max:2},causticScale:{min:.1,max:5},fluidRipples:{min:0,max:1},rippleSpeed:{min:0,max:5},roughness:{min:0,max:1},specularIntensity:{min:0,max:2},lightPosX:{min:0,max:1},lightPosY:{min:0,max:1},tintColor:{},tintStrength:{min:0,max:1},depthInvert:{},depthScale:{min:.1,max:5}},ResizerScaler:{aspectRatioPreset:{enum:["9:16","16:9","1:1","4:5","21:9","custom"]},resolutionPreset:{enum:["4k","1080p","720p","480p","custom"]},targetWidth:{min:1,max:8192},targetHeight:{min:1,max:8192},fitMode:{enum:["cover","contain","stretch","manual"]},zoom:{min:1,max:1e3},offsetX:{min:-8192,max:8192},offsetY:{min:-8192,max:8192},backgroundMode:{enum:["solid","blurred","gradient","transparent"]},backgroundColor:{},backgroundColor2:{},blurRadius:{min:0,max:100},backgroundBrightness:{min:0,max:1},anchorX:{enum:["left","center","right"]},anchorY:{enum:["top","center","bottom"]}},Rotate:{angle:{},fit:{enum:["cover","contain","fill"]},scale:{min:.01,max:20}},StereoPanning:{pan:{min:-1,max:1}},Vignette:{strength:{min:0,max:100},radius:{min:.1,max:2},softness:{min:0,max:1},roundness:{min:0,max:1},centerX:{min:0,max:1},centerY:{min:0,max:1}}};var Ae={threshold:-24,ratio:4,attack:.003,release:.25,knee:6,makeupGain:0},b=class extends t{op="AudioCompressor";constructor(e={}){super(o("AudioCompressor",Ae,e,a.AudioCompressor))}},ke={delayTime:.25,feedback:.4,wet:.3,dry:1,pingPong:!1},f=class extends t{op="AudioDelay";constructor(e={}){super(o("AudioDelay",ke,e,a.AudioDelay))}},De={fadeInDuration:0,fadeOutDuration:0,fadeInCurve:"linear",fadeOutCurve:"linear"},h=class extends t{op="AudioFade";constructor(e={}){super(o("AudioFade",De,e,a.AudioFade))}},Be={threshold:-40,attack:.005,hold:.05,release:.1,range:-80},P=class extends t{op="AudioNoiseGate";constructor(e={}){super(o("AudioNoiseGate",Be,e,a.AudioNoiseGate))}},Ie={type:"peak",frequency:1e3,gain:0,q:1},y=class extends t{op="AudioParametricEq";constructor(e={}){super(o("AudioParametricEq",Ie,e,a.AudioParametricEq))}},Te={roomSize:.5,damping:.5,wet:.3,dry:1,width:1},g=class extends t{op="AudioReverb";constructor(e={}){super(o("AudioReverb",Te,e,a.AudioReverb))}},He={blurType:"Gaussian",strength:5,angle:0,sigmaColor:.1,centerX:.5,centerY:.5,partialBlur:!1,radius:.3,radiusY:0,shape:"circle"},N=class extends t{op="Blur";constructor(e={}){super(o("Blur",He,e,a.Blur))}},Le={motionPreset:"DollyZoom",panX:0,panY:0,dollyZ:0,fov:50,parallaxAmount:.6,dofAperture:.3,focusPlane:.4,edgeDilation:.5,depthInvert:!1},x=class extends t{op="CameraParallax3D";constructor(e={}){super(o("CameraParallax3D",Le,e,a.CameraParallax3D))}},Ge={colorSpace:"RGBA",defaultChannel4:1},S=class extends t{op="ChannelMerger";constructor(e={}){super(o("ChannelMerger",Ge,e,a.ChannelMerger))}},Oe={colorSpace:"RGBA"},C=class extends t{op="ChannelSplitter";constructor(e={}){super(o("ChannelSplitter",Oe,e,a.ChannelSplitter))}},ze={shadows:{cyanRed:0,magentaGreen:0,yellowBlue:0},midtones:{cyanRed:0,magentaGreen:0,yellowBlue:0},highlights:{cyanRed:0,magentaGreen:0,yellowBlue:0},preserveLuminosity:!0},E=class extends t{op="ColorBalance";constructor(e={}){super(o("ColorBalance",ze,e,a.ColorBalance))}},Fe={keyColor:"#00ff00",similarity:.4,smoothness:.1,spillSuppression:.2,colorSpace:"YUV",spillSuppressionType:"Desaturate"},w=class extends t{op="ColorKey";constructor(e={}){super(o("ColorKey",Fe,e,a.ColorKey))}},Ve={},v=class extends t{op="CornerPin";constructor(e={}){super(o("CornerPin",Ve,e,a.CornerPin))}},Ye={strengthX:50,strengthY:50,xChannel:"Red",yChannel:"Green",wrapMode:"Clamp"},M=class extends t{op="DisplacementMap";constructor(e={}){super(o("DisplacementMap",Ye,e,a.DisplacementMap))}},Xe={strategy:"deterministic",samplePoints:150},R=class extends t{op="ExtractLUT";constructor(e={}){super(o("ExtractLUT",Xe,e,a.ExtractLUT))}},qe={horizontal:!0,vertical:!1,diagonal:!1,mode:"horizontal",symmetry:"none"},A=class extends t{op="Flip";constructor(e={}){super(o("Flip",qe,e,a.Flip))}},We={keyframes:[],motionBlurSize:1.5,movementStyle:"spline",aspectRatio:"input"},k=class extends t{op="KenBurns";constructor(e={}){super(o("KenBurns",We,e,a.KenBurns))}},Ne={dropShadow:{enabled:!1,color:"#000000",opacity:.75,angle:120,distance:10,spread:0,size:10,blendMode:"multiply"},innerShadow:{enabled:!1,color:"#000000",opacity:.75,angle:120,distance:5,choke:0,size:5,blendMode:"multiply"},outerGlow:{enabled:!1,color:"#ffffff",opacity:.75,size:15,spread:0,blendMode:"screen"},innerGlow:{enabled:!1,color:"#ffffff",opacity:.75,size:15,spread:0,blendMode:"screen"},stroke:{enabled:!1,size:2,position:"outside",color:"#ffffff",opacity:1,blendMode:"normal"},bevelEmboss:{enabled:!1,style:"InnerBevel",technique:"Smooth",depth:100,direction:"Up",size:5,soften:0,angle:120,altitude:30,highlightColor:"#ffffff",highlightOpacity:.75,shadowColor:"#000000",shadowOpacity:.75},colorOverlay:{enabled:!1,color:"#ff0000",opacity:1,blendMode:"normal"}},D=class extends t{op="LayerStyle";constructor(e={}){super(o("LayerStyle",Ne,e,a.LayerStyle))}},je={operations:[]},B=class extends t{op="Liquify";constructor(e={}){super(o("Liquify",je,e,a.Liquify))}},Ke={operation:"Union",radius:0,threshold:.5,clampMin:0,clampMax:1,channelA:"Alpha",channelB:"Alpha",binarize:!1,invertResult:!1,outputFormat:"WhiteWithAlpha"},I=class extends t{op="MaskMath";constructor(e={}){super(o("MaskMath",Ke,e,a.MaskMath))}},Ue={cols:3,rows:3},T=class extends t{op="MeshWarp";constructor(e={}){super(o("MeshWarp",Ue,e,a.MeshWarp))}},$e={noiseType:"Perlin",outputType:"Image",width:512,height:512,scale:10,octaves:4,persistence:.5,lacunarity:2,speed:1,colorStart:"#000000",colorEnd:"#ffffff",durationMs:5e3,fps:30},H=class extends t{op="NoiseGenerator";constructor(e={}){super(o("NoiseGenerator",$e,e,a.NoiseGenerator))}},Ze={width:1080,height:1080,maintainAspect:!0,backgroundColor:"#ffffff"},L=class extends t{op="Paint";constructor(e={}){super(o("Paint",Ze,e,a.Paint))}},_e={centerX:.5,centerY:.5,offsetX:50,offsetY:0,radius:25,sourceRadius:25,feather:50,opacity:1,mode:"SeamlessHeal"},G=class extends t{op="PatchHeal";constructor(e={}){super(o("PatchHeal",_e,e,a.PatchHeal))}},Je={effectType:"Smoke",outputType:"Video",width:1080,height:1080,density:.6,scale:.01,speed:1,intensity:.8,seed:1234,colorStart:"#ffffff",colorEnd:"#ff5500",durationMs:5e3,fps:30},O=class extends t{op="ProceduralVFX";constructor(e={}){super(o("ProceduralVFX",Je,e,a.ProceduralVFX))}},Qe={decontaminateAmount:.7,radius:2,smooth:5,feather:.5,shiftEdge:0,matteChannel:"Alpha",outputMode:"Composite"},z=class extends t{op="RefineEdge";constructor(e={}){super(o("RefineEdge",Qe,e,a.RefineEdge))}},er={ior:1.52,dispersion:.04,refractionScale:.5,causticBrightness:.6,causticScale:1,fluidRipples:0,rippleSpeed:1,roughness:0,specularIntensity:.8,lightPosX:.5,lightPosY:.2,tintColor:"#ffffff",tintStrength:0,depthInvert:!1,depthScale:1},F=class extends t{op="RefractionCaustics3D";constructor(e={}){super(o("RefractionCaustics3D",er,e,a.RefractionCaustics3D))}},rr={aspectRatioPreset:"16:9",resolutionPreset:"1080p",targetWidth:1920,targetHeight:1080,fitMode:"contain",zoom:100,offsetX:0,offsetY:0,backgroundMode:"solid",backgroundColor:"#000000FF",backgroundColor2:"#000000FF",blurRadius:40,backgroundBrightness:.6,anchorX:"center",anchorY:"center"},V=class extends t{op="ResizerScaler";constructor(e={}){super(o("ResizerScaler",rr,e,a.ResizerScaler))}},tr={angle:90,fit:"cover",scale:1},Y=class extends t{op="Rotate";constructor(e={}){super(o("Rotate",tr,e,a.Rotate))}},nr={pan:0},X=class extends t{op="StereoPanning";constructor(e={}){super(o("StereoPanning",nr,e,a.StereoPanning))}},ar={strength:50,radius:1,softness:.5,roundness:.5,centerX:.5,centerY:.5},q=class extends t{op="Vignette";constructor(e={}){super(o("Vignette",ar,e,a.Vignette))}};function or(r){return{partialBlur:!0,centerX:r.center.x,centerY:r.center.y,radius:r.bounds.width.multiply(.55),radiusY:r.bounds.height.multiply(.55),shape:"ellipse",strength:r.active.multiply(25)}}var W=class extends N{constructor(e={}){let{track:n,...l}=e;super(n?{...or(n),...lr(l)}:l)}};function lr(r){return Object.fromEntries(Object.entries(r).filter(([,e])=>e!==void 0))}c();var ir={audioCompressor:r=>new b(r),audioDelay:r=>new f(r),audioFade:r=>new h(r),audioNoiseGate:r=>new P(r),audioParametricEq:r=>new y(r),audioReverb:r=>new g(r),blur:r=>new W(r),cameraParallax3D:r=>new x(r),channelMerger:r=>new S(r),channelSplitter:r=>new C(r),colorBalance:r=>new E(r),colorKey:r=>new w(r),cornerPin:r=>new v(r),displacementMap:r=>new M(r),extractLUT:r=>new R(r),flip:r=>new A(r),kenBurns:r=>new k(r),layerStyle:r=>new D(r),liquify:r=>new B(r),maskMath:r=>new I(r),meshWarp:r=>new T(r),noiseGenerator:r=>new H(r),paint:r=>new L(r),patchHeal:r=>new G(r),proceduralVFX:r=>new O(r),refineEdge:r=>new z(r),refractionCaustics3D:r=>new F(r),resizerScaler:r=>new V(r),rotate:r=>new Y(r),stereoPanning:r=>new X(r),vignette:r=>new q(r)};var ee=class extends t{op="Levels";constructor(e={}){let n={inBlack:0,inWhite:1,outBlack:0,outWhite:1};super({master:e.master??{...n},red:e.red??{...n},green:e.green??{...n},blue:e.blue??{...n},...e})}},re=class extends t{op="FilmGrain";constructor(e={}){super({strength:e.strength??15,size:e.size??1.5,monochrome:e.monochrome??!0,animated:e.animated??!0,speed:e.speed??50,shadows:e.shadows??.2,midtones:e.midtones??1,highlights:e.highlights??.2,...e})}},te=class extends t{op;constructor(e,n={}){super(n),this.op=e}},ne=class extends t{op="AudioSignalExtractor";constructor(e={}){super({extractionMode:e.extractionMode??"rms_envelope",attackMs:e.attackMs??10,releaseMs:e.releaseMs??120,sensitivity:e.sensitivity??1,noiseFloorDb:e.noiseFloorDb??-48,dynamicRangeDb:e.dynamicRangeDb??48,autoRange:e.autoRange??!0,smoothing:e.smoothing??.15,curve:e.curve??"linear",beatThreshold:e.beatThreshold??.08,beatDecayMs:e.beatDecayMs??80,previewMode:e.previewMode??"envelope",nodeId:e.nodeId??"audio_extractor",...e})}async extract(e,n={}){return $.extract(e,{extractionMode:this.extractionMode,attackMs:this.attackMs,releaseMs:this.releaseMs,sensitivity:this.sensitivity,noiseFloorDb:this.noiseFloorDb,dynamicRangeDb:this.dynamicRangeDb,smoothing:this.smoothing,curve:this.curve,beatThreshold:this.beatThreshold,beatDecayMs:this.beatDecayMs,previewMode:this.previewMode,...n})}},ae=class extends t{op="Curves";constructor(e={}){super({...e,curveType:e.curveType??"rgb",master:e.master??[{x:0,y:0},{x:1,y:1}],red:e.red??[{x:0,y:0},{x:1,y:1}],green:e.green??[{x:0,y:0},{x:1,y:1}],blue:e.blue??[{x:0,y:0},{x:1,y:1}],hueVsHue:e.hueVsHue??[{x:0,y:.5},{x:1,y:.5}],hueVsSat:e.hueVsSat??[{x:0,y:1},{x:1,y:1}],lumVsSat:e.lumVsSat??[{x:0,y:1},{x:1,y:1}],satVsSat:e.satVsSat??[{x:0,y:1},{x:1,y:1}]})}},oe=class extends t{op="SelectiveColor";constructor(e={}){let n={cyan:0,magenta:0,yellow:0,black:0};super({...e,method:e.method??"Relative",reds:{...n,...e.reds},yellows:{...n,...e.yellows},greens:{...n,...e.greens},cyans:{...n,...e.cyans},blues:{...n,...e.blues},magentas:{...n,...e.magentas},whites:{...n,...e.whites},neutrals:{...n,...e.neutrals},blacks:{...n,...e.blacks}})}},le=class extends t{op="GradientMap";constructor(e={}){let n=[{position:0,color:"#000000"},{position:1,color:"#ffffff"}];super({...e,stops:e.stops??n,smooth:e.smooth??!0,dither:e.dither??!0,opacity:e.opacity??1})}},ie=class extends t{op="ShadowsHighlights";constructor(e={}){super({...e,shadowAmount:e.shadowAmount??0,shadowTonalWidth:e.shadowTonalWidth??50,shadowRadius:e.shadowRadius??30,highlightAmount:e.highlightAmount??0,highlightTonalWidth:e.highlightTonalWidth??50,highlightRadius:e.highlightRadius??30,colorCorrection:e.colorCorrection??0,midtoneContrast:e.midtoneContrast??0})}},se=class extends t{op="ApplyLUT";constructor(e={}){super({...e,lutUrl:e.lutUrl??"",intensity:e.intensity??1})}},ue=class extends t{op="UnsharpMask";constructor(e={}){super({...e,amount:e.amount??100,radius:e.radius??1.5,threshold:e.threshold??3})}},ce=class extends t{op="HighPass";constructor(e={}){super({...e,radius:e.radius??3,contrastBoost:e.contrastBoost??1,monochrome:e.monochrome??!0})}},pe=class extends t{op="HalftoneScreen";constructor(e={}){super({...e,mode:e.mode??"Monochrome",dotShape:e.dotShape??"Circle",frequency:e.frequency??30,angle:e.angle??45,contrast:e.contrast??1,dotColor:e.dotColor??"#000000",paperColor:e.paperColor??"#ffffff",smooth:e.smooth??!0,invert:e.invert??!1,cyanAngle:e.cyanAngle??15,magentaAngle:e.magentaAngle??75,yellowAngle:e.yellowAngle??0,blackAngle:e.blackAngle??45,opacity:e.opacity??1})}},de=class extends t{op="TileOffset";constructor(e={}){super({...e,offsetX:e.offsetX??0,offsetY:e.offsetY??0,wrap:e.wrap??!0,edgeMode:e.edgeMode??"wrap"})}},me=class extends t{op="MotionBlur";constructor(e={}){super({...e,shutterAngle:e.shutterAngle??180,samples:e.samples??16,maxVelocity:e.maxVelocity??64,shutterCurve:e.shutterCurve??"gaussian",depthAware:e.depthAware??!0})}},be=class extends t{op="SSAO";constructor(e={}){super({...e,radius:e.radius??45,bias:e.bias??.025,intensity:e.intensity??1.5,kernelSamples:e.kernelSamples??16,blurRadius:e.blurRadius??4})}},fe=class extends t{op="PBRGlass";constructor(e={}){super({...e,ior:e.ior??1.49,roughness:e.roughness??.15,transmission:e.transmission??.92,dispersion:e.dispersion??.015,fresnelPower:e.fresnelPower??5,tintColor:e.tintColor??"#ffffff"})}},he=class extends t{op="DepthOfField";constructor(e={}){super({...e,focusDistance:e.focusDistance??500,focalLength:e.focalLength??50,aperture:e.aperture??2.8,maxBlur:e.maxBlur??16,quality:e.quality??"high"})}},Pe=class extends t{op="Crop";constructor(e={}){super({cropType:e.cropType??"rect",leftPercentage:e.leftPercentage??0,topPercentage:e.topPercentage??0,widthPercentage:e.widthPercentage??100,heightPercentage:e.heightPercentage??100,roundness:e.roundness??0,...e})}},ye=class extends t{op="Vision";constructor(e={}){super({enableDetection:e.enableDetection!==!1,enableSegmentation:e.enableSegmentation===!0,enablePose:e.enablePose===!0,enableMatte:e.enableMatte===!0,confidence:e.confidence??.3,variant:e.variant??"s",mode:e.mode??"passthrough",matteSource:e.matteSource??"instance",...e})}},ge=class extends t{op="Relight3D";constructor(e={}){super({lightType:e.lightType??"Point",intensity:e.intensity??1,lightPosX:e.lightPosX??.5,lightPosY:e.lightPosY??.5,lightPosZ:e.lightPosZ??.3,lightRadius:e.lightRadius??.8,spotConeAngle:e.spotConeAngle??45,specularRoughness:e.specularRoughness??.35,specularStrength:e.specularStrength??.7,metallic:e.metallic??0,ambientIntensity:e.ambientIntensity??.4,volumetricDensity:e.volumetricDensity??.2,depthScale:e.depthScale??1,depthInvert:e.depthInvert??!1,lightColor:e.lightColor??"#ffffff",ambientColor:e.ambientColor??"#ffffff",normalMap:e.normalMap,...e})}},xe=class extends t{op="TemporalDeflicker";constructor(e={}){super({blendWeight:e.blendWeight??.35,disocclusionThreshold:e.disocclusionThreshold??.15,maxMotionPixels:e.maxMotionPixels??64,scale:e.scale??.5,windowSize:e.windowSize??2,...e})}},Se=class extends t{op="Modulate";constructor(e={}){super({hue:e.hue??0,brightness:e.brightness??1,contrast:e.contrast??1,exposure:e.exposure??0,saturation:e.saturation??1,sepia:e.sepia??0,...e})}};export{a,b,f as c,h as d,P as e,y as f,g,x as h,S as i,C as j,E as k,w as l,v as m,M as n,R as o,A as p,k as q,D as r,B as s,I as t,T as u,H as v,L as w,G as x,O as y,z,F as A,V as B,Y as C,X as D,q as E,W as F,ir as G,ee as H,re as I,te as J,ne as K,ae as L,oe as M,le as N,ie as O,se as P,ue as Q,ce as R,pe as S,de as T,me as U,be as V,fe as W,he as X,Pe as Y,ye as Z,ge as _,xe as $,Se as aa};
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import{a as De}from"./chunk-VXUJWPIK.mjs";import{a as vt}from"./chunk-XKO4RYKN.mjs";import{g as Ne,h as Pt,i as ze,j as _e,k as he,l as Se,n as Mt,p as Rt}from"./chunk-X6HUH6K4.mjs";import{I as bt,a as M,b as V}from"./chunk-NQZKBFC6.mjs";import{b as gt,h as xe,i as Fe,l as ne,z as yt}from"./chunk-63SFBHEH.mjs";import{a as Tt,e as _t,i as Ge,j as St}from"./chunk-4GEWSUX5.mjs";import{b as ke,c as xt,e as kt}from"./chunk-MTJHQATU.mjs";import{d as wt,e as Te,g as He}from"./chunk-YAQFFQPG.mjs";import{a as Rn,c as In,d as j,e as x}from"./chunk-BVF64D6H.mjs";var Jt=Rn((Ts,Qt)=>{x();var Oe=()=>new Proxy(function(){},{get:(r,e)=>e==="__esModule"?!0:e===Symbol.toPrimitive?()=>"":Oe(),apply:()=>Oe(),construct:()=>Oe()});Qt.exports=Oe()});x();x();var It=class{signals;config;_frameHooks=[];constructor(e){this.config={...e},this.signals={};for(let[t,n]of Object.entries(e))xe(n)?this.signals[t]=n:this.signals[t]=Fe(n);return new Proxy(this,{get(t,n,o){if(typeof n=="string"&&n in t.signals){let i=t.signals[n];return i?i.value:void 0}return Reflect.get(t,n,o)},set(t,n,o,i){if(typeof n=="string"&&n in t.signals){let s=t.signals[n];return xe(o)?(t.signals[n]=o,t.config[n]=o):s&&typeof s.set=="function"?(s.set(o),t.config[n]=o):(t.signals[n]=Fe(o),t.config[n]=o),!0}return Reflect.set(t,n,o,i)}})}onRequestFrame(e){return this._frameHooks.push(e),this}notifyFrame(e){for(let t of this._frameHooks)t(e)}resolveUniforms(e){let t={};for(let[n,o]of Object.entries(this.signals))t[n]=o.get(e);return t}resolveTextures(){let e={};for(let[t,n]of Object.entries(this.signals)){let o=n.gpuBinding;o?.textureView&&(e[`${t}TextureView`]=o.textureView),o?.texture&&(e[`${t}Texture`]=o.texture)}return e}toOperation(){let e={op:this.op,effect:this,onRequestFrame:t=>this.notifyFrame(t),signals:this.signals,...this.config};for(let[t,n]of Object.entries(this.signals)){let o=this.config[t];!xe(o)&&(typeof o=="string"||typeof o=="boolean")?e[t]=n.value:e[t]=n}return e}};x();var Ot=class extends Error{constructor(e){super(e),this.name="ModerationError"}},Ct=class extends Error{constructor(e){super(e),this.name="ModerationUnrefundableError"}};x();x();x();var Et="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var Lt=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=Et[t[r]&63];return e};var Kr=r=>Lt(r);x();var At=V.object({dataTypes:V.custom(),label:V.string(),required:V.boolean().optional(),order:V.number(),description:V.string().optional()}),On=V.object({configKey:V.string(),dataTypes:V.custom(),label:V.string(),description:V.string().optional()}),Jr=V.object({type:V.string().min(1),version:V.number().int().positive().optional(),baseType:V.string().optional(),displayName:V.string().min(1),description:V.string().optional(),showInQuickAccess:V.boolean().optional(),showInSidebar:V.boolean().optional(),advanced:V.boolean().optional(),category:V.string().min(1),subcategory:V.string().optional(),defaultDimensions:V.object({width:V.number().positive().optional(),height:V.number().positive().optional()}).optional(),handles:V.object({inputs:V.array(At),outputs:V.array(At)}),variableInputs:V.discriminatedUnion("enabled",[V.object({enabled:V.literal(!0),dataTypes:V.custom()}),V.object({enabled:V.literal(!1),dataTypes:V.custom().optional()})]).optional(),variableOutputs:V.discriminatedUnion("enabled",[V.object({enabled:V.literal(!0),dataTypes:V.custom()}),V.object({enabled:V.literal(!1),dataTypes:V.custom().optional()})]).optional(),isTerminal:V.boolean().optional(),isTransient:V.boolean().optional(),configSchema:V.custom().optional(),defaultConfig:V.record(V.string(),V.unknown()).optional(),validation:V.any().optional(),resultSchema:V.custom().optional(),configHandles:V.array(On).optional()});x();var no={Text:{bg:"bg-blue-500",stroke:"stroke-blue-500",hex:"#3b82f6",text:"text-blue-500",border:"border-blue-500"},Image:{bg:"bg-purple-500",stroke:"stroke-purple-500",hex:"#a855f7",text:"text-purple-500",border:"border-purple-500"},Video:{bg:"bg-teal-500",stroke:"stroke-teal-500",hex:"oklch(60% 0.118 184.704)",text:"text-teal-500",border:"border-teal-500"},Audio:{bg:"bg-orange-500",stroke:"stroke-orange-500",hex:"#f97316",text:"text-orange-500",border:"border-orange-500"},Number:{bg:"bg-green-600",stroke:"stroke-green-600",hex:"#16a34a",text:"text-green-600",border:"border-green-600"},Boolean:{bg:"bg-amber-600",stroke:"stroke-amber-600",hex:"#d97706",text:"text-amber-600",border:"border-amber-600"},SVG:{bg:"bg-lime-600",stroke:"stroke-lime-600",hex:"#65a30d",text:"text-lime-600",border:"border-lime-600"},Caption:{bg:"bg-rose-500",stroke:"stroke-rose-500",hex:"#f43f5e",text:"text-rose-500",border:"border-rose-500"},GIF:{bg:"bg-pink-500",stroke:"stroke-pink-500",hex:"#ec4899",text:"text-pink-500",border:"border-pink-500"},Lottie:{bg:"bg-indigo-500",stroke:"stroke-indigo-500",hex:"#6366f1",text:"text-indigo-500",border:"border-indigo-500"},Signal:{bg:"bg-fuchsia-500",stroke:"stroke-fuchsia-500",hex:"#d946ef",text:"text-fuchsia-500",border:"border-fuchsia-500"},LUT:{bg:"bg-cyan-600",stroke:"stroke-cyan-600",hex:"#0891b2",text:"text-cyan-600",border:"border-cyan-600"}};x();var io={Image:"png",Video:"mp4",Audio:"mp3",Text:"txt",Number:"txt",Boolean:"txt",SVG:"svg",Caption:"srt",Lottie:"json",ThreeD:"glb",GIF:"gif",Signal:"txt",LUT:"cube"},ao={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",mp4:"video/mp4",webm:"video/webm",mov:"video/quicktime",mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",pdf:"application/pdf",json:"application/json",txt:"text/plain",srt:"text/srt",aac:"audio/aac",flac:"audio/flac"},Cn=["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","copy","xor","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],jt=M.enum(Cn),Vt=class r{static schemas=new Map;static register(e,t){r.schemas.set(e,t)}static get(e){return r.schemas.get(e)}static clear(){r.schemas.clear()}};x();var uo={FONT_FAMILY:"Inter",FONT_SIZE:64,FILL:"#ffffff",LINE_HEIGHT:1.1,ALIGN:"left",VERTICAL_ALIGN:"top",LETTER_SPACING:0,STROKE_WIDTH:0,STROKE:"#000000",CORNER_RADIUS:0,PADDING:0};x();var En=M.enum(["fade-in","fade-out","slide-in-left","slide-in-right","slide-in-top","slide-in-bottom","zoom-in","zoom-out","rotate-cw","rotate-ccw","bounce","shake"]),Ln=M.object({id:M.string(),type:En,value:M.number()}),An=M.object({x:M.number().default(0),y:M.number().default(0),width:M.number().optional(),height:M.number().optional(),rotation:M.number().default(0),scale:M.number().min(0).default(1),opacity:M.number().min(0).max(1).default(1),zIndex:M.number().int().optional(),blendMode:jt.optional()}),Vn=M.object({startFrame:M.number().int().min(0).default(0),durationInMS:M.number().int().min(1).optional(),trimStart:M.number().int().min(0).optional(),trimEnd:M.number().int().min(0).optional(),speed:M.number().min(.25).max(4).optional()}),jn=M.object({text:M.string().optional(),fontSize:M.number().optional(),fontFamily:M.string().optional(),fontStyle:M.string().optional(),fontWeight:M.union([M.number(),M.string()]).optional(),fill:M.string().optional(),align:M.string().optional(),direction:M.enum(["ltr","rtl","auto"]).optional(),verticalAlign:M.string().optional(),letterSpacing:M.number().optional(),lineHeight:M.number().optional(),padding:M.number().optional(),stroke:M.string().optional(),strokeWidth:M.number().optional(),strokeAlign:M.enum(["inside","center","outside"]).optional(),textShadow:M.string().optional(),textBackgroundColor:M.string().optional(),shadows:M.array(M.object({color:M.string(),offset:M.object({x:M.number(),y:M.number()}).optional(),blurRadius:M.number().optional()})).optional(),textAnimation:M.any().optional(),bottomPadding:M.number().optional(),maxWidth:M.number().optional()}),Un=M.object({backgroundColor:M.string().optional(),borderColor:M.string().optional(),borderWidth:M.number().optional(),strokeRadius:M.number().optional(),autoDimensions:M.boolean().optional()}),Ye=M.enum(["Video","Image","Audio","Text","Caption","SVG","GIF","Lottie"]),Ut=An.merge(Vn).merge(jn).merge(Un).extend({type:Ye.optional(),animations:M.array(Ln).optional()});x();x();var Bn=M.enum(["none","crossfade","wipe-left","wipe-right","slide-up","slide-down"]),Xe=M.object({type:Bn,durationFrames:M.number().min(1)});var vo=Ut.extend({id:M.string(),name:M.string().optional(),type:Ye,virtualMedia:bt.optional(),transitionIn:Xe.optional(),transitionOut:Xe.optional(),durationInMS:M.number(),maxDurationInMS:M.number().optional(),src:M.string().optional(),volume:M.number().default(1),inputHandleId:M.string().optional(),isPlaceholder:M.boolean().optional(),lockAspect:M.boolean().optional(),lockRatio:M.boolean().optional(),zIndex:M.number().optional()}).strict();x();function Bt(r,e){if(r===e||typeof r=="number"&&typeof e=="number"&&Number.isNaN(r)&&Number.isNaN(e))return!0;if(r&&e&&typeof r=="object"&&typeof e=="object"){if(r.constructor!==e.constructor)return!1;if(Array.isArray(r)){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!Bt(r[n],e[n]))return!1;return!0}if(r instanceof Date)return r.getTime()===e.getTime();if(r instanceof RegExp)return r.toString()===e.toString();let t=Object.keys(r);if(t.length!==Object.keys(e).length)return!1;for(let n of t)if(!Object.hasOwn(e,n)||!Bt(r[n],e[n]))return!1;return!0}return!1}x();function Co(r,e){if(!r?.sourceFingerprint)return null;let t=De(e);return r.sourceFingerprint!==t?null:r}function Eo(r,e){return{...r,sourceFingerprint:De(e)}}x();function Vo(r){try{let t=r.toString("utf-8").match(/<svg[^>]*>/i);if(!t)return null;let n=t[0],o=a=>{let c=n.match(new RegExp(`${a}=["']([^"']+)["']`,"i"));if(!c)return null;let d=parseFloat(c[1].replace(/[a-z%]/gi,""));return isNaN(d)?null:d},i=o("width"),s=o("height"),u=n.match(/viewBox=["']([^"']+)["']/i);if(u){let a=u[1].split(/[\s,]+/).map(parseFloat);if(a.length>=4&&!isNaN(a[2])&&!isNaN(a[3])){let c=a[2],d=a[3];i==null&&s==null?(i=c,s=d):i!=null&&s==null?s=i*(d/c):s!=null&&i==null&&(i=s*(c/d))}}return i!=null&&s!=null&&i>0&&s>0?{w:i,h:s}:null}catch(e){return console.error("Error parsing SVG dimensions",e),null}}x();x();x();x();var ae=(r,e,t)=>`https://huggingface.co/${r}/resolve/${e}/${t}`,We="tori29umai/rtmdet-ins-onnx-person-masks",$e="e5218e8d47d7c50077f27f9893a28e0ef2ad5656",Ke="RTMDet-Ins (OpenMMLab mmdetection, Apache-2.0), mmdeploy ONNX export",qe="RTMO (OpenMMLab mmpose, Apache-2.0), ONNX export",Ft="MediaPipe Selfie Segmenter (Google, Apache-2.0), ONNX export",re={"rtmdet-ins-t":{key:"rtmdet-ins-t",family:"rtmdet-ins",filename:"rtmdet-ins-t.onnx",url:ae(We,$e,"models/tiny/rtmdet-ins_tiny_640x640.onnx"),bytes:24032356,sha256:"99ee670820c4493aa13e20578b6a8e39781c319846dc41796a77765734beac5c",input:[640,640],source:Ke},"rtmdet-ins-s":{key:"rtmdet-ins-s",family:"rtmdet-ins",filename:"rtmdet-ins-s.onnx",url:ae(We,$e,"models/s/rtmdet-ins_s_640x640.onnx"),bytes:43236976,sha256:"9cd1787fbf3eb2bd64cc2d8154f41c036f5484b85599e1cbe0227a2dc5a4a08b",input:[640,640],source:Ke},"rtmdet-ins-m":{key:"rtmdet-ins-m",family:"rtmdet-ins",filename:"rtmdet-ins-m.onnx",url:ae(We,$e,"models/m/rtmdet-ins_m_640x640.onnx"),bytes:115735979,sha256:"a003bce80316e03467c2c2b483df2d5c0398220c2357a44f9bf985929f7eb052",input:[640,640],source:Ke},"rtmo-t":{key:"rtmo-t",family:"rtmo",filename:"rtmo-t.onnx",url:ae("Xenova/RTMO-t","f29d13ce5ee291fbe505e9d06a049992f05699dc","onnx/model.onnx"),bytes:27360569,sha256:"cb54dd042bf997df86d938721c94238940f2bff98ba8d2ccc834430de5c65c13",input:[416,416],source:qe},"rtmo-s":{key:"rtmo-s",family:"rtmo",filename:"rtmo-s.onnx",url:ae("Xenova/RTMO-s","d8c526187f341d287753831c9c8b1ecc4855bba1","onnx/model.onnx"),bytes:39636400,sha256:"1cd6a3517658903233e9ccb78666554862f57f0944b6886e2048093594aef4e7",input:[640,640],source:qe},"rtmo-m":{key:"rtmo-m",family:"rtmo",filename:"rtmo-m.onnx",url:ae("Xenova/RTMO-m","3aba1280472b98ee2bf663482e27e243038d23fe","onnx/model.onnx"),bytes:89291929,sha256:"76d82c45e5c4810baf587ecf2638d15cbf7ed196afb2055e977382532021b59e",input:[640,640],source:qe},"selfie-square":{key:"selfie-square",family:"selfie",filename:"selfie-square.onnx",url:ae("onnx-community/mediapipe_selfie_segmentation","be49485c8e027524be38591817fc5cd31bd9d00e","onnx/model.onnx"),bytes:462352,sha256:"3241ac4ad8aa35bdaf33946776db29f7c283a413aa0b0dacb9483594b4531aad",input:[256,256],source:Ft},"selfie-landscape":{key:"selfie-landscape",family:"selfie",filename:"selfie-landscape.onnx",url:ae("onnx-community/mediapipe_selfie_segmentation_landscape","2497d5bec26c626c7b3c4edc6e1fefc21b64f6c3","onnx/model.onnx"),bytes:462338,sha256:"7a0adcfdb1715d3b0ff0f61486d8a181c33f4a208343a5abfccbc6540e872d24",input:[256,144],source:Ft}};function Dt(r,e="s",t=1){return r==="pose"?`rtmo-${e}`:r==="matte"?t>1.3?"selfie-landscape":"selfie-square":`rtmdet-ins-${e}`}var we=["person","bicycle","car","motorcycle","airplane","bus","train","truck","boat","traffic light","fire hydrant","stop sign","parking meter","bench","bird","cat","dog","horse","sheep","cow","elephant","bear","zebra","giraffe","backpack","umbrella","handbag","tie","suitcase","frisbee","skis","snowboard","sports ball","kite","baseball bat","baseball glove","skateboard","surfboard","tennis racket","bottle","wine glass","cup","fork","knife","spoon","bowl","banana","apple","sandwich","orange","broccoli","carrot","hot dog","pizza","donut","cake","chair","couch","potted plant","bed","dining table","toilet","tv","laptop","mouse","remote","keyboard","cell phone","microwave","oven","toaster","sink","refrigerator","book","clock","vase","scissors","teddy bear","hair drier","toothbrush"];x();function le(r,e){let t=Math.max(r.originX,e.originX),n=Math.max(r.originY,e.originY),o=Math.min(r.originX+r.width,e.originX+e.width),i=Math.min(r.originY+r.height,e.originY+e.height),s=Math.max(0,o-t),u=Math.max(0,i-n),a=s*u;if(a<=0)return 0;let c=r.width*r.height,d=e.width*e.height,l=c+d-a;return l>0?a/l:0}var pe=class{_nextTrackId=1;_tracks=[];_iouThreshold;_maxMissedFrames;_minHits;_positionSmoothing;_activeDuringCoast;constructor(e={}){this._iouThreshold=e.iouThreshold??.25,this._maxMissedFrames=e.maxMissedFrames??15,this._minHits=e.minHits??1,this._positionSmoothing=Math.max(.1,Math.min(1,e.positionSmoothing??.75)),this._activeDuringCoast=e.activeDuringCoast!==!1}update(e,t,n=24){let o=n>0?1/n:.0416;for(let a of this._tracks)if(a.age++,a.timeSinceUpdate++,a.timeSinceUpdate>0){let c=a.centerX+a.vx*o,d=a.centerY+a.vy*o;a.centerX=c,a.centerY=d;let l=a.box.width,p=a.box.height,b=a.box.normalizedWidth,y=a.box.normalizedHeight,I=a.box.normalizedX+b/2+a.vx*o/Math.max(1,a.box.width/b),E=a.box.normalizedY+y/2+a.vy*o/Math.max(1,a.box.height/y);a.box={originX:c-l/2,originY:d-p/2,width:l,height:p,normalizedX:I-b/2,normalizedY:E-y/2,normalizedWidth:b,normalizedHeight:y},a.vx*=.92,a.vy*=.92,a.isCoasting=!0}let i=new Set,s=new Set,u=[];for(let a=0;a<this._tracks.length;a++){let c=this._tracks[a];for(let d=0;d<e.length;d++){let l=e[d];if(c.category!==l.category)continue;let p=le(c.box,l.boundingBox);p>=this._iouThreshold&&u.push({trackIdx:a,detIdx:d,iou:p})}}u.sort((a,c)=>c.iou-a.iou);for(let a of u){if(s.has(a.trackIdx)||i.has(a.detIdx))continue;s.add(a.trackIdx),i.add(a.detIdx);let c=this._tracks[a.trackIdx],d=e[a.detIdx],l=d.boundingBox,p=l.originX+l.width/2,b=l.originY+l.height/2,y=(p-c.centerX)/o,I=(b-c.centerY)/o;c.vx=c.vx*.4+y*.6,c.vy=c.vy*.4+I*.6;let E=this._positionSmoothing,g=c.box.width*(1-E)+l.width*E,S=c.box.height*(1-E)+l.height*E,k=c.centerX*(1-E)+p*E,L=c.centerY*(1-E)+b*E;c.centerX=k,c.centerY=L,c.score=d.score,c.timeSinceUpdate=0,c.hits++,c.isCoasting=!1,c.hits>=this._minHits&&(c.active=!0),c.box={originX:k-g/2,originY:L-S/2,width:g,height:S,normalizedX:l.normalizedX,normalizedY:l.normalizedY,normalizedWidth:l.normalizedWidth,normalizedHeight:l.normalizedHeight}}for(let a=0;a<e.length;a++){if(i.has(a))continue;let c=e[a],d=c.boundingBox,l=d.originX+d.width/2,p=d.originY+d.height/2;this._tracks.push({trackId:this._nextTrackId++,category:c.category,score:c.score,box:d,centerX:l,centerY:p,vx:0,vy:0,age:1,hits:1,timeSinceUpdate:0,active:this._minHits<=1,isCoasting:!1})}return this._tracks=this._tracks.filter(a=>a.timeSinceUpdate<=this._maxMissedFrames),this._tracks.filter(a=>a.active).map(a=>{let c=a.box.normalizedWidth,d=a.box.normalizedHeight,l=a.box.normalizedX+c/2,p=a.box.normalizedY+d/2,b=Math.sqrt(a.vx*a.vx+a.vy*a.vy);return{trackId:a.trackId,category:a.category,score:a.score,boundingBox:a.box,centerX:a.centerX,centerY:a.centerY,normalizedCenterX:l,normalizedCenterY:p,velocity:{vx:a.vx,vy:a.vy},speed:b,age:a.age,hits:a.hits,active:this._activeDuringCoast?!0:a.timeSinceUpdate===0,isCoasting:a.isCoasting}})}trackSequence(e,t,n=24){this.reset();let o=n>0?1/n:.0416,i=new Map;for(let a=0;a<t;a++){let c=e[a]??[],d=this.update(c,a,n);for(let l of d)i.has(l.trackId)||i.set(l.trackId,{category:l.category,observations:[]}),l.isCoasting||i.get(l.trackId).observations.push({frame:a,box:l.boundingBox,score:l.score})}let s=new Map;for(let[a,c]of i.entries()){let d=c.observations;if(d.length===0)continue;d.sort((g,S)=>g.frame-S.frame);let l=new Array(t).fill(null);for(let g of d)l[g.frame]={box:g.box,score:g.score};let p=d[0];for(let g=0;g<p.frame;g++)l[g]={box:{...p.box},score:p.score*.9};for(let g=0;g<d.length-1;g++){let S=d[g],k=d[g+1],L=k.frame-S.frame;if(!(L<=1))for(let f=S.frame+1;f<k.frame;f++){let m=(f-S.frame)/L,v=S.box.originX+(k.box.originX-S.box.originX)*m,T=S.box.originY+(k.box.originY-S.box.originY)*m,R=S.box.width+(k.box.width-S.box.width)*m,P=S.box.height+(k.box.height-S.box.height)*m,U=S.box.normalizedX+(k.box.normalizedX-S.box.normalizedX)*m,O=S.box.normalizedY+(k.box.normalizedY-S.box.normalizedY)*m,_=S.box.normalizedWidth+(k.box.normalizedWidth-S.box.normalizedWidth)*m,h=S.box.normalizedHeight+(k.box.normalizedHeight-S.box.normalizedHeight)*m;l[f]={box:{originX:v,originY:T,width:R,height:P,normalizedX:U,normalizedY:O,normalizedWidth:_,normalizedHeight:h},score:S.score*(1-m)+k.score*m}}}let b=d[d.length-1];for(let g=b.frame+1;g<t;g++)l[g]={box:{...b.box},score:b.score*.9};let y=[],I=2,E=[.06136,.24477,.38774,.24477,.06136];for(let g=0;g<t;g++){let S=0,k=0,L=0,f=0,m=0,v=0,T=0,R=0,P=0,U=0;for(let _=-I;_<=I;_++){let h=Math.max(0,Math.min(t-1,g+_)),C=l[h];if(C){let H=E[_+I];S+=H,k+=C.box.originX*H,L+=C.box.originY*H,f+=C.box.width*H,m+=C.box.height*H,v+=C.box.normalizedX*H,T+=C.box.normalizedY*H,R+=C.box.normalizedWidth*H,P+=C.box.normalizedHeight*H,U+=C.score*H}}let O=S>0?1/S:1;y.push({box:{originX:k*O,originY:L*O,width:f*O,height:m*O,normalizedX:v*O,normalizedY:T*O,normalizedWidth:R*O,normalizedHeight:P*O},score:U*O})}s.set(a,{category:c.category,frames:y})}let u=[];for(let a=0;a<t;a++){let c=[];for(let[d,l]of s.entries()){let p=l.frames[a];if(!p)continue;let b=l.frames[Math.max(0,a-1)]??p,y=l.frames[Math.min(t-1,a+1)]??p,I=p.box.originX+p.box.width/2,E=p.box.originY+p.box.height/2,g=b.box.originX+b.box.width/2,S=b.box.originY+b.box.height/2,k=y.box.originX+y.box.width/2,L=y.box.originY+y.box.height/2,f=a===0||a===t-1?o:2*o,m=(k-g)/f,v=(L-S)/f,T=Math.sqrt(m*m+v*v),R=p.box.normalizedWidth,P=p.box.normalizedHeight;c.push({trackId:d,category:l.category,score:p.score,boundingBox:p.box,centerX:I,centerY:E,normalizedCenterX:p.box.normalizedX+R/2,normalizedCenterY:p.box.normalizedY+P/2,velocity:{vx:m,vy:v},speed:T,age:a+1,hits:10,active:!0,isCoasting:!1})}u.push(c)}return u}reset(){this._tracks=[],this._nextTrackId=1}};var Gt=()=>typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now();async function zo(r,e){let{runner:t}=e,n=e.fps??24,o=e.tasks&&e.tasks.length>0?e.tasks:["detect"],i=new Set(o),s=e.categories?new Set(e.categories.map(_=>_.toLowerCase())):null,u=e.includeMasks===!0&&i.has("segment"),a=i.has("detect")||i.has("segment"),c=[],d={},l=new Map,p=0,b=0,y=_=>!s||s.has(_.toLowerCase()),I=async(_,h,C)=>{let H=t.modelKeyFor(_,h.width/h.height),D=t.downloadStatus.get(H)==="ready",A=Gt(),B=await C(),$=Gt()-A;return p+=$,!D&&!d[H]&&(d[H]={bytes:re[H].bytes,ms:$}),B},E=_=>{for(let h of _){if(!y(h.category))continue;let C=l.get(h.category)??{sum:0,count:0};C.sum+=h.coverage,C.count++,l.set(h.category,C)}};for await(let _ of r){let h=[];if(u){let C=await I("segment",_,()=>t.segment(_));E(C.masks),h=C.detections}else a&&(h=await I("detect",_,()=>t.detect(_)));i.has("pose")&&await I("pose",_,()=>t.pose(_)),i.has("matte")&&await I("matte",_,()=>t.matte(_)),c.push(s?h.filter(C=>y(C.category)):h),b++}let g=b,k=new pe({iouThreshold:e.iouThreshold??.25,maxMissedFrames:e.maxMissedFrames??15}).trackSequence(c,g,n),L=e.pathStride??Math.max(1,Math.ceil(g/50)),f=new Map,m=new Map,v=new Map,T=new Map,R=(_,h,C)=>{let H=_.get(h);return H===void 0&&(H=C(),_.set(h,H)),H};for(let _=0;_<g;_++)for(let h of k[_]??[]){if(!y(h.category))continue;let C=f.get(h.trackId);C||(C={category:h.category,firstFrame:_,lastFrame:_,speedSum:0,speedCount:0,centers:[]},f.set(h.trackId,C)),C.lastFrame=_,Number.isFinite(h.speed)&&(C.speedSum+=h.speed,C.speedCount++),(_-C.firstFrame)%L===0&&C.centers.push({frame:_,x:h.centerX,y:h.centerY}),R(m,h.category,()=>new Set).add(_),v.set(h.category,Math.max(v.get(h.category)??0,h.score)),R(T,h.category,()=>new Set).add(h.trackId)}let P=Array.from(f.entries()).map(([_,h])=>({trackId:_,category:h.category,frames:[h.firstFrame,h.lastFrame],speedMeanPxS:h.speedCount>0?h.speedSum/h.speedCount:0,centerPath:h.centers.map(C=>[C.x,C.y])})).sort((_,h)=>_.trackId-h.trackId),U={};for(let[_,h]of m)U[_]={framesPresent:h.size,totalFrames:g,maxConfidence:v.get(_)??0,tracks:T.get(_)?.size??0};let O={};for(let[_,h]of l)O[_]={meanCoverage:h.count>0?h.sum/h.count:0};return{source:e.source??"frames",totalFrames:g,fps:n,durationSec:n>0?g/n:0,tasks:Array.from(i),modelDownloads:d,inferenceMs:p,trackCount:P.length,classes:U,tracks:P,masks:O}}x();var Fn=[103.53,116.28,123.675],Dn=[57.375,57.12,58.395],Gn={"rtmdet-ins":{fit:"topLeft",channels:"bgr",mean:Fn,std:Dn,padValue:114},rtmo:{fit:"center",channels:"bgr",mean:[0,0,0],std:[1,1,1],padValue:114},selfie:{fit:"stretch",channels:"rgb",mean:[0,0,0],std:[255,255,255],padValue:0}};function Ht(r,e){return{...Gn[r],width:e[0],height:e[1]}}function Ze(r,e,t){if(t.fit==="stretch")return{scaleX:t.width/r,scaleY:t.height/e,offsetX:0,offsetY:0,inputWidth:t.width,inputHeight:t.height};let n=Math.min(t.width/r,t.height/e),o=Math.round(r*n),i=Math.round(e*n),s=t.fit==="center";return{scaleX:n,scaleY:n,offsetX:s?(t.width-o)/2:0,offsetY:s?(t.height-i)/2:0,inputWidth:t.width,inputHeight:t.height}}function de(r,e,t){return{x:(r-t.offsetX)/t.scaleX,y:(e-t.offsetY)/t.scaleY}}function Nt(r,e,t){let{width:n,height:o,data:i}=r,{width:s,height:u}=e,a=Ze(n,o,e),{scaleX:c,scaleY:d,offsetX:l,offsetY:p}=a,b=s*u;(!t||t.length<3*b)&&(t=new Float32Array(3*b));let y=e.channels==="bgr"?[2,1,0]:[0,1,2],[I,E,g]=e.mean,S=1/e.std[0],k=1/e.std[1],L=1/e.std[2],f=(e.padValue-I)*S,m=(e.padValue-E)*k,v=(e.padValue-g)*L,[T,R,P]=y,U=Math.ceil(l),O=Math.ceil(p),_=Math.min(s,Math.floor(l+n*c))-1,h=Math.min(u,Math.floor(p+o*d))-1;for(let C=0;C<u;C++){let H=C*s,D=C<O||C>h,A=Math.max(0,(C+.5-p)/d-.5),B=Math.min(o-1,Math.floor(A)),$=Math.min(o-1,B+1),z=A-B;for(let Y=0;Y<s;Y++){let N=H+Y;if(D||Y<U||Y>_){t[N]=f,t[b+N]=m,t[2*b+N]=v;continue}let q=Math.max(0,(Y+.5-l)/c-.5),F=Math.min(n-1,Math.floor(q)),J=Math.min(n-1,F+1),K=q-F,ee=(B*n+F)*4,X=(B*n+J)*4,oe=($*n+F)*4,G=($*n+J)*4,W=(1-K)*(1-z),te=K*(1-z),Z=(1-K)*z,se=K*z;t[N]=(i[ee+T]*W+i[X+T]*te+i[oe+T]*Z+i[G+T]*se-I)*S,t[b+N]=(i[ee+R]*W+i[X+R]*te+i[oe+R]*Z+i[G+R]*se-E)*k,t[2*b+N]=(i[ee+P]*W+i[X+P]*te+i[oe+P]*Z+i[G+P]*se-g)*L}}return{tensor:t,transform:a}}x();var ve=8;function Qe(r,e){let{sourceWidth:t,sourceHeight:n,transform:o}=e,i=e.classes?new Set(e.classes.map(g=>g.toLowerCase())):null,s=[];for(let g=0;g<r.count;g++){let S=r.dets[g*5+4];if(!(S>=e.confidence))continue;let k=Number(r.labels[g]),L=e.classNames[k]??`class_${k}`;if(i&&!i.has(L.toLowerCase()))continue;let f=de(r.dets[g*5],r.dets[g*5+1],o),m=de(r.dets[g*5+2],r.dets[g*5+3],o),v=ce(f.x,0,t),T=ce(f.y,0,n),R=ce(m.x,0,t)-v,P=ce(m.y,0,n)-T;R<=0||P<=0||s.push({index:g,detection:{category:L,score:S,boundingBox:{originX:v,originY:T,width:R,height:P,normalizedX:v/t,normalizedY:T/n,normalizedWidth:R/t,normalizedHeight:P/n}}})}s.sort((g,S)=>S.detection.score-g.detection.score);let u=s.map(g=>g.detection),a=[];if(!r.masks&&!r.maskPlane)return{detections:u,masks:a};let c=e.maskThreshold??.5,d=e.featherRadius??.05,l=r.maskLogits?Hn(c,d):Pe(c,d),{maskWidth:p,maskHeight:b}=r,y=p*b,I=p/o.inputWidth,E=b/o.inputHeight;for(let g=0;g<s.length;g++){let{index:S,detection:k}=s[g],L=k.boundingBox,f=r.maskPlane?r.maskPlane(S):r.masks,m=r.maskPlane?0:S*y,v=Math.max(0,Math.floor(L.originX)-ve),T=Math.max(0,Math.floor(L.originY)-ve),R=Math.min(t-1,Math.ceil(L.originX+L.width)+ve),P=Math.min(n-1,Math.ceil(L.originY+L.height)+ve),U=new Uint8Array(t*n),O=0;for(let _=T;_<=P;_++){let h=((_+.5)*o.scaleY+o.offsetY)*E-.5,C=ce(Math.floor(h),0,b-1),H=Math.min(b-1,C+1),D=ce(h-C,0,1),A=_*t;for(let B=v;B<=R;B++){let $=((B+.5)*o.scaleX+o.offsetX)*I-.5,z=ce(Math.floor($),0,p-1),Y=Math.min(p-1,z+1),N=ce($-z,0,1),q=f[m+C*p+z]*(1-N)*(1-D)+f[m+C*p+Y]*N*(1-D)+f[m+H*p+z]*(1-N)*D+f[m+H*p+Y]*N*D,F=l(q);F>0&&(U[A+B]=F,O+=F/255)}}O=Math.round(O),O!==0&&a.push({category:k.category,mask:U,width:t,height:n,area:O,coverage:O/(t*n),detectionIndex:g})}return{detections:u,masks:a}}function Pe(r,e){if(e<=0)return o=>o>r?255:0;let t=r-e,n=255/(2*e);return o=>o<=t?0:o>=r+e?255:(o-t)*n}function Hn(r,e){let t=Pe(r,e),n=s=>s<=0?-1/0:s>=1?1/0:Math.log(s/(1-s));if(e<=0){let s=n(r);return u=>u>s?255:0}let o=n(r-e),i=n(r+e);return s=>s<=o?0:s>=i?255:t(1/(1+Math.exp(-s)))}function ce(r,e,t){return r<e?e:r>t?t:r}x();var zt=17,Je=.3;function Yt(r,e){let{sourceWidth:t,sourceHeight:n,transform:o}=e,i=r.keypointStride,s=[];for(let c=0;c<r.count;c++){let d=r.dets[c*5+4];if(!(d>=e.confidence))continue;let l=de(r.dets[c*5],r.dets[c*5+1],o),p=de(r.dets[c*5+2],r.dets[c*5+3],o),b=ue(l.x,0,t),y=ue(l.y,0,n),I=ue(p.x,0,t)-b,E=ue(p.y,0,n)-y;if(I<=0||E<=0)continue;let g=[],S=c*zt*i;for(let L=0;L<zt;L++){let f=S+L*i,m=de(r.keypoints[f],r.keypoints[f+1],o);g.push({x:ue(m.x,0,t),y:ue(m.y,0,n),visibility:ue(r.keypoints[f+2],0,1)})}let k=0;for(let L of g)L.visibility>=Je&&k++;k<(e.minVisibleKeypoints??3)||s.push({score:d,boundingBox:{originX:b,originY:y,width:I,height:E,normalizedX:b/t,normalizedY:y/n,normalizedWidth:I/t,normalizedHeight:E/n},keypoints:g})}s.sort((c,d)=>d.score-c.score);let u=e.iouThreshold??.6,a=[];for(let c of s)a.some(d=>Nn(d,c,u))||a.push(c);return{people:a}}function ue(r,e,t){return r<e?e:r>t?t:r}function Nn(r,e,t){if(le(r.boundingBox,e.boundingBox)>t)return!0;let n=Math.sqrt(r.boundingBox.width*r.boundingBox.height),o=0,i=0;for(let s=0;s<r.keypoints.length;s++){let u=r.keypoints[s],a=e.keypoints[s];u.visibility<Je||a.visibility<Je||(o+=Math.hypot(u.x-a.x,u.y-a.y),i++)}return i>=3&&o/i<.1*n}x();function Xt(r,e,t,n){let{sourceWidth:o,sourceHeight:i}=n,s=Pe(n.maskThreshold??.5,n.featherRadius??.2),u=new Uint8Array(o*i),a=e/o,c=t/i,d=0;for(let l=0;l<i;l++){let p=Math.max(0,(l+.5)*c-.5),b=Math.min(t-1,Math.floor(p)),y=Math.min(t-1,b+1),I=p-b;for(let E=0;E<o;E++){let g=Math.max(0,(E+.5)*a-.5),S=Math.min(e-1,Math.floor(g)),k=Math.min(e-1,S+1),L=g-S,f=r[b*e+S]*(1-L)*(1-I)+r[b*e+k]*L*(1-I)+r[y*e+S]*(1-L)*I+r[y*e+k]*L*I,m=s(f);u[l*o+E]=m,d+=m}}return{mask:u,width:o,height:i,coverage:o*i>0?d/(255*o*i):0}}x();var zn=`
|
|
2
|
+
struct Params {
|
|
3
|
+
src: vec2u,
|
|
4
|
+
dst: vec2u,
|
|
5
|
+
scale: vec2f,
|
|
6
|
+
offset: vec2f,
|
|
7
|
+
lo: vec2i,
|
|
8
|
+
hi: vec2i,
|
|
9
|
+
mean: vec4f,
|
|
10
|
+
invStd: vec4f,
|
|
11
|
+
pad: vec4f,
|
|
12
|
+
order: vec4u,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
@group(0) @binding(0) var<uniform> p: Params;
|
|
16
|
+
@group(0) @binding(1) var src: texture_2d<f32>;
|
|
17
|
+
@group(0) @binding(2) var<storage, read_write> dst: array<f32>;
|
|
18
|
+
|
|
19
|
+
@compute @workgroup_size(16, 16)
|
|
20
|
+
fn main(@builtin(global_invocation_id) id: vec3u) {
|
|
21
|
+
if (id.x >= p.dst.x || id.y >= p.dst.y) { return; }
|
|
22
|
+
let x = i32(id.x);
|
|
23
|
+
let y = i32(id.y);
|
|
24
|
+
let plane = p.dst.x * p.dst.y;
|
|
25
|
+
let o = id.y * p.dst.x + id.x;
|
|
26
|
+
var v = p.pad.xyz;
|
|
27
|
+
if (x >= p.lo.x && x <= p.hi.x && y >= p.lo.y && y <= p.hi.y) {
|
|
28
|
+
let maxX = i32(p.src.x) - 1;
|
|
29
|
+
let maxY = i32(p.src.y) - 1;
|
|
30
|
+
let sy = max(0.0, (f32(y) + 0.5 - p.offset.y) / p.scale.y - 0.5);
|
|
31
|
+
let iy0 = min(maxY, i32(floor(sy)));
|
|
32
|
+
let iy1 = min(maxY, iy0 + 1);
|
|
33
|
+
let fy = sy - f32(iy0);
|
|
34
|
+
let sx = max(0.0, (f32(x) + 0.5 - p.offset.x) / p.scale.x - 0.5);
|
|
35
|
+
let ix0 = min(maxX, i32(floor(sx)));
|
|
36
|
+
let ix1 = min(maxX, ix0 + 1);
|
|
37
|
+
let fx = sx - f32(ix0);
|
|
38
|
+
var rgba =
|
|
39
|
+
textureLoad(src, vec2i(ix0, iy0), 0) * ((1.0 - fx) * (1.0 - fy)) +
|
|
40
|
+
textureLoad(src, vec2i(ix1, iy0), 0) * (fx * (1.0 - fy)) +
|
|
41
|
+
textureLoad(src, vec2i(ix0, iy1), 0) * ((1.0 - fx) * fy) +
|
|
42
|
+
textureLoad(src, vec2i(ix1, iy1), 0) * (fx * fy);
|
|
43
|
+
rgba = rgba * 255.0;
|
|
44
|
+
let s = vec3f(rgba[p.order.x], rgba[p.order.y], rgba[p.order.z]);
|
|
45
|
+
v = (s - p.mean.xyz) * p.invStd.xyz;
|
|
46
|
+
}
|
|
47
|
+
dst[o] = v.x;
|
|
48
|
+
dst[plane + o] = v.y;
|
|
49
|
+
dst[2u * plane + o] = v.z;
|
|
50
|
+
}
|
|
51
|
+
`,Yn=`
|
|
52
|
+
@group(0) @binding(0) var src: texture_2d<f32>;
|
|
53
|
+
@group(0) @binding(1) var<storage, read_write> acc: array<atomic<u32>, 2>;
|
|
54
|
+
|
|
55
|
+
var<workgroup> local: array<atomic<u32>, 2>;
|
|
56
|
+
|
|
57
|
+
@compute @workgroup_size(16, 16)
|
|
58
|
+
fn main(
|
|
59
|
+
@builtin(global_invocation_id) id: vec3u,
|
|
60
|
+
@builtin(local_invocation_index) li: u32,
|
|
61
|
+
) {
|
|
62
|
+
let dim = textureDimensions(src);
|
|
63
|
+
if (id.x < dim.x && id.y < dim.y) {
|
|
64
|
+
let c = pack4x8unorm(textureLoad(src, vec2i(id.xy), 0));
|
|
65
|
+
let i = id.y * dim.x + id.x;
|
|
66
|
+
let a = (c ^ (i * 0x9e3779b9u)) * 0x85ebca6bu;
|
|
67
|
+
let b = (c + i * 0xc2b2ae35u) * 0x27d4eb2fu;
|
|
68
|
+
atomicAdd(&local[0], a ^ (a >> 15u));
|
|
69
|
+
atomicAdd(&local[1], b ^ (b >> 13u));
|
|
70
|
+
}
|
|
71
|
+
workgroupBarrier();
|
|
72
|
+
if (li == 0u) {
|
|
73
|
+
atomicAdd(&acc[0], atomicLoad(&local[0]));
|
|
74
|
+
atomicAdd(&acc[1], atomicLoad(&local[1]));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
`,Wt=112,$t=new WeakMap,ge=class r{constructor(e){this.device=e;this.tensorPipeline=e.createComputePipeline({label:"vision_frame_tensor",layout:"auto",compute:{module:e.createShaderModule({code:zn}),entryPoint:"main"}}),this.hashPipeline=e.createComputePipeline({label:"vision_frame_hash",layout:"auto",compute:{module:e.createShaderModule({code:Yn}),entryPoint:"main"}}),this.params=e.createBuffer({label:"vision_frame_tensor_params",size:Wt,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST})}device;tensorPipeline;hashPipeline;params;static for(e){let t=$t.get(e);return t||(t=new r(e),$t.set(e,t)),t}static tensorBytes(e){return 3*e.width*e.height*4}toTensor(e,t,n){let o=Ze(e.width,e.height,t),{scaleX:i,scaleY:s,offsetX:u,offsetY:a}=o,c=new ArrayBuffer(Wt),d=new Uint32Array(c),l=new Float32Array(c),p=new Int32Array(c);d.set([e.width,e.height,t.width,t.height],0),l.set([i,s,u,a],4),p.set([Math.ceil(u),Math.ceil(a),Math.min(t.width,Math.floor(u+e.width*i))-1,Math.min(t.height,Math.floor(a+e.height*s))-1],8);let b=t.std.map(E=>1/E);l.set([...t.mean,0],12),l.set([...b,0],16),l.set([0,1,2].map(E=>(t.padValue-t.mean[E])*b[E]),20),d.set(t.channels==="bgr"?[2,1,0,3]:[0,1,2,3],24),this.device.queue.writeBuffer(this.params,0,c);let y=this.device.createCommandEncoder({label:"vision_frame_tensor"}),I=y.beginComputePass();return I.setPipeline(this.tensorPipeline),I.setBindGroup(0,this.device.createBindGroup({layout:this.tensorPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:this.params}},{binding:1,resource:e.texture.createView()},{binding:2,resource:{buffer:n}}]})),I.dispatchWorkgroups(Math.ceil(t.width/16),Math.ceil(t.height/16)),I.end(),this.device.queue.submit([y.finish()]),o}async contentKey(e){let t=this.device.createBuffer({size:8,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),n=this.device.createBuffer({size:8,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),o=this.device.createCommandEncoder({label:"vision_frame_hash"}),i=o.beginComputePass();i.setPipeline(this.hashPipeline),i.setBindGroup(0,this.device.createBindGroup({layout:this.hashPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:e.texture.createView()},{binding:1,resource:{buffer:t}}]})),i.dispatchWorkgroups(Math.ceil(e.width/16),Math.ceil(e.height/16)),i.end(),o.copyBufferToBuffer(t,0,n,0,8),this.device.queue.submit([o.finish()]),await n.mapAsync(GPUMapMode.READ);let[s,u]=new Uint32Array(n.getMappedRange().slice(0));return n.unmap(),n.destroy(),t.destroy(),`${e.width}x${e.height}:gpu:${s.toString(36)}:${u.toString(36)}`}};async function Me(r){let{device:e,texture:t,width:n,height:o}=r,i=n*4,s=Math.ceil(i/256)*256,u=e.createBuffer({size:s*o,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,label:"vision_frame_readback"}),a=e.createCommandEncoder({label:"vision_frame_readback"});a.copyTextureToBuffer({texture:t},{buffer:u,bytesPerRow:s,rowsPerImage:o},[n,o,1]),e.queue.submit([a.finish()]),await u.mapAsync(GPUMapMode.READ);let c=new Uint8Array(u.getMappedRange()),d=new Uint8ClampedArray(n*o*4);for(let l=0;l<o;l++)d.set(c.subarray(l*s,l*s+i),l*i);if(u.unmap(),u.destroy(),t.format.startsWith("bgra"))for(let l=0;l<d.length;l+=4){let p=d[l];d[l]=d[l+2],d[l+2]=p}return{data:d,width:n,height:o}}x();x();x();var Kt=`
|
|
78
|
+
struct Bone {
|
|
79
|
+
start: vec2<f32>,
|
|
80
|
+
end: vec2<f32>,
|
|
81
|
+
color: vec4<f32>,
|
|
82
|
+
radius: f32,
|
|
83
|
+
enabled: f32,
|
|
84
|
+
pad: vec2<f32>,
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
struct SkeletonParams {
|
|
88
|
+
width: u32,
|
|
89
|
+
height: u32,
|
|
90
|
+
numBones: u32,
|
|
91
|
+
pad: u32,
|
|
92
|
+
bones: array<Bone, 24>,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;
|
|
96
|
+
@group(0) @binding(1) var<uniform> params: SkeletonParams;
|
|
97
|
+
|
|
98
|
+
@compute @workgroup_size(16, 16)
|
|
99
|
+
fn computePoseSkeleton(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
100
|
+
if (id.x >= params.width || id.y >= params.height) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);
|
|
105
|
+
var outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
106
|
+
|
|
107
|
+
let count = min(params.numBones, 24u);
|
|
108
|
+
for (var i = 0u; i < count; i = i + 1u) {
|
|
109
|
+
let bone = params.bones[i];
|
|
110
|
+
if (bone.enabled < 0.5) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
let ab = bone.end - bone.start;
|
|
115
|
+
let ap = p - bone.start;
|
|
116
|
+
let l2 = dot(ab, ab);
|
|
117
|
+
|
|
118
|
+
var t: f32 = 0.0;
|
|
119
|
+
if (l2 > 0.0001) {
|
|
120
|
+
t = clamp(dot(ap, ab) / l2, 0.0, 1.0);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
let closest = bone.start + t * ab;
|
|
124
|
+
let dist = length(p - closest);
|
|
125
|
+
|
|
126
|
+
if (dist <= bone.radius) {
|
|
127
|
+
// Sub-pixel edge antialiasing
|
|
128
|
+
let edgeAlpha = clamp(bone.radius - dist + 0.5, 0.0, 1.0);
|
|
129
|
+
let a = edgeAlpha * bone.color.a;
|
|
130
|
+
outColor = vec4<f32>(mix(outColor.rgb, bone.color.rgb, a), max(outColor.a, a));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
textureStore(outputTex, id.xy, outColor);
|
|
135
|
+
}
|
|
136
|
+
`;var Xn=[{from:0,to:11,color:[0,1,1,1]},{from:0,to:12,color:[0,1,1,1]},{from:11,to:12,color:[1,0,0,1]},{from:11,to:13,color:[1,.333,0,1]},{from:13,to:15,color:[1,.667,0,1]},{from:12,to:14,color:[1,1,0,1]},{from:14,to:16,color:[.667,1,0,1]},{from:11,to:23,color:[.333,1,0,1]},{from:12,to:24,color:[0,1,0,1]},{from:23,to:24,color:[0,1,.333,1]},{from:23,to:25,color:[0,1,.667,1]},{from:25,to:27,color:[0,1,1,1]},{from:24,to:26,color:[0,.667,1,1]},{from:26,to:28,color:[0,.333,1,1]}],Re=class{constructor(e){this.device=e;let t=e.createShaderModule({label:"pose_skeleton.wgsl",code:Kt});this.computePipeline=e.createComputePipeline({label:"PoseSkeletonComputePipeline",layout:"auto",compute:{module:t,entryPoint:"computePoseSkeleton"}}),this.uniformBuffer=e.createBuffer({size:1280,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"pose_skeleton_uniform_buffer"})}device;computePipeline;uniformBuffer;cachedOutputTexture;execute(e,t={},n){let o=n??Xn,i=t.width??1024,s=t.height??1024,u=t.lineWidth??6,a=Math.max(1,u/2),c=1280,d=new ArrayBuffer(c),l=new Uint32Array(d),p=new Float32Array(d);l[0]=i,l[1]=s,l[2]=o.length,l[3]=0;let b=4;for(let g=0;g<o.length;g++){let S=o[g],k=e[S.from],L=e[S.to],f=b+g*12;if(!k||!L||(k.visibility??1)<.2||(L.visibility??1)<.2){p[f+9]=0;continue}p[f+0]=k.x*i,p[f+1]=k.y*s,p[f+2]=L.x*i,p[f+3]=L.y*s,p[f+4]=S.color[0],p[f+5]=S.color[1],p[f+6]=S.color[2],p[f+7]=S.color[3],p[f+8]=a,p[f+9]=1}this.device.queue.writeBuffer(this.uniformBuffer,0,d),(!this.cachedOutputTexture||this.cachedOutputTexture.width!==i||this.cachedOutputTexture.height!==s)&&(this.cachedOutputTexture?.destroy(),this.cachedOutputTexture=this.device.createTexture({label:"openpose_skeleton_texture",size:[i,s],format:"rgba8unorm",usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}));let y=this.device.createCommandEncoder({label:"pose_skeleton_command_encoder"}),I=this.device.createBindGroup({label:"pose_skeleton_bind_group",layout:this.computePipeline.getBindGroupLayout(0),entries:[{binding:0,resource:this.cachedOutputTexture.createView({label:"pose_skeleton_output_view"})},{binding:1,resource:{buffer:this.uniformBuffer}}]}),E=y.beginComputePass({label:"pose_skeleton_compute_pass"});return E.setPipeline(this.computePipeline),E.setBindGroup(0,I),E.dispatchWorkgroups(Math.ceil(i/16),Math.ceil(s/16),1),E.end(),this.device.queue.submit([y.finish()]),this.cachedOutputTexture}destroy(){this.cachedOutputTexture?.destroy(),this.cachedOutputTexture=void 0,this.uniformBuffer.destroy()}};x();var w={NOSE:0,LEFT_EYE:1,RIGHT_EYE:2,LEFT_EAR:3,RIGHT_EAR:4,LEFT_SHOULDER:5,RIGHT_SHOULDER:6,LEFT_ELBOW:7,RIGHT_ELBOW:8,LEFT_WRIST:9,RIGHT_WRIST:10,LEFT_HIP:11,RIGHT_HIP:12,LEFT_KNEE:13,RIGHT_KNEE:14,LEFT_ANKLE:15,RIGHT_ANKLE:16},et=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],qt=[{from:w.NOSE,to:w.LEFT_SHOULDER,color:[0,1,1,1]},{from:w.NOSE,to:w.RIGHT_SHOULDER,color:[0,1,1,1]},{from:w.LEFT_SHOULDER,to:w.RIGHT_SHOULDER,color:[1,0,0,1]},{from:w.LEFT_SHOULDER,to:w.LEFT_ELBOW,color:[1,.333,0,1]},{from:w.LEFT_ELBOW,to:w.LEFT_WRIST,color:[1,.667,0,1]},{from:w.RIGHT_SHOULDER,to:w.RIGHT_ELBOW,color:[1,1,0,1]},{from:w.RIGHT_ELBOW,to:w.RIGHT_WRIST,color:[.667,1,0,1]},{from:w.LEFT_SHOULDER,to:w.LEFT_HIP,color:[.333,1,0,1]},{from:w.RIGHT_SHOULDER,to:w.RIGHT_HIP,color:[0,1,0,1]},{from:w.LEFT_HIP,to:w.RIGHT_HIP,color:[0,1,.333,1]},{from:w.LEFT_HIP,to:w.LEFT_KNEE,color:[0,1,.667,1]},{from:w.LEFT_KNEE,to:w.LEFT_ANKLE,color:[0,1,1,1]},{from:w.RIGHT_HIP,to:w.RIGHT_KNEE,color:[0,.667,1,1]},{from:w.RIGHT_KNEE,to:w.RIGHT_ANKLE,color:[0,.333,1,1]}];var Ie=class{pipeline;constructor(e){this.pipeline=new Re(e)}renderToTexture(e,t,n=qt){return this.pipeline.execute(e,t,n)}destroy(){this.pipeline.destroy()}};x();var Zt=class{device;pool=new Map;constructor(e){this.device=e}getOrCreateTexture(e,t){let n=this.pool.get(e);if(n&&n.width===t.width&&n.height===t.height)return n;n&&n.destroy();let o=t.format??"rgba8unorm",i=this.device.createTexture({label:t.label??`vision_segmentation_${e}`,size:[t.width,t.height,1],format:o,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT});return this.pool.set(e,i),i}uploadMask(e,t,n,o){let i=t.length>=n*o*4,s=i?"rgba8unorm":"r8unorm",u=this.getOrCreateTexture(e,{width:n,height:o,format:s}),a;if(t instanceof Float32Array){a=new Uint8Array(t.length);for(let b=0;b<t.length;b++)a[b]=Math.round(Math.max(0,Math.min(1,t[b]))*255)}else a=t;let d=n*(i?4:1),l=Math.ceil(d/256)*256,p;if(l===d)p=a;else{p=new Uint8Array(l*o);for(let b=0;b<o;b++)p.set(a.subarray(b*d,(b+1)*d),b*l)}return this.device.queue.writeTexture({texture:u},p.buffer,{offset:p.byteOffset,bytesPerRow:l,rowsPerImage:o},{width:n,height:o}),u}destroy(){for(let e of this.pool.values())e.destroy();this.pool.clear()}};x();var en=In(Jt(),1);function Wn(){return j.env.FRAMEFIELDS_MODELS_DIR?Te(j.env.FRAMEFIELDS_MODELS_DIR):Te(vt(),".cache/framefields/models")}var Ce=class{_modelsDir;_baseUrl;_timeoutMs;_retries;_retryDelayMs;_verify;_fetch;_onProgress;_inflight=new Map;_buffers=new Map;_status=new Map;constructor(e={}){this._modelsDir=e.modelsDir?Te(e.modelsDir):Wn(),this._baseUrl=e.baseUrl??j.env.FRAMEFIELDS_MODELS_BASE_URL??void 0,this._timeoutMs=e.timeoutMs,this._retries=Math.max(0,e.retries??2),this._retryDelayMs=e.retryDelayMs??1e3,this._verify=e.verify!==!1,this._fetch=e.fetchImpl??globalThis.fetch,this._onProgress=e.onProgress}get modelsDir(){return this._modelsDir}pathFor(e){return wt(this._modelsDir,re[e].filename)}descriptor(e){return re[e]}urlFor(e){let t=re[e];return this._baseUrl?`${this._baseUrl.replace(/\/+$/,"")}/${t.filename}`:t.url}has(e){let t=this.pathFor(e);if(!ke(t))return!1;try{let n=xt(t).size;return this._verify?n===re[e].bytes:n>0}catch{return!1}}async evict(e){this._buffers.delete(e),this._status.set(e,"pending"),await Ge(this.pathFor(e)).catch(()=>{})}status(e){return this._status.get(e)??"pending"}statuses(){return new Map(this._status)}isLoaded(e){return this._buffers.has(e)}async ensure(e){let t=this._buffers.get(e);if(t)return t;let n=this._inflight.get(e);if(n)return n;let o=this.load(e).finally(()=>this._inflight.delete(e));return this._inflight.set(e,o),o}async preload(e){await Promise.all([...new Set(e)].map(t=>this.ensure(t)))}async load(e){let t=this.pathFor(e);if(this.has(e))return this._status.set(e,"ready"),this.readBuffer(e,t);let n=this.urlFor(e);this._status.set(e,"downloading"),ke(He(t))||kt(He(t),{recursive:!0});let o=`${t}.tmp.${Date.now()}`;try{let{buffer:i,totalBytes:s}=await this.download(e,n);if(i.byteLength===0)throw new Error(`Downloaded vision model '${e}' is empty (0 bytes).`);return this._verify&&this.verifyBytes(e,i,n),this._onProgress?.(e,i.byteLength,s||i.byteLength),await _t(o,i),await St(o,t),this._buffers.set(e,i),this._status.set(e,"ready"),i}catch(i){throw this._status.set(e,"error"),ke(o)&&await Ge(o).catch(()=>{}),i}}async download(e,t){for(let n=0;;n++){let o;try{let i=await this._fetch(t,{signal:this._timeoutMs?AbortSignal.timeout(this._timeoutMs):void 0});if(i.ok){let u=Number(i.headers.get("content-length")??0);return{buffer:new Uint8Array(await i.arrayBuffer()),totalBytes:u}}let s=new Error(`Failed to download vision model '${e}' from ${t}: HTTP ${i.status} ${i.statusText}`);if(i.status!==429&&i.status<500)throw s;o=s}catch(i){if(!(i instanceof TypeError))throw i;o=i}if(n>=this._retries)throw new Error(`Failed to download vision model '${e}' from ${t} after ${n+1} attempts: ${String(o)}`,{cause:o});await new Promise(i=>setTimeout(i,this._retryDelayMs*2**n))}}verifyBytes(e,t,n){let o=re[e];if(t.byteLength!==o.bytes)throw new Error(`Vision model '${e}' from ${n} is ${t.byteLength} bytes, expected ${o.bytes}.`);let i=(0,en.createHash)("sha256").update(t).digest("hex");if(i!==o.sha256)throw new Error(`Vision model '${e}' from ${n} failed its SHA-256 check (got ${i}, expected ${o.sha256}).`)}async readBuffer(e,t){let n=await Tt(t),o=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);return this._buffers.set(e,o),o}clearMemoryCache(){this._buffers.clear()}};x();function tn(){return{objects:[],rawDetections:[]}}function nn(){return{people:[]}}function rn(){let r=[];for(let e=0;e<17;e++)r.push({x:.5,y:.5,z:0,visibility:0});return r}x();x();var me={scores:"/Sigmoid_output_0",boxes:"/Concat_7_output_0",kernels:"/Concat_5_output_0",maskFeatures:"/bbox_head/mask_head/projection/Conv_output_0"},on=5e3,$n=Math.fround(.6),sn=Math.fround(.05),Kn=200,an=100,qn=[8,16,32],tt=8,cn=8,ln=169;function dn(r){let{scores:e,boxes:t,anchors:n,classes:o}=r,i=new Float32Array(n);for(let d=0;d<n;d++){let l=0,p=d*o;for(let b=0;b<o;b++){let y=e[p+b];y>l&&(l=y)}i[d]=l}let s=[];for(let d=0;d<n;d++)i[d]>sn&&s.push(d);s.sort((d,l)=>i[l]-i[d]||d-l),s.length>on&&(s.length=on);let u=[],a=[],c=[];for(let d=0;d<o;d++){a.length=0;for(let l of s)e[l*o+d]>sn&&a.push(l);if(a.length!==0){a.sort((l,p)=>e[p*o+d]-e[l*o+d]||l-p),c.length=0;for(let l of a){if(c.length>=Kn)break;let p=!1;for(let b of c)if(Zn(t,l,b)>$n){p=!0;break}p||(c.push(l),u.push({anchor:l,classIndex:d,score:e[l*o+d]}))}}}return u.sort((d,l)=>l.score-d.score),u.length>an&&(u.length=an),u}function Zn(r,e,t){let n=r[e*4],o=r[e*4+1],i=r[e*4+2],s=r[e*4+3],u=r[t*4],a=r[t*4+1],c=r[t*4+2],d=r[t*4+3],l=Math.min(i,c)-Math.max(n,u),p=Math.min(s,d)-Math.max(o,a);if(l<=0||p<=0)return 0;let b=l*p,y=(i-n)*(s-o)+(c-u)*(d-a)-b;return y>0?b/y:0}function Qn(r,e,t){let n=0;for(let o of qn){let i=Math.ceil(e/o),s=i*Math.ceil(t/o);if(r<n+s){let u=r-n;return{x:u%i*o,y:Math.floor(u/i)*o,stride:o}}n+=s}throw new RangeError(`anchor ${r} is out of range`)}function un(r,e,t){let{kernels:n,maskFeatures:o,maskWidth:i,maskHeight:s}=r,u=i*s,a=t&&t.length>=u?t:new Float32Array(u),c=Qn(e,r.inputWidth,r.inputHeight),d=n.subarray(e*ln,(e+1)*ln),l=0,p=80,b=144,y=152,I=160,E=168,g=1/(c.stride*tt),S=new Float32Array(2+cn),k=new Float32Array(8),L=new Float32Array(8);for(let f=0;f<s;f++){let m=(c.y-f*tt)*g;for(let v=0;v<i;v++){let T=f*i+v;S[0]=(c.x-v*tt)*g,S[1]=m;for(let P=0;P<cn;P++)S[2+P]=o[P*u+T];for(let P=0;P<8;P++){let U=d[y+P],O=l+P*10;for(let _=0;_<10;_++)U+=d[O+_]*S[_];k[P]=U>0?U:0}for(let P=0;P<8;P++){let U=d[I+P],O=p+P*8;for(let _=0;_<8;_++)U+=d[O+_]*k[_];L[P]=U>0?U:0}let R=d[E];for(let P=0;P<8;P++)R+=d[b+P]*L[P];a[T]=R}}return a}x();function sr(r){let e=new Uint8Array([8,1]),t=he(1,e);return Se([he(1,Pt.encode(r)),he(2,t)])}function gn(r,e){let t=Ne(r),n=t.find(y=>y.number===7&&y.wire===2);if(!n)throw new Error("ONNX model has no graph");let o=Ne(n.body),i=o.filter(y=>y.number===1).map(y=>({field:y,inputs:ze(y.body,1),outputs:ze(y.body,2)})),s=new Map;i.forEach((y,I)=>{for(let E of y.outputs)s.set(E,I)});let u=new Set,a=new Set,c=[...e];for(let y of e)if(!s.has(y))throw new Error(`ONNX model has no tensor '${y}'`);for(;c.length>0;){let y=c.pop();if(a.has(y))continue;a.add(y);let I=s.get(y);if(!(I===void 0||u.has(I))){u.add(I);for(let E of i[I].inputs)E&&c.push(E)}}let d=new Map;for(let y of o){if(y.number!==13)continue;let I=_e(y.body,1);I!==void 0&&d.set(I,y.body)}let l=[],p=0;for(let y of o)switch(y.number){case 1:u.has(p)&&l.push(y.raw),p++;break;case 5:{let I=_e(y.body,8);I!==void 0&&a.has(I)&&l.push(y.raw);break}case 11:case 13:{let I=_e(y.body,1);I!==void 0&&a.has(I)&&l.push(y.raw);break}case 12:break;default:l.push(y.raw)}for(let y of e)l.push(he(12,d.get(y)??sr(y)));let b=Se(l);return Se(t.map(y=>y===n?he(7,b):y.raw))}x();function rt(r){return r.texture!==void 0}var ir=4,be=class r{variant;confidence;classes;maskThreshold;featherRadius;_core;_ownsCore;constructor(e,t){this.variant=e.variant??"s",this.confidence=e.confidence??.3,this.classes=e.classes,this.maskThreshold=e.maskThreshold??.5,this.featherRadius=e.featherRadius,this._ownsCore=t===void 0,this._core=t??{store:e.store??new Ce({modelsDir:e.modelsDir,baseUrl:e.baseUrl,timeoutMs:e.timeoutMs,onProgress:e.onProgress}),provider:e.provider??Rt(),sessions:new Map,tensorScratch:new Map,runQueue:new Map,gpuInputs:new Map,instancePasses:[]}}static create(e={}){return new r(e)}derive(e){return new r({variant:this.variant,confidence:e.confidence??this.confidence,classes:"classes"in e?e.classes:this.classes,maskThreshold:e.maskThreshold??this.maskThreshold,featherRadius:"featherRadius"in e?e.featherRadius:this.featherRadius},this._core)}get modelsDir(){return this._core.store.modelsDir}get downloadStatus(){let e=new Map;for(let t of Object.keys(re))e.set(t,"pending");for(let[t,n]of this._core.store.statuses())e.set(t,n);return e}modelKeyFor(e,t=1){return Dt(e,this.variant,t)}async preload(e=["detect"]){let t=new Set;for(let n of e)n==="matte"?(t.add("selfie-square"),t.add("selfie-landscape")):t.add(this.modelKeyFor(n));await this._core.store.preload([...t]),await Promise.all([...t].map(n=>this.session(n)))}async detect(e){let t=await this.instancePass(e);return Qe({...t.outputs,masks:void 0,maskPlane:void 0},this.instanceDecodeOptions(e,t.transform)).detections}async segment(e){let t=await this.instancePass(e);return Qe(t.outputs,this.instanceDecodeOptions(e,t.transform))}async pose(e){let t=this.modelKeyFor("pose"),{outputs:n,transform:o}=await this.infer(t,e),i=ie(n,"dets",t),s=ie(n,"keypoints",t);return Yt({dets:i.data,keypoints:s.data,count:i.dims[1]??0,keypointStride:s.dims[3]??3},{confidence:this.confidence,transform:o,sourceWidth:e.width,sourceHeight:e.height})}async matte(e){let t=this.modelKeyFor("matte",e.width/e.height),[n,o]=re[t].input,{outputs:i}=await this.infer(t,e),s=ie(i,"alphas",t);return Xt(s.data,n,o,{sourceWidth:e.width,sourceHeight:e.height,maskThreshold:this.maskThreshold,...this.featherRadius!==void 0?{featherRadius:this.featherRadius}:{}})}close(){if(!this._ownsCore)return;let e=this._core;for(let t of e.sessions.values())t.then(n=>n.release()).catch(()=>{});e.sessions.clear(),e.runQueue.clear();for(let{buffer:t}of e.gpuInputs.values())t.destroy();e.gpuInputs.clear(),e.instancePasses.length=0,e.store.clearMemoryCache()}async instancePass(e){let t=this._core.instancePasses,n=rt(e)?await ge.for(e.device).contentKey(e):ur(e),o=t.find(a=>a.content===n);if(o)return o.result;let i=this.modelKeyFor("segment"),s=this.infer(i,e).then(({outputs:a,transform:c})=>({transform:c,outputs:me.scores in a?dr(a,i,c):lr(a,i)})),u={content:n,result:s};return t.push(u),t.length>ir&&t.shift(),s.catch(()=>{let a=t.indexOf(u);a>=0&&t.splice(a,1)}),s}instanceDecodeOptions(e,t){return{confidence:this.confidence,classes:this.classes,classNames:we,transform:t,sourceWidth:e.width,sourceHeight:e.height,maskThreshold:this.maskThreshold,...this.featherRadius!==void 0?{featherRadius:this.featherRadius}:{}}}infer(e,t){let n=this._core.runQueue,i=(n.get(e)??Promise.resolve()).then(()=>this.inferNow(e,t),()=>this.inferNow(e,t)),s=i.catch(()=>{});return n.set(e,s),s.then(()=>{n.get(e)===s&&n.delete(e)}),i}async inferNow(e,t){let n=await this.session(e),o=re[e],i=Ht(o.family,o.input),s=[1,3,i.height,i.width],u;if(rt(t)){if(this._core.provider.device===t.device){let y=this.gpuInput(e,t.device,i),I=ge.for(t.device).toTensor(t,i,y);return{outputs:await n.run({name:"input",data:ar,gpuBuffer:y,dims:s}),transform:I}}u=await Me(t)}else u=t;let a=3*i.width*i.height,c=this._core.tensorScratch,d=c.get(e);(!d||d.length<a)&&(d=new Float32Array(a),c.set(e,d));let{tensor:l,transform:p}=Nt(u,i,d);return{outputs:await n.run({name:"input",data:l,dims:s}),transform:p}}gpuInput(e,t,n){let o=this._core.gpuInputs,i=ge.tensorBytes(n),s=o.get(e);if(s?.device===t&&s.buffer.size>=i)return s.buffer;s?.buffer.destroy();let u=t.createBuffer({label:`vision_input_${e}`,size:i,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC});return o.set(e,{device:t,buffer:u}),u}session(e){let{sessions:t,store:n,provider:o}=this._core,i=t.get(e);return i||(i=n.ensure(e).then(s=>o.createSession(re[e].family==="rtmdet-ins"?cr(s):s)).catch(s=>{throw t.delete(e),n.evict(e),s}),t.set(e,i)),i}},ar=new Float32Array(0);function cr(r){try{return gn(r,Object.values(me))}catch{return r}}function lr(r,e){let t=ie(r,"dets",e),n=ie(r,"masks",e);return{dets:t.data,labels:ie(r,"labels",e).data,masks:n.data,count:t.dims[1]??0,maskHeight:n.dims[n.dims.length-2]??0,maskWidth:n.dims[n.dims.length-1]??0}}function dr(r,e,t){let n=ie(r,me.scores,e),o=ie(r,me.maskFeatures,e),i={scores:n.data,boxes:ie(r,me.boxes,e).data,kernels:ie(r,me.kernels,e).data,maskFeatures:o.data,anchors:n.dims[1]??0,classes:n.dims[2]??0,maskHeight:o.dims[2]??0,maskWidth:o.dims[3]??0,inputWidth:t.inputWidth,inputHeight:t.inputHeight},s=dn(i),u=new Float32Array(s.length*5),a=new Int32Array(s.length);s.forEach(({anchor:d,classIndex:l,score:p},b)=>{u.set(i.boxes.subarray(d*4,d*4+4),b*5),u[b*5+4]=p,a[b]=l});let c=new Map;return{dets:u,labels:a,count:s.length,maskWidth:i.maskWidth,maskHeight:i.maskHeight,maskLogits:!0,maskPlane:d=>{let l=c.get(d);return l||(l=un(i,s[d].anchor),c.set(d,l)),l}}}function ur(r){let{data:e}=r,t=e.byteOffset%4===0?e.byteLength>>>2:0,n=new Uint32Array(e.buffer,e.byteOffset,t),o=2166136261,i=16777619^e.byteLength;for(let s=0;s<t;s++){let u=n[s];o=Math.imul(o^u,2654435761),i=Math.imul(i^u,2246822519)^o>>>15}for(let s=t*4;s<e.length;s++)o=Math.imul(o^e[s],2654435761);return`${r.width}x${r.height}:${(o>>>0).toString(36)}:${(i>>>0).toString(36)}`}function ie(r,e,t){let n=r[e];if(!n)throw new Error(`Vision model '${t}' returned no '${e}' output (got: ${Object.keys(r).join(", ")||"none"}). Expected the ${re[t].source}.`);return n}x();function ot(r){let e;for(let t of r){if(!e){e=t;continue}let n=bn(t),o=bn(e);n!==o?n&&(e=t):(n?t.area>e.area:t.detectionIndex<e.detectionIndex)&&(e=t)}return e}function bn(r){return r.category.toLowerCase()==="person"}function Ee(r){let{mask:e,width:t,height:n}=r,o=t,i=n,s=-1,u=-1;for(let a=0;a<n;a++){let c=a*t;for(let d=0;d<t;d++)e[c+d]!==0&&(d<o&&(o=d),d>s&&(s=d),a<i&&(i=a),a>u&&(u=a))}return s<0?null:{x0:o,y0:i,x1:s,y1:u}}function yn(r,e=.5,t=2){let n=ot(r);if(!n)return;let o=Ee(n);if(!o)return n;let i=Le(o),s=r.filter(c=>{if(c===n)return!1;let d=Ee(c);return d!==null&&Le(d)<=i*t&&mr(o,d)>=e});if(s.length===0)return n;let u=n.mask.slice();for(let c of s){let d=c.mask;for(let l=0;l<u.length;l++)d[l]>u[l]&&(u[l]=d[l])}let a=0;for(let c=0;c<u.length;c++)a+=u[c];return a=Math.round(a/255),{...n,mask:u,area:a,coverage:a/(n.width*n.height)}}function Le(r){return(r.x1-r.x0+1)*(r.y1-r.y0+1)}function mr(r,e){let t=Math.min(r.x1,e.x1)-Math.max(r.x0,e.x0)+1,n=Math.min(r.y1,e.y1)-Math.max(r.y0,e.y0)+1;return t<=0||n<=0?0:t*n/Math.min(Le(r),Le(e))}x();x();var Ae=class{width;height;fovRad;focalDistance;constructor(e){this.width=e.width,this.height=e.height;let t=e.fov??60;this.fovRad=t*Math.PI/180,this.focalDistance=e.cameraDistance??this.height/2/Math.tan(this.fovRad/2)}projectNormalizedLandmark(e,t=0){let n=e.x*this.width,o=e.y*this.height,i=e.z*this.width+t,s=Math.min(i,this.focalDistance-10),u=this.focalDistance/(this.focalDistance-s);return{x:n,y:o,z:i,scale:Math.max(.1,u)}}projectWorldLandmark(e,t=2,n=800){let o=this.width/2,i=this.height/2,s=e.x*n,u=e.y*n,a=(e.z+t)*n,c=Math.min(a,this.focalDistance-10),d=this.focalDistance/(this.focalDistance-c);return{x:o+s*d,y:i+u*d,z:a,scale:Math.max(.1,d)}}};x();function st(r){if(r.boundingBox&&r.boundingBox.width>0&&r.boundingBox.height>0)return{originX:r.boundingBox.originX,originY:r.boundingBox.originY,width:r.boundingBox.width,height:r.boundingBox.height};let e=1/0,t=1/0,n=-1/0,o=-1/0,i=0;for(let s of r.keypoints)s.visibility>.1&&(i++,s.x<e&&(e=s.x),s.y<t&&(t=s.y),s.x>n&&(n=s.x),s.y>o&&(o=s.y));return i===0||e>=n||t>=o?{originX:r.boundingBox?.originX??0,originY:r.boundingBox?.originY??0,width:r.boundingBox?.width??0,height:r.boundingBox?.height??0}:{originX:e,originY:t,width:n-e,height:o-t}}function xn(r,e,t=.15){if(r.length===0)return[];let n=e.filter(a=>a.category.toLowerCase()==="person"&&a.active);if(n.length===0)return[...r];let o=[];for(let a=0;a<r.length;a++){let c=r[a];if(c.trackId!==void 0)continue;let d=st(c),l=d.width<=1.05&&d.height<=1.05;for(let p of n){let b=l&&p.boundingBox.normalizedWidth>0?{originX:p.boundingBox.normalizedX,originY:p.boundingBox.normalizedY,width:p.boundingBox.normalizedWidth,height:p.boundingBox.normalizedHeight}:p.boundingBox,y=le(d,b);y>=t&&o.push({personIdx:a,trackId:p.trackId,iou:y})}}o.sort((a,c)=>c.iou-a.iou);let i=new Set,s=new Set,u=new Map;for(let a of o)i.has(a.personIdx)||s.has(a.trackId)||(i.add(a.personIdx),s.add(a.trackId),u.set(a.personIdx,a.trackId));return r.length===1&&n.length===1&&!u.has(0)&&r[0].trackId===void 0&&u.set(0,n[0].trackId),r.map((a,c)=>{if(a.trackId!==void 0)return a;let d=u.get(c);return d!==void 0?{...a,trackId:d}:a})}var Ve=class{objects;poseLandmarks;masks;segmentation;classes;poseLandmarksTensor;objectsTensor;masksTensor;histogramTensor;_totalFrames;_fps;_width;_height;_transformer;_stencilTexture;_poseCache=new Map;_objectCache=new Map;_maskCache=new Map;_matteCache=new Map;_poseLmCache=new Map;_trackCache=new Map;_categoryCache=new Map;_classCache=new Map;_maskTrackCache=new Map;_registeredSignals=new Set;constructor(e={}){this._totalFrames=e.totalFrames??120,this._fps=e.fps??24,this._width=e.width??1920,this._height=e.height??1080,this._transformer=new Ae({width:this._width,height:this._height,fov:e.cameraFov??60});let t=this,n=(f,m)=>{let v=gt(f,m);return this._registeredSignals.add(v),v},o=f=>this.getPoseResult(f).people[0]?.keypoints??rn(),i=(f,m)=>{let v=_=>o(_)[f]??{x:.5,y:.5,z:0},T=n(_=>v(_.frame).x,{fps:this._fps,label:`${m}_x`}),R=n(_=>v(_.frame).y,{fps:this._fps,label:`${m}_y`}),P=n(_=>v(_.frame).z??0,{fps:this._fps,label:`${m}_z`}),U=n(_=>this._transformer.projectNormalizedLandmark(v(_.frame)).x,{fps:this._fps,label:`${m}_screenX`}),O=n(_=>this._transformer.projectNormalizedLandmark(v(_.frame)).y,{fps:this._fps,label:`${m}_screenY`});return{x:T,y:R,z:P,screenX:U,screenY:O}},s=f=>{let m=this._poseLmCache.get(f);return m||(m=i(f,et[f]??`kpt_${f}`),this._poseLmCache.set(f,m)),m},u={nose:s(w.NOSE),leftEye:s(w.LEFT_EYE),rightEye:s(w.RIGHT_EYE),leftEar:s(w.LEFT_EAR),rightEar:s(w.RIGHT_EAR),shoulder:s(w.LEFT_SHOULDER),leftShoulder:s(w.LEFT_SHOULDER),rightShoulder:s(w.RIGHT_SHOULDER),leftElbow:s(w.LEFT_ELBOW),rightElbow:s(w.RIGHT_ELBOW),leftWrist:s(w.LEFT_WRIST),rightWrist:s(w.RIGHT_WRIST),leftHip:s(w.LEFT_HIP),rightHip:s(w.RIGHT_HIP),leftKnee:s(w.LEFT_KNEE),rightKnee:s(w.RIGHT_KNEE),leftAnkle:s(w.LEFT_ANKLE),rightAnkle:s(w.RIGHT_ANKLE),get:s};this.poseLandmarks=new Proxy(u,{get(f,m,v){return typeof m=="string"&&/^\d+$/.test(m)?f.get(Number(m)):typeof m=="number"?f.get(m):Reflect.get(f,m,v)}});let a=(f,m="unknown")=>({trackId:f,category:m,score:0,boundingBox:{originX:this._width/2,originY:this._height/2,width:0,height:0,normalizedX:.5,normalizedY:.5,normalizedWidth:0,normalizedHeight:0},centerX:this._width/2,centerY:this._height/2,normalizedCenterX:.5,normalizedCenterY:.5,velocity:{vx:0,vy:0},speed:0,age:0,hits:0,active:!1,isCoasting:!1}),c=(f,m)=>{let v=n(O=>f(O.frame).sx,{fps:this._fps,label:`${m}_screenX`}),T=n(O=>f(O.frame).sy,{fps:this._fps,label:`${m}_screenY`}),R=n(O=>this._width>0?f(O.frame).sx/this._width:0,{fps:this._fps,label:`${m}_x`}),P=n(O=>this._height>0?f(O.frame).sy/this._height:0,{fps:this._fps,label:`${m}_y`}),U=n(()=>0,{fps:this._fps,label:`${m}_z`});return{x:R,y:P,z:U,screenX:v,screenY:T}},d=(f,m,v)=>{let T=D=>{let A=t.getPoseResult(D);if(A.people.length===0)return;let B=f(D),$=v??B.trackId,z=A.people.find(q=>q.trackId===$);if(z)return z;if(!B.active&&A.people.length>1)return;if(A.people.length===1)return A.people[0];let Y,N=.1;for(let q of A.people){let F=st(q),K=F.width<=1.05&&F.height<=1.05&&B.boundingBox.normalizedWidth>0?{originX:B.boundingBox.normalizedX,originY:B.boundingBox.normalizedY,width:B.boundingBox.normalizedWidth,height:B.boundingBox.normalizedHeight}:B.boundingBox,ee=le(F,K);ee>N&&(N=ee,Y=q)}return Y},R=n(D=>T(D.frame)?1:0,{fps:this._fps,label:`${m}_hasPose`}),P=(D,A)=>{let B=F=>{let K=T(F)?.keypoints[D];if(K&&K.visibility>.05)return{x:K.x,y:K.y,z:0};let ee=f(F);return{x:ee.normalizedCenterX,y:ee.normalizedCenterY,z:0}},$=n(F=>B(F.frame).x,{fps:this._fps,label:`${m}_${A}_x`}),z=n(F=>B(F.frame).y,{fps:this._fps,label:`${m}_${A}_y`}),Y=n(F=>B(F.frame).z??0,{fps:this._fps,label:`${m}_${A}_z`}),N=n(F=>t._transformer.projectNormalizedLandmark(B(F.frame)).x,{fps:this._fps,label:`${m}_${A}_screenX`}),q=n(F=>t._transformer.projectNormalizedLandmark(B(F.frame)).y,{fps:this._fps,label:`${m}_${A}_screenY`});return{x:$,y:z,z:Y,screenX:N,screenY:q}},U=new Map,O=D=>{let A=U.get(D);return A||(A=P(D,et[D]??`kpt_${D}`),U.set(D,A)),A},_=n(D=>{let A=D.frame,B=T(A);if(!B)return 0;let $=T(Math.max(0,A-1)),z=B.keypoints,Y=$?.keypoints,N=z[w.RIGHT_WRIST],q=Y?.[w.RIGHT_WRIST],F=0;if(N&&q&&N.visibility>.1&&q.visibility>.1){let X=(N.x-q.x)*this._width,oe=(N.y-q.y)*this._height;F=Math.sqrt(X*X+oe*oe)*this._fps}let J=z[w.LEFT_WRIST],K=Y?.[w.LEFT_WRIST],ee=0;if(J&&K&&J.visibility>.1&&K.visibility>.1){let X=(J.x-K.x)*this._width,oe=(J.y-K.y)*this._height;ee=Math.sqrt(X*X+oe*oe)*this._fps}return Math.max(F,ee)},{fps:this._fps,label:`${m}_wristSpeed`}),h=n(D=>{let A=T(D.frame);if(!A)return 0;let B=A.keypoints,$=B[w.LEFT_WRIST],z=B[w.LEFT_SHOULDER],Y=B[w.RIGHT_WRIST],N=B[w.RIGHT_SHOULDER],q=$&&z&&$.visibility>.1&&z.visibility>.1&&$.y<z.y,F=Y&&N&&Y.visibility>.1&&N.visibility>.1&&Y.y<N.y;return q||F?1:0},{fps:this._fps,label:`${m}_handRaised`}),C=n(D=>{let A=T(D.frame);if(!A)return 0;let B=A.keypoints,$=B[w.LEFT_SHOULDER],z=B[w.RIGHT_SHOULDER],Y=B[w.LEFT_HIP],N=B[w.RIGHT_HIP];if(!$||!z||!Y||!N)return 0;let q=($.x+z.x)/2*this._width,F=($.y+z.y)/2*this._height,J=(Y.x+N.x)/2*this._width,K=(Y.y+N.y)/2*this._height,ee=q-J,X=F-K;return ee===0&&X===0?0:Math.atan2(ee,-X)},{fps:this._fps,label:`${m}_bodyTiltAngle`}),H={hasPose:R,wristSpeed:_,handRaised:h,bodyTiltAngle:C,nose:O(w.NOSE),leftEye:O(w.LEFT_EYE),rightEye:O(w.RIGHT_EYE),leftEar:O(w.LEFT_EAR),rightEar:O(w.RIGHT_EAR),shoulder:O(w.LEFT_SHOULDER),leftShoulder:O(w.LEFT_SHOULDER),rightShoulder:O(w.RIGHT_SHOULDER),leftElbow:O(w.LEFT_ELBOW),rightElbow:O(w.RIGHT_ELBOW),leftWrist:O(w.LEFT_WRIST),rightWrist:O(w.RIGHT_WRIST),leftHip:O(w.LEFT_HIP),rightHip:O(w.RIGHT_HIP),leftKnee:O(w.LEFT_KNEE),rightKnee:O(w.RIGHT_KNEE),leftAnkle:O(w.LEFT_ANKLE),rightAnkle:O(w.RIGHT_ANKLE),get:O};return new Proxy(H,{get(D,A,B){return typeof A=="string"&&/^\d+$/.test(A)?D.get(Number(A)):typeof A=="number"?D.get(A):Reflect.get(D,A,B)}})},l=(f,m,v,T)=>{let R=h=>f(h).boundingBox,P=d(f,`${m}_pose`,T),U=(h,C,H)=>c(D=>({sx:C(R(D)),sy:H(R(D))}),`${m}_${h}`),O=U("center",h=>h.originX+h.width/2,h=>h.originY+h.height/2),_=n(h=>f(h.frame).speed,{fps:this._fps,label:`${m}_speed`});return{get trackId(){return T??f(0).trackId},get category(){return v??f(0).category},bounds:{x:n(h=>R(h.frame).normalizedX,{fps:this._fps,label:`${m}_normX`}),y:n(h=>R(h.frame).normalizedY,{fps:this._fps,label:`${m}_normY`}),width:n(h=>R(h.frame).normalizedWidth,{fps:this._fps,label:`${m}_normWidth`}),height:n(h=>R(h.frame).normalizedHeight,{fps:this._fps,label:`${m}_normHeight`}),screenX:n(h=>R(h.frame).originX,{fps:this._fps,label:`${m}_screenX`}),screenY:n(h=>R(h.frame).originY,{fps:this._fps,label:`${m}_screenY`}),screenWidth:n(h=>R(h.frame).width,{fps:this._fps,label:`${m}_screenWidth`}),screenHeight:n(h=>R(h.frame).height,{fps:this._fps,label:`${m}_screenHeight`}),aspectRatio:n(h=>{let C=R(h.frame);return C.height>0?C.width/C.height:1},{fps:this._fps,label:`${m}_aspectRatio`}),area:n(h=>{let C=R(h.frame);return C.width*C.height},{fps:this._fps,label:`${m}_area`})},anchors:{topLeft:U("topLeft",h=>h.originX,h=>h.originY),topCenter:U("topCenter",h=>h.originX+h.width/2,h=>h.originY),topRight:U("topRight",h=>h.originX+h.width,h=>h.originY),centerLeft:U("centerLeft",h=>h.originX,h=>h.originY+h.height/2),center:O,centerRight:U("centerRight",h=>h.originX+h.width,h=>h.originY+h.height/2),bottomLeft:U("bottomLeft",h=>h.originX,h=>h.originY+h.height),bottomCenter:U("bottomCenter",h=>h.originX+h.width/2,h=>h.originY+h.height),bottomRight:U("bottomRight",h=>h.originX+h.width,h=>h.originY+h.height)},kinematics:{vx:n(h=>f(h.frame).velocity.vx,{fps:this._fps,label:`${m}_vx`}),vy:n(h=>f(h.frame).velocity.vy,{fps:this._fps,label:`${m}_vy`}),speed:_,acceleration:_.velocity(1),headingRad:n(h=>{let C=f(h.frame).velocity;return Math.atan2(C.vy,C.vx)},{fps:this._fps,label:`${m}_headingRad`}),headingDeg:n(h=>{let C=f(h.frame).velocity;return Math.atan2(C.vy,C.vx)*180/Math.PI},{fps:this._fps,label:`${m}_headingDeg`})},confidence:n(h=>f(h.frame).score,{fps:this._fps,label:`${m}_score`}),active:n(h=>f(h.frame).active?1:0,{fps:this._fps,label:`${m}_active`}),isCoasting:n(h=>f(h.frame).isCoasting?1:0,{fps:this._fps,label:`${m}_isCoasting`}),age:n(h=>f(h.frame).age,{fps:this._fps,label:`${m}_age`}),pose:P,center:O,topCenter:this.__pending,bottomCenter:O,topLeft:O,bottomLeft:O}},p=(f,m,v,T)=>{let R=l(f,m,v,T),P=R.anchors;return Object.assign(R,{topCenter:P.topCenter,bottomCenter:P.bottomCenter,topLeft:P.topLeft,bottomLeft:P.bottomLeft}),R},b=f=>{let m=this._trackCache.get(f);return m||(m=p(v=>this.getObjectResult(v).objects.find(T=>T.trackId===f)??a(f),`track_${f}`,void 0,f),this._trackCache.set(f,m)),m},y=(f,m=0)=>{let v=`${f.toLowerCase()}_${m}`,T=this._categoryCache.get(v);return T||(T=p(R=>this.getObjectResult(R).objects.filter(O=>O.category.toLowerCase()===f.toLowerCase()&&O.active)[m]??a(0,f),`cat_${f}_${m}`,f),this._categoryCache.set(v,T)),T},I=p(f=>{let m=this.getObjectResult(f);if(m.objects.length===0)return a(0);let v=m.objects[0];for(let T=1;T<m.objects.length;T++)m.objects[T].score>v.score&&(v=m.objects[T]);return v},"primary_object"),E=f=>{let m=new Set;for(let v of this.getObjectResult(f).objects)v.active&&m.add(v.category);return Array.from(m).sort()},g=f=>{let m=f.toLowerCase(),v=this._classCache.get(m);return v||(v={count:n(T=>this.getObjectResult(T.frame).objects.filter(R=>R.active&&R.category.toLowerCase()===m).length,{fps:this._fps,label:`class_${m}_count`}),maxConfidence:n(T=>{let R=0;for(let P of this.getObjectResult(T.frame).objects)P.active&&P.category.toLowerCase()===m&&P.score>R&&(R=P.score);return R},{fps:this._fps,label:`class_${m}_maxConf`}),present:n(T=>this.getObjectResult(T.frame).objects.some(R=>R.active&&R.category.toLowerCase()===m)?1:0,{fps:this._fps,label:`class_${m}_present`}),primary:y(f)},this._classCache.set(m,v),v)};this.classes={get:g,get names(){return E(ne.value)},histogram:{get:f=>t.getClassHistogramTensor(f?.frame??ne.value),get value(){return t.getClassHistogramTensor(ne.value)}}},this.objects={get:b,byCategory:y,primary:I,count:n(f=>this.getObjectResult(f.frame).objects.filter(m=>m.active).length,{fps:this._fps,label:"tracked_objects_count"}),hasCategory:f=>g(f).present,getActiveTracks:f=>this.getObjectResult(f).objects.filter(m=>m.active),get detectedCategories(){return E(ne.value)}};let S=(f,m)=>this.getMaskResult(f).find(v=>v.trackId===m),k=f=>ot(this.getMaskResult(f)),L=(f,m)=>{let v=T=>{let R=f(T);if(!(!R||R.trackId===void 0))return this.getObjectResult(T).objects.find(P=>P.trackId===R.trackId)};return{get trackId(){return f(ne.value)?.trackId??0},get category(){return f(ne.value)?.category??"unknown"},area:n(T=>f(T.frame)?.area??0,{fps:this._fps,label:`${m}_area`}),coverage:n(T=>f(T.frame)?.coverage??0,{fps:this._fps,label:`${m}_coverage`}),solidity:n(T=>{let R=f(T.frame),P=v(T.frame);if(!R||!P)return 0;let U=P.boundingBox.width*P.boundingBox.height;return U>0?R.area/U:0},{fps:this._fps,label:`${m}_solidity`}),bboxFill:n(T=>{let R=f(T.frame);if(!R||R.width*R.height===0)return 0;let P=v(T.frame);return P?P.boundingBox.width*P.boundingBox.height/(R.width*R.height):0},{fps:this._fps,label:`${m}_bboxFill`})}};this.masks={get:f=>{let m=this._maskTrackCache.get(f);return m||(m=L(v=>S(v,f),`mask_${f}`),this._maskTrackCache.set(f,m)),m},subject:L(k,"subject"),count:n(f=>new Set(this.getMaskResult(f.frame).map(m=>m.trackId??-1)).size,{fps:this._fps,label:"mask_count"})},this.segmentation={humanSilhouette:this.masks.subject,subject:this.masks.subject,instanceMasks:this.masks,matte:{coverage:n(f=>t.getMatteResult(f.frame)?.coverage??0,{fps:this._fps,label:"matte_coverage"}),at:f=>t.getMatteResult(f)},get stencilTexture(){return t._stencilTexture}},this.poseLandmarksTensor={get:f=>t.getPoseLandmarksTensor(f?.frame??ne.value),get value(){return t.getPoseLandmarksTensor(ne.value)}},this.objectsTensor={get:f=>t.getObjectsTensor(f?.frame??ne.value),get value(){return t.getObjectsTensor(ne.value)}},this.masksTensor={get:f=>t.getMasksTensor(f?.frame??ne.value),get value(){return t.getMasksTensor(ne.value)}},this.histogramTensor={get:f=>t.getClassHistogramTensor(f?.frame??ne.value),get value(){return t.getClassHistogramTensor(ne.value)}}}setStencilTexture(e){this._stencilTexture=e}get stencilTexture(){return this._stencilTexture}latestAtOrBefore(e,t,n=8){let o=this.clamp(t),i=Math.max(0,o-n);for(let s=o;s>=i;s--){let u=e.get(s);if(u!==void 0)return u}}invalidateSignals(){for(let e of this._registeredSignals)e.invalidate()}setPoseResult(e,t){this._poseCache.set(this.clamp(e),t),this.invalidateSignals()}getPoseResult(e){return this.latestAtOrBefore(this._poseCache,e)??nn()}setObjectResult(e,t){let n="objects"in t?t:{objects:t,rawDetections:[]};this._objectCache.set(this.clamp(e),{objects:n.objects,rawDetections:n.rawDetections??[]}),this.invalidateSignals()}getObjectResult(e){return this.latestAtOrBefore(this._objectCache,e)??tn()}setMaskResult(e,t){this._maskCache.set(this.clamp(e),t),this.invalidateSignals()}getMaskResult(e){return this.latestAtOrBefore(this._maskCache,e)??[]}setMatteResult(e,t){this._matteCache.set(this.clamp(e),t),this.invalidateSignals()}getMatteResult(e){return this.latestAtOrBefore(this._matteCache,e)}summary(e=ne.value){let t=this.clamp(e),n=this.getObjectResult(t),o=n.objects.map(u=>({trackId:u.trackId,category:u.category,score:u.score,center:[u.centerX,u.centerY],speed:u.speed,active:u.active})),i=new Set;for(let u of n.objects)u.active&&i.add(u.category);let s={};for(let u of this.getMaskResult(t))s[u.category]=(s[u.category]??0)+1;return{frame:t,objects:o,classes:Array.from(i).sort(),masks:s}}getPoseLandmarksTensor(e){let n=this.getPoseResult(e).people[0]?.keypoints??[],o=new Float32Array(51);for(let i=0;i<17;i++)o[i*3]=n[i]?.x??.5,o[i*3+1]=n[i]?.y??.5,o[i*3+2]=n[i]?.visibility??0;return{data:o,shape:[17,3],dtype:"float32"}}getObjectsTensor(e,t=16){let n=this.getObjectResult(e),o=new Float32Array(t*8),i=Math.min(t,n.objects.length);for(let s=0;s<i;s++){let u=n.objects[s],a=s*8,c=0;for(let d=0;d<u.category.length;d++)c=c*31+u.category.charCodeAt(d)&65535;o[a]=u.active?1:0,o[a+1]=c,o[a+2]=u.centerX,o[a+3]=u.centerY,o[a+4]=u.boundingBox.width,o[a+5]=u.boundingBox.height,o[a+6]=u.velocity.vx,o[a+7]=u.velocity.vy}return{data:o,shape:[t,8],dtype:"float32"}}getMasksTensor(e,t=16){let n=this.getMaskResult(e),o=new Float32Array(t*2),i=Math.min(t,n.length);for(let s=0;s<i;s++){let u=n[s];o[s*2]=u.coverage;let a=this.getObjectResult(e).objects.find(d=>d.trackId===u.trackId),c=a?a.boundingBox.width*a.boundingBox.height:0;o[s*2+1]=c>0?u.area/c:0}return{data:o,shape:[t,2],dtype:"float32"}}getClassHistogramTensor(e,t=80){let n=new Float32Array(t);for(let o of this.getObjectResult(e).objects)if(o.active){let i=fr.get(o.category.toLowerCase());i!==void 0&&(n[i]+=1)}return{data:n,shape:[t],dtype:"float32"}}clamp(e){return Math.max(0,Math.min(this._totalFrames-1,Math.round(e)))}};var fr=new Map(we.map((r,e)=>[r,e]));x();function kn(r,e,t={}){let n=t.offsetX??0,o=t.offsetY??0,i=t.offsetZ??0;if(!e||typeof e!="object")return r;if("screenX"in e&&e.screenX&&typeof e.screenX=="object"){let s=e;r.x=n!==0?s.screenX.add(n):s.screenX,r.y=o!==0?s.screenY.add(o):s.screenY,r.z=i!==0?s.z.add(i):s.z}else if("x"in e&&typeof e.x=="object"&&e.x!==null){let s=e;r.x=n!==0?s.x.add(n):s.x,r.y=o!==0?s.y.add(o):s.y,r.z=i!==0?s.z.add(i):s.z}else{let s=e;r.x=(s.screenX??s.x)+n,r.y=(s.screenY??s.y)+o,r.z=(s.z??0)+i}return r}function gi(r,e,t={}){if(!e||typeof e!="object")return r;if("anchors"in e&&e.anchors){let n=e,o=t.anchor??(t.matchWidth||t.matchHeight?"topLeft":"center"),i=n.anchors[o]??n.center,s=i;return t.smoothFrames&&t.smoothFrames>1&&(s={x:i.x.smooth(t.smoothFrames),y:i.y.smooth(t.smoothFrames),z:i.z,screenX:i.screenX.smooth(t.smoothFrames),screenY:i.screenY.smooth(t.smoothFrames)}),t.matchWidth&&(r.width=t.smoothFrames&&t.smoothFrames>1?n.bounds.screenWidth.smooth(t.smoothFrames):n.bounds.screenWidth),t.matchHeight&&(r.height=t.smoothFrames&&t.smoothFrames>1?n.bounds.screenHeight.smooth(t.smoothFrames):n.bounds.screenHeight),t.hideWhenLost&&(r.opacity=n.active),kn(r,s,t)}return kn(r,e,t)}x();function hr(r){let e=[];return r.enableDetection===!0&&e.push("detect"),r.enableSegmentation===!0&&e.push("segment"),r.enablePose===!0&&e.push("pose"),r.enableMatte===!0&&e.push("matte"),e.length>0?e:["detect"]}var it=class r{id;kind="vision";source;config;vision;_runner;_runnerOptions;constructor(e,t={},n={},o={}){this.id=`vision-${Math.random().toString(36).slice(2,9)}`,this.source=e,this.config=t,this._runnerOptions=o,this.vision=new Ve({...n,config:t})}runner(){if(!this._runner){let{variant:e,confidence:t,classes:n,modelsDir:o,baseUrl:i,maskThreshold:s,featherRadius:u}=this.config;this._runner=be.create({...this._runnerOptions,...e!==void 0?{variant:e}:{},...t!==void 0?{confidence:t}:{},...n!==void 0?{classes:n}:{},...o!==void 0?{modelsDir:o}:{},...i!==void 0?{baseUrl:i}:{},...s!==void 0?{maskThreshold:s}:{},...u!==void 0?{featherRadius:u}:{}})}return this._runner}async ready(){let e=this.runner();return await e.preload(hr(this.config)),e}close(){this._runner?.close(),this._runner=void 0}static attach(e,t={},n={}){let o=new r(e,t,n),i=o.vision;return Object.defineProperties(i,{node:{value:o.toNode(),enumerable:!0},ready:{value:()=>o.ready()},runner:{value:()=>o.runner()},close:{value:()=>o.close()}}),i}toNode(){return{id:this.id,kind:"vision",source:this.source,config:this.config}}};x();var at=new Uint8Array(0),Tn=new Uint32Array(0);function pr(r,e,t){at.length<r.length&&(at=new Uint8Array(r.length),Tn=new Uint32Array(r.length));let n=at,o=Tn,i=0,s=0;for(let u=1;u<=r.length;u++)(u===r.length||r[u]!==r[s])&&(n[i]=r[s],o[i]=u-s,i++,s=u);return{width:e,height:t,values:n.slice(0,i),lengths:o.slice(0,i)}}function gr(r){let e=new Uint8Array(r.width*r.height),t=0;for(let n=0;n<r.values.length;n++){let o=t+r.lengths[n];r.values[n]!==0&&e.fill(r.values[n],t,o),t=o}return e}function _n(r){return r.values.byteLength+r.lengths.byteLength}function lt(r){let{mask:e,...t}=r;return{...t,rle:pr(e,r.width,r.height)}}function dt(r){let{rle:e,...t}=r;return{...t,mask:gr(e)}}function ct(r){let e=512+r.detections.length*128+r.objects.length*256;for(let t of r.masks??[])e+=_n(t.rle);return r.subject&&(e+=_n(r.subject.mask.rle)),e}var je=class{constructor(e=256*1024*1024){this.maxBytes=e}maxBytes;entries=new Map;bytes=0;get(e,t){let n=`${e}#${t}`,o=this.entries.get(n);return o&&(this.entries.delete(n),this.entries.set(n,o)),o}set(e,t,n){let o=`${e}#${t}`,i=this.entries.get(o);i&&(this.bytes-=ct(i),this.entries.delete(o)),this.entries.set(o,n),this.bytes+=ct(n);for(let[s,u]of this.entries){if(this.bytes<=this.maxBytes)break;this.entries.delete(s),this.bytes-=ct(u)}}clear(){this.entries.clear(),this.bytes=0}get size(){return this.entries.size}};x();var br=`
|
|
137
|
+
struct Params {
|
|
138
|
+
mode: u32, // 0 matte, 1 mask, 2 crop
|
|
139
|
+
_pad: u32,
|
|
140
|
+
cropMin: vec2<f32>, // uv of the subject bounds (crop)
|
|
141
|
+
cropMax: vec2<f32>,
|
|
142
|
+
_pad2: vec2<f32>,
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
@group(0) @binding(0) var<uniform> params: Params;
|
|
146
|
+
@group(0) @binding(1) var picture: texture_2d<f32>;
|
|
147
|
+
@group(0) @binding(2) var mask: texture_2d<f32>;
|
|
148
|
+
@group(0) @binding(3) var samp: sampler;
|
|
149
|
+
|
|
150
|
+
struct VSOut {
|
|
151
|
+
@builtin(position) pos: vec4<f32>,
|
|
152
|
+
@location(0) uv: vec2<f32>,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
@vertex fn vs(@builtin(vertex_index) i: u32) -> VSOut {
|
|
156
|
+
var p = array<vec2<f32>, 3>(vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0));
|
|
157
|
+
var out: VSOut;
|
|
158
|
+
out.pos = vec4(p[i], 0.0, 1.0);
|
|
159
|
+
out.uv = vec2(p[i].x * 0.5 + 0.5, 0.5 - p[i].y * 0.5);
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
|
|
164
|
+
var uv = in.uv;
|
|
165
|
+
if (params.mode == 2u) {
|
|
166
|
+
uv = mix(params.cropMin, params.cropMax, uv);
|
|
167
|
+
}
|
|
168
|
+
let m = textureSampleLevel(mask, samp, uv, 0.0).r;
|
|
169
|
+
if (params.mode == 1u) {
|
|
170
|
+
return vec4(m, m, m, 1.0);
|
|
171
|
+
}
|
|
172
|
+
return textureSampleLevel(picture, samp, uv, 0.0) * m;
|
|
173
|
+
}
|
|
174
|
+
`,Ue=class{constructor(e,t){this.device=e;let n=e.createShaderModule({label:"vision_matte_composite",code:br});this.pipeline=e.createRenderPipeline({label:"vision_matte_composite",layout:"auto",vertex:{module:n,entryPoint:"vs"},fragment:{module:n,entryPoint:"fs",targets:[{format:t}]},primitive:{topology:"triangle-list"}}),this.sampler=e.createSampler({magFilter:"linear",minFilter:"linear"})}device;pipeline;sampler;uniforms=[];uniformIndex=0;masks=new Map;uploadMask(e,t,n,o){let i=this.masks.get(e);(!i||i.width!==n||i.height!==o)&&(i?.destroy(),i=this.device.createTexture({label:`vision_mask_${e}`,size:[n,o],format:"r8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST}),this.masks.set(e,i));let s=Math.ceil(n/256)*256,u=t;if(s!==n){u=new Uint8Array(s*o);for(let a=0;a<o;a++)u.set(t.subarray(a*n,(a+1)*n),a*s)}return this.device.queue.writeTexture({texture:i},u.buffer,{offset:u.byteOffset,bytesPerRow:s,rowsPerImage:o},{width:n,height:o}),i}draw(e,t,n,o,i,s){let u=o.width,a=o.height,c=new Float32Array(8),d=new Uint32Array(c.buffer);d[0]=i==="matte"?0:i==="mask"?1:2,i==="crop"&&s?(c[2]=s.x0/u,c[3]=s.y0/a,c[4]=(s.x1+1)/u,c[5]=(s.y1+1)/a):(c[2]=0,c[3]=0,c[4]=1,c[5]=1,i==="crop"&&(d[0]=0)),this.uniformIndex>=this.uniforms.length&&this.uniforms.push(this.device.createBuffer({size:c.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}));let l=this.uniforms[this.uniformIndex];this.uniformIndex=(this.uniformIndex+1)%16,this.device.queue.writeBuffer(l,0,c);let p=this.device.createBindGroup({layout:this.pipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:l}},{binding:1,resource:n.createView()},{binding:2,resource:o.createView()},{binding:3,resource:this.sampler}]}),b=e.beginRenderPass({label:"vision_matte_composite",colorAttachments:[{view:t,loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});b.setPipeline(this.pipeline),b.setBindGroup(0,p),b.draw(3),b.end()}};var ye=new Map,yr=4,ut=null,Be=null,Sn=null,wn=new je,vn=new Map,xr=new Map,kr=new Map,Tr=new Map,Pn=new Map,mt=new WeakMap,fe=new Map,ft=new Map,_r=3;function ht(r,e,t,n,o,i){let s=r.get(t);return(!s||s.width!==n.width||s.height!==n.height||s.format!==n.format)&&(s?.destroy(),s=e.createTexture({size:[n.width,n.height],format:n.format,usage:o,label:i}),r.set(t,s)),s}var Sr=(r,e,t)=>ht(xr,r,e,t,GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING,"vision_held_frame"),wr=(r,e,t)=>ht(kr,r,e,t,GPUTextureUsage.COPY_DST|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,"vision_analysis_frame"),vr=(r,e,t)=>ht(Tr,r,e,t,GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,"vision_matte");function Pr(r,e,t,n,o){let i=e;return JSON.stringify([r,i?.operation?.id??i?.id??null,n,o,t.mode??"passthrough",t.variant,t.confidence,t.classes,t.maskThreshold,t.featherRadius,t.matteSource,t.keyBackground===!0,t.maxMissedFrames])}function Mr(r,e,t){let n=r.backgroundKeyThreshold;return typeof n=="number"?n:typeof n?.get=="function"?Number(n.get({frame:e,fps:t})):typeof n?._value=="number"?Number(n._value):70}function Rr(r,e,t){if(r)return ft.set(e,{mask:r,frame:t}),r;let n=ft.get(e);if(n&&t-n.frame<=_r)return n.mask}function Ir(r){let e={variant:r.variant,modelsDir:r.modelsDir,baseUrl:r.baseUrl},t=JSON.stringify(e),n=ye.get(t);if(!n){if(ye.size>=yr){let[u,a]=ye.entries().next().value;a.runner.close(),ye.delete(u)}n={runner:be.create(e),derived:new Map},ye.set(t,n)}let o={confidence:r.confidence,classes:r.classes,maskThreshold:r.maskThreshold,featherRadius:r.featherRadius},i=JSON.stringify(o),s=n.derived.get(i);return s||(s=n.runner.derive(o),n.derived.set(i,s)),s}function Or(r,e){let t=Pn.get(r);return t||(t=new pe({maxMissedFrames:e.maxMissedFrames??15}),Pn.set(r,t)),t}function Cr(r,e,t){return e<=0||t<=0?r:{people:r.people.map(n=>({...n,keypoints:n.keypoints.map(o=>({x:o.x/e,y:o.y/t,visibility:o.visibility}))}))}}function Er(r,e){return r.map(t=>{let{cx:n,cy:o}=jr(t),i=null;for(let s of e){let u=s.centerX-n,a=s.centerY-o,c=u*u+a*a;(!i||c<i.distance)&&(i={trackId:s.trackId,distance:c})}return i?{...t,trackId:i.trackId}:t})}function Lr(r,e,t){let n=e*t,o=new Uint8Array(n),i=new Int32Array(n),s=0,u=c=>{o[c]||r[c]>0||(o[c]=1,i[s++]=c)};for(let c=0;c<e;c++)u(c),u((t-1)*e+c);for(let c=0;c<t;c++)u(c*e),u(c*e+e-1);let a=0;for(;a<s;){let c=i[a++],d=c%e,l=c+1;d+1<e&&!o[l]&&r[l]===0&&(o[l]=1,i[s++]=l),l=c-1,d>0&&!o[l]&&r[l]===0&&(o[l]=1,i[s++]=l),l=c+e,l<n&&!o[l]&&r[l]===0&&(o[l]=1,i[s++]=l),l=c-e,l>=0&&!o[l]&&r[l]===0&&(o[l]=1,i[s++]=l)}for(let c=0;c<n;c++)r[c]===0&&o[c]===0&&(r[c]=255)}function Ar(r,e,t,n=2){if(n<=0)return r;let o=new Uint8Array(e*t),i=new Uint8Array(e*t),s=2*n+1;for(let a=0;a<t;a++){let c=a*e,d=0;for(let l=-n;l<=n;l++){let p=Math.max(0,Math.min(e-1,l));d+=r[c+p]}for(let l=0;l<e;l++){o[c+l]=Math.round(d/s);let p=Math.max(0,l-n),b=Math.min(e-1,l+n+1);d+=r[c+b]-r[c+p]}}let u=new Float64Array(e);for(let a=-n;a<=n;a++){let c=Math.max(0,Math.min(t-1,a))*e;for(let d=0;d<e;d++)u[d]+=o[c+d]}for(let a=0;a<t;a++){let c=a*e,d=Math.max(0,a-n)*e,l=Math.min(t-1,a+n+1)*e;for(let p=0;p<e;p++)i[c+p]=Math.round(u[p]/s),u[p]+=o[l+p]-o[d+p]}return i}function Vr(r,e,t,n,o,i){let s=0,u=0,a=0,c=0,d=(g,S)=>{let k=S*e+g;if(r[k])return;let L=k*4;s+=n[L],u+=n[L+1],a+=n[L+2],c++};for(let g=0;g<e;g+=4)d(g,0),d(g,t-1);for(let g=0;g<t;g+=4)d(0,g),d(e-1,g);if(c===0)return r;s/=c,u/=c,a/=c;let l=e*t,p=new Uint8Array(l);for(let g=0,S=0;g<l;g++,S+=4)p[g]=Math.max(Math.abs(n[S]-s),Math.abs(n[S+1]-u),Math.abs(n[S+2]-a))>o?1:0;let b=new Int32Array(l),y=0;for(let g=0;g<l;g++)r[g]>0&&(p[g]&&(r[g]=255),b[y++]=g);let I=0;for(;I<y;){let g=b[I++],S=g%e,k=g+1;S+1<e&&r[k]!==255&&p[k]&&(r[k]=255,b[y++]=k),k=g-1,S>0&&r[k]!==255&&p[k]&&(r[k]=255,b[y++]=k),k=g+e,k<l&&r[k]!==255&&p[k]&&(r[k]=255,b[y++]=k),k=g-e,k>=0&&r[k]!==255&&p[k]&&(r[k]=255,b[y++]=k)}Lr(r,e,t);let E=i!==void 0&&i>0?Math.max(1,Math.min(8,Math.round(i*50))):2;return Ar(r,e,t,E)}function jr(r){let{mask:e,width:t,height:n}=r,o=0,i=0,s=0;for(let u=0;u<n;u++){let a=u*t;for(let c=0;c<t;c++)e[a+c]>0&&(o+=c,i+=u,s++)}return s===0?{cx:0,cy:0}:{cx:o/s,cy:i/s}}var Mn=async r=>{let{ctx:e,encoder:t,pass:n,targetView:o,targetWidth:i,targetHeight:s,props:u,drawChild:a}=r,{virtualMedia:c}=u;Mt(e.device);let d=c?.operation;if(d?.op!=="Vision")return;let l=d;n.end();let p=c?.children?.[0];if(!p)return;let b=l.effect,y=b!=null,I=c?.id??d?.id??`${i}x${s}_${l.mode}_${l.variant}_${l.keyBackground}_${l.backgroundKeyThreshold}`,E=`vision-${I}`,g=y?mt.get(b):fe.get(E);g&&(g.width!==i||g.height!==s)&&(g.destroy(),g=void 0,y?mt.delete(b):fe.delete(E));let S=g!==void 0;if(!g&&(g=e.device.createTexture({size:[i,s],format:e.renderer.format,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,label:"vision_child_persistent"}),y?mt.set(b,g):fe.set(E,g),fe.size>4)){let G=fe.keys().next().value;G&&G!==E&&(fe.get(G)?.destroy(),fe.delete(G))}let k=u.frame??0,L=u.compositionFrame??k,f=u.fps??24,m=l.mode??"passthrough",v=m==="mask"||m==="matte"||m==="crop",T=l.visionBundle??c.visionBundle,R=l.enableDetection!==!1||m==="boxes"||m==="tracking",P=l.enableSegmentation===!0||v&&l.matteSource!=="selfie",U=l.enableMatte===!0||v&&l.matteSource==="selfie",O=l.enablePose===!0||m==="skeleton",_=!U&&!O&&(R||P),h=_?Pr(I,p,l,i,s):"",C=G=>l.keyBackground===!0?Mr(l,L-(k-G),f):void 0,H=G=>{if(!_||G===void 0)return;let W=wn.get(h,G);if(!(!W||W.keyThreshold!==C(G))&&!(P&&T&&!W.masks))return W},D=S?vn.get(I):void 0,A=H(k),B=A!==void 0;A||(A=H(D));let $;v&&S&&!B&&($=Sr(e.device,I,g),t.copyTextureToTexture({texture:g},{texture:$},[i,s,1]));let z,Y=null;if(S&&!A){let G=wr(e.device,I,g),W=e.device.createCommandEncoder({label:"vision_analysis_copy"});W.copyTextureToTexture({texture:g},{texture:G},[i,s,1]),e.device.queue.submit([W.finish()]),z={texture:G,device:e.device,width:i,height:s},v&&l.keyBackground===!0&&(Y=(await Me(z)).data)}let N=g.createView();e.renderer.beginFrame(t,N,{r:0,g:0,b:0,a:0},i,s,"clear").end(),await a(p,{...u},N,g,i,s),vn.set(I,k);let F=[],J=[],K,ee,X;if(A)F=A.objects,R&&T?.setObjectResult(k,{objects:A.objects,rawDetections:A.detections}),P&&T&&A.masks&&(J=A.masks.map(dt),T.setMaskResult(k,J)),A.subject&&(X=dt(A.subject.mask),ft.set(I,{mask:X,frame:k}));else if(z){let G=Ir(l),W=z,te=[];if(R){te=await G.detect(W);let Z=Or(I,l);k===0&&Z.reset(),F=Z.update(te,k,f),T?.setObjectResult(k,{objects:F,rawDetections:te})}if(P){let Z=await G.segment(W);J=Er(Z.masks,F),T?.setMaskResult(k,J)}if(U&&(K=await G.matte(W),T?.setMatteResult(k,K)),O){let Z=await G.pose(W),se=Cr(Z,W.width,W.height);ee={people:xn(se.people,F)},T?.setPoseResult(k,ee)}if(v){X=Rr(l.matteSource==="selfie"?Ur(K):yn(J.length>0?J:T?.getMaskResult(k)??[]),I,k);let Z=C(D??k);X&&Z!==void 0&&Y&&(X={...X,mask:Vr(X.mask,X.width,X.height,Y,Z,l.featherRadius)})}_&&D!==void 0&&wn.set(h,D,{detections:te,objects:F,masks:T?J.map(lt):null,subject:X?{mask:lt(X)}:null,keyThreshold:C(D)})}if(v){let G=B?g:$;if(!X||!G){e.renderer.beginFrame(t,o,{r:0,g:0,b:0,a:0},i,s,"clear").end();return}(!Be||Sn!==e.renderer.format)&&(Be=new Ue(e.device,e.renderer.format),Sn=e.renderer.format);let W=Be.uploadMask(I,X.mask,X.width,X.height),te=vr(e.device,I,g);Be.draw(t,te.createView(),G,W,m,m==="crop"?Ee(X)??void 0:void 0),T?.setStencilTexture(te);let Z=e.renderer.beginFrame(t,o,{r:0,g:0,b:0,a:0},i,s,"clear");e.renderer.drawTexture(Z,te,{x:0,y:0,width:i,height:s}),Z.end();return}if(m==="skeleton"){ut||(ut=new Ie(e.device));let W=(T?.getPoseResult(k)??ee)?.people[0];if(W&&W.keypoints.length>0){let te=ut.renderToTexture(W.keypoints,{width:i,height:s}),Z=e.renderer.beginFrame(t,o,{r:0,g:0,b:0,a:0},i,s,"clear");e.renderer.drawTexture(Z,te,{x:0,y:0,width:i,height:s}),Z.end();return}}if(m==="boxes"||m==="tracking"){let G=e.renderer.beginFrame(t,o,{r:0,g:0,b:0,a:0},i,s,"clear");e.renderer.drawTexture(G,g,{x:0,y:0,width:i,height:s});let W=F.length>0?F:T?.getObjectResult(k).objects??[];if(W.length>0){let te="#38bdf8";for(let se of W){if(!se.active)continue;let Q=se.boundingBox;e.renderer.drawRect(G,{x:Q.originX,y:Q.originY,width:Q.width,height:2},te),e.renderer.drawRect(G,{x:Q.originX,y:Q.originY+Q.height-2,width:Q.width,height:2},te),e.renderer.drawRect(G,{x:Q.originX,y:Q.originY,width:2,height:Q.height},te),e.renderer.drawRect(G,{x:Q.originX+Q.width-2,y:Q.originY,width:2,height:Q.height},te);let pt=Math.min(16,Q.width/4,Q.height/4);e.renderer.drawRect(G,{x:Q.originX,y:Q.originY,width:pt,height:4},"#ffffff"),e.renderer.drawRect(G,{x:Q.originX,y:Q.originY,width:4,height:pt},"#ffffff"),m==="tracking"&&e.renderer.drawRect(G,{x:se.centerX-3,y:se.centerY-3,width:6,height:6},"#ef4444",3)}}G.end();return}let oe=e.renderer.beginFrame(t,o,{r:0,g:0,b:0,a:0},i,s,"clear");e.renderer.drawTexture(oe,g,{x:0,y:0,width:i,height:s}),oe.end()};function Ur(r){if(!r||r.coverage<=0)return;let e=Math.round(r.coverage*r.width*r.height);return{category:"person",mask:r.mask,width:r.width,height:r.height,area:e,coverage:r.coverage,detectionIndex:-1}}var sa=yt({WebGPURenderer:Mn});export{It as a,Ot as b,Ct as c,Kr as d,On as e,Jr as f,no as g,io as h,ao as i,Cn as j,jt as k,Vt as l,uo as m,En as n,Ln as o,An as p,Vn as q,jn as r,Un as s,Ye as t,Ut as u,Bn as v,Xe as w,vo as x,Bt as y,Co as z,Eo as A,Vo as B,Re as C,we as D,pe as E,zo as F,w as G,et as H,qt as I,Ie as J,Zt as K,Jt as L,be as M,Ae as N,Ve as O,kn as P,gi as Q,it as R,sa as S};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as R,c as k}from"./chunk-IQKIHFNZ.mjs";import{d as p,e as m}from"./chunk-BVF64D6H.mjs";m();var N=8,D=/^\s*(linear|radial|conic)-gradient\(\s*([\s\S]*)\)\s*$/i;function j(t){return typeof t=="string"&&D.test(t)}function z(t){let e=[],r=0,o="";for(let n of t)n==="("&&r++,n===")"&&r--,n===","&&r===0?(e.push(o.trim()),o=""):o+=n;return o.trim()&&e.push(o.trim()),e}function T(t){let e=/^(-?[\d.]+)(deg|turn|rad|grad)?$/i.exec(t.trim());if(!e)return null;let r=parseFloat(e[1]);switch((e[2]??"deg").toLowerCase()){case"turn":return r*360;case"rad":return r*180/Math.PI;case"grad":return r*.9;default:return r}}var W={top:0,right:90,bottom:180,left:270,"top right":45,"right top":45,"bottom right":135,"right bottom":135,"bottom left":225,"left bottom":225,"top left":315,"left top":315},V={left:0,top:0,center:.5,right:1,bottom:1};function q(t){let e=t.map(n=>n in V?{v:V[n],axis:n==="top"||n==="bottom"?"y":n==="left"||n==="right"?"x":"any"}:{v:n.endsWith("%")?parseFloat(n)/100:.5,axis:"any"}),r=.5,o=.5;return e.length===1?e[0].axis==="y"?o=e[0].v:r=e[0].v:e.length>=2&&(e[0].axis==="y"||e[1].axis==="x"?(o=e[0].v,r=e[1].v):(r=e[0].v,o=e[1].v)),[r,o]}function X(t){let e=/^((?:[a-z]+\([^)]*\))|#[0-9a-f]+|[a-z]+)\s*(.*)$/i.exec(t.trim());if(!e)return null;let r=k(e[1]);if(!r)return null;let o=[];for(let n of e[2].split(/\s+/).filter(Boolean))if(n.endsWith("%"))o.push(parseFloat(n)/100);else if(n==="0")o.push(0);else if(/(deg|turn|rad|grad)$/i.test(n)){let i=T(n);i!==null&&o.push(i/360)}return{color:r,positions:o.filter(n=>Number.isFinite(n))}}function K(t){let e=t.length;if(e===0)return[];let r=t.map(n=>n.position);r[0]===void 0&&(r[0]=0),r[e-1]===void 0&&(r[e-1]=1);let o=-1/0;for(let n=0;n<e;n++){let i=r[n];i!==void 0&&(r[n]=Math.max(i,o),o=r[n])}for(let n=1;n<e;n++){if(r[n]!==void 0)continue;let i=n;for(;r[i]===void 0;)i++;let a=r[n-1],s=r[i];for(let c=n;c<i;c++)r[c]=a+(s-a)*(c-n+1)/(i-n+1)}return t.map((n,i)=>({offset:r[i],color:n.color}))}var w=new Map;function Q(t){let e=w.get(t);if(e!==void 0)return e;let r=Y(t);return w.size>512&&w.clear(),w.set(t,r),r}function Y(t){let e=D.exec(t);if(!e)return null;let r=e[1].toLowerCase(),o=z(e[2]),n={type:r,angle:180,center:[.5,.5],shape:"ellipse",from:0,stops:[]},i=o[0]?.toLowerCase().trim()??"",a=!1;if(r==="linear")if(i.startsWith("to ")){let c=i.slice(3).trim().replace(/\s+/g," ");c in W&&(n.angle=W[c],a=!0)}else{let c=T(i);c!==null&&(n.angle=c,a=!0)}else{let c=i.split(/\s+/).filter(Boolean),u=c.indexOf("at"),d=u>=0?c.slice(0,u):c;if(u>=0||d.some(l=>l==="circle"||l==="ellipse"||l==="from"||/^closest|^farthest/.test(l)||r==="radial"&&/px$/.test(l)))if(a=!0,u>=0&&(n.center=q(c.slice(u+1))),r==="radial"){d.includes("circle")&&(n.shape="circle");let l=d.filter(y=>/px$/.test(y)).map(y=>parseFloat(y));l.length===1?(n.shape="circle",n.radius=[l[0],l[0]]):l.length>=2&&(n.radius=[l[0],l[1]])}else{let l=d.indexOf("from");l>=0&&d[l+1]&&(n.from=T(d[l+1])??0)}}let s=[];for(let c of a?o.slice(1):o){let u=X(c);if(!u)return null;u.positions.length===0&&s.push({color:u.color});for(let d of u.positions)s.push({color:u.color,position:d})}return s.length===0?null:(s.length===1&&s.push({...s[0]}),n.stops=K(s),n)}function Ie(t){if(t.length<=N)return t;let e=[],r=t[0].offset,o=t[t.length-1].offset;for(let n=0;n<N;n++){let i=r+(o-r)*n/(N-1),a=1;for(;a<t.length-1&&t[a].offset<i;)a++;let s=t[a-1],c=t[a],u=c.offset-s.offset,d=u>0?Math.min(1,Math.max(0,(i-s.offset)/u)):1;e.push({offset:i,color:s.color.map((f,l)=>f+(c.color[l]-f)*d)})}return e}function Oe(t){let e=t.map(r=>R(r.color[0],r.color[1],r.color[2]));return t.map((r,o)=>{let n=e[o];if(r.color[3]<1e-4){let i=t.slice(0,o).reverse().findIndex(u=>u.color[3]>1e-4),a=t.slice(o+1).findIndex(u=>u.color[3]>1e-4),s=i>=0?o-1-i:-1,c=a>=0?o+1+a:-1;if(s>=0&&c>=0){let u=e[s],d=e[c];n=[(u[0]+d[0])/2,(u[1]+d[1])/2,(u[2]+d[2])/2]}else s>=0?n=e[s]:c>=0&&(n=e[c])}return[n[0],n[1],n[2],r.color[3]]})}function E(t){return t.map(e=>typeof e=="string"?e:`${e.color} ${Math.round(e.offset*1e4)/100}%`).join(", ")}var Ne={linear(t,e=180){return`linear-gradient(${e}deg, ${E(t)})`},radial(t,e={}){let r=e.at??[.5,.5];return`radial-gradient(${e.radius!==void 0?`${e.radius}px`:e.circle?"circle":"ellipse"} at ${r[0]*100}% ${r[1]*100}%, ${E(t)})`},conic(t,e={}){let r=e.at??[.5,.5];return`conic-gradient(from ${e.from??0}deg at ${r[0]*100}% ${r[1]*100}%, ${E(t)})`},parse:Q,is:j};m();m();m();function g(t,e){let r=0,o=1;for(;;){if(e>=t.length)throw new Error("ONNX model: truncated varint");let n=t[e++];if(r+=(n&127)*o,n<128)return[r,e];o*=128}}function b(t){let e=[],r=0;for(;r<t.length;){let o=r,[n,i]=g(t,r);r=i;let a=Math.floor(n/8),s=n&7,c=t.subarray(r,r);if(s===0)r=g(t,r)[1];else if(s===1)r+=8;else if(s===5)r+=4;else if(s===2){let[u,d]=g(t,r);c=t.subarray(d,d+u),r=d+u}else throw new Error(`ONNX model: unsupported wire type ${s}`);if(r>t.length)throw new Error("ONNX model: truncated field");e.push({number:a,wire:s,raw:t.subarray(o,r),body:c})}return e}var Z=new TextDecoder,Ae=new TextEncoder;function x(t,e){return b(t).filter(r=>r.number===e&&r.wire===2).map(r=>Z.decode(r.body))}function v(t,e){return x(t,e)[0]}function F(t){let e=[];for(;t>=128;)e.push(t%128|128),t=Math.floor(t/128);return e.push(t),e}function Ue(t,e){let r=[...F(t*8+2),...F(e.length)],o=new Uint8Array(r.length+e.length);return o.set(r,0),o.set(e,r.length),o}function Ge(t){let e=new Uint8Array(t.reduce((o,n)=>o+n.length,0)),r=0;for(let o of t)e.set(o,r),r+=o.length;return e}var ie=4,se=5,ae=2,L=1,ce=3,ue=5,de=1;function $(t){let e=[];if(t.wire===2){let r=0;for(;r<t.body.length;){let[o,n]=g(t.body,r);e.push(o),r=n}}else if(t.wire===0){let r=0;r=g(t.raw,r)[1],e.push(g(t.raw,r)[0])}return e}function M(t){return b(t).filter(e=>e.number===de).flatMap($)}function B(t){let e;try{e=b(t).find(n=>n.number===7&&n.wire===2)}catch{return!0}if(!e)return!0;let r=new Map,o=[];for(let n of b(e.body))if(n.number===5){let i=v(n.body,8);i!==void 0&&r.set(i,M(n.body))}else if(n.number===1){let i=v(n.body,ie);if(i!=="Conv"&&i!=="Constant")continue;let a=b(n.body).filter(f=>f.number===se).map(f=>f.body);if(i==="Constant"){let f=a.find(O=>v(O,L)==="value"),l=f&&b(f).find(O=>O.number===ue),y=x(n.body,ae)[0];l&&y&&r.set(y,M(l.body));continue}let s=a.find(f=>v(f,L)==="group"),c=s&&b(s).find(f=>f.number===ce),u=c?$(c)[0]??1:1,d=x(n.body,1)[1];u>1&&d&&o.push({weight:d,group:u})}return o.some(({weight:n})=>{let i=r.get(n)?.[1];return i!==void 0&&i>1&&i%4!==0})}var le="onnxruntime-web",fe=()=>import(le),S=class{kind="webgpu";_loader;_providers;_wasmFallback;_ortPromise;device;constructor(e={}){this._loader=e.loader??fe,this._providers=e.executionProviders??["webgpu","wasm"],this._wasmFallback=e.wasmFallback!==!1,this.device=e.device}ort(){return this._ortPromise||(this._ortPromise=this._loader().catch(e=>{throw this._ortPromise=void 0,new Error(`onnxruntime-web failed to load (${String(e)}). Install it in the browser bundle or pass a custom loader.`)})),this._ortPromise}async createSession(e){let r=await this.ort(),o;try{let n=this.device,i=B(e)?"NCHW":"NHWC";o=await r.InferenceSession.create(e,{executionProviders:this._providers.map(a=>pe(a,n,i)),graphOptimizationLevel:"all",logSeverityLevel:3})}catch(n){if(!this._wasmFallback||!this._providers.includes("webgpu"))throw n;o=await r.InferenceSession.create(e,{executionProviders:["wasm"],graphOptimizationLevel:"all",logSeverityLevel:3})}return{run:async n=>{let i=o.inputNames.includes(n.name)?n.name:o.inputNames[0]??n.name,a=n.gpuBuffer&&r.Tensor.fromGpuBuffer?r.Tensor.fromGpuBuffer(n.gpuBuffer,{dataType:"float32",dims:[...n.dims]}):new r.Tensor("float32",n.data,[...n.dims]),s=await o.run({[i]:a}),c={};for(let[u,d]of Object.entries(s))c[u]={data:d.data,dims:[...d.dims]};return c},release:()=>{o.release()}}}};function pe(t,e,r){return t!=="webgpu"?t:e?{name:t,preferredLayout:r,device:e}:{name:t,preferredLayout:r}}m();m();var me="onnxruntime-web/webgpu",be="webgpu",h,ge=/llvmpipe|lavapipe|swiftshader|software/i;function ye(){return h||(h=(async()=>{let t=globalThis;if(!t.navigator?.gpu){let{create:i,globals:a}=await import(be);Object.assign(globalThis,a),t.navigator??={},Object.defineProperty(t.navigator,"gpu",{value:i([]),configurable:!0,writable:!0})}let r=await(t.navigator?.gpu).requestAdapter({powerPreference:"high-performance"});if(!r)throw new Error("No WebGPU adapter.");let o=r.info??{},n=[o.vendor,o.architecture,o.device,o.description].filter(Boolean).join(" ");if(r.isFallbackAdapter===!0||o.isFallbackAdapter===!0||ge.test(n))throw new Error(`WebGPU adapter is a software rasterizer (${n}).`);ve(r.features)})(),h.catch(()=>{h=void 0})),h}function ve(t){let e=Object.getPrototypeOf(t);!e||typeof e.keys!="function"||(typeof e.forEach!="function"&&Object.defineProperty(e,"forEach",{value(r,o){for(let n of this.keys())r.call(o,n,n,this)},configurable:!0,writable:!0}),typeof e.values!="function"&&Object.defineProperty(e,"values",{value(){return this.keys()},configurable:!0,writable:!0}),typeof e.entries!="function"&&Object.defineProperty(e,"entries",{*value(){for(let r of this.keys())yield[r,r]},configurable:!0,writable:!0}))}var _=class{kind="webgpu";device;_inner;constructor(e={}){let r=e.loader??(async()=>{await ye();let o=await import(me);return o.env?.wasm&&(o.env.wasm.numThreads=1),o.env?.webgpu&&(o.env.webgpu.powerPreference="high-performance"),o});this.device=e.device,this._inner=new S({wasmFallback:!1,...e,loader:r})}createSession(e){return this._inner.createSession(e)}};var A,U;function je(t){U=t}function ze(t){A=t}var he=Symbol.for("framefields.vision.backend");function I(t){let e=globalThis[he];if(typeof e=="function")try{e(t)}catch{}}function Pe(){let t=typeof p<"u"?p.env.FRAMEFIELDS_VISION_PROVIDER?.trim().toLowerCase():void 0;return t==="webgpu"||t==="cuda"||t==="cpu"?t:"auto"}var G=class{_resolved;_resolving;get kind(){return this._resolved?.kind??"webgpu"}get device(){return this._resolved?.device}async createSession(e){if(this._resolved)return this._resolved.createSession(e);if(!this._resolving){this._resolving=this.resolve(e),this._resolving.catch(()=>{this._resolving=void 0});let{provider:o,first:n}=await this._resolving;return this._resolved=o,n||o.createSession(e)}let{provider:r}=await this._resolving;return r.createSession(e)}async resolve(e){let r=Pe();if(r==="cpu")return I({backend:"cpu",sharedDevice:!1,reason:"FRAMEFIELDS_VISION_PROVIDER=cpu"}),{provider:new P};if(r==="cuda")return I({backend:"cuda",sharedDevice:!1}),{provider:new P({executionProviders:["cuda","cpu"]})};let o=new _({wasmFallback:!1,device:U});try{let n=await o.createSession(e);return I({backend:"webgpu",sharedDevice:!!U}),{provider:o,first:n}}catch(n){if(r==="webgpu")throw n;return I({backend:"cpu",sharedDevice:!1,reason:n instanceof Error?n.message:String(n)}),{provider:new P}}}},H;function qe(){return A?A():(H??=new G,H)}async function we(){let t=await import("./shims/os.mjs"),e=typeof t.availableParallelism=="function"?t.availableParallelism():t.cpus().length,r=await xe();return Math.max(1,r!==void 0?Math.min(e,r):e)}async function xe(){if(typeof p>"u"||p.platform!=="linux")return;let{readFile:t}=await import("./shims/fs-promises.mjs"),e=a=>t(a,"utf8").then(s=>s.trim(),()=>{}),r=(a,s)=>a>0&&s>0?Math.ceil(a/s):void 0,o=await e("/sys/fs/cgroup/cpu.max");if(o!==void 0){let[a,s]=o.split(/\s+/);return a==="max"?void 0:r(Number(a),Number(s))}let n=await e("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),i=await e("/sys/fs/cgroup/cpu/cpu.cfs_period_us");if(!(n===void 0||i===void 0))return r(Number(n),Number(i))}async function Se(){let t=typeof p<"u"?Number.parseInt(p.env.FRAMEFIELDS_VISION_THREADS??"",10):Number.NaN;if(Number.isFinite(t)&&t>0)return t;if(!(typeof p>"u"||p.platform!=="linux"))return we()}var P=class{kind="node";_executionProviders;constructor(e={}){this._executionProviders=e.executionProviders??["cpu"]}ortPromise;async ort(){return this.ortPromise||(this.ortPromise=import("./onnxruntime-node-56GSZEH3.mjs").catch(e=>{throw this.ortPromise=void 0,new Error(`onnxruntime-node failed to load (${String(e)}). Install it in the environment or provide a custom SessionProvider.`)})),this.ortPromise}async createSession(e){let r=await this.ort(),o=await Se(),n=await r.InferenceSession.create(e,{executionProviders:[...this._executionProviders],graphOptimizationLevel:"all",...o!==void 0?{intraOpNumThreads:o,interOpNumThreads:1}:{}});return{run:async i=>{let s={[n.inputNames.includes(i.name)?i.name:n.inputNames[0]??i.name]:new r.Tensor("float32",i.data,[...i.dims])},c=await n.run(s),u={};for(let[d,f]of Object.entries(c))u[d]={data:f.data,dims:[...f.dims]};return u},release:()=>{n.release()}}}};export{N as a,j as b,Q as c,Ie as d,Oe as e,Ne as f,b as g,Ae as h,x as i,v as j,Ue as k,Ge as l,S as m,je as n,ze as o,qe as p};
|