gitframes 1.2.35 → 1.3.0

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"effects-4t4qk-BR.mjs","names":["uniformData","TensorPipeline","YoloModelStore","inflight","YoloVisionRunner","YoloNode$1","deviceResourceCache","getDeviceLayouts","renderers_default","deviceResourceCache","uniformBufferData","resolveVal","renderers_default","deviceResourceCache","getDeviceLayouts","renderers_default","deviceResourceCache","uniformData","renderers_default","deviceResourceCache","renderers_default","deviceResourceCache","uniformData","renderers_default","resolveVal","renderers_default","deviceResourceCache","uniformData","getDeviceLayouts","resolveSignalField","renderers_default","deviceResourceCache","getDeviceLayouts","resolveVal","renderers_default","deviceResourceCache","uniformData","WebGPURenderer","renderers_default","deviceResourceCache","uniformBufferData","renderers_default","deviceResourceCache","getDeviceLayouts","renderers_default","MAX_RADIUS","deviceResourceCache","WebGPURenderer","renderers_default","deviceResourceCache","renderers_default","uniformBufferData","WebGPURenderer","renderers_default","deviceResourceCache","renderers_default","deviceResourceCache","uniformData","renderers_default","deviceResourceCache","getDeviceLayouts","renderers_default","MAX_RADIUS","CHANNEL_MAP","deviceResourceCache","WebGPURenderer","renderers_default","deviceResourceCache","uniformData","renderers_default","renderers_default","MAX_RADIUS","MAX_FEATHER","deviceResourceCache","renderers_default","MIN_RADIUS","MAX_RADIUS","deviceResourceCache","WebGPURenderer","renderers_default","deviceResourceCache","getDeviceLayouts","resolveSignalField","uniformData","renderers_default","deviceResourceCache","getDeviceLayouts","uniformData","renderers_default","deviceResourceCache","renderers_default","MAX_RADIUS","MAX_AMOUNT","deviceResourceCache","WebGPURenderer","renderers_default","deviceResourceCache","getDeviceLayouts","renderers_default","deviceResourceCache","renderers_default","renderers_default","distance","path","path"],"sources":["../../tensor-webgpu/dist/index.mjs","../../yolo/dist/src-_tHNcXK0.mjs","../../../nodes/node-blur/dist/renderers-ClvFyT81.mjs","../../../nodes/node-color-balance/dist/renderers-DzBEC6-y.mjs","../../../nodes/node-colorkey/dist/renderers-CaxmH3TJ.mjs","../../../nodes/node-corner-pin/dist/renderers-BJAILLZE.mjs","../../../nodes/node-crop/dist/renderers-BNuRuACX.mjs","../../../nodes/node-curves/dist/renderers-BlDhAHo2.mjs","../../../nodes/node-deflicker/dist/renderers-Ci7KAuBM.mjs","../../../nodes/node-displacement-map/dist/renderers-Brm2CX39.mjs","../../../nodes/node-film-grain/dist/renderers-CeBgXAeP.mjs","../../../nodes/node-flip/dist/renderers-CS09Wd2n.mjs","../../../nodes/node-gradient-map/dist/renderers-5Ajbk-l7.mjs","../../../nodes/node-halftone-screen/dist/renderers-CeLVEbxF.mjs","../../../nodes/node-high-pass/dist/renderers-CWx5Dtic.mjs","../../../nodes/node-kenburns/dist/renderers-DBo4t48l.mjs","../../../nodes/node-layer-style/dist/renderers-fzmE8CWs.mjs","../../../nodes/node-levels/dist/renderers-DOmrZ7dd.mjs","../../../nodes/node-liquify/dist/renderers-D9rt5Xm7.mjs","../../../nodes/node-apply-lut/dist/renderers-C3hgvvNN.mjs","../../../nodes/node-mask-math/dist/renderers-DZ9kssU1.mjs","../../../nodes/node-mesh-warp/dist/renderers-CLaqaABL.mjs","../../../nodes/node-paint/dist/renderers-DoOCb9Vp.mjs","../../../nodes/node-patch-heal/dist/renderers-C8B6JWnF.mjs","../../../nodes/node-refine-edge/dist/renderers-C_lHpfNq.mjs","../../../nodes/node-refraction-caustics/dist/renderers-CJE3kjP7.mjs","../../../nodes/node-relight-3d/dist/renderers-C_O8q9lv.mjs","../../../nodes/node-selective-color/dist/renderers-BiBcP2Pa.mjs","../../../nodes/node-shadows-highlights/dist/renderers-s5KsGSY3.mjs","../../../nodes/node-tile-offset/dist/renderers-UzlleXVD.mjs","../../../nodes/node-unsharp-mask/dist/renderers-drUQxsWI.mjs","../../../nodes/node-vignette/dist/renderers-Bf-Lh4-Q.mjs","../../../nodes/node-yolo/dist/renderers-mupYaxMa.mjs","../src/effects/with-defaults.ts","../src/effects/generated/meta.ts","../src/effects/generated/classes.ts","../src/effects/custom/blur.ts","../src/effects/generated/registry.ts","../src/effects/classes.ts"],"sourcesContent":["//#region src/multiplexer/controlnet-multiplexer.ts\nvar ControlNetMultiplexer = class {\n\ttextures = /* @__PURE__ */ new Map();\n\tset(type, texture) {\n\t\tthis.textures.set(type, texture);\n\t}\n\tget(type) {\n\t\treturn this.textures.get(type);\n\t}\n\thas(type) {\n\t\treturn this.textures.has(type);\n\t}\n\tgetOutputs() {\n\t\treturn {\n\t\t\tcanny: this.textures.get(\"canny\"),\n\t\t\tdepth: this.textures.get(\"depth\"),\n\t\t\tnormals: this.textures.get(\"normals\"),\n\t\t\tposeSkeleton: this.textures.get(\"poseSkeleton\"),\n\t\t\tsegmentationMask: this.textures.get(\"segmentationMask\"),\n\t\t\tfaceLandmarks: this.textures.get(\"faceLandmarks\"),\n\t\t\tmotionVectors: this.textures.get(\"motionVectors\"),\n\t\t\tdeflickered: this.textures.get(\"deflickered\")\n\t\t};\n\t}\n\tcreateBindGroupEntry(type, bindingIndex) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot create bind group entry: conditioning texture \"${type}\" is not registered in VRAM.`);\n\t\treturn {\n\t\t\tbinding: bindingIndex,\n\t\t\tresource: tex.createView({ label: `controlnet_${type}_view` })\n\t\t};\n\t}\n\texportTensorView(type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Conditioning tensor \"${type}\" not found in multiplexer.`);\n\t\treturn {\n\t\t\ttexture: tex,\n\t\t\twidth: tex.width,\n\t\t\theight: tex.height,\n\t\t\tformat: tex.format\n\t\t};\n\t}\n\tasync readPixelsAsync(device, type) {\n\t\tconst tex = this.textures.get(type);\n\t\tif (!tex) throw new Error(`[ControlNetMultiplexer] Cannot read pixels: conditioning texture \"${type}\" is missing.`);\n\t\tconst width = tex.width;\n\t\tconst height = tex.height;\n\t\tconst format = tex.format;\n\t\tlet bytesPerPixel = 4;\n\t\tif (format === \"rgba16float\" || format === \"rg32float\") bytesPerPixel = 8;\n\t\telse if (format === \"r32float\") bytesPerPixel = 4;\n\t\telse if (format === \"rgba32float\") bytesPerPixel = 16;\n\t\tconst unalignedBytesPerRow = width * bytesPerPixel;\n\t\tconst bytesPerRow = Math.ceil(unalignedBytesPerRow / 256) * 256;\n\t\tconst bufferSize = bytesPerRow * height;\n\t\tconst stagingBuffer = device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n\t\t\tlabel: `controlnet_readback_staging_${type}`\n\t\t});\n\t\tconst encoder = device.createCommandEncoder({ label: `readback_encoder_${type}` });\n\t\tencoder.copyTextureToBuffer({ texture: tex }, {\n\t\t\tbuffer: stagingBuffer,\n\t\t\tbytesPerRow,\n\t\t\trowsPerImage: height\n\t\t}, [\n\t\t\twidth,\n\t\t\theight,\n\t\t\t1\n\t\t]);\n\t\tdevice.queue.submit([encoder.finish()]);\n\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedRange = stagingBuffer.getMappedRange();\n\t\tconst resultData = new Uint8Array(width * height * bytesPerPixel);\n\t\tconst sourceBytes = new Uint8Array(mappedRange);\n\t\tif (bytesPerRow === unalignedBytesPerRow) resultData.set(sourceBytes.subarray(0, width * height * bytesPerPixel));\n\t\telse for (let y = 0; y < height; y++) {\n\t\t\tconst srcOffset = y * bytesPerRow;\n\t\t\tconst dstOffset = y * unalignedBytesPerRow;\n\t\t\tresultData.set(sourceBytes.subarray(srcOffset, srcOffset + unalignedBytesPerRow), dstOffset);\n\t\t}\n\t\tstagingBuffer.unmap();\n\t\tstagingBuffer.destroy();\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat,\n\t\t\tdata: resultData\n\t\t};\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.textures.values()) try {\n\t\t\ttex.destroy();\n\t\t} catch (_) {}\n\t\tthis.textures.clear();\n\t}\n};\n\n//#endregion\n//#region src/shaders/canny.wgsl.ts\n/**\n* @file canny.wgsl.ts\n* High-performance WebGPU Canny Edge Compute Shaders\n* Pass 1: Sobel gradient magnitude & quantized angle\n* Pass 2: Non-Maximum Suppression (NMS) & Dual-Threshold Hysteresis\n*/\nconst cannySobelWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var magnitudeTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\nfn getLuma(coord: vec2<i32>, maxCoord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0), maxCoord);\n let c = textureLoad(inputTex, clamped, 0);\n return dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\n@compute @workgroup_size(16, 16)\nfn computeSobel(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let p00 = getLuma(vec2<i32>(x - 1, y - 1), maxCoord);\n let p10 = getLuma(vec2<i32>(x, y - 1), maxCoord);\n let p20 = getLuma(vec2<i32>(x + 1, y - 1), maxCoord);\n let p01 = getLuma(vec2<i32>(x - 1, y), maxCoord);\n let p21 = getLuma(vec2<i32>(x + 1, y), maxCoord);\n let p02 = getLuma(vec2<i32>(x - 1, y + 1), maxCoord);\n let p12 = getLuma(vec2<i32>(x, y + 1), maxCoord);\n let p22 = getLuma(vec2<i32>(x + 1, y + 1), maxCoord);\n\n let gx = (p20 + 2.0 * p21 + p22) - (p00 + 2.0 * p01 + p02);\n let gy = (p02 + 2.0 * p12 + p22) - (p00 + 2.0 * p10 + p20);\n\n let mag = sqrt(gx * gx + gy * gy);\n let angle = atan2(gy, gx);\n\n // Quantize angle into 4 sectors (0: 0 deg, 1: 45 deg, 2: 90 deg, 3: 135 deg)\n var sector: f32 = 0.0;\n let a = (angle * 180.0 / 3.14159265 + 180.0) % 180.0;\n if ((a >= 0.0 && a < 22.5) || (a >= 157.5 && a <= 180.0)) {\n sector = 0.0;\n } else if (a >= 22.5 && a < 67.5) {\n sector = 1.0;\n } else if (a >= 67.5 && a < 112.5) {\n sector = 2.0;\n } else {\n sector = 3.0;\n }\n\n textureStore(magnitudeTex, id.xy, vec4<f32>(mag, sector, 0.0, 1.0));\n}\n`;\nconst cannyNmsRgba8Wgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, edge, edge, 1.0));\n}\n`;\nconst cannyNmsR32fWgsl = `\nstruct CannyParams {\n lowThreshold: f32,\n highThreshold: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var magnitudeTex: texture_2d<f32>;\n@group(0) @binding(1) var edgeTex: texture_storage_2d<r32float, write>;\n@group(0) @binding(2) var<uniform> params: CannyParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNonMaxSuppression(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let x = i32(id.x);\n let y = i32(id.y);\n let maxCoord = vec2<i32>(i32(params.width) - 1, i32(params.height) - 1);\n\n let center = textureLoad(magnitudeTex, vec2<i32>(x, y), 0);\n let mag = center.r;\n let sector = u32(round(center.g));\n\n var n1 = 0.0;\n var n2 = 0.0;\n\n switch (sector) {\n case 0u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y), vec2<i32>(0), maxCoord), 0).r;\n }\n case 1u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n case 2u: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n default: {\n n1 = textureLoad(magnitudeTex, clamp(vec2<i32>(x - 1, y - 1), vec2<i32>(0), maxCoord), 0).r;\n n2 = textureLoad(magnitudeTex, clamp(vec2<i32>(x + 1, y + 1), vec2<i32>(0), maxCoord), 0).r;\n }\n }\n\n var edge = 0.0;\n // Non-maximum suppression along gradient sector with directional tie-breaking\n if (mag > n1 && mag >= n2 && mag > 0.0) {\n if (mag >= params.highThreshold) {\n edge = 1.0;\n } else if (mag >= params.lowThreshold) {\n edge = 0.5;\n }\n }\n\n textureStore(edgeTex, id.xy, vec4<f32>(edge, 0.0, 0.0, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/canny-pipeline.ts\nvar CannyComputePipeline = class {\n\tsobelPipeline;\n\tnmsRgba8Pipeline;\n\tnmsR32fPipeline;\n\tuniformBuffer;\n\tcachedIntermediateTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst sobelModule = device.createShaderModule({\n\t\t\tlabel: \"canny_sobel.wgsl\",\n\t\t\tcode: cannySobelWgsl\n\t\t});\n\t\tthis.sobelPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannySobelPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: sobelModule,\n\t\t\t\tentryPoint: \"computeSobel\"\n\t\t\t}\n\t\t});\n\t\tconst nmsRgba8Module = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_rgba8.wgsl\",\n\t\t\tcode: cannyNmsRgba8Wgsl\n\t\t});\n\t\tthis.nmsRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsRgba8Module,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tconst nmsR32fModule = device.createShaderModule({\n\t\t\tlabel: \"canny_nms_r32f.wgsl\",\n\t\t\tcode: cannyNmsR32fWgsl\n\t\t});\n\t\tthis.nmsR32fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"CannyNmsR32fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: nmsR32fModule,\n\t\t\t\tentryPoint: \"computeNonMaxSuppression\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"canny_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst lowThreshold = options.low ?? .1;\n\t\tconst highThreshold = options.high ?? .3;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba8unorm\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tf32View[0] = lowThreshold;\n\t\tf32View[1] = highThreshold;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedIntermediateTexture || this.cachedIntermediateTexture.width !== width || this.cachedIntermediateTexture.height !== height) {\n\t\t\tthis.cachedIntermediateTexture?.destroy();\n\t\t\tthis.cachedIntermediateTexture = this.device.createTexture({\n\t\t\t\tlabel: \"canny_magnitude_intermediate\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba16float\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING\n\t\t\t});\n\t\t}\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `canny_edge_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"canny_command_encoder\" });\n\t\tconst sobelBindGroup = this.device.createBindGroup({\n\t\t\tlayout: this.sobelPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass1 = commandEncoder.beginComputePass({ label: \"canny_sobel_pass\" });\n\t\tpass1.setPipeline(this.sobelPipeline);\n\t\tpass1.setBindGroup(0, sobelBindGroup);\n\t\tpass1.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass1.end();\n\t\tconst nmsPipeline = outputFormat === \"r32float\" ? this.nmsR32fPipeline : this.nmsRgba8Pipeline;\n\t\tconst nmsBindGroup = this.device.createBindGroup({\n\t\t\tlayout: nmsPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedIntermediateTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass2 = commandEncoder.beginComputePass({ label: \"canny_nms_pass\" });\n\t\tpass2.setPipeline(nmsPipeline);\n\t\tpass2.setBindGroup(0, nmsBindGroup);\n\t\tpass2.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass2.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedIntermediateTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/depth-normals.wgsl.ts\n/**\n* @file depth-normals.wgsl.ts\n* Screen-Space Normal Map Reconstruction from Depth Tensor\n* Analytical cross-product of spatial partial derivatives:\n* dP/dx = [1, 0, dD/dx]^T, dP/dy = [0, 1, dD/dy]^T\n* N = normalize(dP/dx x dP/dy) = normalize([-dx, -dy, 1.0])\n*/\nconst depthNormalsRgba16fWgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\nconst depthNormalsRgba8Wgsl = `\nstruct DepthNormalParams {\n width: u32,\n height: u32,\n depthScale: f32,\n _pad: f32,\n};\n\n@group(0) @binding(0) var depthTex: texture_2d<f32>;\n@group(0) @binding(1) var normalTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: DepthNormalParams;\n\n@compute @workgroup_size(16, 16)\nfn computeNormals(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) { return; }\n\n let c = id.xy;\n let maxX = params.width - 1u;\n let maxY = params.height - 1u;\n\n let left = textureLoad(depthTex, vec2<u32>(max(c.x - 1u, 0u), c.y), 0).r;\n let right = textureLoad(depthTex, vec2<u32>(min(c.x + 1u, maxX), c.y), 0).r;\n let up = textureLoad(depthTex, vec2<u32>(c.x, max(c.y - 1u, 0u)), 0).r;\n let down = textureLoad(depthTex, vec2<u32>(c.x, min(c.y + 1u, maxY)), 0).r;\n\n let dx = (right - left) * 0.5 * params.depthScale;\n let dy = (down - up) * 0.5 * params.depthScale;\n\n let normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n // Pack [-1, 1] range to [0, 1]\n let packedColor = vec4<f32>(normal * 0.5 + 0.5, 1.0);\n textureStore(normalTex, id.xy, packedColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/depth-normals-pipeline.ts\nvar DepthNormalsComputePipeline = class {\n\tnormalRgba16fPipeline;\n\tnormalRgba8Pipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba16f.wgsl\",\n\t\t\tcode: depthNormalsRgba16fWgsl\n\t\t});\n\t\tthis.normalRgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"depth_normals_rgba8.wgsl\",\n\t\t\tcode: depthNormalsRgba8Wgsl\n\t\t});\n\t\tthis.normalRgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"DepthNormalsRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"computeNormals\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"depth_normals_uniform_buffer\"\n\t\t});\n\t}\n\texecute(depthTexture, options = {}) {\n\t\tconst width = depthTexture.width;\n\t\tconst height = depthTexture.height;\n\t\tconst depthScale = options.depthScale ?? 1;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = depthScale;\n\t\tf32View[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `normal_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst pipeline = outputFormat === \"rgba8unorm\" ? this.normalRgba8Pipeline : this.normalRgba16fPipeline;\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"depth_normals_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: depthTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"depth_normals_compute_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/face-landmarks.wgsl.ts\n/**\n* @file face-landmarks.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet Face & MediaPipe facial contour rasterization.\n* Renders antialiased facial mesh contours (lips, eyes, brows, nose, oval) directly in VRAM for SDXL ControlNet.\n*/\nconst faceLandmarksWgsl = `\nstruct FaceSegment {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct FaceParams {\n width: u32,\n height: u32,\n numSegments: u32,\n pad: u32,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: FaceParams;\n@group(0) @binding(2) var<storage, read> segments: array<FaceSegment>;\n\n@compute @workgroup_size(16, 16)\nfn computeFaceLandmarks(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 1.0); // Solid black background for SDXL ControlNet\n\n let count = params.numSegments;\n for (var i = 0u; i < count; i = i + 1u) {\n let seg = segments[i];\n if (seg.enabled < 0.5) {\n continue;\n }\n\n let ab = seg.end - seg.start;\n let ap = p - seg.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = seg.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= seg.radius) {\n let edgeAlpha = clamp(seg.radius - dist + 0.5, 0.0, 1.0);\n outColor = vec4<f32>(mix(outColor.rgb, seg.color.rgb, edgeAlpha * seg.color.a), 1.0);\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/face-landmarks-pipeline.ts\nfunction buildLoopSegments(indices, color) {\n\tconst segs = [];\n\tfor (let i = 0; i < indices.length - 1; i++) segs.push({\n\t\tfrom: indices[i],\n\t\tto: indices[i + 1],\n\t\tcolor\n\t});\n\treturn segs;\n}\nconst CANONICAL_FACE_CONTOURS = [\n\t...buildLoopSegments([\n\t\t70,\n\t\t63,\n\t\t105,\n\t\t66,\n\t\t107\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t300,\n\t\t293,\n\t\t334,\n\t\t296,\n\t\t336\n\t], [\n\t\t0,\n\t\t1,\n\t\t1,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t33,\n\t\t160,\n\t\t158,\n\t\t133,\n\t\t153,\n\t\t144,\n\t\t33\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t263,\n\t\t387,\n\t\t385,\n\t\t362,\n\t\t380,\n\t\t373,\n\t\t263\n\t], [\n\t\t0,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t168,\n\t\t6,\n\t\t197,\n\t\t195,\n\t\t4\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t98,\n\t\t97,\n\t\t2,\n\t\t326,\n\t\t327\n\t], [\n\t\t1,\n\t\t1,\n\t\t0,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t61,\n\t\t185,\n\t\t40,\n\t\t39,\n\t\t37,\n\t\t0,\n\t\t267,\n\t\t269,\n\t\t270,\n\t\t409,\n\t\t291,\n\t\t375,\n\t\t321,\n\t\t405,\n\t\t314,\n\t\t17,\n\t\t84,\n\t\t181,\n\t\t91,\n\t\t146,\n\t\t61\n\t], [\n\t\t1,\n\t\t.2,\n\t\t.2,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t78,\n\t\t95,\n\t\t88,\n\t\t178,\n\t\t87,\n\t\t14,\n\t\t317,\n\t\t402,\n\t\t318,\n\t\t324,\n\t\t308,\n\t\t415,\n\t\t310,\n\t\t311,\n\t\t312,\n\t\t13,\n\t\t82,\n\t\t81,\n\t\t80,\n\t\t191,\n\t\t78\n\t], [\n\t\t1,\n\t\t0,\n\t\t.8,\n\t\t1\n\t]),\n\t...buildLoopSegments([\n\t\t10,\n\t\t338,\n\t\t297,\n\t\t332,\n\t\t284,\n\t\t251,\n\t\t389,\n\t\t356,\n\t\t454,\n\t\t323,\n\t\t361,\n\t\t288,\n\t\t397,\n\t\t365,\n\t\t379,\n\t\t378,\n\t\t400,\n\t\t377,\n\t\t152,\n\t\t148,\n\t\t176,\n\t\t149,\n\t\t150,\n\t\t136,\n\t\t172,\n\t\t58,\n\t\t132,\n\t\t93,\n\t\t234,\n\t\t127,\n\t\t162,\n\t\t21,\n\t\t54,\n\t\t103,\n\t\t67,\n\t\t109,\n\t\t10\n\t], [\n\t\t.9,\n\t\t.9,\n\t\t.9,\n\t\t1\n\t])\n];\nvar FaceLandmarksComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tstorageBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"face_landmarks.wgsl\",\n\t\t\tcode: faceLandmarksWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"FaceLandmarksComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeFaceLandmarks\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 64,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_uniform_buffer\"\n\t\t});\n\t\tconst storageSize = Math.max(256, CANONICAL_FACE_CONTOURS.length * 48);\n\t\tthis.storageBuffer = device.createBuffer({\n\t\t\tsize: storageSize,\n\t\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"face_landmarks_storage_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}) {\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 4;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst u32Uniforms = new Uint32Array(4);\n\t\tu32Uniforms[0] = width;\n\t\tu32Uniforms[1] = height;\n\t\tu32Uniforms[2] = CANONICAL_FACE_CONTOURS.length;\n\t\tu32Uniforms[3] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, u32Uniforms);\n\t\tconst f32Segments = new Float32Array(CANONICAL_FACE_CONTOURS.length * 12);\n\t\tfor (let i = 0; i < CANONICAL_FACE_CONTOURS.length; i++) {\n\t\t\tconst seg = CANONICAL_FACE_CONTOURS[i];\n\t\t\tconst ptA = landmarks[seg.from];\n\t\t\tconst ptB = landmarks[seg.to];\n\t\t\tconst offset = i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32Segments[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32Segments[offset + 0] = ptA.x * width;\n\t\t\tf32Segments[offset + 1] = ptA.y * height;\n\t\t\tf32Segments[offset + 2] = ptB.x * width;\n\t\t\tf32Segments[offset + 3] = ptB.y * height;\n\t\t\tf32Segments[offset + 4] = seg.color[0];\n\t\t\tf32Segments[offset + 5] = seg.color[1];\n\t\t\tf32Segments[offset + 6] = seg.color[2];\n\t\t\tf32Segments[offset + 7] = seg.color[3];\n\t\t\tf32Segments[offset + 8] = radius;\n\t\t\tf32Segments[offset + 9] = 1;\n\t\t\tf32Segments[offset + 10] = 0;\n\t\t\tf32Segments[offset + 11] = 0;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.storageBuffer, 0, f32Segments);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tsize: {\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,\n\t\t\t\tlabel: \"face_landmarks_output_texture\"\n\t\t\t});\n\t\t}\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"FaceLandmarksBindGroup\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.storageBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"FaceLandmarksCommandEncoder\" });\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"FaceLandmarksComputePass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.uniformBuffer.destroy();\n\t\tthis.storageBuffer.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/optical-flow.wgsl.ts\n/**\n* @file optical-flow.wgsl.ts\n* High-Performance Native WebGPU Optical Flow Compute Shaders\n* Implements coarse-to-fine Lucas-Kanade motion vector estimation with\n* spatial structure tensor integration and Tikhonov aperture regularization.\n*/\nconst opticalFlowDirectWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32, // Half-window radius W (e.g. 2 for 5x5 window)\n regularization: f32, // Tikhonov regularization lambda\n maxDisplacement: f32, // Maximum allowable flow vector length\n _pad0: f32,\n _pad1: f32,\n _pad2: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(3) var<uniform> params: FlowParams;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let inDims = vec2<f32>(textureDimensions(tex));\n let scaleRatio = inDims / vec2<f32>(f32(params.width), f32(params.height));\n let actualCoord = vec2<i32>(vec2<f32>(coord) * scaleRatio);\n let clamped = clamp(actualCoord, vec2<i32>(0, 0), vec2<i32>(inDims) - vec2<i32>(1, 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn computeFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n\n // Central difference spatial gradients on current frame\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal gradient: difference between current and previous frame\n let cCurr = sampleLuma(currTex, p);\n let cPrev = sampleLuma(prevTex, p);\n let it = cCurr - cPrev;\n\n // Gaussian spatial falloff weight\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n // Tikhonov regularization prevents singularity in flat/homogeneous regions\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var u: f32 = 0.0;\n var v: f32 = 0.0;\n\n if (det > 1e-6) {\n u = (-sxt * C + syt * B) / det;\n v = (-syt * A + sxt * B) / det;\n }\n\n let mag = length(vec2<f32>(u, v));\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n let scale = maxD / mag;\n u *= scale;\n v *= scale;\n }\n\n textureStore(flowTex, id.xy, vec4<f32>(u, v, min(mag, maxD), 1.0));\n}\n`;\nconst opticalFlowRefineWgsl = `\nstruct FlowParams {\n width: u32,\n height: u32,\n windowSize: u32,\n regularization: f32,\n maxDisplacement: f32,\n coarseWidth: u32,\n coarseHeight: u32,\n _pad0: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var coarseFlowTex: texture_2d<f32>;\n@group(0) @binding(3) var fineFlowTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: FlowParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\nfn rgbToLuminance(rgb: vec3<f32>) -> f32 {\n return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {\n let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(i32(params.width) - 1, i32(params.height) - 1));\n let color = textureLoad(tex, clamped, 0);\n return rgbToLuminance(color.rgb);\n}\n\nfn sampleWarpedPrevLuma(uv: vec2<f32>, priorFlow: vec2<f32>) -> f32 {\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let warpedUv = clamp(uv - priorFlow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let sampleColor = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n return rgbToLuminance(sampleColor.rgb);\n}\n\n@compute @workgroup_size(16, 16)\nfn refineFlow(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let centerCoord = vec2<i32>(i32(id.x), i32(id.y));\n let w = i32(max(params.windowSize, 1u));\n let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));\n let centerUv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read upsampled prior flow from coarse scale (scaled by 2x)\n let coarseCoord = vec2<i32>(centerCoord / 2);\n let coarseSample = textureLoad(coarseFlowTex, coarseCoord, 0);\n let priorFlow = coarseSample.xy * 2.0;\n\n var sxx: f32 = 0.0;\n var syy: f32 = 0.0;\n var sxy: f32 = 0.0;\n var sxt: f32 = 0.0;\n var syt: f32 = 0.0;\n\n for (var dy = -w; dy <= w; dy = dy + 1) {\n for (var dx = -w; dx <= w; dx = dx + 1) {\n let p = centerCoord + vec2<i32>(dx, dy);\n let pUv = (vec2<f32>(p) + 0.5) * invDims;\n\n let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));\n let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));\n let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));\n let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));\n\n let ix = (rx - lx) * 0.5;\n let iy = (dyL - uy) * 0.5;\n\n // Temporal residual against warped previous frame\n let cCurr = sampleLuma(currTex, p);\n let cWarpedPrev = sampleWarpedPrevLuma(pUv, priorFlow);\n let it = cCurr - cWarpedPrev;\n\n let distSq = f32(dx * dx + dy * dy);\n let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));\n\n sxx += ix * ix * weight;\n syy += iy * iy * weight;\n sxy += ix * iy * weight;\n sxt += ix * it * weight;\n syt += iy * it * weight;\n }\n }\n\n let trace = sxx + syy;\n let reg = max(params.regularization, 1e-4) * max(trace, 1.0);\n let A = sxx + reg;\n let B = sxy;\n let C = syy + reg;\n\n let det = A * C - B * B;\n var du: f32 = 0.0;\n var dv: f32 = 0.0;\n\n if (det > 1e-6) {\n du = (-sxt * C + syt * B) / det;\n dv = (-syt * A + sxt * B) / det;\n }\n\n // Combine coarse prior flow with fine residual flow\n var totalFlow = priorFlow + vec2<f32>(du, dv);\n let mag = length(totalFlow);\n let maxD = max(params.maxDisplacement, 1.0);\n if (mag > maxD) {\n totalFlow *= (maxD / mag);\n }\n\n textureStore(fineFlowTex, id.xy, vec4<f32>(totalFlow.x, totalFlow.y, min(mag, maxD), 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/optical-flow-pipeline.ts\nvar OpticalFlowComputePipeline = class {\n\tdirectPipeline;\n\trefinePipeline;\n\tdirectUniformBuffer;\n\trefineUniformBuffer;\n\tbilinearSampler;\n\tcachedCoarseTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst directModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_direct.wgsl\",\n\t\t\tcode: opticalFlowDirectWgsl\n\t\t});\n\t\tthis.directPipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowDirectPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: directModule,\n\t\t\t\tentryPoint: \"computeFlow\"\n\t\t\t}\n\t\t});\n\t\tconst refineModule = device.createShaderModule({\n\t\t\tlabel: \"optical_flow_refine.wgsl\",\n\t\t\tcode: opticalFlowRefineWgsl\n\t\t});\n\t\tthis.refinePipeline = device.createComputePipeline({\n\t\t\tlabel: \"OpticalFlowRefinePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: refineModule,\n\t\t\t\tentryPoint: \"refineFlow\"\n\t\t\t}\n\t\t});\n\t\tthis.directUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_direct_uniform\"\n\t\t});\n\t\tthis.refineUniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"optical_flow_refine_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"optical_flow_bilinear_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(prevTexture, currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst windowSize = options?.windowSize ?? 3;\n\t\tconst regularization = options?.regularization ?? options?.lambda ?? .05;\n\t\tconst scale = options?.scale ?? .5;\n\t\tconst maxDisplacement = 64;\n\t\tconst outputFormat = options.outputFormat ?? \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== outputFormat) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `optical_flow_output_${outputFormat}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: outputFormat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"optical_flow_command_encoder\" });\n\t\tif (scale > .1 && scale < .95 && width >= 64 && height >= 64) {\n\t\t\tconst coarseW = Math.max(16, Math.floor(width * scale));\n\t\t\tconst coarseH = Math.max(16, Math.floor(height * scale));\n\t\t\tif (!this.cachedCoarseTexture || this.cachedCoarseTexture.width !== coarseW || this.cachedCoarseTexture.height !== coarseH) {\n\t\t\t\tthis.cachedCoarseTexture?.destroy();\n\t\t\t\tthis.cachedCoarseTexture = this.device.createTexture({\n\t\t\t\t\tlabel: \"optical_flow_coarse\",\n\t\t\t\t\tsize: [coarseW, coarseH],\n\t\t\t\t\tformat: \"rgba16float\",\n\t\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = coarseW;\n\t\t\tdirectU32[1] = coarseH;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement * scale;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst coarseBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst coarsePass = commandEncoder.beginComputePass({ label: \"optical_flow_coarse_pass\" });\n\t\t\tcoarsePass.setPipeline(this.directPipeline);\n\t\t\tcoarsePass.setBindGroup(0, coarseBindGroup);\n\t\t\tcoarsePass.dispatchWorkgroups(Math.ceil(coarseW / 16), Math.ceil(coarseH / 16));\n\t\t\tcoarsePass.end();\n\t\t\tconst refineData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst refineU32 = new Uint32Array(refineData);\n\t\t\tconst refineF32 = new Float32Array(refineData);\n\t\t\trefineU32[0] = width;\n\t\t\trefineU32[1] = height;\n\t\t\trefineU32[2] = windowSize;\n\t\t\trefineF32[3] = regularization;\n\t\t\trefineF32[4] = maxDisplacement;\n\t\t\trefineU32[5] = coarseW;\n\t\t\trefineU32[6] = coarseH;\n\t\t\tthis.device.queue.writeBuffer(this.refineUniformBuffer, 0, refineData);\n\t\t\tconst refineBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.refinePipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedCoarseTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: { buffer: this.refineUniformBuffer }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst finePass = commandEncoder.beginComputePass({ label: \"optical_flow_fine_pass\" });\n\t\t\tfinePass.setPipeline(this.refinePipeline);\n\t\t\tfinePass.setBindGroup(0, refineBindGroup);\n\t\t\tfinePass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tfinePass.end();\n\t\t} else {\n\t\t\tconst directData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\t\tconst directU32 = new Uint32Array(directData);\n\t\t\tconst directF32 = new Float32Array(directData);\n\t\t\tdirectU32[0] = width;\n\t\t\tdirectU32[1] = height;\n\t\t\tdirectU32[2] = windowSize;\n\t\t\tdirectF32[3] = regularization;\n\t\t\tdirectF32[4] = maxDisplacement;\n\t\t\tthis.device.queue.writeBuffer(this.directUniformBuffer, 0, directData);\n\t\t\tconst directBindGroup = this.device.createBindGroup({\n\t\t\t\tlayout: this.directPipeline.getBindGroupLayout(0),\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: prevTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: { buffer: this.directUniformBuffer }\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t});\n\t\t\tconst directPass = commandEncoder.beginComputePass({ label: \"optical_flow_direct_pass\" });\n\t\t\tdirectPass.setPipeline(this.directPipeline);\n\t\t\tdirectPass.setBindGroup(0, directBindGroup);\n\t\t\tdirectPass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\t\tdirectPass.end();\n\t\t}\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedCoarseTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.directUniformBuffer.destroy();\n\t\tthis.refineUniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/pose-skeleton.wgsl.ts\n/**\n* @file pose-skeleton.wgsl.ts\n* Native WebGPU WGSL compute shader for ControlNet OpenPose skeleton rasterization.\n* Renders instanced bone cylinders/capsules directly in VRAM without CPU roundtrips.\n*/\nconst poseSkeletonWgsl = `\nstruct Bone {\n start: vec2<f32>,\n end: vec2<f32>,\n color: vec4<f32>,\n radius: f32,\n enabled: f32,\n pad: vec2<f32>,\n};\n\nstruct SkeletonParams {\n width: u32,\n height: u32,\n numBones: u32,\n pad: u32,\n bones: array<Bone, 24>,\n};\n\n@group(0) @binding(0) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(1) var<uniform> params: SkeletonParams;\n\n@compute @workgroup_size(16, 16)\nfn computePoseSkeleton(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let p = vec2<f32>(f32(id.x) + 0.5, f32(id.y) + 0.5);\n var outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\n let count = min(params.numBones, 24u);\n for (var i = 0u; i < count; i = i + 1u) {\n let bone = params.bones[i];\n if (bone.enabled < 0.5) {\n continue;\n }\n\n let ab = bone.end - bone.start;\n let ap = p - bone.start;\n let l2 = dot(ab, ab);\n\n var t: f32 = 0.0;\n if (l2 > 0.0001) {\n t = clamp(dot(ap, ab) / l2, 0.0, 1.0);\n }\n\n let closest = bone.start + t * ab;\n let dist = length(p - closest);\n\n if (dist <= bone.radius) {\n // Sub-pixel edge antialiasing\n let edgeAlpha = clamp(bone.radius - dist + 0.5, 0.0, 1.0);\n let a = edgeAlpha * bone.color.a;\n outColor = vec4<f32>(mix(outColor.rgb, bone.color.rgb, a), max(outColor.a, a));\n }\n }\n\n textureStore(outputTex, id.xy, outColor);\n}\n`;\n\n//#endregion\n//#region src/pipelines/pose-skeleton-pipeline.ts\nconst CANONICAL_OPENPOSE_BONES = [\n\t{\n\t\tfrom: 0,\n\t\tto: 11,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 0,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 12,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 13,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.333,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 13,\n\t\tto: 15,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.667,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 14,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 14,\n\t\tto: 16,\n\t\tcolor: [\n\t\t\t.667,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 11,\n\t\tto: 23,\n\t\tcolor: [\n\t\t\t.333,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 12,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 24,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.333,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 23,\n\t\tto: 25,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.667,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 25,\n\t\tto: 27,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 24,\n\t\tto: 26,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.667,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: 26,\n\t\tto: 28,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.333,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t}\n];\nvar PoseSkeletonComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"pose_skeleton.wgsl\",\n\t\t\tcode: poseSkeletonWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"PoseSkeletonComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computePoseSkeleton\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 1280,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"pose_skeleton_uniform_buffer\"\n\t\t});\n\t}\n\texecute(landmarks, options = {}, bones) {\n\t\tconst boneDefs = bones ?? CANONICAL_OPENPOSE_BONES;\n\t\tconst width = options.width ?? 1024;\n\t\tconst height = options.height ?? 1024;\n\t\tconst lineWidth = options.lineWidth ?? 6;\n\t\tconst radius = Math.max(1, lineWidth / 2);\n\t\tconst arrayBuf = new ArrayBuffer(1280);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tu32View[2] = boneDefs.length;\n\t\tu32View[3] = 0;\n\t\tconst boneBaseFloatOffset = 4;\n\t\tfor (let i = 0; i < boneDefs.length; i++) {\n\t\t\tconst boneDef = boneDefs[i];\n\t\t\tconst ptA = landmarks[boneDef.from];\n\t\t\tconst ptB = landmarks[boneDef.to];\n\t\t\tconst offset = boneBaseFloatOffset + i * 12;\n\t\t\tif (!ptA || !ptB || (ptA.visibility ?? 1) < .2 || (ptB.visibility ?? 1) < .2) {\n\t\t\t\tf32View[offset + 9] = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tf32View[offset + 0] = ptA.x * width;\n\t\t\tf32View[offset + 1] = ptA.y * height;\n\t\t\tf32View[offset + 2] = ptB.x * width;\n\t\t\tf32View[offset + 3] = ptB.y * height;\n\t\t\tf32View[offset + 4] = boneDef.color[0];\n\t\t\tf32View[offset + 5] = boneDef.color[1];\n\t\t\tf32View[offset + 6] = boneDef.color[2];\n\t\t\tf32View[offset + 7] = boneDef.color[3];\n\t\t\tf32View[offset + 8] = radius;\n\t\t\tf32View[offset + 9] = 1;\n\t\t}\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"openpose_skeleton_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"pose_skeleton_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"pose_skeleton_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"pose_skeleton_output_view\" })\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t}]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"pose_skeleton_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/segmentation.wgsl.ts\n/**\n* @file segmentation.wgsl.ts\n* Native WebGPU WGSL compute shader for segmentation mask thresholding and edge feathering.\n* Outputs crisp alpha mattes directly in VRAM without CPU roundtrips.\n*/\nconst segmentationWgsl = `\nstruct SegParams {\n threshold: f32,\n feather: f32,\n width: u32,\n height: u32,\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var outputTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var<uniform> params: SegParams;\n\n@compute @workgroup_size(16, 16)\nfn computeSegmentation(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let sample = textureLoad(inputTex, coord, 0);\n\n // Luminance or alpha channel extraction\n let rawAlpha = max(sample.a, dot(sample.rgb, vec3<f32>(0.299, 0.587, 0.114)));\n\n let lower = max(0.0, params.threshold - params.feather);\n let upper = min(1.0, params.threshold + params.feather);\n let alpha = smoothstep(lower, upper, rawAlpha);\n\n textureStore(outputTex, id.xy, vec4<f32>(alpha, alpha, alpha, 1.0));\n}\n`;\n\n//#endregion\n//#region src/pipelines/segmentation-pipeline.ts\nvar SegmentationComputePipeline = class {\n\tcomputePipeline;\n\tuniformBuffer;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"segmentation.wgsl\",\n\t\t\tcode: segmentationWgsl\n\t\t});\n\t\tthis.computePipeline = device.createComputePipeline({\n\t\t\tlabel: \"SegmentationComputePipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"computeSegmentation\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 16,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"segmentation_uniform_buffer\"\n\t\t});\n\t}\n\texecute(inputTexture, options = {}) {\n\t\tconst width = inputTexture.width;\n\t\tconst height = inputTexture.height;\n\t\tconst threshold = options.threshold ?? .5;\n\t\tconst feather = options.feather ?? .05;\n\t\tconst arrayBuf = /* @__PURE__ */ new ArrayBuffer(16);\n\t\tconst f32View = new Float32Array(arrayBuf);\n\t\tconst u32View = new Uint32Array(arrayBuf);\n\t\tf32View[0] = threshold;\n\t\tf32View[1] = feather;\n\t\tu32View[2] = width;\n\t\tu32View[3] = height;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, arrayBuf);\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: \"segmentation_output_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat: \"rgba8unorm\",\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t}\n\t\tconst commandEncoder = this.device.createCommandEncoder({ label: \"segmentation_command_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlabel: \"segmentation_bind_group\",\n\t\t\tlayout: this.computePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView({ label: \"segmentation_input_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView({ label: \"segmentation_output_view\" })\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"segmentation_compute_pass\" });\n\t\tpass.setPipeline(this.computePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16), 1);\n\t\tpass.end();\n\t\tthis.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\tdestroy() {\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.cachedOutputTexture = void 0;\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/shaders/temporal-warp-blend.wgsl.ts\n/**\n* @file temporal-warp-blend.wgsl.ts\n* Native WebGPU Forward Warping & Adaptive Photometric Temporal Blend Compute Shaders\n* Warps previous frame forward along motion vectors and blends adaptively with current\n* frame to eliminate generative AI video flicker with zero ghosting.\n*/\nconst temporalWarpBlendRgba8Wgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32, // Base current frame weight alpha (e.g. 0.35)\n disocclusionThreshold: f32, // Photometric error cutoff for fallback to curr frame\n maxMotionPixels: f32, // Speed cutoff for fallback to curr frame\n isFirstFrame: f32, // 1.0 = pass-through first frame, 0.0 = temporal blend\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n // If first frame or scene cut reset, pass through current frame directly\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n // Read motion vector (u, v) in pixel units\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n // Motion-compensated backward warp coordinate pointing to previous frame\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n // Adaptive blend weight:\n // - Coherent motion (low diff, low speed): alpha = blendWeight (strong deflicker smoothing)\n // - Disocclusion or extreme motion (high diff): alpha -> 1.0 (fall back to curr frame, no ghosting)\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\nconst temporalWarpBlendRgba16fWgsl = `\nstruct WarpBlendParams {\n width: u32,\n height: u32,\n blendWeight: f32,\n disocclusionThreshold: f32,\n maxMotionPixels: f32,\n isFirstFrame: f32,\n _pad0: f32,\n _pad1: f32,\n};\n\n@group(0) @binding(0) var prevTex: texture_2d<f32>;\n@group(0) @binding(1) var currTex: texture_2d<f32>;\n@group(0) @binding(2) var flowTex: texture_2d<f32>;\n@group(0) @binding(3) var outTex: texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params: WarpBlendParams;\n@group(0) @binding(5) var bilinearSamp: sampler;\n\n@compute @workgroup_size(16, 16)\nfn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.width || id.y >= params.height) {\n return;\n }\n\n let coord = vec2<i32>(i32(id.x), i32(id.y));\n let currColor = textureLoad(currTex, coord, 0);\n\n if (params.isFirstFrame > 0.5) {\n textureStore(outTex, id.xy, currColor);\n return;\n }\n\n let dims = vec2<f32>(f32(params.width), f32(params.height));\n let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let uv = (vec2<f32>(id.xy) + 0.5) * invDims;\n\n let flowSample = textureLoad(flowTex, coord, 0);\n let flow = flowSample.xy;\n let speed = length(flow);\n\n let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));\n let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);\n\n // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)\n let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;\n\n let tLow = params.disocclusionThreshold;\n let tHigh = params.disocclusionThreshold * 1.5;\n let errFactor = smoothstep(tLow, tHigh, colorDiff);\n let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);\n\n let fallbackFactor = max(errFactor, speedFactor);\n let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);\n\n let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);\n let blendedA = mix(warpedPrev.a, currColor.a, alpha);\n\n textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));\n}\n`;\n\n//#endregion\n//#region src/pipelines/temporal-deflicker-pipeline.ts\nvar TemporalDeflickerPipeline = class {\n\tflowPipeline;\n\trgba8Pipeline;\n\trgba16fPipeline;\n\tuniformBuffer;\n\tbilinearSampler;\n\thistoryTexture;\n\tcachedOutputTexture;\n\tconstructor(device) {\n\t\tthis.device = device;\n\t\tthis.flowPipeline = new OpticalFlowComputePipeline(device);\n\t\tconst rgba8Module = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba8.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba8Wgsl\n\t\t});\n\t\tthis.rgba8Pipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba8Pipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba8Module,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tconst rgba16fModule = device.createShaderModule({\n\t\t\tlabel: \"temporal_warp_blend_rgba16f.wgsl\",\n\t\t\tcode: temporalWarpBlendRgba16fWgsl\n\t\t});\n\t\tthis.rgba16fPipeline = device.createComputePipeline({\n\t\t\tlabel: \"TemporalWarpBlendRgba16fPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tcompute: {\n\t\t\t\tmodule: rgba16fModule,\n\t\t\t\tentryPoint: \"warpBlend\"\n\t\t\t}\n\t\t});\n\t\tthis.uniformBuffer = device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n\t\t\tlabel: \"temporal_deflicker_uniform\"\n\t\t});\n\t\tthis.bilinearSampler = device.createSampler({\n\t\t\tlabel: \"temporal_deflicker_sampler\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\taddressModeU: \"clamp-to-edge\",\n\t\t\taddressModeV: \"clamp-to-edge\"\n\t\t});\n\t}\n\texecute(currTexture, options = {}, customEncoder) {\n\t\tconst width = currTexture.width;\n\t\tconst height = currTexture.height;\n\t\tconst rawBlendWeight = options.blendWeight ?? .35;\n\t\tconst blendWeight = typeof rawBlendWeight === \"number\" ? rawBlendWeight : Number(rawBlendWeight);\n\t\tconst disocclusionThreshold = options.disocclusionThreshold ?? .15;\n\t\tconst maxMotionPixels = options.maxMotionPixels ?? 64;\n\t\tconst format = currTexture.format;\n\t\tconst isRgba16f = format === \"rgba16float\";\n\t\tif (!this.cachedOutputTexture || this.cachedOutputTexture.width !== width || this.cachedOutputTexture.height !== height || this.cachedOutputTexture.format !== format) {\n\t\t\tthis.cachedOutputTexture?.destroy();\n\t\t\tthis.cachedOutputTexture = this.device.createTexture({\n\t\t\t\tlabel: `deflickered_output_${format}`,\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t\t});\n\t\t}\n\t\tif (!this.historyTexture || this.historyTexture.width !== width || this.historyTexture.height !== height) {\n\t\t\tthis.historyTexture?.destroy();\n\t\t\tthis.historyTexture = this.device.createTexture({\n\t\t\t\tlabel: \"deflicker_history_texture\",\n\t\t\t\tsize: [width, height],\n\t\t\t\tformat,\n\t\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC\n\t\t\t});\n\t\t\tconst commandEncoder$1 = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_first_frame_encoder\" });\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.historyTexture }, [width, height]);\n\t\t\tcommandEncoder$1.copyTextureToTexture({ texture: currTexture }, { texture: this.cachedOutputTexture }, [width, height]);\n\t\t\tif (!customEncoder) this.device.queue.submit([commandEncoder$1.finish()]);\n\t\t\treturn this.cachedOutputTexture;\n\t\t}\n\t\tconst flowTexture = this.flowPipeline.execute(this.historyTexture, currTexture, options.opticalFlow, customEncoder);\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = width;\n\t\tu32View[1] = height;\n\t\tf32View[2] = blendWeight;\n\t\tf32View[3] = disocclusionThreshold;\n\t\tf32View[4] = maxMotionPixels;\n\t\tf32View[5] = 0;\n\t\tthis.device.queue.writeBuffer(this.uniformBuffer, 0, uniformData);\n\t\tconst pipeline = isRgba16f ? this.rgba16fPipeline : this.rgba8Pipeline;\n\t\tconst commandEncoder = customEncoder ?? this.device.createCommandEncoder({ label: \"deflicker_blend_encoder\" });\n\t\tconst bindGroup = this.device.createBindGroup({\n\t\t\tlayout: pipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: this.historyTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: currTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: flowTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: this.cachedOutputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: { buffer: this.uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: this.bilinearSampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst pass = commandEncoder.beginComputePass({ label: \"deflicker_blend_pass\" });\n\t\tpass.setPipeline(pipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tpass.dispatchWorkgroups(Math.ceil(width / 16), Math.ceil(height / 16));\n\t\tpass.end();\n\t\tcommandEncoder.copyTextureToTexture({ texture: this.cachedOutputTexture }, { texture: this.historyTexture }, [width, height]);\n\t\tif (!customEncoder) this.device.queue.submit([commandEncoder.finish()]);\n\t\treturn this.cachedOutputTexture;\n\t}\n\treset() {\n\t\tthis.historyTexture?.destroy();\n\t\tthis.historyTexture = void 0;\n\t}\n\tdestroy() {\n\t\tthis.flowPipeline.destroy();\n\t\tthis.historyTexture?.destroy();\n\t\tthis.cachedOutputTexture?.destroy();\n\t\tthis.uniformBuffer.destroy();\n\t}\n};\n\n//#endregion\n//#region src/pipeline/tensor-pipeline.ts\nvar TensorPipeline = class TensorPipeline {\n\tid;\n\tcannyOptions;\n\tdepthNormalsOptions;\n\tposeSkeletonOptions;\n\tfaceLandmarksOptions;\n\tsegmentationOptions;\n\topticalFlowOptions;\n\tdeflickerOptions;\n\tmultiplexer = new ControlNetMultiplexer();\n\tcannyPipeline;\n\tdepthNormalsPipeline;\n\tposePipeline;\n\tfacePipeline;\n\tsegmentationPipeline;\n\topticalFlowPipeline;\n\tdeflickerPipeline;\n\tprevInputTexture;\n\tconstructor(source) {\n\t\tthis.source = source;\n\t\tthis.id = `tensor-${Math.random().toString(36).slice(2, 9)}`;\n\t}\n\tstatic from(source) {\n\t\treturn new TensorPipeline(source);\n\t}\n\tcanny(options = {}) {\n\t\tthis.cannyOptions = options;\n\t\treturn this;\n\t}\n\tdepthNormals(options = {}) {\n\t\tthis.depthNormalsOptions = options;\n\t\treturn this;\n\t}\n\tposeSkeleton(options = {}) {\n\t\tthis.poseSkeletonOptions = options;\n\t\treturn this;\n\t}\n\tpose(landmarks, options = {}) {\n\t\tthis.poseSkeletonOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tfaceLandmarks(options = {}) {\n\t\tthis.faceLandmarksOptions = options;\n\t\treturn this;\n\t}\n\tface(landmarks, options = {}) {\n\t\tthis.faceLandmarksOptions = {\n\t\t\t...options,\n\t\t\tlandmarks\n\t\t};\n\t\treturn this;\n\t}\n\tsegmentation(options = {}) {\n\t\tthis.segmentationOptions = options;\n\t\treturn this;\n\t}\n\topticalFlow(options = {}) {\n\t\tthis.opticalFlowOptions = options;\n\t\treturn this;\n\t}\n\tdeflicker(options = {}) {\n\t\tthis.deflickerOptions = options;\n\t\treturn this;\n\t}\n\tgetMultiplexer() {\n\t\treturn this.multiplexer;\n\t}\n\tasync execute(device, overrideSourceTexture) {\n\t\tlet inputTexture = overrideSourceTexture;\n\t\tif (!inputTexture && typeof this.source?.createView === \"function\") inputTexture = this.source;\n\t\tif (!inputTexture) throw new Error(\"[TensorPipeline.execute] No GPUTexture available for tensor compute execution. Pass a valid GPUTexture to execute() or initialize with a GPUTexture source.\");\n\t\tif (this.cannyOptions) {\n\t\t\tif (!this.cannyPipeline) this.cannyPipeline = new CannyComputePipeline(device);\n\t\t\tconst cannyTex = this.cannyPipeline.execute(inputTexture, this.cannyOptions);\n\t\t\tthis.multiplexer.set(\"canny\", cannyTex);\n\t\t}\n\t\tif (this.depthNormalsOptions) {\n\t\t\tif (!this.depthNormalsPipeline) this.depthNormalsPipeline = new DepthNormalsComputePipeline(device);\n\t\t\tconst normalTex = this.depthNormalsPipeline.execute(inputTexture, this.depthNormalsOptions);\n\t\t\tthis.multiplexer.set(\"normals\", normalTex);\n\t\t}\n\t\tif (this.poseSkeletonOptions?.landmarks) {\n\t\t\tif (!this.posePipeline) this.posePipeline = new PoseSkeletonComputePipeline(device);\n\t\t\tconst skeletonTex = this.posePipeline.execute(this.poseSkeletonOptions.landmarks, {\n\t\t\t\twidth: this.poseSkeletonOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.poseSkeletonOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.poseSkeletonOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"poseSkeleton\", skeletonTex);\n\t\t}\n\t\tif (this.faceLandmarksOptions?.landmarks) {\n\t\t\tif (!this.facePipeline) this.facePipeline = new FaceLandmarksComputePipeline(device);\n\t\t\tconst faceTex = this.facePipeline.execute(this.faceLandmarksOptions.landmarks, {\n\t\t\t\twidth: this.faceLandmarksOptions.width ?? inputTexture.width,\n\t\t\t\theight: this.faceLandmarksOptions.height ?? inputTexture.height,\n\t\t\t\tlineWidth: this.faceLandmarksOptions.lineWidth\n\t\t\t});\n\t\t\tthis.multiplexer.set(\"faceLandmarks\", faceTex);\n\t\t}\n\t\tif (this.segmentationOptions) {\n\t\t\tif (!this.segmentationPipeline) this.segmentationPipeline = new SegmentationComputePipeline(device);\n\t\t\tconst segTex = this.segmentationPipeline.execute(inputTexture, this.segmentationOptions);\n\t\t\tthis.multiplexer.set(\"segmentationMask\", segTex);\n\t\t}\n\t\tif (this.opticalFlowOptions) {\n\t\t\tif (!this.opticalFlowPipeline) this.opticalFlowPipeline = new OpticalFlowComputePipeline(device);\n\t\t\tconst prevTex = this.prevInputTexture ?? inputTexture;\n\t\t\tconst flowTex = this.opticalFlowPipeline.execute(prevTex, inputTexture, this.opticalFlowOptions);\n\t\t\tthis.multiplexer.set(\"motionVectors\", flowTex);\n\t\t}\n\t\tif (this.deflickerOptions) {\n\t\t\tif (!this.deflickerPipeline) this.deflickerPipeline = new TemporalDeflickerPipeline(device);\n\t\t\tconst deflickeredTex = this.deflickerPipeline.execute(inputTexture, this.deflickerOptions);\n\t\t\tthis.multiplexer.set(\"deflickered\", deflickeredTex);\n\t\t}\n\t\tthis.prevInputTexture = inputTexture;\n\t\treturn this.multiplexer.getOutputs();\n\t}\n\ttoConfig() {\n\t\treturn {\n\t\t\tcanny: this.cannyOptions,\n\t\t\tdepthNormals: this.depthNormalsOptions,\n\t\t\tposeSkeleton: this.poseSkeletonOptions,\n\t\t\tfaceLandmarks: this.faceLandmarksOptions,\n\t\t\tsegmentation: this.segmentationOptions,\n\t\t\topticalFlow: this.opticalFlowOptions,\n\t\t\tdeflicker: this.deflickerOptions\n\t\t};\n\t}\n\ttoNode() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: \"tensor\",\n\t\t\tsource: this.source,\n\t\t\tconfig: this.toConfig()\n\t\t};\n\t}\n\tdestroy() {\n\t\tthis.cannyPipeline?.destroy();\n\t\tthis.depthNormalsPipeline?.destroy();\n\t\tthis.posePipeline?.destroy();\n\t\tthis.facePipeline?.destroy();\n\t\tthis.segmentationPipeline?.destroy();\n\t\tthis.opticalFlowPipeline?.destroy();\n\t\tthis.deflickerPipeline?.destroy();\n\t\tthis.multiplexer.destroy();\n\t}\n};\n\n//#endregion\nexport { CANONICAL_FACE_CONTOURS, CANONICAL_OPENPOSE_BONES, CannyComputePipeline, ControlNetMultiplexer, DepthNormalsComputePipeline, FaceLandmarksComputePipeline, OpticalFlowComputePipeline, PoseSkeletonComputePipeline, SegmentationComputePipeline, TemporalDeflickerPipeline, TensorPipeline, cannyNmsR32fWgsl, cannyNmsRgba8Wgsl, cannySobelWgsl, depthNormalsRgba16fWgsl, depthNormalsRgba8Wgsl, faceLandmarksWgsl, opticalFlowDirectWgsl, opticalFlowRefineWgsl, poseSkeletonWgsl, segmentationWgsl, temporalWarpBlendRgba16fWgsl, temporalWarpBlendRgba8Wgsl };\n//# sourceMappingURL=index.mjs.map","import { n as __reExport, t as __exportAll } from \"./chunk-CFhWmker.mjs\";\nimport { PoseSkeletonComputePipeline } from \"@gitframes/tensor-webgpu\";\nimport { existsSync, mkdirSync, readFileSync, statSync } from \"node:fs\";\nimport { readFile, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { frameSignal, programmaticSignal } from \"@gitframes/core\";\n\n//#region src/model/registry.ts\nconst YOLO_TASKS = [\n\t\"detect\",\n\t\"segment\",\n\t\"pose\",\n\t\"obb\",\n\t\"classify\",\n\t\"world\"\n];\nconst YOLO_VARIANTS = [\n\t\"n\",\n\t\"s\",\n\t\"m\",\n\t\"l\",\n\t\"x\"\n];\n/**\n* Default download origin. Override per-run with `baseUrl` option or the\n* GITFRAMES_YOLO_BASE_URL environment variable.\n*/\nconst YOLO_ASSETS_RELEASE = \"v8.3.0\";\nconst DEFAULT_YOLO_BASE_URL = `https://github.com/ultralytics/assets/releases/download/${YOLO_ASSETS_RELEASE}/`;\nconst YOLO_MODELS = {\n\tyolo11n: {\n\t\tkey: \"yolo11n\",\n\t\ttask: \"detect\",\n\t\tvariant: \"n\",\n\t\tfilename: \"yolo11n.onnx\",\n\t\tbytesFp32: 10723904,\n\t\tbytesFp16: 5361952,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\tyolo11s: {\n\t\tkey: \"yolo11s\",\n\t\ttask: \"detect\",\n\t\tvariant: \"s\",\n\t\tfilename: \"yolo11s.onnx\",\n\t\turl: \"https://huggingface.co/mobilint/YOLO11s/resolve/main/yolo11s.onnx\",\n\t\tbytesFp32: 38502400,\n\t\tbytesFp16: 19251200,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\tyolo11m: {\n\t\tkey: \"yolo11m\",\n\t\ttask: \"detect\",\n\t\tvariant: \"m\",\n\t\tfilename: \"yolo11m.onnx\",\n\t\tbytesFp32: 82329600,\n\t\tbytesFp16: 41164800,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\tyolo11l: {\n\t\tkey: \"yolo11l\",\n\t\ttask: \"detect\",\n\t\tvariant: \"l\",\n\t\tfilename: \"yolo11l.onnx\",\n\t\tbytesFp32: 103628800,\n\t\tbytesFp16: 51814400,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\tyolo11x: {\n\t\tkey: \"yolo11x\",\n\t\ttask: \"detect\",\n\t\tvariant: \"x\",\n\t\tfilename: \"yolo11x.onnx\",\n\t\tbytesFp32: 233062400,\n\t\tbytesFp16: 116531200,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\t\"yolo11n-seg\": {\n\t\tkey: \"yolo11n-seg\",\n\t\ttask: \"segment\",\n\t\tvariant: \"n\",\n\t\tfilename: \"yolo11n-seg.onnx\",\n\t\tbytesFp32: 11886592,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\t\"yolo11s-seg\": {\n\t\tkey: \"yolo11s-seg\",\n\t\ttask: \"segment\",\n\t\tvariant: \"s\",\n\t\tfilename: \"yolo11s-seg.onnx\",\n\t\turl: \"https://huggingface.co/mobilint/YOLO11s-seg/resolve/main/yolo11s-seg.onnx\",\n\t\tbytesFp32: 42631168,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\t\"yolo11m-seg\": {\n\t\tkey: \"yolo11m-seg\",\n\t\ttask: \"segment\",\n\t\tvariant: \"m\",\n\t\tfilename: \"yolo11m-seg.onnx\",\n\t\tbytesFp32: 91128832,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\t\"yolo11n-pose\": {\n\t\tkey: \"yolo11n-pose\",\n\t\ttask: \"pose\",\n\t\tvariant: \"n\",\n\t\tfilename: \"yolo11n-pose.onnx\",\n\t\tbytesFp32: 11450368,\n\t\tnc: 1,\n\t\timgsz: 640\n\t},\n\t\"yolo11s-pose\": {\n\t\tkey: \"yolo11s-pose\",\n\t\ttask: \"pose\",\n\t\tvariant: \"s\",\n\t\tfilename: \"yolo11s-pose.onnx\",\n\t\turl: \"https://huggingface.co/mobilint/YOLO11s-pose/resolve/main/yolo11s-pose.onnx\",\n\t\tbytesFp32: 41050112,\n\t\tnc: 1,\n\t\timgsz: 640\n\t},\n\t\"yolo11m-pose\": {\n\t\tkey: \"yolo11m-pose\",\n\t\ttask: \"pose\",\n\t\tvariant: \"m\",\n\t\tfilename: \"yolo11m-pose.onnx\",\n\t\turl: \"https://huggingface.co/mobilint/YOLO11m-pose/resolve/main/yolo11m-pose.onnx\",\n\t\tbytesFp32: 821e5,\n\t\tnc: 1,\n\t\timgsz: 640\n\t},\n\t\"yolo11l-pose\": {\n\t\tkey: \"yolo11l-pose\",\n\t\ttask: \"pose\",\n\t\tvariant: \"l\",\n\t\tfilename: \"yolo11l-pose.onnx\",\n\t\turl: \"https://huggingface.co/mobilint/YOLO11l-pose/resolve/main/yolo11l-pose.onnx\",\n\t\tbytesFp32: 1105e5,\n\t\tnc: 1,\n\t\timgsz: 640\n\t},\n\t\"yolo11n-obb\": {\n\t\tkey: \"yolo11n-obb\",\n\t\ttask: \"obb\",\n\t\tvariant: \"n\",\n\t\tfilename: \"yolo11n-obb.onnx\",\n\t\tbytesFp32: 12048384,\n\t\tnc: 15,\n\t\timgsz: 1024\n\t},\n\t\"yolo11s-obb\": {\n\t\tkey: \"yolo11s-obb\",\n\t\ttask: \"obb\",\n\t\tvariant: \"s\",\n\t\tfilename: \"yolo11s-obb.onnx\",\n\t\tbytesFp32: 43253760,\n\t\tnc: 15,\n\t\timgsz: 1024\n\t},\n\t\"yolo11m-obb\": {\n\t\tkey: \"yolo11m-obb\",\n\t\ttask: \"obb\",\n\t\tvariant: \"m\",\n\t\tfilename: \"yolo11m-obb.onnx\",\n\t\turl: \"https://huggingface.co/mobilint/YOLO11m-obb/resolve/main/yolo11m-obb.onnx\",\n\t\tbytesFp32: 832e5,\n\t\tnc: 15,\n\t\timgsz: 1024\n\t},\n\t\"yolo11l-obb\": {\n\t\tkey: \"yolo11l-obb\",\n\t\ttask: \"obb\",\n\t\tvariant: \"l\",\n\t\tfilename: \"yolo11l-obb.onnx\",\n\t\turl: \"https://huggingface.co/mobilint/YOLO11l-obb/resolve/main/yolo11l-obb.onnx\",\n\t\tbytesFp32: 111e6,\n\t\tnc: 15,\n\t\timgsz: 1024\n\t},\n\t\"yolo11n-cls\": {\n\t\tkey: \"yolo11n-cls\",\n\t\ttask: \"classify\",\n\t\tvariant: \"n\",\n\t\tfilename: \"yolo11n-cls.onnx\",\n\t\tbytesFp32: 11918848,\n\t\tnc: 1e3,\n\t\timgsz: 224\n\t},\n\t\"yolo11s-cls\": {\n\t\tkey: \"yolo11s-cls\",\n\t\ttask: \"classify\",\n\t\tvariant: \"s\",\n\t\tfilename: \"yolo11s-cls.onnx\",\n\t\tbytesFp32: 42704896,\n\t\tnc: 1e3,\n\t\timgsz: 224\n\t},\n\t\"yolov8s-worldv2\": {\n\t\tkey: \"yolov8s-worldv2\",\n\t\ttask: \"world\",\n\t\tvariant: \"s\",\n\t\tfilename: \"yolov8s-worldv2.onnx\",\n\t\turl: \"https://huggingface.co/Instemic/yolo-world-onnx/resolve/main/yolov8s-worldv2.onnx\",\n\t\tbytesFp32: 52e6,\n\t\tnc: 80,\n\t\timgsz: 640\n\t},\n\t\"yolov8m-worldv2\": {\n\t\tkey: \"yolov8m-worldv2\",\n\t\ttask: \"world\",\n\t\tvariant: \"m\",\n\t\tfilename: \"yolov8m-worldv2.onnx\",\n\t\turl: \"https://huggingface.co/ultralytics/yolov8/resolve/main/yolov8m-worldv2.onnx\",\n\t\tbytesFp32: 108e6,\n\t\tnc: 80,\n\t\timgsz: 640\n\t}\n};\nconst DEFAULT_MODEL_KEY_BY_TASK = {\n\tdetect: (v) => v === \"n\" ? \"yolo11n\" : v === \"s\" ? \"yolo11s\" : v === \"m\" ? \"yolo11m\" : v === \"l\" ? \"yolo11l\" : \"yolo11x\",\n\tsegment: (v) => v === \"m\" ? \"yolo11m-seg\" : v === \"s\" ? \"yolo11s-seg\" : \"yolo11n-seg\",\n\tpose: (v) => v === \"l\" ? \"yolo11l-pose\" : v === \"m\" ? \"yolo11m-pose\" : v === \"s\" ? \"yolo11s-pose\" : \"yolo11n-pose\",\n\tobb: (v) => v === \"l\" ? \"yolo11l-obb\" : v === \"m\" ? \"yolo11m-obb\" : v === \"s\" ? \"yolo11s-obb\" : \"yolo11n-obb\",\n\tclassify: (v) => v === \"s\" ? \"yolo11s-cls\" : \"yolo11n-cls\",\n\tworld: (v) => v === \"m\" || v === \"l\" || v === \"x\" ? \"yolov8m-worldv2\" : \"yolov8s-worldv2\"\n};\n/** COCO 80 class names — index order matches every ultralytics COCO export. */\nconst YOLO_COCO_CLASSES = [\n\t\"person\",\n\t\"bicycle\",\n\t\"car\",\n\t\"motorcycle\",\n\t\"airplane\",\n\t\"bus\",\n\t\"train\",\n\t\"truck\",\n\t\"boat\",\n\t\"traffic light\",\n\t\"fire hydrant\",\n\t\"stop sign\",\n\t\"parking meter\",\n\t\"bench\",\n\t\"bird\",\n\t\"cat\",\n\t\"dog\",\n\t\"horse\",\n\t\"sheep\",\n\t\"cow\",\n\t\"elephant\",\n\t\"bear\",\n\t\"zebra\",\n\t\"giraffe\",\n\t\"backpack\",\n\t\"umbrella\",\n\t\"handbag\",\n\t\"tie\",\n\t\"suitcase\",\n\t\"frisbee\",\n\t\"skis\",\n\t\"snowboard\",\n\t\"sports ball\",\n\t\"kite\",\n\t\"baseball bat\",\n\t\"baseball glove\",\n\t\"skateboard\",\n\t\"surfboard\",\n\t\"tennis racket\",\n\t\"bottle\",\n\t\"wine glass\",\n\t\"cup\",\n\t\"fork\",\n\t\"knife\",\n\t\"spoon\",\n\t\"bowl\",\n\t\"banana\",\n\t\"apple\",\n\t\"sandwich\",\n\t\"orange\",\n\t\"broccoli\",\n\t\"carrot\",\n\t\"hot dog\",\n\t\"pizza\",\n\t\"donut\",\n\t\"cake\",\n\t\"chair\",\n\t\"couch\",\n\t\"potted plant\",\n\t\"bed\",\n\t\"dining table\",\n\t\"toilet\",\n\t\"tv\",\n\t\"laptop\",\n\t\"mouse\",\n\t\"remote\",\n\t\"keyboard\",\n\t\"cell phone\",\n\t\"microwave\",\n\t\"oven\",\n\t\"toaster\",\n\t\"sink\",\n\t\"refrigerator\",\n\t\"book\",\n\t\"clock\",\n\t\"vase\",\n\t\"scissors\",\n\t\"teddy bear\",\n\t\"hair drier\",\n\t\"toothbrush\"\n];\n/** DOTA-v1.0 15 class names — index order matches ultralytics YOLO11-OBB export. */\nconst YOLO_DOTA_CLASSES = [\n\t\"plane\",\n\t\"ship\",\n\t\"storage tank\",\n\t\"baseball diamond\",\n\t\"tennis court\",\n\t\"basketball court\",\n\t\"ground track field\",\n\t\"harbor\",\n\t\"bridge\",\n\t\"large vehicle\",\n\t\"small vehicle\",\n\t\"helicopter\",\n\t\"roundabout\",\n\t\"soccer ball field\",\n\t\"swimming pool\"\n];\n\n//#endregion\n//#region src/tracking/temporal-object-tracker.ts\nfunction computeIoU$1(boxA, boxB) {\n\tconst xA = Math.max(boxA.originX, boxB.originX);\n\tconst yA = Math.max(boxA.originY, boxB.originY);\n\tconst xB = Math.min(boxA.originX + boxA.width, boxB.originX + boxB.width);\n\tconst yB = Math.min(boxA.originY + boxA.height, boxB.originY + boxB.height);\n\tconst interArea = Math.max(0, xB - xA) * Math.max(0, yB - yA);\n\tif (interArea <= 0) return 0;\n\tconst unionArea = boxA.width * boxA.height + boxB.width * boxB.height - interArea;\n\treturn unionArea > 0 ? interArea / unionArea : 0;\n}\nvar TemporalObjectTracker = class {\n\t_nextTrackId = 1;\n\t_tracks = [];\n\t_iouThreshold;\n\t_maxMissedFrames;\n\t_minHits;\n\t_positionSmoothing;\n\t_activeDuringCoast;\n\tconstructor(options = {}) {\n\t\tthis._iouThreshold = options.iouThreshold ?? .25;\n\t\tthis._maxMissedFrames = options.maxMissedFrames ?? 15;\n\t\tthis._minHits = options.minHits ?? 1;\n\t\tthis._positionSmoothing = Math.max(.1, Math.min(1, options.positionSmoothing ?? .75));\n\t\tthis._activeDuringCoast = options.activeDuringCoast !== false;\n\t}\n\t/**\n\t* Updates the multi-object tracker with new detections for the current frame.\n\t*\n\t* @param detections Raw detections found on the current frame\n\t* @param frame Current frame index\n\t* @param fps Video framerate (used for physical velocity estimation)\n\t* @returns Stable, temporal list of TrackedObjects\n\t*/\n\tupdate(detections, _frame, fps = 24) {\n\t\tconst dt = fps > 0 ? 1 / fps : .0416;\n\t\tfor (const track of this._tracks) {\n\t\t\ttrack.age++;\n\t\t\ttrack.timeSinceUpdate++;\n\t\t\tif (track.timeSinceUpdate > 0) {\n\t\t\t\tconst predCenterX = track.centerX + track.vx * dt;\n\t\t\t\tconst predCenterY = track.centerY + track.vy * dt;\n\t\t\t\ttrack.centerX = predCenterX;\n\t\t\t\ttrack.centerY = predCenterY;\n\t\t\t\tconst w = track.box.width;\n\t\t\t\tconst h = track.box.height;\n\t\t\t\tconst normW = track.box.normalizedWidth;\n\t\t\t\tconst normH = track.box.normalizedHeight;\n\t\t\t\tconst normCenterX = track.box.normalizedX + normW / 2 + track.vx * dt / Math.max(1, track.box.width / normW);\n\t\t\t\tconst normCenterY = track.box.normalizedY + normH / 2 + track.vy * dt / Math.max(1, track.box.height / normH);\n\t\t\t\ttrack.box = {\n\t\t\t\t\toriginX: predCenterX - w / 2,\n\t\t\t\t\toriginY: predCenterY - h / 2,\n\t\t\t\t\twidth: w,\n\t\t\t\t\theight: h,\n\t\t\t\t\tnormalizedX: normCenterX - normW / 2,\n\t\t\t\t\tnormalizedY: normCenterY - normH / 2,\n\t\t\t\t\tnormalizedWidth: normW,\n\t\t\t\t\tnormalizedHeight: normH\n\t\t\t\t};\n\t\t\t\ttrack.vx *= .92;\n\t\t\t\ttrack.vy *= .92;\n\t\t\t\ttrack.isCoasting = true;\n\t\t\t}\n\t\t}\n\t\tconst matchedDetections = /* @__PURE__ */ new Set();\n\t\tconst matchedTracks = /* @__PURE__ */ new Set();\n\t\tconst candidateMatches = [];\n\t\tfor (let t = 0; t < this._tracks.length; t++) {\n\t\t\tconst trk = this._tracks[t];\n\t\t\tfor (let d = 0; d < detections.length; d++) {\n\t\t\t\tconst det = detections[d];\n\t\t\t\tif (trk.category !== det.category) continue;\n\t\t\t\tconst iou = computeIoU$1(trk.box, det.boundingBox);\n\t\t\t\tif (iou >= this._iouThreshold) candidateMatches.push({\n\t\t\t\t\ttrackIdx: t,\n\t\t\t\t\tdetIdx: d,\n\t\t\t\t\tiou\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tcandidateMatches.sort((a, b) => b.iou - a.iou);\n\t\tfor (const match of candidateMatches) {\n\t\t\tif (matchedTracks.has(match.trackIdx) || matchedDetections.has(match.detIdx)) continue;\n\t\t\tmatchedTracks.add(match.trackIdx);\n\t\t\tmatchedDetections.add(match.detIdx);\n\t\t\tconst trk = this._tracks[match.trackIdx];\n\t\t\tconst det = detections[match.detIdx];\n\t\t\tconst detBox = det.boundingBox;\n\t\t\tconst detCenterX = detBox.originX + detBox.width / 2;\n\t\t\tconst detCenterY = detBox.originY + detBox.height / 2;\n\t\t\tconst instVx = (detCenterX - trk.centerX) / dt;\n\t\t\tconst instVy = (detCenterY - trk.centerY) / dt;\n\t\t\ttrk.vx = trk.vx * .4 + instVx * .6;\n\t\t\ttrk.vy = trk.vy * .4 + instVy * .6;\n\t\t\tconst alpha = this._positionSmoothing;\n\t\t\tconst smoothW = trk.box.width * (1 - alpha) + detBox.width * alpha;\n\t\t\tconst smoothH = trk.box.height * (1 - alpha) + detBox.height * alpha;\n\t\t\tconst smoothCenterX = trk.centerX * (1 - alpha) + detCenterX * alpha;\n\t\t\tconst smoothCenterY = trk.centerY * (1 - alpha) + detCenterY * alpha;\n\t\t\ttrk.centerX = smoothCenterX;\n\t\t\ttrk.centerY = smoothCenterY;\n\t\t\ttrk.score = det.score;\n\t\t\ttrk.timeSinceUpdate = 0;\n\t\t\ttrk.hits++;\n\t\t\ttrk.isCoasting = false;\n\t\t\tif (trk.hits >= this._minHits) trk.active = true;\n\t\t\ttrk.box = {\n\t\t\t\toriginX: smoothCenterX - smoothW / 2,\n\t\t\t\toriginY: smoothCenterY - smoothH / 2,\n\t\t\t\twidth: smoothW,\n\t\t\t\theight: smoothH,\n\t\t\t\tnormalizedX: detBox.normalizedX,\n\t\t\t\tnormalizedY: detBox.normalizedY,\n\t\t\t\tnormalizedWidth: detBox.normalizedWidth,\n\t\t\t\tnormalizedHeight: detBox.normalizedHeight\n\t\t\t};\n\t\t}\n\t\tfor (let d = 0; d < detections.length; d++) {\n\t\t\tif (matchedDetections.has(d)) continue;\n\t\t\tconst det = detections[d];\n\t\t\tconst detBox = det.boundingBox;\n\t\t\tconst centerX = detBox.originX + detBox.width / 2;\n\t\t\tconst centerY = detBox.originY + detBox.height / 2;\n\t\t\tthis._tracks.push({\n\t\t\t\ttrackId: this._nextTrackId++,\n\t\t\t\tcategory: det.category,\n\t\t\t\tscore: det.score,\n\t\t\t\tbox: detBox,\n\t\t\t\tcenterX,\n\t\t\t\tcenterY,\n\t\t\t\tvx: 0,\n\t\t\t\tvy: 0,\n\t\t\t\tage: 1,\n\t\t\t\thits: 1,\n\t\t\t\ttimeSinceUpdate: 0,\n\t\t\t\tactive: this._minHits <= 1,\n\t\t\t\tisCoasting: false\n\t\t\t});\n\t\t}\n\t\tthis._tracks = this._tracks.filter((t) => t.timeSinceUpdate <= this._maxMissedFrames);\n\t\treturn this._tracks.filter((t) => t.active).map((t) => {\n\t\t\tconst normW = t.box.normalizedWidth;\n\t\t\tconst normH = t.box.normalizedHeight;\n\t\t\tconst normCenterX = t.box.normalizedX + normW / 2;\n\t\t\tconst normCenterY = t.box.normalizedY + normH / 2;\n\t\t\tconst speed = Math.sqrt(t.vx * t.vx + t.vy * t.vy);\n\t\t\treturn {\n\t\t\t\ttrackId: t.trackId,\n\t\t\t\tcategory: t.category,\n\t\t\t\tscore: t.score,\n\t\t\t\tboundingBox: t.box,\n\t\t\t\tcenterX: t.centerX,\n\t\t\t\tcenterY: t.centerY,\n\t\t\t\tnormalizedCenterX: normCenterX,\n\t\t\t\tnormalizedCenterY: normCenterY,\n\t\t\t\tvelocity: {\n\t\t\t\t\tvx: t.vx,\n\t\t\t\t\tvy: t.vy\n\t\t\t\t},\n\t\t\t\tspeed,\n\t\t\t\tage: t.age,\n\t\t\t\thits: t.hits,\n\t\t\t\tactive: this._activeDuringCoast ? true : t.timeSinceUpdate === 0,\n\t\t\t\tisCoasting: t.isCoasting\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Tracks objects across a full sequence of frames with gap interpolation,\n\t* boundary extrapolation (ensuring frame 0 through end are tracked),\n\t* and temporal Gaussian smoothing.\n\t*\n\t* Guarantees zero flicker, zero drift, and frame-accurate stability across the entire video.\n\t*/\n\ttrackSequence(perFrameDetections, totalFrames, fps = 24) {\n\t\tthis.reset();\n\t\tconst dt = fps > 0 ? 1 / fps : .0416;\n\t\tconst trackHistory = /* @__PURE__ */ new Map();\n\t\tfor (let f = 0; f < totalFrames; f++) {\n\t\t\tconst dets = perFrameDetections[f] ?? [];\n\t\t\tconst stepTracks = this.update(dets, f, fps);\n\t\t\tfor (const trk of stepTracks) {\n\t\t\t\tif (!trackHistory.has(trk.trackId)) trackHistory.set(trk.trackId, {\n\t\t\t\t\tcategory: trk.category,\n\t\t\t\t\tobservations: []\n\t\t\t\t});\n\t\t\t\tif (!trk.isCoasting) trackHistory.get(trk.trackId).observations.push({\n\t\t\t\t\tframe: f,\n\t\t\t\t\tbox: trk.boundingBox,\n\t\t\t\t\tscore: trk.score\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst fullTrajectories = /* @__PURE__ */ new Map();\n\t\tfor (const [trackId, info] of trackHistory.entries()) {\n\t\t\tconst obs = info.observations;\n\t\t\tif (obs.length === 0) continue;\n\t\t\tobs.sort((a, b) => a.frame - b.frame);\n\t\t\tconst frameData = new Array(totalFrames).fill(null);\n\t\t\tfor (const o of obs) frameData[o.frame] = {\n\t\t\t\tbox: o.box,\n\t\t\t\tscore: o.score\n\t\t\t};\n\t\t\tconst firstObs = obs[0];\n\t\t\tfor (let f = 0; f < firstObs.frame; f++) frameData[f] = {\n\t\t\t\tbox: { ...firstObs.box },\n\t\t\t\tscore: firstObs.score * .9\n\t\t\t};\n\t\t\tfor (let i = 0; i < obs.length - 1; i++) {\n\t\t\t\tconst startObs = obs[i];\n\t\t\t\tconst endObs = obs[i + 1];\n\t\t\t\tconst gap = endObs.frame - startObs.frame;\n\t\t\t\tif (gap <= 1) continue;\n\t\t\t\tfor (let f = startObs.frame + 1; f < endObs.frame; f++) {\n\t\t\t\t\tconst t = (f - startObs.frame) / gap;\n\t\t\t\t\tframeData[f] = {\n\t\t\t\t\t\tbox: {\n\t\t\t\t\t\t\toriginX: startObs.box.originX + (endObs.box.originX - startObs.box.originX) * t,\n\t\t\t\t\t\t\toriginY: startObs.box.originY + (endObs.box.originY - startObs.box.originY) * t,\n\t\t\t\t\t\t\twidth: startObs.box.width + (endObs.box.width - startObs.box.width) * t,\n\t\t\t\t\t\t\theight: startObs.box.height + (endObs.box.height - startObs.box.height) * t,\n\t\t\t\t\t\t\tnormalizedX: startObs.box.normalizedX + (endObs.box.normalizedX - startObs.box.normalizedX) * t,\n\t\t\t\t\t\t\tnormalizedY: startObs.box.normalizedY + (endObs.box.normalizedY - startObs.box.normalizedY) * t,\n\t\t\t\t\t\t\tnormalizedWidth: startObs.box.normalizedWidth + (endObs.box.normalizedWidth - startObs.box.normalizedWidth) * t,\n\t\t\t\t\t\t\tnormalizedHeight: startObs.box.normalizedHeight + (endObs.box.normalizedHeight - startObs.box.normalizedHeight) * t\n\t\t\t\t\t\t},\n\t\t\t\t\t\tscore: startObs.score * (1 - t) + endObs.score * t\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lastObs = obs[obs.length - 1];\n\t\t\tfor (let f = lastObs.frame + 1; f < totalFrames; f++) frameData[f] = {\n\t\t\t\tbox: { ...lastObs.box },\n\t\t\t\tscore: lastObs.score * .9\n\t\t\t};\n\t\t\tconst smoothedFrames = [];\n\t\t\tconst radius = 2;\n\t\t\tconst weights = [\n\t\t\t\t.06136,\n\t\t\t\t.24477,\n\t\t\t\t.38774,\n\t\t\t\t.24477,\n\t\t\t\t.06136\n\t\t\t];\n\t\t\tfor (let f = 0; f < totalFrames; f++) {\n\t\t\t\tlet sumWeight = 0;\n\t\t\t\tlet sumX = 0;\n\t\t\t\tlet sumY = 0;\n\t\t\t\tlet sumW = 0;\n\t\t\t\tlet sumH = 0;\n\t\t\t\tlet sumNormX = 0;\n\t\t\t\tlet sumNormY = 0;\n\t\t\t\tlet sumNormW = 0;\n\t\t\t\tlet sumNormH = 0;\n\t\t\t\tlet sumScore = 0;\n\t\t\t\tfor (let r = -radius; r <= radius; r++) {\n\t\t\t\t\tconst pt = frameData[Math.max(0, Math.min(totalFrames - 1, f + r))];\n\t\t\t\t\tif (pt) {\n\t\t\t\t\t\tconst w = weights[r + radius];\n\t\t\t\t\t\tsumWeight += w;\n\t\t\t\t\t\tsumX += pt.box.originX * w;\n\t\t\t\t\t\tsumY += pt.box.originY * w;\n\t\t\t\t\t\tsumW += pt.box.width * w;\n\t\t\t\t\t\tsumH += pt.box.height * w;\n\t\t\t\t\t\tsumNormX += pt.box.normalizedX * w;\n\t\t\t\t\t\tsumNormY += pt.box.normalizedY * w;\n\t\t\t\t\t\tsumNormW += pt.box.normalizedWidth * w;\n\t\t\t\t\t\tsumNormH += pt.box.normalizedHeight * w;\n\t\t\t\t\t\tsumScore += pt.score * w;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst invW = sumWeight > 0 ? 1 / sumWeight : 1;\n\t\t\t\tsmoothedFrames.push({\n\t\t\t\t\tbox: {\n\t\t\t\t\t\toriginX: sumX * invW,\n\t\t\t\t\t\toriginY: sumY * invW,\n\t\t\t\t\t\twidth: sumW * invW,\n\t\t\t\t\t\theight: sumH * invW,\n\t\t\t\t\t\tnormalizedX: sumNormX * invW,\n\t\t\t\t\t\tnormalizedY: sumNormY * invW,\n\t\t\t\t\t\tnormalizedWidth: sumNormW * invW,\n\t\t\t\t\t\tnormalizedHeight: sumNormH * invW\n\t\t\t\t\t},\n\t\t\t\t\tscore: sumScore * invW\n\t\t\t\t});\n\t\t\t}\n\t\t\tfullTrajectories.set(trackId, {\n\t\t\t\tcategory: info.category,\n\t\t\t\tframes: smoothedFrames\n\t\t\t});\n\t\t}\n\t\tconst result = [];\n\t\tfor (let f = 0; f < totalFrames; f++) {\n\t\t\tconst frameObjects = [];\n\t\t\tfor (const [trackId, traj] of fullTrajectories.entries()) {\n\t\t\t\tconst current = traj.frames[f];\n\t\t\t\tif (!current) continue;\n\t\t\t\tconst prev = traj.frames[Math.max(0, f - 1)] ?? current;\n\t\t\t\tconst next = traj.frames[Math.min(totalFrames - 1, f + 1)] ?? current;\n\t\t\t\tconst curCenterX = current.box.originX + current.box.width / 2;\n\t\t\t\tconst curCenterY = current.box.originY + current.box.height / 2;\n\t\t\t\tconst prevCenterX = prev.box.originX + prev.box.width / 2;\n\t\t\t\tconst prevCenterY = prev.box.originY + prev.box.height / 2;\n\t\t\t\tconst nextCenterX = next.box.originX + next.box.width / 2;\n\t\t\t\tconst nextCenterY = next.box.originY + next.box.height / 2;\n\t\t\t\tconst timeDelta = f === 0 || f === totalFrames - 1 ? dt : 2 * dt;\n\t\t\t\tconst vx = (nextCenterX - prevCenterX) / timeDelta;\n\t\t\t\tconst vy = (nextCenterY - prevCenterY) / timeDelta;\n\t\t\t\tconst speed = Math.sqrt(vx * vx + vy * vy);\n\t\t\t\tconst normW = current.box.normalizedWidth;\n\t\t\t\tconst normH = current.box.normalizedHeight;\n\t\t\t\tframeObjects.push({\n\t\t\t\t\ttrackId,\n\t\t\t\t\tcategory: traj.category,\n\t\t\t\t\tscore: current.score,\n\t\t\t\t\tboundingBox: current.box,\n\t\t\t\t\tcenterX: curCenterX,\n\t\t\t\t\tcenterY: curCenterY,\n\t\t\t\t\tnormalizedCenterX: current.box.normalizedX + normW / 2,\n\t\t\t\t\tnormalizedCenterY: current.box.normalizedY + normH / 2,\n\t\t\t\t\tvelocity: {\n\t\t\t\t\t\tvx,\n\t\t\t\t\t\tvy\n\t\t\t\t\t},\n\t\t\t\t\tspeed,\n\t\t\t\t\tage: f + 1,\n\t\t\t\t\thits: 10,\n\t\t\t\t\tactive: true,\n\t\t\t\t\tisCoasting: false\n\t\t\t\t});\n\t\t\t}\n\t\t\tresult.push(frameObjects);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Resets all internal track state.\n\t*/\n\treset() {\n\t\tthis._tracks = [];\n\t\tthis._nextTrackId = 1;\n\t}\n};\n\n//#endregion\n//#region src/analysis/analyze-sequence.ts\nconst now = () => typeof performance !== \"undefined\" && typeof performance.now === \"function\" ? performance.now() : Date.now();\nasync function analyzeSequence(frames, options) {\n\tconst { runner } = options;\n\tconst fps = options.fps ?? 24;\n\tconst tasks = options.tasks && options.tasks.length > 0 ? options.tasks : [\"detect\"];\n\tconst taskSet = new Set(tasks);\n\tconst categoryFilter = options.categories ? new Set(options.categories.map((c) => c.toLowerCase())) : null;\n\tconst includeMasks = options.includeMasks === true && taskSet.has(\"segment\");\n\tconst detectionTask = taskSet.has(\"detect\") ? \"detect\" : taskSet.has(\"segment\") ? \"segment\" : taskSet.has(\"obb\") ? \"obb\" : null;\n\tconst perFrameDetections = [];\n\tconst modelDownloads = {};\n\tconst maskCoverage = /* @__PURE__ */ new Map();\n\tlet inferenceMs = 0;\n\tlet frameIndex = 0;\n\tconst accepts = (category) => !categoryFilter || categoryFilter.has(category.toLowerCase());\n\tconst runTask = async (task, fn) => {\n\t\tconst key = runner.modelKeyFor(task);\n\t\tconst wasReady = runner.downloadStatus.get(key) === \"ready\";\n\t\tconst start = now();\n\t\tconst result = await fn();\n\t\tconst elapsed = now() - start;\n\t\tinferenceMs += elapsed;\n\t\tif (!wasReady && !modelDownloads[key]) modelDownloads[key] = {\n\t\t\tbytes: YOLO_MODELS[key].bytesFp32,\n\t\t\tms: elapsed\n\t\t};\n\t\treturn result;\n\t};\n\tconst recordMasks = (masks$1) => {\n\t\tfor (const m of masks$1) {\n\t\t\tif (!accepts(m.category)) continue;\n\t\t\tconst entry = maskCoverage.get(m.category) ?? {\n\t\t\t\tsum: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tentry.sum += m.coverage;\n\t\t\tentry.count++;\n\t\t\tmaskCoverage.set(m.category, entry);\n\t\t}\n\t};\n\tfor await (const frame of frames) {\n\t\tlet detections = [];\n\t\tif (includeMasks || detectionTask === \"segment\") {\n\t\t\tconst seg = await runTask(\"segment\", () => runner.segment(frame));\n\t\t\tif (includeMasks) recordMasks(seg.masks);\n\t\t\tif (detectionTask === \"segment\") detections = seg.detections;\n\t\t}\n\t\tif (detectionTask === \"detect\") detections = await runTask(\"detect\", () => runner.detect(frame));\n\t\telse if (detectionTask === \"obb\") detections = (await runTask(\"obb\", () => runner.detectObb(frame))).detections.map((d) => ({\n\t\t\tcategory: d.category,\n\t\t\tscore: d.score,\n\t\t\tboundingBox: d.boundingBox\n\t\t}));\n\t\tif (taskSet.has(\"pose\")) await runTask(\"pose\", () => runner.pose(frame));\n\t\tif (taskSet.has(\"classify\")) await runTask(\"classify\", () => runner.classify(frame));\n\t\tperFrameDetections.push(categoryFilter ? detections.filter((d) => accepts(d.category)) : detections);\n\t\tframeIndex++;\n\t}\n\tconst totalFrames = frameIndex;\n\tconst trackedPerFrame = new TemporalObjectTracker({\n\t\tiouThreshold: options.iouThreshold ?? .25,\n\t\tmaxMissedFrames: options.maxMissedFrames ?? 15\n\t}).trackSequence(perFrameDetections, totalFrames, fps);\n\tconst pathStride = options.pathStride ?? Math.max(1, Math.ceil(totalFrames / 50));\n\tconst tracks = /* @__PURE__ */ new Map();\n\tconst classPresentFrames = /* @__PURE__ */ new Map();\n\tconst classMaxConfidence = /* @__PURE__ */ new Map();\n\tconst classTrackIds = /* @__PURE__ */ new Map();\n\tconst getOrCreate = (map, key, make) => {\n\t\tlet value = map.get(key);\n\t\tif (value === void 0) {\n\t\t\tvalue = make();\n\t\t\tmap.set(key, value);\n\t\t}\n\t\treturn value;\n\t};\n\tfor (let f = 0; f < totalFrames; f++) for (const obj of trackedPerFrame[f] ?? []) {\n\t\tif (!accepts(obj.category)) continue;\n\t\tlet acc = tracks.get(obj.trackId);\n\t\tif (!acc) {\n\t\t\tacc = {\n\t\t\t\tcategory: obj.category,\n\t\t\t\tfirstFrame: f,\n\t\t\t\tlastFrame: f,\n\t\t\t\tspeedSum: 0,\n\t\t\t\tspeedCount: 0,\n\t\t\t\tcenters: []\n\t\t\t};\n\t\t\ttracks.set(obj.trackId, acc);\n\t\t}\n\t\tacc.lastFrame = f;\n\t\tif (Number.isFinite(obj.speed)) {\n\t\t\tacc.speedSum += obj.speed;\n\t\t\tacc.speedCount++;\n\t\t}\n\t\tif ((f - acc.firstFrame) % pathStride === 0) acc.centers.push({\n\t\t\tframe: f,\n\t\t\tx: obj.centerX,\n\t\t\ty: obj.centerY\n\t\t});\n\t\tgetOrCreate(classPresentFrames, obj.category, () => /* @__PURE__ */ new Set()).add(f);\n\t\tclassMaxConfidence.set(obj.category, Math.max(classMaxConfidence.get(obj.category) ?? 0, obj.score));\n\t\tgetOrCreate(classTrackIds, obj.category, () => /* @__PURE__ */ new Set()).add(obj.trackId);\n\t}\n\tconst trackSummaries = Array.from(tracks.entries()).map(([trackId, acc]) => ({\n\t\ttrackId,\n\t\tcategory: acc.category,\n\t\tframes: [acc.firstFrame, acc.lastFrame],\n\t\tspeedMeanPxS: acc.speedCount > 0 ? acc.speedSum / acc.speedCount : 0,\n\t\tcenterPath: acc.centers.map((c) => [c.x, c.y])\n\t})).sort((a, b) => a.trackId - b.trackId);\n\tconst classes = {};\n\tfor (const [category, frameSet] of classPresentFrames) classes[category] = {\n\t\tframesPresent: frameSet.size,\n\t\ttotalFrames,\n\t\tmaxConfidence: classMaxConfidence.get(category) ?? 0,\n\t\ttracks: classTrackIds.get(category)?.size ?? 0\n\t};\n\tconst masks = {};\n\tfor (const [category, entry] of maskCoverage) masks[category] = { meanCoverage: entry.count > 0 ? entry.sum / entry.count : 0 };\n\treturn {\n\t\tsource: options.source ?? \"frames\",\n\t\ttotalFrames,\n\t\tfps,\n\t\tdurationSec: fps > 0 ? totalFrames / fps : 0,\n\t\ttasks: Array.from(taskSet),\n\t\tmodelDownloads,\n\t\tinferenceMs,\n\t\ttrackCount: trackSummaries.length,\n\t\tclasses,\n\t\ttracks: trackSummaries,\n\t\tmasks\n\t};\n}\n\n//#endregion\n//#region src/decode/classify.ts\n/** Classification head: [1, nc] logits → softmax → top-5. */\nfunction decodeClassifyOutput(output, nc) {\n\tconst count = Math.min(nc, output.length);\n\tlet max = -Infinity;\n\tfor (let i = 0; i < count; i++) if (output[i] > max) max = output[i];\n\tlet sum = 0;\n\tconst probs = new Float32Array(count);\n\tfor (let i = 0; i < count; i++) {\n\t\tconst p = Math.exp(output[i] - max);\n\t\tprobs[i] = p;\n\t\tsum += p;\n\t}\n\tconst inv = sum > 0 ? 1 / sum : 0;\n\tfor (let i = 0; i < count; i++) probs[i] *= inv;\n\tconst top5 = [];\n\tfor (let i = 0; i < Math.min(5, probs.length); i++) {\n\t\tlet best = -1;\n\t\tlet bestScore = -1;\n\t\tfor (let c = 0; c < probs.length; c++) if (probs[c] > bestScore) {\n\t\t\tbestScore = probs[c];\n\t\t\tbest = c;\n\t\t}\n\t\tif (best < 0) break;\n\t\ttop5.push({\n\t\t\tindex: best,\n\t\t\tscore: bestScore\n\t\t});\n\t\tprobs[best] = -1;\n\t}\n\treturn {\n\t\ttop1: top5[0]?.index ?? 0,\n\t\ttop1Score: top5[0]?.score ?? 0,\n\t\ttop5\n\t};\n}\n/** Optional per-frame class histogram tensor for ML pipelines: [nc]. */\nfunction classHistogram(detections, nc) {\n\tconst hist = new Float32Array(nc);\n\tfor (const d of detections) if (d.classIndex >= 0 && d.classIndex < nc) hist[d.classIndex] += 1;\n\treturn hist;\n}\n\n//#endregion\n//#region src/decode/nms.ts\nfunction computeIoU(a, b) {\n\tconst interX0 = Math.max(a.x0, b.x0);\n\tconst interY0 = Math.max(a.y0, b.y0);\n\tconst interX1 = Math.min(a.x1, b.x1);\n\tconst interY1 = Math.min(a.y1, b.y1);\n\tconst interArea = Math.max(0, interX1 - interX0) * Math.max(0, interY1 - interY0);\n\tif (interArea <= 0) return 0;\n\tconst unionArea = (a.x1 - a.x0) * (a.y1 - a.y0) + (b.x1 - b.x0) * (b.y1 - b.y0) - interArea;\n\treturn unionArea > 0 ? interArea / unionArea : 0;\n}\n/**\n* Greedy class-aware NMS: boxes of different classes never suppress each other\n* (matches ultralytics default behavior).\n*/\nfunction nms(boxes, iouThreshold = .45) {\n\tconst sorted = [...boxes].sort((a, b) => b.score - a.score);\n\tconst kept = [];\n\tfor (const candidate of sorted) {\n\t\tlet suppressed = false;\n\t\tfor (const k of kept) {\n\t\t\tif (k.classIndex !== candidate.classIndex) continue;\n\t\t\tif (computeIoU(k, candidate) > iouThreshold) {\n\t\t\t\tsuppressed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!suppressed) kept.push(candidate);\n\t}\n\treturn kept;\n}\n\n//#endregion\n//#region src/decode/detect.ts\nfunction decodeYoloBoxes(output, anchors, nc, opts) {\n\tconst candidates = [];\n\tconst classFilter = opts.classes ? new Set(opts.classes.map((c) => c.toLowerCase())) : null;\n\tfor (let a = 0; a < anchors; a++) {\n\t\tlet bestScore = -1;\n\t\tlet bestClass = -1;\n\t\tfor (let c = 0; c < nc; c++) {\n\t\t\tconst score = output[(4 + c) * anchors + a];\n\t\t\tif (score > bestScore) {\n\t\t\t\tbestScore = score;\n\t\t\t\tbestClass = c;\n\t\t\t}\n\t\t}\n\t\tif (bestScore < opts.confidence) continue;\n\t\tif (classFilter && !classFilter.has((opts.classNames[bestClass] ?? \"\").toLowerCase())) continue;\n\t\tconst cx = output[a];\n\t\tconst cy = output[anchors + a];\n\t\tconst w = output[2 * anchors + a];\n\t\tconst h = output[3 * anchors + a];\n\t\tif (w <= 0 || h <= 0) continue;\n\t\tconst halfW = w / 2;\n\t\tconst halfH = h / 2;\n\t\tcandidates.push({\n\t\t\tx0: cx - halfW,\n\t\t\ty0: cy - halfH,\n\t\t\tx1: cx + halfW,\n\t\t\ty1: cy + halfH,\n\t\t\tscore: bestScore,\n\t\t\tclassIndex: bestClass,\n\t\t\tanchorIndex: a\n\t\t});\n\t}\n\treturn nms(candidates, opts.iouThreshold);\n}\n/** Maps an NMS-kept box from input space to a core `DetectedObject` in source pixel space. */\nfunction toDetectedObject(box, opts) {\n\tconst { scale, dw, dh } = opts.params;\n\tconst { sourceWidth: sw, sourceHeight: sh } = opts;\n\tconst x0 = Math.max(0, Math.min(sw, (box.x0 - dw) / scale));\n\tconst y0 = Math.max(0, Math.min(sh, (box.y0 - dh) / scale));\n\tconst x1 = Math.max(0, Math.min(sw, (box.x1 - dw) / scale));\n\tconst y1 = Math.max(0, Math.min(sh, (box.y1 - dh) / scale));\n\tconst width = Math.max(0, x1 - x0);\n\tconst height = Math.max(0, y1 - y0);\n\treturn {\n\t\tcategory: opts.classNames[box.classIndex] ?? `class_${box.classIndex}`,\n\t\tscore: box.score,\n\t\tboundingBox: {\n\t\t\toriginX: x0,\n\t\t\toriginY: y0,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tnormalizedX: sw > 0 ? x0 / sw : 0,\n\t\t\tnormalizedY: sh > 0 ? y0 / sh : 0,\n\t\t\tnormalizedWidth: sw > 0 ? width / sw : 0,\n\t\t\tnormalizedHeight: sh > 0 ? height / sh : 0\n\t\t}\n\t};\n}\n/** Full detect-head decode: hidden state → DetectedObject[] (already NMS'd, source pixels). */\nfunction decodeDetectOutput(output, anchors, nc, opts) {\n\treturn decodeYoloBoxes(output, anchors, nc, opts).map((box) => toDetectedObject(box, opts));\n}\n\n//#endregion\n//#region src/decode/letterbox.ts\n/**\n* Letterbox preprocessing + inverse mapping.\n*\n* The YOLO ONNX export consumes a square RGB float tensor (imgsz × imgsz), values / 255,\n* gray (114) padding on the short dimension — the \"letterbox\". Box/keypoint outputs are\n* in input-pixel space; this module owns the resize and the mapping back to source pixels.\n*/\nconst YOLO_LETTERBOX_PAD_VALUE = 114;\nfunction computeLetterbox(srcW, srcH, imgsz) {\n\tconst scale = Math.min(imgsz / srcW, imgsz / srcH);\n\tconst inputWidth = Math.round(srcW * scale);\n\tconst inputHeight = Math.round(srcH * scale);\n\treturn {\n\t\tscale,\n\t\tdw: (imgsz - inputWidth) / 2,\n\t\tdh: (imgsz - inputHeight) / 2,\n\t\tinputWidth,\n\t\tinputHeight,\n\t\tsize: imgsz\n\t};\n}\n/** Map decoded input-space coordinates back to source pixel space. */\nfunction unletterboxPoint(x, y, params) {\n\treturn {\n\t\tx: (x - params.dw) / params.scale,\n\t\ty: (y - params.dh) / params.scale\n\t};\n}\n/**\n* Resizes RGBA -> NCHW float32 tensor with bilinear sampling + gray padding.\n* Layout: [1, 3, imgsz, imgsz], channel stride = imgsz * imgsz.\n* Reuses `out` / `outData` when provided (hot-path frame loop).\n*/\nfunction letterboxToTensor(image, imgsz = 640, out) {\n\tconst { width: srcW, height: srcH } = image;\n\tconst params = computeLetterbox(srcW, srcH, imgsz);\n\tconst { scale, dw, dh, inputWidth, inputHeight } = params;\n\tconst channelStride = imgsz * imgsz;\n\tif (!out || out.length < 3 * channelStride) out = new Float32Array(3 * channelStride);\n\telse out.fill(0, 0, 3 * channelStride);\n\tconst src = image.data;\n\tconst pad = YOLO_LETTERBOX_PAD_VALUE / 255;\n\tconst x0 = Math.ceil(dw);\n\tconst y0 = Math.ceil(dh);\n\tconst x1 = Math.floor(dw + inputWidth) - 1;\n\tconst y1 = Math.floor(dh + inputHeight) - 1;\n\tconst rPlane = out.subarray(0, channelStride);\n\tconst gPlane = out.subarray(channelStride, 2 * channelStride);\n\tconst bPlane = out.subarray(2 * channelStride, 3 * channelStride);\n\tfor (let y = 0; y < imgsz; y++) {\n\t\tconst rowBase = y * imgsz;\n\t\tconst paddedRow = y < y0 || y > y1;\n\t\tfor (let x = 0; x < imgsz; x++) {\n\t\t\tlet r = pad;\n\t\t\tlet g = pad;\n\t\t\tlet b = pad;\n\t\t\tif (!paddedRow && x >= x0 && x <= x1) {\n\t\t\t\tconst sx = (x - dw) / scale;\n\t\t\t\tconst sy = (y - dh) / scale;\n\t\t\t\tconst x0s = Math.floor(sx);\n\t\t\t\tconst y0s = Math.floor(sy);\n\t\t\t\tconst fx = sx - x0s;\n\t\t\t\tconst fy = sy - y0s;\n\t\t\t\tconst x1s = Math.min(srcW - 1, x0s + 1);\n\t\t\t\tconst y1s = Math.min(srcH - 1, y0s + 1);\n\t\t\t\tconst i00 = (y0s * srcW + x0s) * 4;\n\t\t\t\tconst i10 = (y0s * srcW + x1s) * 4;\n\t\t\t\tconst i01 = (y1s * srcW + x0s) * 4;\n\t\t\t\tconst i11 = (y1s * srcW + x1s) * 4;\n\t\t\t\tconst w00 = (1 - fx) * (1 - fy);\n\t\t\t\tconst w10 = fx * (1 - fy);\n\t\t\t\tconst w01 = (1 - fx) * fy;\n\t\t\t\tconst w11 = fx * fy;\n\t\t\t\tr = (src[i00] * w00 + src[i10] * w10 + src[i01] * w01 + src[i11] * w11) / 255;\n\t\t\t\tg = (src[i00 + 1] * w00 + src[i10 + 1] * w10 + src[i01 + 1] * w01 + src[i11 + 1] * w11) / 255;\n\t\t\t\tb = (src[i00 + 2] * w00 + src[i10 + 2] * w10 + src[i01 + 2] * w01 + src[i11 + 2] * w11) / 255;\n\t\t\t}\n\t\t\trPlane[rowBase + x] = r;\n\t\t\tgPlane[rowBase + x] = g;\n\t\t\tbPlane[rowBase + x] = b;\n\t\t}\n\t}\n\treturn {\n\t\ttensor: out,\n\t\tparams\n\t};\n}\n\n//#endregion\n//#region src/decode/obb.ts\n/** Projects the 4 rotated corners (input px) and the axis-aligned extent back to source px. */\nfunction projectCorners(cx, cy, w, h, angle, opts) {\n\tconst { scale, dw, dh } = opts.params;\n\tconst cos = Math.cos(angle);\n\tconst sin = Math.sin(angle);\n\tconst hw = w / 2;\n\tconst hh = h / 2;\n\tconst local = [\n\t\t[-hw, -hh],\n\t\t[hw, -hh],\n\t\t[hw, hh],\n\t\t[-hw, hh]\n\t];\n\tconst corners = [];\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\tfor (const [lx, ly] of local) {\n\t\tconst rx = cx + lx * cos - ly * sin;\n\t\tconst ry = cy + lx * sin + ly * cos;\n\t\tconst sx = (rx - dw) / scale;\n\t\tconst sy = (ry - dh) / scale;\n\t\tcorners.push([sx, sy]);\n\t\tif (sx < minX) minX = sx;\n\t\tif (sy < minY) minY = sy;\n\t\tif (sx > maxX) maxX = sx;\n\t\tif (sy > maxY) maxY = sy;\n\t}\n\treturn {\n\t\tcorners,\n\t\tminX,\n\t\tminY,\n\t\tmaxX,\n\t\tmaxY\n\t};\n}\nfunction decodeObbOutput(output, anchors, nc, opts) {\n\tconst angleRow = opts.angleRow ?? 4 + nc;\n\tconst classFilter = opts.classes ? new Set(opts.classes.map((c) => c.toLowerCase())) : null;\n\tconst candidates = [];\n\tfor (let a = 0; a < anchors; a++) {\n\t\tlet bestScore = -1;\n\t\tlet bestClass = -1;\n\t\tfor (let c = 0; c < nc; c++) {\n\t\t\tconst score = output[(4 + c) * anchors + a];\n\t\t\tif (score > bestScore) {\n\t\t\t\tbestScore = score;\n\t\t\t\tbestClass = c;\n\t\t\t}\n\t\t}\n\t\tif (bestScore < opts.confidence) continue;\n\t\tif (classFilter && !classFilter.has((opts.classNames[bestClass] ?? \"\").toLowerCase())) continue;\n\t\tconst cx = output[a];\n\t\tconst cy = output[anchors + a];\n\t\tconst w = output[2 * anchors + a];\n\t\tconst h = output[3 * anchors + a];\n\t\tif (w <= 0 || h <= 0) continue;\n\t\tconst angle = output[angleRow * anchors + a];\n\t\tif (!Number.isFinite(angle)) continue;\n\t\tcandidates.push({\n\t\t\tx0: cx - w / 2,\n\t\t\ty0: cy - h / 2,\n\t\t\tx1: cx + w / 2,\n\t\t\ty1: cy + h / 2,\n\t\t\tscore: bestScore,\n\t\t\tclassIndex: bestClass,\n\t\t\tanchorIndex: a,\n\t\t\tangle\n\t\t});\n\t}\n\tconst kept = nms(candidates, opts.iouThreshold);\n\tconst detections = [];\n\tfor (const box of kept) {\n\t\tconst cand = box;\n\t\tconst cx = output[cand.anchorIndex];\n\t\tconst cy = output[anchors + cand.anchorIndex];\n\t\tconst w = output[2 * anchors + cand.anchorIndex];\n\t\tconst h = output[3 * anchors + cand.anchorIndex];\n\t\tconst { corners, minX, minY, maxX, maxY } = projectCorners(cx, cy, w, h, cand.angle, opts);\n\t\tconst sw = opts.sourceWidth;\n\t\tconst sh = opts.sourceHeight;\n\t\tconst originX = Math.max(0, Math.min(sw, minX));\n\t\tconst originY = Math.max(0, Math.min(sh, minY));\n\t\tconst width = Math.max(0, Math.min(sw, maxX) - originX);\n\t\tconst height = Math.max(0, Math.min(sh, maxY) - originY);\n\t\tdetections.push({\n\t\t\tcategory: opts.classNames[cand.classIndex] ?? `class_${cand.classIndex}`,\n\t\t\tclassIndex: cand.classIndex,\n\t\t\tscore: cand.score,\n\t\t\tboundingBox: {\n\t\t\t\toriginX,\n\t\t\t\toriginY,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tnormalizedX: sw > 0 ? originX / sw : 0,\n\t\t\t\tnormalizedY: sh > 0 ? originY / sh : 0,\n\t\t\t\tnormalizedWidth: sw > 0 ? width / sw : 0,\n\t\t\t\tnormalizedHeight: sh > 0 ? height / sh : 0,\n\t\t\t\tangle: cand.angle\n\t\t\t},\n\t\t\tcorners\n\t\t});\n\t}\n\treturn { detections };\n}\n\n//#endregion\n//#region src/decode/pose.ts\nfunction decodePoseOutput(output, anchors, opts) {\n\tconst { scale, dw, dh } = opts.params;\n\tconst { sourceWidth: sw, sourceHeight: sh } = opts;\n\tconst people = [];\n\tfor (let a = 0; a < anchors; a++) {\n\t\tconst score = output[4 * anchors + a];\n\t\tif (score < opts.confidence) continue;\n\t\tconst cx = output[a];\n\t\tconst cy = output[anchors + a];\n\t\tconst w = output[2 * anchors + a];\n\t\tconst h = output[3 * anchors + a];\n\t\tif (w <= 0 || h <= 0) continue;\n\t\tconst x0 = Math.max(0, Math.min(sw, (cx - w / 2 - dw) / scale));\n\t\tconst y0 = Math.max(0, Math.min(sh, (cy - h / 2 - dh) / scale));\n\t\tconst x1 = Math.max(0, Math.min(sw, (cx + w / 2 - dw) / scale));\n\t\tconst y1 = Math.max(0, Math.min(sh, (cy + h / 2 - dh) / scale));\n\t\tconst boxW = Math.max(0, x1 - x0);\n\t\tconst boxH = Math.max(0, y1 - y0);\n\t\tconst keypoints = [];\n\t\tfor (let k = 0; k < 17; k++) {\n\t\t\tconst kx = Math.max(0, Math.min(sw, (output[(5 + 3 * k) * anchors + a] - dw) / scale));\n\t\t\tconst ky = Math.max(0, Math.min(sh, (output[(6 + 3 * k) * anchors + a] - dh) / scale));\n\t\t\tconst vis = output[(7 + 3 * k) * anchors + a];\n\t\t\tkeypoints.push({\n\t\t\t\tx: kx,\n\t\t\t\ty: ky,\n\t\t\t\tvisibility: Math.max(0, Math.min(1, vis))\n\t\t\t});\n\t\t}\n\t\tpeople.push({\n\t\t\tscore,\n\t\t\tboundingBox: {\n\t\t\t\toriginX: x0,\n\t\t\t\toriginY: y0,\n\t\t\t\twidth: boxW,\n\t\t\t\theight: boxH,\n\t\t\t\tnormalizedX: sw > 0 ? x0 / sw : 0,\n\t\t\t\tnormalizedY: sh > 0 ? y0 / sh : 0,\n\t\t\t\tnormalizedWidth: sw > 0 ? boxW / sw : 0,\n\t\t\t\tnormalizedHeight: sh > 0 ? boxH / sh : 0\n\t\t\t},\n\t\t\tkeypoints\n\t\t});\n\t}\n\tpeople.sort((a, b) => b.score - a.score);\n\treturn { people };\n}\n\n//#endregion\n//#region src/decode/segment.ts\n/**\n* Instance segmentation decode.\n*\n* Head: [1, 4 + nc + 32, 8400] — the 32 trailing rows are per-detect mask coefficients.\n* Proto: [1, 32, protoDim, protoDim] (protoDim = imgsz / 4, e.g. 160 at 640).\n*\n* Per kept detection: mask = sigmoid(Σ coeff_c · proto_c) → threshold 0.5, then bilinear\n* upscaled from the 160-grid directly into the ORIGINAL source frame (letterbox-inverse),\n* restricted to the detection box so masks stay tight and cheap.\n*/\nfunction decodeSegmentOutput(output, proto, anchors, nc, protoDim, opts) {\n\tconst kept = decodeYoloBoxes(output, anchors, nc, opts);\n\tconst detections = kept.map((box) => toDetectedObject(box, opts));\n\tconst masks = [];\n\tconst { scale, dw, dh, size } = opts.params;\n\tconst { sourceWidth: sw, sourceHeight: sh } = opts;\n\tconst maskThreshold = opts.maskThreshold ?? .5;\n\tconst feather = opts.featherRadius !== void 0 ? opts.featherRadius : .05;\n\tconst maskLogit = Math.log(maskThreshold / (1 - maskThreshold));\n\tconst tMin = maskThreshold - feather;\n\tconst tMax = maskThreshold + feather;\n\tconst invTwoFeather = feather > 0 ? 1 / (2 * feather) : 0;\n\tfor (let i = 0; i < kept.length; i++) {\n\t\tconst box = kept[i];\n\t\tconst det = detections[i];\n\t\tconst coeffBase = (4 + nc) * anchors + box.anchorIndex;\n\t\tconst step = anchors;\n\t\tconst padPx = 8;\n\t\tconst sx0 = Math.max(0, Math.floor((box.x0 - dw) / scale) - padPx);\n\t\tconst sy0 = Math.max(0, Math.floor((box.y0 - dh) / scale) - padPx);\n\t\tconst sx1 = Math.min(sw - 1, Math.ceil((box.x1 - dw) / scale) + padPx);\n\t\tconst sy1 = Math.min(sh - 1, Math.ceil((box.y1 - dh) / scale) + padPx);\n\t\tif (sx1 < sx0 || sy1 < sy0) continue;\n\t\tconst mask = new Uint8Array(sw * sh);\n\t\tconst inv = protoDim / size;\n\t\tlet area = 0;\n\t\tfor (let sy = sy0; sy <= sy1; sy++) {\n\t\t\tconst gyy = (dh + sy * scale) * inv;\n\t\t\tconst gy0 = Math.floor(gyy);\n\t\t\tconst fy = gyy - gy0;\n\t\t\tconst gy1 = Math.min(protoDim - 1, gy0 + 1);\n\t\t\tconst maskRow = sy * sw;\n\t\t\tfor (let sx = sx0; sx <= sx1; sx++) {\n\t\t\t\tconst gxx = (dw + sx * scale) * inv;\n\t\t\t\tconst gx0 = Math.floor(gxx);\n\t\t\t\tconst fx = gxx - gx0;\n\t\t\t\tconst gx1 = Math.min(protoDim - 1, gx0 + 1);\n\t\t\t\tlet acc = 0;\n\t\t\t\tfor (let c = 0; c < 32; c++) {\n\t\t\t\t\tconst coeff = output[coeffBase + c * step];\n\t\t\t\t\tif (coeff === 0) continue;\n\t\t\t\t\tconst rowBase = c * protoDim * protoDim;\n\t\t\t\t\tconst v00 = proto[rowBase + gy0 * protoDim + gx0];\n\t\t\t\t\tconst v10 = proto[rowBase + gy0 * protoDim + gx1];\n\t\t\t\t\tconst v01 = proto[rowBase + gy1 * protoDim + gx0];\n\t\t\t\t\tconst v11 = proto[rowBase + gy1 * protoDim + gx1];\n\t\t\t\t\tconst interp = v00 * (1 - fx) * (1 - fy) + v10 * fx * (1 - fy) + v01 * (1 - fx) * fy + v11 * fx * fy;\n\t\t\t\t\tacc += coeff * interp;\n\t\t\t\t}\n\t\t\t\tif (feather <= 0) {\n\t\t\t\t\tif (acc > maskLogit) {\n\t\t\t\t\t\tmask[maskRow + sx] = 255;\n\t\t\t\t\t\tarea++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst alpha = acc > 16 ? 1 : acc < -16 ? 0 : 1 / (1 + Math.exp(-acc));\n\t\t\t\t\tlet alphaNorm = 0;\n\t\t\t\t\tif (alpha >= tMax) alphaNorm = 1;\n\t\t\t\t\telse if (alpha > tMin) alphaNorm = (alpha - tMin) * invTwoFeather;\n\t\t\t\t\tconst alphaOut = Math.round(alphaNorm * 255);\n\t\t\t\t\tif (alphaOut > 0) {\n\t\t\t\t\t\tmask[maskRow + sx] = alphaOut;\n\t\t\t\t\t\tarea += alphaNorm;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tarea = Math.round(area);\n\t\tif (area === 0) continue;\n\t\tmasks.push({\n\t\t\tcategory: det.category,\n\t\t\tmask,\n\t\t\twidth: sw,\n\t\t\theight: sh,\n\t\t\tarea,\n\t\t\tcoverage: sw * sh > 0 ? area / (sw * sh) : 0,\n\t\t\tdetectionIndex: i\n\t\t});\n\t}\n\treturn {\n\t\tdetections,\n\t\tmasks\n\t};\n}\n\n//#endregion\n//#region src/extractors/canonical-indices.ts\n/** COCO-17 keypoint indices for YOLO pose outputs (matches YOLO_POSE_KEYPOINTS order). */\nconst POSE_LANDMARKS_YOLO = {\n\tNOSE: 0,\n\tLEFT_EYE: 1,\n\tRIGHT_EYE: 2,\n\tLEFT_EAR: 3,\n\tRIGHT_EAR: 4,\n\tLEFT_SHOULDER: 5,\n\tRIGHT_SHOULDER: 6,\n\tLEFT_ELBOW: 7,\n\tRIGHT_ELBOW: 8,\n\tLEFT_WRIST: 9,\n\tRIGHT_WRIST: 10,\n\tLEFT_HIP: 11,\n\tRIGHT_HIP: 12,\n\tLEFT_KNEE: 13,\n\tRIGHT_KNEE: 14,\n\tLEFT_ANKLE: 15,\n\tRIGHT_ANKLE: 16\n};\nconst YOLO_POSE_KEYPOINT_NAMES = [\n\t\"nose\",\n\t\"leftEye\",\n\t\"rightEye\",\n\t\"leftEar\",\n\t\"rightEar\",\n\t\"leftShoulder\",\n\t\"rightShoulder\",\n\t\"leftElbow\",\n\t\"rightElbow\",\n\t\"leftWrist\",\n\t\"rightWrist\",\n\t\"leftHip\",\n\t\"rightHip\",\n\t\"leftKnee\",\n\t\"rightKnee\",\n\t\"leftAnkle\",\n\t\"rightAnkle\"\n];\n/** COCO-17 skeleton bones for the WebGPU skeleton renderer (indices above). */\nconst YOLO_COCO17_BONES = [\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.NOSE,\n\t\tto: POSE_LANDMARKS_YOLO.LEFT_SHOULDER,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.NOSE,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_SHOULDER,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.LEFT_SHOULDER,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_SHOULDER,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.LEFT_SHOULDER,\n\t\tto: POSE_LANDMARKS_YOLO.LEFT_ELBOW,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.333,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.LEFT_ELBOW,\n\t\tto: POSE_LANDMARKS_YOLO.LEFT_WRIST,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t.667,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.RIGHT_SHOULDER,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_ELBOW,\n\t\tcolor: [\n\t\t\t1,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.RIGHT_ELBOW,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_WRIST,\n\t\tcolor: [\n\t\t\t.667,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.LEFT_SHOULDER,\n\t\tto: POSE_LANDMARKS_YOLO.LEFT_HIP,\n\t\tcolor: [\n\t\t\t.333,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.RIGHT_SHOULDER,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_HIP,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t0,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.LEFT_HIP,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_HIP,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.333,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.LEFT_HIP,\n\t\tto: POSE_LANDMARKS_YOLO.LEFT_KNEE,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t.667,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.LEFT_KNEE,\n\t\tto: POSE_LANDMARKS_YOLO.LEFT_ANKLE,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t1,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.RIGHT_HIP,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_KNEE,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.667,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t},\n\t{\n\t\tfrom: POSE_LANDMARKS_YOLO.RIGHT_KNEE,\n\t\tto: POSE_LANDMARKS_YOLO.RIGHT_ANKLE,\n\t\tcolor: [\n\t\t\t0,\n\t\t\t.333,\n\t\t\t1,\n\t\t\t1\n\t\t]\n\t}\n];\n/** Mapping from MediaPipe 33-pose indices to YOLO COCO-17 (named props survive unchanged). */\nconst MEDIAPIPE_TO_YOLO_POSE_INDEX = {\n\t0: 0,\n\t11: 5,\n\t12: 6,\n\t13: 7,\n\t14: 8,\n\t15: 9,\n\t16: 10,\n\t23: 11,\n\t24: 12,\n\t25: 13,\n\t26: 14,\n\t27: 15,\n\t28: 16\n};\n\n//#endregion\n//#region src/gpu/letterbox-resize.wgsl.ts\n/**\n* @file letterbox-resize.wgsl.ts\n* High-performance WebGPU compute shader for hardware-accelerated YOLO letterbox pre-processing.\n* Converts input RGBA GPUTexture into a normalized [0, 1] planar NCHW Float32 storage buffer.\n*/\nconst letterboxResizeWgsl = `\nstruct LetterboxParams {\n sourceWidth: u32,\n sourceHeight: u32,\n imgsz: u32,\n padDw: u32,\n padDh: u32,\n scale: f32,\n padValue: f32, // constant 114.0 / 255.0 ≈ 0.44705882\n};\n\n@group(0) @binding(0) var inputTex: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> outputBuffer: array<f32>;\n@group(0) @binding(2) var<uniform> params: LetterboxParams;\n\n@compute @workgroup_size(16, 16)\nfn computeLetterbox(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.imgsz || id.y >= params.imgsz) {\n return;\n }\n\n let ox = id.x;\n let oy = id.y;\n let imgsz = params.imgsz;\n let planeSize = imgsz * imgsz;\n\n let dw = params.padDw;\n let dh = params.padDh;\n let rw = u32(f32(params.sourceWidth) * params.scale + 0.5);\n let rh = u32(f32(params.sourceHeight) * params.scale + 0.5);\n\n var r: f32 = params.padValue;\n var g: f32 = params.padValue;\n var b: f32 = params.padValue;\n\n if (ox >= dw && ox < dw + rw && oy >= dh && oy < dh + rh) {\n let sx = clamp(i32(f32(ox - dw) / params.scale), 0, i32(params.sourceWidth) - 1);\n let sy = clamp(i32(f32(oy - dh) / params.scale), 0, i32(params.sourceHeight) - 1);\n let pixel = textureLoad(inputTex, vec2<i32>(sx, sy), 0);\n r = pixel.r;\n g = pixel.g;\n b = pixel.b;\n }\n\n let pixelIdx = oy * imgsz + ox;\n outputBuffer[pixelIdx] = r;\n outputBuffer[planeSize + pixelIdx] = g;\n outputBuffer[2u * planeSize + pixelIdx] = b;\n}\n`;\n\n//#endregion\n//#region src/gpu/mask-upscale.wgsl.ts\n/**\n* @file mask-upscale.wgsl.ts\n* High-performance WebGPU compute shader for GPU-native instance mask upscaling.\n* Computes weighted sum of 32 proto channels with continuous sigmoid soft alpha\n* and feathering directly into a VRAM mask texture.\n*/\nconst maskUpscaleWgsl = `\nstruct MaskParams {\n maskWidth: u32,\n maskHeight: u32,\n protoDim: u32,\n imgsz: u32,\n padDw: u32,\n padDh: u32,\n scale: f32,\n maskThreshold: f32,\n featherRadius: f32,\n};\n\n@group(0) @binding(0) var<storage, read> protoBuffer: array<f32>;\n@group(0) @binding(1) var<storage, read> coeffsBuffer: array<f32>;\n@group(0) @binding(2) var outputMask: texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(3) var<uniform> params: MaskParams;\n\n@compute @workgroup_size(16, 16)\nfn computeMaskUpscale(@builtin(global_invocation_id) id: vec3<u32>) {\n if (id.x >= params.maskWidth || id.y >= params.maskHeight) {\n return;\n }\n\n let mx = f32(id.x);\n let my = f32(id.y);\n\n // Map source coordinate through letterbox into proto space [0, protoDim]\n let lx = mx * params.scale + f32(params.padDw);\n let ly = my * params.scale + f32(params.padDh);\n\n let px = (lx / f32(params.imgsz)) * f32(params.protoDim);\n let py = (ly / f32(params.imgsz)) * f32(params.protoDim);\n\n let protoDimI = i32(params.protoDim);\n let x0 = clamp(i32(floor(px)), 0, protoDimI - 1);\n let y0 = clamp(i32(floor(py)), 0, protoDimI - 1);\n let x1 = clamp(x0 + 1, 0, protoDimI - 1);\n let y1 = clamp(y0 + 1, 0, protoDimI - 1);\n\n let fx = px - f32(x0);\n let fy = py - f32(y0);\n\n let w00 = (1.0 - fx) * (1.0 - fy);\n let w10 = fx * (1.0 - fy);\n let w01 = (1.0 - fx) * fy;\n let w11 = fx * fy;\n\n let planeStride = params.protoDim * params.protoDim;\n var acc: f32 = 0.0;\n\n for (var c: u32 = 0u; c < 32u; c = c + 1u) {\n let planeOffset = c * planeStride;\n let idx00 = planeOffset + u32(y0) * params.protoDim + u32(x0);\n let idx10 = planeOffset + u32(y0) * params.protoDim + u32(x1);\n let idx01 = planeOffset + u32(y1) * params.protoDim + u32(x0);\n let idx11 = planeOffset + u32(y1) * params.protoDim + u32(x1);\n\n let v00 = protoBuffer[idx00];\n let v10 = protoBuffer[idx10];\n let v01 = protoBuffer[idx01];\n let v11 = protoBuffer[idx11];\n\n let interpolated = w00 * v00 + w10 * v10 + w01 * v01 + w11 * v11;\n acc = acc + coeffsBuffer[c] * interpolated;\n }\n\n // Sigmoid activation\n let alpha = 1.0 / (1.0 + exp(-acc));\n\n // Anti-aliased feathering\n let feather = max(0.001, params.featherRadius);\n let lowBound = params.maskThreshold - feather;\n let val = clamp((alpha - lowBound) / (2.0 * feather), 0.0, 1.0);\n\n textureStore(\n outputMask,\n vec2<i32>(i32(id.x), i32(id.y)),\n vec4<f32>(val, val, val, val)\n );\n}\n`;\n\n//#endregion\n//#region src/gpu/optical-flow-warper.ts\n/**\n* Forward-warps a normalized or absolute bounding box along motion vectors.\n*/\nfunction warpBoundingBox(box, motion, sourceWidth, sourceHeight) {\n\tconst normDx = sourceWidth > 0 ? motion.dx / sourceWidth : 0;\n\tconst normDy = sourceHeight > 0 ? motion.dy / sourceHeight : 0;\n\tconst newNormX = Math.max(0, Math.min(1 - box.normalizedWidth, box.normalizedX + normDx));\n\tconst newNormY = Math.max(0, Math.min(1 - box.normalizedHeight, box.normalizedY + normDy));\n\treturn {\n\t\toriginX: newNormX * sourceWidth,\n\t\toriginY: newNormY * sourceHeight,\n\t\twidth: box.width,\n\t\theight: box.height,\n\t\tnormalizedX: newNormX,\n\t\tnormalizedY: newNormY,\n\t\tnormalizedWidth: box.normalizedWidth,\n\t\tnormalizedHeight: box.normalizedHeight,\n\t\tangle: box.angle\n\t};\n}\n/**\n* Forward-warps an array of tracked objects across an un-inferred frame.\n*/\nfunction warpTrackedObjects(objects, flow, sourceWidth, sourceHeight) {\n\treturn objects.map((obj) => {\n\t\tconst centerX = obj.boundingBox.originX + obj.boundingBox.width / 2;\n\t\tconst centerY = obj.boundingBox.originY + obj.boundingBox.height / 2;\n\t\tconst motion = flow.getVector(centerX, centerY);\n\t\tconst warpedBox = warpBoundingBox(obj.boundingBox, motion, sourceWidth, sourceHeight);\n\t\treturn {\n\t\t\t...obj,\n\t\t\tboundingBox: warpedBox,\n\t\t\tisCoasting: true\n\t\t};\n\t});\n}\n/**\n* Forward-warps an array of detected objects.\n*/\nfunction warpDetectedObjects(detections, flow, sourceWidth, sourceHeight) {\n\treturn detections.map((det) => {\n\t\tconst centerX = det.boundingBox.originX + det.boundingBox.width / 2;\n\t\tconst centerY = det.boundingBox.originY + det.boundingBox.height / 2;\n\t\tconst motion = flow.getVector(centerX, centerY);\n\t\treturn {\n\t\t\t...det,\n\t\t\tboundingBox: warpBoundingBox(det.boundingBox, motion, sourceWidth, sourceHeight)\n\t\t};\n\t});\n}\n/**\n* Forward-warps a continuous sigmoid instance mask using a dense motion flow field.\n*/\nfunction warpInstanceMask(instanceMask, flow) {\n\tconst { width, height, mask } = instanceMask;\n\tconst warped = new Uint8Array(mask.length);\n\tlet area = 0;\n\tfor (let y = 0; y < height; y++) {\n\t\tconst rowOffset = y * width;\n\t\tfor (let x = 0; x < width; x++) {\n\t\t\tconst motion = flow.getVector(x, y);\n\t\t\tconst srcX = Math.round(x - motion.dx);\n\t\t\tconst srcY = Math.round(y - motion.dy);\n\t\t\tif (srcX >= 0 && srcX < width && srcY >= 0 && srcY < height) {\n\t\t\t\tconst val = mask[srcY * width + srcX];\n\t\t\t\twarped[rowOffset + x] = val;\n\t\t\t\tif (val > 0) area++;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\t...instanceMask,\n\t\tmask: warped,\n\t\tarea\n\t};\n}\n\n//#endregion\n//#region src/gpu/pose-skeleton-renderer.ts\n/**\n* WebGPU skeleton renderer for YOLO pose results.\n*\n* Rasterizes the primary person's COCO-17 keypoints into an OpenPose-style\n* conditioning texture natively in VRAM — same compute pipeline as the MediaPipe\n* renderer, with the COCO-17 bone set instead of the 33-point OpenPose set.\n*/\nvar PoseSkeletonRenderer = class {\n\tpipeline;\n\tconstructor(device) {\n\t\tthis.pipeline = new PoseSkeletonComputePipeline(device);\n\t}\n\trenderToTexture(keypoints, options, bones = YOLO_COCO17_BONES) {\n\t\treturn this.pipeline.execute(keypoints, options, bones);\n\t}\n\tdestroy() {\n\t\tthis.pipeline.destroy();\n\t}\n};\n\n//#endregion\n//#region src/gpu/segmentation-texture-pool.ts\nvar SegmentationTexturePool = class {\n\tdevice;\n\tpool = /* @__PURE__ */ new Map();\n\tconstructor(device) {\n\t\tthis.device = device;\n\t}\n\tgetOrCreateTexture(key, options) {\n\t\tconst existing = this.pool.get(key);\n\t\tif (existing && existing.width === options.width && existing.height === options.height) return existing;\n\t\tif (existing) existing.destroy();\n\t\tconst format = options.format ?? \"rgba8unorm\";\n\t\tconst texture = this.device.createTexture({\n\t\t\tlabel: options.label ?? `Yolo_Segmentation_${key}`,\n\t\t\tsize: [\n\t\t\t\toptions.width,\n\t\t\t\toptions.height,\n\t\t\t\t1\n\t\t\t],\n\t\t\tformat,\n\t\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT\n\t\t});\n\t\tthis.pool.set(key, texture);\n\t\treturn texture;\n\t}\n\tuploadMask(key, maskData, width, height) {\n\t\tconst isRgba = maskData.length >= width * height * 4;\n\t\tconst format = isRgba ? \"rgba8unorm\" : \"r8unorm\";\n\t\tconst texture = this.getOrCreateTexture(key, {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat\n\t\t});\n\t\tlet uploadBytes;\n\t\tif (maskData instanceof Float32Array) {\n\t\t\tuploadBytes = new Uint8Array(maskData.length);\n\t\t\tfor (let i = 0; i < maskData.length; i++) uploadBytes[i] = Math.round(Math.max(0, Math.min(1, maskData[i])) * 255);\n\t\t} else uploadBytes = maskData;\n\t\tconst bytesPerRow = width * (isRgba ? 4 : 1);\n\t\tconst alignedBytesPerRow = Math.ceil(bytesPerRow / 256) * 256;\n\t\tlet finalBuffer;\n\t\tif (alignedBytesPerRow === bytesPerRow) finalBuffer = uploadBytes;\n\t\telse {\n\t\t\tfinalBuffer = new Uint8Array(alignedBytesPerRow * height);\n\t\t\tfor (let y = 0; y < height; y++) finalBuffer.set(uploadBytes.subarray(y * bytesPerRow, (y + 1) * bytesPerRow), y * alignedBytesPerRow);\n\t\t}\n\t\tthis.device.queue.writeTexture({ texture }, finalBuffer.buffer, {\n\t\t\toffset: finalBuffer.byteOffset,\n\t\t\tbytesPerRow: alignedBytesPerRow,\n\t\t\trowsPerImage: height\n\t\t}, {\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\treturn texture;\n\t}\n\tdestroy() {\n\t\tfor (const tex of this.pool.values()) tex.destroy();\n\t\tthis.pool.clear();\n\t}\n};\n\n//#endregion\n//#region src/gpu/yolo-gpu-pipeline.ts\n/**\n* @file yolo-gpu-pipeline.ts\n* WebGPU Tier T2 acceleration pipeline for hardware letterboxing and mask upscaling.\n*/\nvar YoloGpuPipeline = class {\n\t_device;\n\t_letterboxPipeline;\n\t_maskUpscalePipeline;\n\tconstructor(device) {\n\t\tthis._device = device;\n\t}\n\tget device() {\n\t\treturn this._device;\n\t}\n\t/**\n\t* Dispatches hardware letterboxing on a GPU compute queue.\n\t*/\n\tdispatchLetterbox(inputTexture, outputBuffer, options, encoder) {\n\t\tif (!this._letterboxPipeline) {\n\t\t\tconst module = this._device.createShaderModule({\n\t\t\t\tlabel: \"yolo_letterbox_resize.wgsl\",\n\t\t\t\tcode: letterboxResizeWgsl\n\t\t\t});\n\t\t\tthis._letterboxPipeline = this._device.createComputePipeline({\n\t\t\t\tlabel: \"YoloLetterboxPipeline\",\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"computeLetterbox\"\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(32);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = options.sourceWidth;\n\t\tu32View[1] = options.sourceHeight;\n\t\tu32View[2] = options.imgsz;\n\t\tu32View[3] = options.padDw;\n\t\tu32View[4] = options.padDh;\n\t\tf32View[5] = options.scale;\n\t\tf32View[6] = 114 / 255;\n\t\tconst uniformBuffer = this._device.createBuffer({\n\t\t\tsize: 32,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tthis._device.queue.writeBuffer(uniformBuffer, 0, uniformData);\n\t\tconst bindGroup = this._device.createBindGroup({\n\t\t\tlayout: this._letterboxPipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: inputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: outputBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst enc = encoder ?? this._device.createCommandEncoder({ label: \"yolo_letterbox_encoder\" });\n\t\tconst pass = enc.beginComputePass({ label: \"yolo_letterbox_pass\" });\n\t\tpass.setPipeline(this._letterboxPipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tconst workgroups = Math.ceil(options.imgsz / 16);\n\t\tpass.dispatchWorkgroups(workgroups, workgroups);\n\t\tpass.end();\n\t\tif (!encoder) this._device.queue.submit([enc.finish()]);\n\t}\n\t/**\n\t* Dispatches hardware mask upscaling on a GPU compute queue.\n\t*/\n\tdispatchMaskUpscale(protoBuffer, coeffsBuffer, outputTexture, options, encoder) {\n\t\tif (!this._maskUpscalePipeline) {\n\t\t\tconst module = this._device.createShaderModule({\n\t\t\t\tlabel: \"yolo_mask_upscale.wgsl\",\n\t\t\t\tcode: maskUpscaleWgsl\n\t\t\t});\n\t\t\tthis._maskUpscalePipeline = this._device.createComputePipeline({\n\t\t\t\tlabel: \"YoloMaskUpscalePipeline\",\n\t\t\t\tlayout: \"auto\",\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"computeMaskUpscale\"\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst uniformData = /* @__PURE__ */ new ArrayBuffer(48);\n\t\tconst u32View = new Uint32Array(uniformData);\n\t\tconst f32View = new Float32Array(uniformData);\n\t\tu32View[0] = options.maskWidth;\n\t\tu32View[1] = options.maskHeight;\n\t\tu32View[2] = options.protoDim;\n\t\tu32View[3] = options.imgsz;\n\t\tu32View[4] = options.padDw;\n\t\tu32View[5] = options.padDh;\n\t\tf32View[6] = options.scale;\n\t\tf32View[7] = options.maskThreshold ?? .5;\n\t\tf32View[8] = options.featherRadius ?? .05;\n\t\tconst uniformBuffer = this._device.createBuffer({\n\t\t\tsize: 48,\n\t\t\tusage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST\n\t\t});\n\t\tthis._device.queue.writeBuffer(uniformBuffer, 0, uniformData);\n\t\tconst bindGroup = this._device.createBindGroup({\n\t\t\tlayout: this._maskUpscalePipeline.getBindGroupLayout(0),\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: protoBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: { buffer: coeffsBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: outputTexture.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst enc = encoder ?? this._device.createCommandEncoder({ label: \"yolo_mask_upscale_encoder\" });\n\t\tconst pass = enc.beginComputePass({ label: \"yolo_mask_upscale_pass\" });\n\t\tpass.setPipeline(this._maskUpscalePipeline);\n\t\tpass.setBindGroup(0, bindGroup);\n\t\tconst wgX = Math.ceil(options.maskWidth / 16);\n\t\tconst wgY = Math.ceil(options.maskHeight / 16);\n\t\tpass.dispatchWorkgroups(wgX, wgY);\n\t\tpass.end();\n\t\tif (!encoder) this._device.queue.submit([enc.finish()]);\n\t}\n};\n\n//#endregion\n//#region src/model/model-store.ts\n/**\n* Resolves the default model cache directory:\n* 1. `GITFRAMES_MODELS_DIR`\n* 2. `~/.cache/gitframes/models`\n*/\nfunction getDefaultModelsDir() {\n\tif (process.env.GITFRAMES_MODELS_DIR) return resolve(process.env.GITFRAMES_MODELS_DIR);\n\treturn resolve(homedir(), \".cache/gitframes/models\");\n}\n/**\n* Lazy YOLO model store. Constructor performs ZERO I/O; the only entry that can hit the\n* network is `ensure(key)`, called by an inference function the first time it runs.\n* Concurrent callers of the same key share a single in-flight download (promise dedupe),\n* and verified files on disk are reused across processes.\n*\n* Mirrors the proven mechanics of the old MediaPipe model manager (atomic temp+rename,\n* size verification, `GITFRAMES_MODELS_DIR` override) minus its eager constructor downloads.\n*/\nvar YoloModelStore = class YoloModelStore {\n\t_modelsDir;\n\t_baseUrl;\n\t_timeoutMs;\n\t_fetch;\n\t_onProgress;\n\t_inflight = /* @__PURE__ */ new Map();\n\t_buffers = /* @__PURE__ */ new Map();\n\t_status = /* @__PURE__ */ new Map();\n\tconstructor(options = {}) {\n\t\tthis._modelsDir = options.modelsDir ? resolve(options.modelsDir) : getDefaultModelsDir();\n\t\tthis._baseUrl = options.baseUrl ?? process.env.GITFRAMES_YOLO_BASE_URL ?? DEFAULT_YOLO_BASE_URL;\n\t\tthis._timeoutMs = options.timeoutMs;\n\t\tthis._fetch = options.fetchImpl ?? globalThis.fetch;\n\t\tthis._onProgress = options.onProgress;\n\t}\n\tget modelsDir() {\n\t\treturn this._modelsDir;\n\t}\n\tpathFor(key) {\n\t\treturn join(this._modelsDir, YOLO_MODELS[key].filename);\n\t}\n\tdescriptor(key) {\n\t\treturn YOLO_MODELS[key];\n\t}\n\t/**\n\t* Smallest file we trust as a cached model. Every YOLO11 export in the registry\n\t* ships well above 1 MB (smallest is yolo11n-cls ≈ 1.2 MB); a smaller file is a\n\t* partial/stub write (e.g. a 4 KiB test fixture) and must be re-downloaded.\n\t*/\n\tstatic MIN_VALID_MODEL_BYTES = 512 * 1024;\n\thas(key) {\n\t\tconst targetPath = this.pathFor(key);\n\t\tif (!existsSync(targetPath)) return false;\n\t\ttry {\n\t\t\treturn statSync(targetPath).size >= YoloModelStore.MIN_VALID_MODEL_BYTES;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\t/** Drops a cached model (file + memory) so the next `ensure` re-downloads it. */\n\tasync evict(key) {\n\t\tthis._buffers.delete(key);\n\t\tthis._status.set(key, \"pending\");\n\t\tawait unlink(this.pathFor(key)).catch(() => void 0);\n\t}\n\t/** Direct download helper for arbitrary model URLs, respecting injected fetch. */\n\tasync fetchDirect(url) {\n\t\tconst res = await this._fetch(url);\n\t\tif (!res.ok) throw new Error(`Failed to fetch model from ${url}: ${res.statusText}`);\n\t\tconst buf = await res.arrayBuffer();\n\t\treturn new Uint8Array(buf);\n\t}\n\tstatus(key) {\n\t\treturn this._status.get(key) ?? \"pending\";\n\t}\n\t/** Snapshot of every tracked model's status (empty until anything is fetched). */\n\tstatuses() {\n\t\treturn new Map(this._status);\n\t}\n\t/** True when the model is resident in memory (loaded or downloaded this process). */\n\tisLoaded(key) {\n\t\treturn this._buffers.has(key);\n\t}\n\t/**\n\t* THE only download entry point. Returns the model bytes from memory (cached),\n\t* loading from disk or fetching from the registry URL as needed.\n\t*/\n\tasync ensure(key) {\n\t\tconst inMemory = this._buffers.get(key);\n\t\tif (inMemory) return inMemory;\n\t\tconst inflight = this._inflight.get(key);\n\t\tif (inflight) return inflight;\n\t\tconst promise = this.load(key).finally(() => this._inflight.delete(key));\n\t\tthis._inflight.set(key, promise);\n\t\treturn promise;\n\t}\n\t/** Explicit warm-up — fetch multiple models ahead of use (agents, renderers). */\n\tasync preload(keys) {\n\t\tawait Promise.all(keys.map((key) => this.ensure(key)));\n\t}\n\tasync load(key) {\n\t\tconst targetPath = this.pathFor(key);\n\t\tif (this.has(key)) {\n\t\t\tthis._status.set(key, \"ready\");\n\t\t\treturn this.readBuffer(key, targetPath);\n\t\t}\n\t\tconst desc = YOLO_MODELS[key];\n\t\tconst downloadUrl = desc.url ?? `${this._baseUrl}${desc.filename}`;\n\t\tthis._status.set(key, \"downloading\");\n\t\tif (!existsSync(dirname(targetPath))) mkdirSync(dirname(targetPath), { recursive: true });\n\t\tconst tempPath = `${targetPath}.tmp.${Date.now()}`;\n\t\ttry {\n\t\t\tconst response = await this._fetch(downloadUrl, { signal: this._timeoutMs ? AbortSignal.timeout(this._timeoutMs) : void 0 });\n\t\t\tif (!response.ok) throw new Error(`Failed to download YOLO model '${key}' from ${downloadUrl}: HTTP ${response.status} ${response.statusText}`);\n\t\t\tconst totalBytes = Number(response.headers.get(\"content-length\") ?? 0);\n\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\tconst buffer = new Uint8Array(arrayBuffer);\n\t\t\tif (buffer.byteLength === 0) throw new Error(`Downloaded YOLO model '${key}' is empty (0 bytes).`);\n\t\t\tif (this._onProgress) this._onProgress(key, buffer.byteLength, totalBytes || buffer.byteLength);\n\t\t\tawait writeFile(tempPath, buffer);\n\t\t\tawait rename(tempPath, targetPath);\n\t\t\tthis._buffers.set(key, buffer);\n\t\t\tthis._status.set(key, \"ready\");\n\t\t\treturn buffer;\n\t\t} catch (error) {\n\t\t\tthis._status.set(key, \"error\");\n\t\t\tif (existsSync(tempPath)) await unlink(tempPath).catch(() => void 0);\n\t\t\tthrow error;\n\t\t}\n\t}\n\treadBuffer(key, targetPath) {\n\t\tconst fileBuffer = readFileSync(targetPath);\n\t\tconst buffer = new Uint8Array(fileBuffer.buffer, fileBuffer.byteOffset, fileBuffer.byteLength);\n\t\tthis._buffers.set(key, buffer);\n\t\treturn buffer;\n\t}\n\t/** Drops in-memory buffers (model stays on disk for the next run). */\n\tclearMemoryCache() {\n\t\tthis._buffers.clear();\n\t}\n};\n\n//#endregion\n//#region src/runner/canonical-baselines.ts\n/** Neutral fallbacks so signal evaluators always have a well-formed frame to read. */\nfunction createNeutralObjectResult() {\n\treturn {\n\t\tobjects: [],\n\t\trawDetections: []\n\t};\n}\nfunction createNeutralPoseResult() {\n\treturn { people: [] };\n}\n/** 17 neutral COCO keypoints at frame center — used by pose signals when nobody is detected. */\nfunction createNeutralLandmarks() {\n\tconst landmarks = [];\n\tfor (let i = 0; i < 17; i++) landmarks.push({\n\t\tx: .5,\n\t\ty: .5,\n\t\tz: 0,\n\t\tvisibility: 0\n\t});\n\treturn landmarks;\n}\n\n//#endregion\n//#region src/runtime/session-provider.ts\n/** onnxruntime-node provider. The native module is imported lazily on first session. */\nvar NodeSessionProvider = class {\n\tkind = \"node\";\n\tortPromise;\n\tasync ort() {\n\t\tif (!this.ortPromise) this.ortPromise = import(\"onnxruntime-node\").catch((err) => {\n\t\t\tthis.ortPromise = void 0;\n\t\t\tthrow new Error(`onnxruntime-node failed to load (${String(err)}). Install it in the environment or provide a custom SessionProvider.`);\n\t\t});\n\t\treturn this.ortPromise;\n\t}\n\tasync createSession(modelBytes, _opts) {\n\t\tconst ort = await this.ort();\n\t\tconst session = await ort.InferenceSession.create(modelBytes, {\n\t\t\texecutionProviders: [\"cpu\"],\n\t\t\tgraphOptimizationLevel: \"all\"\n\t\t});\n\t\treturn {\n\t\t\trun: async (input) => {\n\t\t\t\tconst inputs = Array.isArray(input) ? input : [input];\n\t\t\t\tconst feeds = {};\n\t\t\t\tfor (const inp of inputs) {\n\t\t\t\t\tconst inputName = session.inputNames.includes(inp.name) ? inp.name : session.inputNames[0] ?? inp.name;\n\t\t\t\t\tfeeds[inputName] = new ort.Tensor(\"float32\", inp.data, [...inp.dims]);\n\t\t\t\t}\n\t\t\t\tconst results = await session.run(feeds);\n\t\t\t\tconst outputs = {};\n\t\t\t\tfor (const [name, tensor] of Object.entries(results)) outputs[name] = {\n\t\t\t\t\tdata: tensor.data,\n\t\t\t\t\tdims: [...tensor.dims]\n\t\t\t\t};\n\t\t\t\treturn outputs;\n\t\t\t},\n\t\t\trelease: () => {\n\t\t\t\tsession.release();\n\t\t\t}\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/runner/yolo-runner.ts\nconst YOLO_ANCHORS_FOR_SIZE = {\n\t320: 2100,\n\t640: 8400,\n\t1024: 21504,\n\t1280: 33600\n};\n/**\n* Lazy YOLO11 runner.\n*\n* `create()` performs ZERO I/O: no model downloads, no sessions, no environment patching.\n* Each inference method (`detect` / `segment` / `pose` / `classify`) downloads its model\n* and warms its session on FIRST USE ONLY, then reuses them for the process lifetime.\n* Call `close()` to release sessions.\n*/\nvar YoloVisionRunner = class YoloVisionRunner {\n\tvariant;\n\timgsz;\n\tconfidence;\n\tiouThreshold;\n\tclasses;\n\tenableWorld;\n\tprompts;\n\tcustomModel;\n\tmaskThreshold;\n\tfeatherRadius;\n\t_store;\n\t_provider;\n\t_sessions = /* @__PURE__ */ new Map();\n\t_tensorScratch = /* @__PURE__ */ new Map();\n\t_customSessionPromise;\n\tconstructor(options) {\n\t\tthis.variant = options.variant ?? \"n\";\n\t\tthis.imgsz = options.imgsz ?? 640;\n\t\tthis.confidence = options.confidence ?? .25;\n\t\tthis.iouThreshold = options.iouThreshold ?? .45;\n\t\tthis.classes = options.classes;\n\t\tthis.enableWorld = options.enableWorld;\n\t\tthis.prompts = options.prompts;\n\t\tthis.customModel = options.customModel;\n\t\tthis.maskThreshold = options.maskThreshold ?? .5;\n\t\tthis.featherRadius = options.featherRadius;\n\t\tthis._store = new YoloModelStore({\n\t\t\tmodelsDir: options.modelsDir,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\ttimeoutMs: options.timeoutMs,\n\t\t\tonProgress: options.onProgress\n\t\t});\n\t\tthis._provider = options.provider ?? new NodeSessionProvider();\n\t}\n\t/** Cheap: no downloads, no sessions, no side effects. */\n\tstatic create(options = {}) {\n\t\treturn new YoloVisionRunner(options);\n\t}\n\tget modelsDir() {\n\t\treturn this._store.modelsDir;\n\t}\n\t/** Every registry model keyed to its current download state (downloaded → \"ready\"). */\n\tget downloadStatus() {\n\t\tconst statuses = /* @__PURE__ */ new Map();\n\t\tfor (const key of Object.keys(YOLO_MODELS)) statuses.set(key, \"pending\");\n\t\tfor (const [key, status] of this._store.statuses()) statuses.set(key, status);\n\t\treturn statuses;\n\t}\n\tmodelKeyFor(task) {\n\t\treturn DEFAULT_MODEL_KEY_BY_TASK[task](this.variant);\n\t}\n\t/** Explicit warm-up: downloads + sessions for the given tasks, ahead of first use. */\n\tasync preload(tasks) {\n\t\tif (this.customModel) {\n\t\t\tawait this.customSession();\n\t\t\treturn;\n\t\t}\n\t\tconst defaultTasks = this.enableWorld || this.prompts ? [\n\t\t\t\"world\",\n\t\t\t\"segment\",\n\t\t\t\"pose\"\n\t\t] : [\n\t\t\t\"detect\",\n\t\t\t\"segment\",\n\t\t\t\"pose\"\n\t\t];\n\t\tconst keys = (tasks ?? defaultTasks).map((t) => this.modelKeyFor(t));\n\t\tawait this._store.preload(keys);\n\t\tawait Promise.all(keys.map((key) => this.session(key)));\n\t}\n\tasync detect(image) {\n\t\tif (this.customModel && (!this.customModel.task || this.customModel.task === \"detect\" || this.customModel.task === \"world\")) return this.detectCustom(image);\n\t\tif (this.enableWorld || this.prompts) return this.detectWorld(image, this.prompts);\n\t\tconst key = this.modelKeyFor(\"detect\");\n\t\tconst session = await this.session(key);\n\t\tconst { tensor, params } = this.prepareInput(image, key);\n\t\tconst preds = pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\tthis.imgsz,\n\t\t\t\tthis.imgsz\n\t\t\t]\n\t\t}), 3);\n\t\treturn decodeDetectOutput(preds.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[this.imgsz] ?? 8400, YOLO_MODELS[key].nc, this.decodeOptions(image, params));\n\t}\n\tasync detectWorld(image, prompts) {\n\t\tconst activePrompts = prompts ?? this.prompts ?? YOLO_COCO_CLASSES;\n\t\tconst key = this.modelKeyFor(\"world\");\n\t\tconst session = await this.session(key);\n\t\tconst { tensor, params } = this.prepareInput(image, key);\n\t\tconst txtFeats = new Float32Array(activePrompts.length * 512);\n\t\tfor (let c = 0; c < activePrompts.length; c++) txtFeats.set(encodePromptEmbedding(activePrompts[c]), c * 512);\n\t\tconst preds = pickByDims(await session.run([{\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\tthis.imgsz,\n\t\t\t\tthis.imgsz\n\t\t\t]\n\t\t}, {\n\t\t\tname: \"txt_feats\",\n\t\t\tdata: txtFeats,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\tactivePrompts.length,\n\t\t\t\t512\n\t\t\t]\n\t\t}]), 3);\n\t\treturn decodeDetectOutput(preds.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[this.imgsz] ?? 8400, activePrompts.length, {\n\t\t\t...this.decodeOptions(image, params, \"world\"),\n\t\t\tclassNames: activePrompts\n\t\t});\n\t}\n\tasync segment(image) {\n\t\tif (this.customModel && this.customModel.task === \"segment\") return this.segmentCustom(image);\n\t\tconst key = this.modelKeyFor(\"segment\");\n\t\tconst session = await this.session(key);\n\t\tconst { tensor, params } = this.prepareInput(image, key);\n\t\tconst outputs = await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\tthis.imgsz,\n\t\t\t\tthis.imgsz\n\t\t\t]\n\t\t});\n\t\tconst preds = pickByDims(outputs, 3);\n\t\tconst proto = pickByDims(outputs, 4);\n\t\tconst protoDim = proto.dims[2] ?? proto.dims[1] ?? 160;\n\t\treturn decodeSegmentOutput(preds.data, proto.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[this.imgsz] ?? 8400, YOLO_MODELS[key].nc, protoDim, this.decodeOptions(image, params));\n\t}\n\tasync pose(image) {\n\t\tif (this.customModel && this.customModel.task === \"pose\") return this.poseCustom(image);\n\t\tconst key = this.modelKeyFor(\"pose\");\n\t\tconst session = await this.session(key);\n\t\tconst { tensor, params } = this.prepareInput(image, key);\n\t\tconst preds = pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\tthis.imgsz,\n\t\t\t\tthis.imgsz\n\t\t\t]\n\t\t}), 3);\n\t\treturn decodePoseOutput(preds.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[this.imgsz] ?? 8400, {\n\t\t\tconfidence: this.confidence,\n\t\t\tparams,\n\t\t\tsourceWidth: image.width,\n\t\t\tsourceHeight: image.height\n\t\t});\n\t}\n\tasync detectObb(image) {\n\t\tif (this.customModel && this.customModel.task === \"obb\") return this.obbCustom(image);\n\t\tconst key = this.modelKeyFor(\"obb\");\n\t\tconst session = await this.session(key);\n\t\tconst modelImgsz = YOLO_MODELS[key].imgsz;\n\t\tconst { tensor, params } = this.prepareInput(image, key);\n\t\tconst preds = pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\tmodelImgsz,\n\t\t\t\tmodelImgsz\n\t\t\t]\n\t\t}), 3);\n\t\treturn decodeObbOutput(preds.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[modelImgsz] ?? 21504, YOLO_MODELS[key].nc, this.decodeOptions(image, params, \"obb\"));\n\t}\n\tasync classify(image) {\n\t\tif (this.customModel && this.customModel.task === \"classify\") return this.classifyCustom(image);\n\t\tconst key = this.modelKeyFor(\"classify\");\n\t\tconst session = await this.session(key);\n\t\tconst modelImgsz = YOLO_MODELS[key].imgsz;\n\t\tconst { tensor } = letterboxToTensor(image, modelImgsz);\n\t\treturn decodeClassifyOutput(pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\tmodelImgsz,\n\t\t\t\tmodelImgsz\n\t\t\t]\n\t\t}), 2).data, YOLO_MODELS[key].nc);\n\t}\n\tclose() {\n\t\tfor (const promise of this._sessions.values()) promise.then((session) => session.release()).catch(() => void 0);\n\t\tthis._sessions.clear();\n\t\tif (this._customSessionPromise) {\n\t\t\tthis._customSessionPromise.then((session) => session.release()).catch(() => void 0);\n\t\t\tthis._customSessionPromise = void 0;\n\t\t}\n\t\tthis._store.clearMemoryCache();\n\t}\n\tasync detectCustom(image) {\n\t\tif (!this.customModel) throw new Error(\"No custom model configured\");\n\t\tconst session = await this.customSession();\n\t\tconst imgsz = this.customModel.imgsz ?? this.imgsz;\n\t\tconst scratch = new Float32Array(3 * imgsz * imgsz);\n\t\tconst { tensor, params } = letterboxToTensor(normalizeImage(image), imgsz, scratch);\n\t\tconst preds = pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\timgsz,\n\t\t\t\timgsz\n\t\t\t]\n\t\t}), 3);\n\t\tconst anchors = preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[imgsz] ?? 8400;\n\t\treturn decodeDetectOutput(preds.data, anchors, this.customModel.classes.length, {\n\t\t\t...this.decodeOptions(image, params),\n\t\t\tclassNames: this.customModel.classes\n\t\t});\n\t}\n\tasync segmentCustom(image) {\n\t\tif (!this.customModel) throw new Error(\"No custom model configured\");\n\t\tconst session = await this.customSession();\n\t\tconst imgsz = this.customModel.imgsz ?? this.imgsz;\n\t\tconst scratch = new Float32Array(3 * imgsz * imgsz);\n\t\tconst { tensor, params } = letterboxToTensor(normalizeImage(image), imgsz, scratch);\n\t\tconst outputs = await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\timgsz,\n\t\t\t\timgsz\n\t\t\t]\n\t\t});\n\t\tconst preds = pickByDims(outputs, 3);\n\t\tconst proto = pickByDims(outputs, 4);\n\t\tconst protoDim = proto.dims[2] ?? proto.dims[1] ?? 160;\n\t\treturn decodeSegmentOutput(preds.data, proto.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[imgsz] ?? 8400, this.customModel.classes.length, protoDim, {\n\t\t\t...this.decodeOptions(image, params),\n\t\t\tclassNames: this.customModel.classes\n\t\t});\n\t}\n\tasync poseCustom(image) {\n\t\tif (!this.customModel) throw new Error(\"No custom model configured\");\n\t\tconst session = await this.customSession();\n\t\tconst imgsz = this.customModel.imgsz ?? this.imgsz;\n\t\tconst scratch = new Float32Array(3 * imgsz * imgsz);\n\t\tconst { tensor, params } = letterboxToTensor(normalizeImage(image), imgsz, scratch);\n\t\tconst preds = pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\timgsz,\n\t\t\t\timgsz\n\t\t\t]\n\t\t}), 3);\n\t\treturn decodePoseOutput(preds.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[imgsz] ?? 8400, {\n\t\t\tconfidence: this.confidence,\n\t\t\tparams,\n\t\t\tsourceWidth: image.width,\n\t\t\tsourceHeight: image.height\n\t\t});\n\t}\n\tasync obbCustom(image) {\n\t\tif (!this.customModel) throw new Error(\"No custom model configured\");\n\t\tconst session = await this.customSession();\n\t\tconst imgsz = this.customModel.imgsz ?? this.imgsz;\n\t\tconst scratch = new Float32Array(3 * imgsz * imgsz);\n\t\tconst { tensor, params } = letterboxToTensor(normalizeImage(image), imgsz, scratch);\n\t\tconst preds = pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\timgsz,\n\t\t\t\timgsz\n\t\t\t]\n\t\t}), 3);\n\t\treturn decodeObbOutput(preds.data, preds.dims[2] ?? YOLO_ANCHORS_FOR_SIZE[imgsz] ?? 21504, this.customModel.classes.length, {\n\t\t\t...this.decodeOptions(image, params, \"obb\"),\n\t\t\tclassNames: this.customModel.classes\n\t\t});\n\t}\n\tasync classifyCustom(image) {\n\t\tif (!this.customModel) throw new Error(\"No custom model configured\");\n\t\tconst session = await this.customSession();\n\t\tconst imgsz = this.customModel.imgsz ?? 224;\n\t\tconst { tensor } = letterboxToTensor(image, imgsz);\n\t\treturn decodeClassifyOutput(pickByDims(await session.run({\n\t\t\tname: \"images\",\n\t\t\tdata: tensor,\n\t\t\tdims: [\n\t\t\t\t1,\n\t\t\t\t3,\n\t\t\t\timgsz,\n\t\t\t\timgsz\n\t\t\t]\n\t\t}), 2).data, this.customModel.classes.length);\n\t}\n\tcustomSession() {\n\t\tif (!this.customModel) throw new Error(\"No customModel specified in YoloVisionRunner options\");\n\t\tif (!this._customSessionPromise) {\n\t\t\tconst cm = this.customModel;\n\t\t\tconst imgsz = cm.imgsz ?? this.imgsz;\n\t\t\tthis._customSessionPromise = this.loadCustomModelBytes(cm).then((bytes) => this._provider.createSession(bytes, { imgsz }));\n\t\t}\n\t\treturn this._customSessionPromise;\n\t}\n\tasync loadCustomModelBytes(cm) {\n\t\tif (cm.path) return new Uint8Array(await readFile(cm.path));\n\t\tif (cm.url) return this._store.fetchDirect(cm.url);\n\t\tthrow new Error(\"CustomModelConfig must specify either path or url\");\n\t}\n\tsession(key) {\n\t\tlet promise = this._sessions.get(key);\n\t\tif (!promise) {\n\t\t\tconst modelImgsz = YOLO_MODELS[key].imgsz ?? this.imgsz;\n\t\t\tpromise = this._store.ensure(key).then((bytes) => this._provider.createSession(bytes, { imgsz: modelImgsz })).catch((err) => {\n\t\t\t\tthis._sessions.delete(key);\n\t\t\t\tthis._store.evict(key);\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t\tthis._sessions.set(key, promise);\n\t\t}\n\t\treturn promise;\n\t}\n\tprepareInput(image, key) {\n\t\tconst imgsz = YOLO_MODELS[key].imgsz ?? this.imgsz;\n\t\tlet scratch = this._tensorScratch.get(key);\n\t\tif (!scratch || scratch.length < 3 * imgsz * imgsz) {\n\t\t\tscratch = new Float32Array(3 * imgsz * imgsz);\n\t\t\tthis._tensorScratch.set(key, scratch);\n\t\t}\n\t\treturn letterboxToTensor(normalizeImage(image), imgsz, scratch);\n\t}\n\tdecodeOptions(image, params, task = \"detect\") {\n\t\treturn {\n\t\t\tconfidence: this.confidence,\n\t\t\tiouThreshold: this.iouThreshold,\n\t\t\tclasses: this.classes,\n\t\t\tclassNames: task === \"obb\" ? YOLO_DOTA_CLASSES : YOLO_COCO_CLASSES,\n\t\t\tparams,\n\t\t\tsourceWidth: image.width,\n\t\t\tsourceHeight: image.height,\n\t\t\tmaskThreshold: this.maskThreshold,\n\t\t\tfeatherRadius: this.featherRadius\n\t\t};\n\t}\n};\nfunction normalizeImage(image) {\n\tif (image.data instanceof Uint8ClampedArray) return image;\n\treturn image;\n}\nfunction pickByDims(outputs, rank) {\n\tconst hit = Object.values(outputs).find((t) => t.dims.length === rank);\n\tif (!hit) throw new Error(`YOLO model returned no ${rank}D output — got [${Object.values(outputs).map((t) => t.dims.join(\"x\")).join(\", \")}]. Check the exported model task head.`);\n\treturn hit;\n}\nfunction hashPromptString(str) {\n\tlet h = 2166136261;\n\tfor (let i = 0; i < str.length; i++) h = Math.imul(h ^ str.charCodeAt(i), 16777619) >>> 0;\n\treturn h;\n}\nfunction encodePromptEmbedding(prompt) {\n\tlet seed = hashPromptString(prompt);\n\tconst vec = new Float32Array(512);\n\tlet norm = 0;\n\tfor (let i = 0; i < 512; i++) {\n\t\tseed = seed + 1831565813 >>> 0;\n\t\tlet t = seed;\n\t\tt = Math.imul(t ^ t >>> 15, t | 1);\n\t\tt ^= t + Math.imul(t ^ t >>> 7, t | 61);\n\t\tconst val = ((t ^ t >>> 14) >>> 0) / 4294967296 - .5;\n\t\tvec[i] = val;\n\t\tnorm += val * val;\n\t}\n\tconst invNorm = 1 / (Math.sqrt(norm) || 1);\n\tfor (let i = 0; i < 512; i++) vec[i] *= invNorm;\n\treturn vec;\n}\n\n//#endregion\n//#region src/spatial/camera-space-transformer.ts\nvar SpatialLandmarkTransformer = class {\n\twidth;\n\theight;\n\tfovRad;\n\tfocalDistance;\n\tconstructor(camera) {\n\t\tthis.width = camera.width;\n\t\tthis.height = camera.height;\n\t\tthis.fovRad = (camera.fov ?? 60) * Math.PI / 180;\n\t\tthis.focalDistance = camera.cameraDistance ?? this.height / 2 / Math.tan(this.fovRad / 2);\n\t}\n\t/**\n\t* Projects a normalized landmark [0, 1] into 2D/3D canvas coordinates.\n\t*/\n\tprojectNormalizedLandmark(landmark, offsetZ = 0) {\n\t\tconst screenX = landmark.x * this.width;\n\t\tconst screenY = landmark.y * this.height;\n\t\tconst rawZ = landmark.z * this.width + offsetZ;\n\t\tconst effectiveZ = Math.min(rawZ, this.focalDistance - 10);\n\t\tconst scale = this.focalDistance / (this.focalDistance - effectiveZ);\n\t\treturn {\n\t\t\tx: screenX,\n\t\t\ty: screenY,\n\t\t\tz: rawZ,\n\t\t\tscale: Math.max(.1, scale)\n\t\t};\n\t}\n\t/**\n\t* Projects a metric world landmark [X_w, Y_w, Z_w] in meters into canvas space.\n\t*/\n\tprojectWorldLandmark(worldLandmark, subjectDistanceMeters = 2, scaleMetersToPixels = 800) {\n\t\tconst centerX = this.width / 2;\n\t\tconst centerY = this.height / 2;\n\t\tconst worldX = worldLandmark.x * scaleMetersToPixels;\n\t\tconst worldY = worldLandmark.y * scaleMetersToPixels;\n\t\tconst worldZ = (worldLandmark.z + subjectDistanceMeters) * scaleMetersToPixels;\n\t\tconst effectiveZ = Math.min(worldZ, this.focalDistance - 10);\n\t\tconst scale = this.focalDistance / (this.focalDistance - effectiveZ);\n\t\treturn {\n\t\t\tx: centerX + worldX * scale,\n\t\t\ty: centerY + worldY * scale,\n\t\t\tz: worldZ,\n\t\t\tscale: Math.max(.1, scale)\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/tracking/pose-track-matcher.ts\nfunction getPersonBoundingBox(person) {\n\tif (person.boundingBox && person.boundingBox.width > 0 && person.boundingBox.height > 0) return {\n\t\toriginX: person.boundingBox.originX,\n\t\toriginY: person.boundingBox.originY,\n\t\twidth: person.boundingBox.width,\n\t\theight: person.boundingBox.height\n\t};\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\tlet validCount = 0;\n\tfor (const kp of person.keypoints) if (kp.visibility > .1) {\n\t\tvalidCount++;\n\t\tif (kp.x < minX) minX = kp.x;\n\t\tif (kp.y < minY) minY = kp.y;\n\t\tif (kp.x > maxX) maxX = kp.x;\n\t\tif (kp.y > maxY) maxY = kp.y;\n\t}\n\tif (validCount === 0 || minX >= maxX || minY >= maxY) return {\n\t\toriginX: person.boundingBox?.originX ?? 0,\n\t\toriginY: person.boundingBox?.originY ?? 0,\n\t\twidth: person.boundingBox?.width ?? 0,\n\t\theight: person.boundingBox?.height ?? 0\n\t};\n\treturn {\n\t\toriginX: minX,\n\t\toriginY: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY\n\t};\n}\n/**\n* Matches detected pose people with active person tracks using greedy bipartite IoU.\n*\n* Annotates each person with the matched trackId.\n*/\nfunction matchPoseToTracks(people, trackedObjects, minIoU = .15) {\n\tif (people.length === 0) return [];\n\tconst personTracks = trackedObjects.filter((o) => o.category.toLowerCase() === \"person\" && o.active);\n\tif (personTracks.length === 0) return [...people];\n\tconst candidateMatches = [];\n\tfor (let p = 0; p < people.length; p++) {\n\t\tconst person = people[p];\n\t\tif (person.trackId !== void 0) continue;\n\t\tconst pBox = getPersonBoundingBox(person);\n\t\tconst isNormalized = pBox.width <= 1.05 && pBox.height <= 1.05;\n\t\tfor (const trk of personTracks) {\n\t\t\tconst iou = computeIoU$1(pBox, isNormalized && trk.boundingBox.normalizedWidth > 0 ? {\n\t\t\t\toriginX: trk.boundingBox.normalizedX,\n\t\t\t\toriginY: trk.boundingBox.normalizedY,\n\t\t\t\twidth: trk.boundingBox.normalizedWidth,\n\t\t\t\theight: trk.boundingBox.normalizedHeight\n\t\t\t} : trk.boundingBox);\n\t\t\tif (iou >= minIoU) candidateMatches.push({\n\t\t\t\tpersonIdx: p,\n\t\t\t\ttrackId: trk.trackId,\n\t\t\t\tiou\n\t\t\t});\n\t\t}\n\t}\n\tcandidateMatches.sort((a, b) => b.iou - a.iou);\n\tconst assignedPeople = /* @__PURE__ */ new Set();\n\tconst assignedTracks = /* @__PURE__ */ new Set();\n\tconst personTrackMap = /* @__PURE__ */ new Map();\n\tfor (const match of candidateMatches) {\n\t\tif (assignedPeople.has(match.personIdx) || assignedTracks.has(match.trackId)) continue;\n\t\tassignedPeople.add(match.personIdx);\n\t\tassignedTracks.add(match.trackId);\n\t\tpersonTrackMap.set(match.personIdx, match.trackId);\n\t}\n\tif (people.length === 1 && personTracks.length === 1 && !personTrackMap.has(0) && people[0].trackId === void 0) personTrackMap.set(0, personTracks[0].trackId);\n\treturn people.map((person, idx) => {\n\t\tif (person.trackId !== void 0) return person;\n\t\tconst trackId = personTrackMap.get(idx);\n\t\treturn trackId !== void 0 ? {\n\t\t\t...person,\n\t\t\ttrackId\n\t\t} : person;\n\t});\n}\n\n//#endregion\n//#region src/signals/yolo-signals-bundle.ts\nvar YoloVisionBundle = class {\n\tobjects;\n\tposeLandmarks;\n\tmasks;\n\tsegmentation;\n\tclasses;\n\tclassification;\n\tposeLandmarksTensor;\n\tobjectsTensor;\n\tmasksTensor;\n\t/** Per-class detection histogram [nc] — top-level convenience mirror of `classes.histogram`. */\n\thistogramTensor;\n\t_totalFrames;\n\t_fps;\n\t_width;\n\t_height;\n\t_transformer;\n\t_stencilTexture;\n\t_poseCache = /* @__PURE__ */ new Map();\n\t_objectCache = /* @__PURE__ */ new Map();\n\t_maskCache = /* @__PURE__ */ new Map();\n\t_classifyCache = /* @__PURE__ */ new Map();\n\t_obbCache = /* @__PURE__ */ new Map();\n\t_poseLmCache = /* @__PURE__ */ new Map();\n\t_trackCache = /* @__PURE__ */ new Map();\n\t_categoryCache = /* @__PURE__ */ new Map();\n\t_classCache = /* @__PURE__ */ new Map();\n\t_maskTrackCache = /* @__PURE__ */ new Map();\n\t_registeredSignals = /* @__PURE__ */ new Set();\n\tconstructor(options = {}) {\n\t\tthis._totalFrames = options.totalFrames ?? 120;\n\t\tthis._fps = options.fps ?? 24;\n\t\tthis._width = options.width ?? 1920;\n\t\tthis._height = options.height ?? 1080;\n\t\tthis._transformer = new SpatialLandmarkTransformer({\n\t\t\twidth: this._width,\n\t\t\theight: this._height,\n\t\t\tfov: options.cameraFov ?? 60\n\t\t});\n\t\tconst self = this;\n\t\tconst programmaticSignal$1 = (evaluator, sigOptions) => {\n\t\t\tconst sig = programmaticSignal(evaluator, sigOptions);\n\t\t\tthis._registeredSignals.add(sig);\n\t\t\treturn sig;\n\t\t};\n\t\tconst getPrimaryLandmarks = (frame) => {\n\t\t\treturn this.getPoseResult(frame).people[0]?.keypoints ?? createNeutralLandmarks();\n\t\t};\n\t\tconst createPoseCoord = (index, label) => {\n\t\t\tconst getLm = (frame) => getPrimaryLandmarks(frame)[index] ?? {\n\t\t\t\tx: .5,\n\t\t\t\ty: .5,\n\t\t\t\tz: 0\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tx: programmaticSignal$1((ctx) => getLm(ctx.frame).x, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_x`\n\t\t\t\t}),\n\t\t\t\ty: programmaticSignal$1((ctx) => getLm(ctx.frame).y, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_y`\n\t\t\t\t}),\n\t\t\t\tz: programmaticSignal$1((ctx) => getLm(ctx.frame).z ?? 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_z`\n\t\t\t\t}),\n\t\t\t\tscreenX: programmaticSignal$1((ctx) => this._transformer.projectNormalizedLandmark(getLm(ctx.frame)).x, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_screenX`\n\t\t\t\t}),\n\t\t\t\tscreenY: programmaticSignal$1((ctx) => this._transformer.projectNormalizedLandmark(getLm(ctx.frame)).y, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_screenY`\n\t\t\t\t})\n\t\t\t};\n\t\t};\n\t\tconst getOrCreatePoseLm = (index) => {\n\t\t\tlet sig = this._poseLmCache.get(index);\n\t\t\tif (!sig) {\n\t\t\t\tsig = createPoseCoord(index, POSE_KEYPOINT_NAMES[index] ?? `kpt_${index}`);\n\t\t\t\tthis._poseLmCache.set(index, sig);\n\t\t\t}\n\t\t\treturn sig;\n\t\t};\n\t\tconst poseNamed = {\n\t\t\tnose: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.NOSE),\n\t\t\tleftEye: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_EYE),\n\t\t\trightEye: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_EYE),\n\t\t\tleftEar: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_EAR),\n\t\t\trightEar: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_EAR),\n\t\t\tshoulder: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_SHOULDER),\n\t\t\tleftShoulder: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_SHOULDER),\n\t\t\trightShoulder: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_SHOULDER),\n\t\t\tleftElbow: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_ELBOW),\n\t\t\trightElbow: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_ELBOW),\n\t\t\tleftWrist: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_WRIST),\n\t\t\trightWrist: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_WRIST),\n\t\t\tleftHip: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_HIP),\n\t\t\trightHip: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_HIP),\n\t\t\tleftKnee: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_KNEE),\n\t\t\trightKnee: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_KNEE),\n\t\t\tleftAnkle: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.LEFT_ANKLE),\n\t\t\trightAnkle: getOrCreatePoseLm(POSE_LANDMARKS_YOLO.RIGHT_ANKLE),\n\t\t\tget: getOrCreatePoseLm\n\t\t};\n\t\tthis.poseLandmarks = new Proxy(poseNamed, { get(target, prop, receiver) {\n\t\t\tif (typeof prop === \"string\" && /^\\d+$/.test(prop)) return target.get(Number(prop));\n\t\t\tif (typeof prop === \"number\") return target.get(prop);\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t} });\n\t\tconst neutralTrack = (trackId, category = \"unknown\") => ({\n\t\t\ttrackId,\n\t\t\tcategory,\n\t\t\tscore: 0,\n\t\t\tboundingBox: {\n\t\t\t\toriginX: this._width / 2,\n\t\t\t\toriginY: this._height / 2,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tnormalizedX: .5,\n\t\t\t\tnormalizedY: .5,\n\t\t\t\tnormalizedWidth: 0,\n\t\t\t\tnormalizedHeight: 0\n\t\t\t},\n\t\t\tcenterX: this._width / 2,\n\t\t\tcenterY: this._height / 2,\n\t\t\tnormalizedCenterX: .5,\n\t\t\tnormalizedCenterY: .5,\n\t\t\tvelocity: {\n\t\t\t\tvx: 0,\n\t\t\t\tvy: 0\n\t\t\t},\n\t\t\tspeed: 0,\n\t\t\tage: 0,\n\t\t\thits: 0,\n\t\t\tactive: false,\n\t\t\tisCoasting: false\n\t\t});\n\t\tconst createAnchor = (getPos, label) => {\n\t\t\tconst screenX = programmaticSignal$1((ctx) => getPos(ctx.frame).sx, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: `${label}_screenX`\n\t\t\t});\n\t\t\tconst screenY = programmaticSignal$1((ctx) => getPos(ctx.frame).sy, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: `${label}_screenY`\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tx: programmaticSignal$1((ctx) => this._width > 0 ? getPos(ctx.frame).sx / this._width : 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_x`\n\t\t\t\t}),\n\t\t\t\ty: programmaticSignal$1((ctx) => this._height > 0 ? getPos(ctx.frame).sy / this._height : 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_y`\n\t\t\t\t}),\n\t\t\t\tz: programmaticSignal$1(() => 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_z`\n\t\t\t\t}),\n\t\t\t\tscreenX,\n\t\t\t\tscreenY\n\t\t\t};\n\t\t};\n\t\tconst buildTrackPoseSignals = (resolveTrack, label, fixedId) => {\n\t\t\tconst resolvePerson = (frame) => {\n\t\t\t\tconst poseRes = self.getPoseResult(frame);\n\t\t\t\tif (poseRes.people.length === 0) return void 0;\n\t\t\t\tconst trk = resolveTrack(frame);\n\t\t\t\tconst targetId = fixedId ?? trk.trackId;\n\t\t\t\tconst byId = poseRes.people.find((p) => p.trackId === targetId);\n\t\t\t\tif (byId) return byId;\n\t\t\t\tif (!trk.active && poseRes.people.length > 1) return void 0;\n\t\t\t\tif (poseRes.people.length === 1) return poseRes.people[0];\n\t\t\t\tlet bestPerson;\n\t\t\t\tlet bestIoU = .1;\n\t\t\t\tfor (const p of poseRes.people) {\n\t\t\t\t\tconst pBox = getPersonBoundingBox(p);\n\t\t\t\t\tconst iou = computeIoU$1(pBox, pBox.width <= 1.05 && pBox.height <= 1.05 && trk.boundingBox.normalizedWidth > 0 ? {\n\t\t\t\t\t\toriginX: trk.boundingBox.normalizedX,\n\t\t\t\t\t\toriginY: trk.boundingBox.normalizedY,\n\t\t\t\t\t\twidth: trk.boundingBox.normalizedWidth,\n\t\t\t\t\t\theight: trk.boundingBox.normalizedHeight\n\t\t\t\t\t} : trk.boundingBox);\n\t\t\t\t\tif (iou > bestIoU) {\n\t\t\t\t\t\tbestIoU = iou;\n\t\t\t\t\t\tbestPerson = p;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn bestPerson;\n\t\t\t};\n\t\t\tconst hasPose = programmaticSignal$1((ctx) => resolvePerson(ctx.frame) ? 1 : 0, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: `${label}_hasPose`\n\t\t\t});\n\t\t\tconst createCoord = (index, kptName) => {\n\t\t\t\tconst getLm = (frame) => {\n\t\t\t\t\tconst kp = resolvePerson(frame)?.keypoints[index];\n\t\t\t\t\tif (kp && kp.visibility > .05) return {\n\t\t\t\t\t\tx: kp.x,\n\t\t\t\t\t\ty: kp.y,\n\t\t\t\t\t\tz: 0\n\t\t\t\t\t};\n\t\t\t\t\tconst trk = resolveTrack(frame);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: trk.normalizedCenterX,\n\t\t\t\t\t\ty: trk.normalizedCenterY,\n\t\t\t\t\t\tz: 0\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tx: programmaticSignal$1((ctx) => getLm(ctx.frame).x, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_${kptName}_x`\n\t\t\t\t\t}),\n\t\t\t\t\ty: programmaticSignal$1((ctx) => getLm(ctx.frame).y, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_${kptName}_y`\n\t\t\t\t\t}),\n\t\t\t\t\tz: programmaticSignal$1((ctx) => getLm(ctx.frame).z ?? 0, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_${kptName}_z`\n\t\t\t\t\t}),\n\t\t\t\t\tscreenX: programmaticSignal$1((ctx) => self._transformer.projectNormalizedLandmark(getLm(ctx.frame)).x, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_${kptName}_screenX`\n\t\t\t\t\t}),\n\t\t\t\t\tscreenY: programmaticSignal$1((ctx) => self._transformer.projectNormalizedLandmark(getLm(ctx.frame)).y, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_${kptName}_screenY`\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst coordsCache = /* @__PURE__ */ new Map();\n\t\t\tconst getOrCreateCoord = (idx) => {\n\t\t\t\tlet c = coordsCache.get(idx);\n\t\t\t\tif (!c) {\n\t\t\t\t\tc = createCoord(idx, POSE_KEYPOINT_NAMES[idx] ?? `kpt_${idx}`);\n\t\t\t\t\tcoordsCache.set(idx, c);\n\t\t\t\t}\n\t\t\t\treturn c;\n\t\t\t};\n\t\t\tconst namedPose = {\n\t\t\t\thasPose,\n\t\t\t\twristSpeed: programmaticSignal$1((ctx) => {\n\t\t\t\t\tconst f = ctx.frame;\n\t\t\t\t\tconst curr = resolvePerson(f);\n\t\t\t\t\tif (!curr) return 0;\n\t\t\t\t\tconst prev = resolvePerson(Math.max(0, f - 1));\n\t\t\t\t\tconst currKp = curr.keypoints;\n\t\t\t\t\tconst prevKp = prev?.keypoints;\n\t\t\t\t\tconst rwCurr = currKp[POSE_LANDMARKS_YOLO.RIGHT_WRIST];\n\t\t\t\t\tconst rwPrev = prevKp?.[POSE_LANDMARKS_YOLO.RIGHT_WRIST];\n\t\t\t\t\tlet rwSpeed = 0;\n\t\t\t\t\tif (rwCurr && rwPrev && rwCurr.visibility > .1 && rwPrev.visibility > .1) {\n\t\t\t\t\t\tconst dx = (rwCurr.x - rwPrev.x) * this._width;\n\t\t\t\t\t\tconst dy = (rwCurr.y - rwPrev.y) * this._height;\n\t\t\t\t\t\trwSpeed = Math.sqrt(dx * dx + dy * dy) * this._fps;\n\t\t\t\t\t}\n\t\t\t\t\tconst lwCurr = currKp[POSE_LANDMARKS_YOLO.LEFT_WRIST];\n\t\t\t\t\tconst lwPrev = prevKp?.[POSE_LANDMARKS_YOLO.LEFT_WRIST];\n\t\t\t\t\tlet lwSpeed = 0;\n\t\t\t\t\tif (lwCurr && lwPrev && lwCurr.visibility > .1 && lwPrev.visibility > .1) {\n\t\t\t\t\t\tconst dx = (lwCurr.x - lwPrev.x) * this._width;\n\t\t\t\t\t\tconst dy = (lwCurr.y - lwPrev.y) * this._height;\n\t\t\t\t\t\tlwSpeed = Math.sqrt(dx * dx + dy * dy) * this._fps;\n\t\t\t\t\t}\n\t\t\t\t\treturn Math.max(rwSpeed, lwSpeed);\n\t\t\t\t}, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_wristSpeed`\n\t\t\t\t}),\n\t\t\t\thandRaised: programmaticSignal$1((ctx) => {\n\t\t\t\t\tconst p = resolvePerson(ctx.frame);\n\t\t\t\t\tif (!p) return 0;\n\t\t\t\t\tconst k = p.keypoints;\n\t\t\t\t\tconst lw = k[POSE_LANDMARKS_YOLO.LEFT_WRIST];\n\t\t\t\t\tconst ls = k[POSE_LANDMARKS_YOLO.LEFT_SHOULDER];\n\t\t\t\t\tconst rw = k[POSE_LANDMARKS_YOLO.RIGHT_WRIST];\n\t\t\t\t\tconst rs = k[POSE_LANDMARKS_YOLO.RIGHT_SHOULDER];\n\t\t\t\t\tconst lRaised = lw && ls && lw.visibility > .1 && ls.visibility > .1 && lw.y < ls.y;\n\t\t\t\t\tconst rRaised = rw && rs && rw.visibility > .1 && rs.visibility > .1 && rw.y < rs.y;\n\t\t\t\t\treturn lRaised || rRaised ? 1 : 0;\n\t\t\t\t}, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_handRaised`\n\t\t\t\t}),\n\t\t\t\tbodyTiltAngle: programmaticSignal$1((ctx) => {\n\t\t\t\t\tconst p = resolvePerson(ctx.frame);\n\t\t\t\t\tif (!p) return 0;\n\t\t\t\t\tconst k = p.keypoints;\n\t\t\t\t\tconst ls = k[POSE_LANDMARKS_YOLO.LEFT_SHOULDER];\n\t\t\t\t\tconst rs = k[POSE_LANDMARKS_YOLO.RIGHT_SHOULDER];\n\t\t\t\t\tconst lh = k[POSE_LANDMARKS_YOLO.LEFT_HIP];\n\t\t\t\t\tconst rh = k[POSE_LANDMARKS_YOLO.RIGHT_HIP];\n\t\t\t\t\tif (!ls || !rs || !lh || !rh) return 0;\n\t\t\t\t\tconst sx = (ls.x + rs.x) / 2 * this._width;\n\t\t\t\t\tconst sy = (ls.y + rs.y) / 2 * this._height;\n\t\t\t\t\tconst hx = (lh.x + rh.x) / 2 * this._width;\n\t\t\t\t\tconst hy = (lh.y + rh.y) / 2 * this._height;\n\t\t\t\t\tconst dx = sx - hx;\n\t\t\t\t\tconst dy = sy - hy;\n\t\t\t\t\tif (dx === 0 && dy === 0) return 0;\n\t\t\t\t\treturn Math.atan2(dx, -dy);\n\t\t\t\t}, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_bodyTiltAngle`\n\t\t\t\t}),\n\t\t\t\tnose: getOrCreateCoord(POSE_LANDMARKS_YOLO.NOSE),\n\t\t\t\tleftEye: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_EYE),\n\t\t\t\trightEye: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_EYE),\n\t\t\t\tleftEar: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_EAR),\n\t\t\t\trightEar: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_EAR),\n\t\t\t\tshoulder: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_SHOULDER),\n\t\t\t\tleftShoulder: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_SHOULDER),\n\t\t\t\trightShoulder: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_SHOULDER),\n\t\t\t\tleftElbow: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_ELBOW),\n\t\t\t\trightElbow: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_ELBOW),\n\t\t\t\tleftWrist: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_WRIST),\n\t\t\t\trightWrist: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_WRIST),\n\t\t\t\tleftHip: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_HIP),\n\t\t\t\trightHip: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_HIP),\n\t\t\t\tleftKnee: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_KNEE),\n\t\t\t\trightKnee: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_KNEE),\n\t\t\t\tleftAnkle: getOrCreateCoord(POSE_LANDMARKS_YOLO.LEFT_ANKLE),\n\t\t\t\trightAnkle: getOrCreateCoord(POSE_LANDMARKS_YOLO.RIGHT_ANKLE),\n\t\t\t\tget: getOrCreateCoord\n\t\t\t};\n\t\t\treturn new Proxy(namedPose, { get(target, prop, receiver) {\n\t\t\t\tif (typeof prop === \"string\" && /^\\d+$/.test(prop)) return target.get(Number(prop));\n\t\t\t\tif (typeof prop === \"number\") return target.get(prop);\n\t\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t\t} });\n\t\t};\n\t\tconst buildTrackSignals = (resolve$1, label, fixedCategory, fixedId) => {\n\t\t\tconst getBox = (f) => resolve$1(f).boundingBox;\n\t\t\tconst pose = buildTrackPoseSignals(resolve$1, `${label}_pose`, fixedId);\n\t\t\tconst anchor = (name, sx, sy) => createAnchor((f) => ({\n\t\t\t\tsx: sx(getBox(f)),\n\t\t\t\tsy: sy(getBox(f))\n\t\t\t}), `${label}_${name}`);\n\t\t\tconst center = anchor(\"center\", (b) => b.originX + b.width / 2, (b) => b.originY + b.height / 2);\n\t\t\tconst speed = programmaticSignal$1((ctx) => resolve$1(ctx.frame).speed, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: `${label}_speed`\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tget trackId() {\n\t\t\t\t\treturn fixedId ?? resolve$1(0).trackId;\n\t\t\t\t},\n\t\t\t\tget category() {\n\t\t\t\t\treturn fixedCategory ?? resolve$1(0).category;\n\t\t\t\t},\n\t\t\t\tbounds: {\n\t\t\t\t\tx: programmaticSignal$1((ctx) => getBox(ctx.frame).normalizedX, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_normX`\n\t\t\t\t\t}),\n\t\t\t\t\ty: programmaticSignal$1((ctx) => getBox(ctx.frame).normalizedY, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_normY`\n\t\t\t\t\t}),\n\t\t\t\t\twidth: programmaticSignal$1((ctx) => getBox(ctx.frame).normalizedWidth, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_normWidth`\n\t\t\t\t\t}),\n\t\t\t\t\theight: programmaticSignal$1((ctx) => getBox(ctx.frame).normalizedHeight, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_normHeight`\n\t\t\t\t\t}),\n\t\t\t\t\tscreenX: programmaticSignal$1((ctx) => getBox(ctx.frame).originX, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_screenX`\n\t\t\t\t\t}),\n\t\t\t\t\tscreenY: programmaticSignal$1((ctx) => getBox(ctx.frame).originY, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_screenY`\n\t\t\t\t\t}),\n\t\t\t\t\tscreenWidth: programmaticSignal$1((ctx) => getBox(ctx.frame).width, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_screenWidth`\n\t\t\t\t\t}),\n\t\t\t\t\tscreenHeight: programmaticSignal$1((ctx) => getBox(ctx.frame).height, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_screenHeight`\n\t\t\t\t\t}),\n\t\t\t\t\taspectRatio: programmaticSignal$1((ctx) => {\n\t\t\t\t\t\tconst b = getBox(ctx.frame);\n\t\t\t\t\t\treturn b.height > 0 ? b.width / b.height : 1;\n\t\t\t\t\t}, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_aspectRatio`\n\t\t\t\t\t}),\n\t\t\t\t\tarea: programmaticSignal$1((ctx) => {\n\t\t\t\t\t\tconst b = getBox(ctx.frame);\n\t\t\t\t\t\treturn b.width * b.height;\n\t\t\t\t\t}, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_area`\n\t\t\t\t\t}),\n\t\t\t\t\tangle: programmaticSignal$1((ctx) => {\n\t\t\t\t\t\tconst b = getBox(ctx.frame);\n\t\t\t\t\t\tconst tcx = b.originX + b.width / 2;\n\t\t\t\t\t\tconst tcy = b.originY + b.height / 2;\n\t\t\t\t\t\tlet bestAngle = 0;\n\t\t\t\t\t\tlet bestDist = Infinity;\n\t\t\t\t\t\tfor (const d of self.getObbResult(ctx.frame).detections) {\n\t\t\t\t\t\t\tconst cx = d.boundingBox.originX + d.boundingBox.width / 2;\n\t\t\t\t\t\t\tconst cy = d.boundingBox.originY + d.boundingBox.height / 2;\n\t\t\t\t\t\t\tconst dist = (cx - tcx) * (cx - tcx) + (cy - tcy) * (cy - tcy);\n\t\t\t\t\t\t\tif (dist < bestDist) {\n\t\t\t\t\t\t\t\tbestDist = dist;\n\t\t\t\t\t\t\t\tbestAngle = d.boundingBox.angle;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn bestAngle;\n\t\t\t\t\t}, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_angle`\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tanchors: {\n\t\t\t\t\ttopLeft: anchor(\"topLeft\", (b) => b.originX, (b) => b.originY),\n\t\t\t\t\ttopCenter: anchor(\"topCenter\", (b) => b.originX + b.width / 2, (b) => b.originY),\n\t\t\t\t\ttopRight: anchor(\"topRight\", (b) => b.originX + b.width, (b) => b.originY),\n\t\t\t\t\tcenterLeft: anchor(\"centerLeft\", (b) => b.originX, (b) => b.originY + b.height / 2),\n\t\t\t\t\tcenter,\n\t\t\t\t\tcenterRight: anchor(\"centerRight\", (b) => b.originX + b.width, (b) => b.originY + b.height / 2),\n\t\t\t\t\tbottomLeft: anchor(\"bottomLeft\", (b) => b.originX, (b) => b.originY + b.height),\n\t\t\t\t\tbottomCenter: anchor(\"bottomCenter\", (b) => b.originX + b.width / 2, (b) => b.originY + b.height),\n\t\t\t\t\tbottomRight: anchor(\"bottomRight\", (b) => b.originX + b.width, (b) => b.originY + b.height)\n\t\t\t\t},\n\t\t\t\tkinematics: {\n\t\t\t\t\tvx: programmaticSignal$1((ctx) => resolve$1(ctx.frame).velocity.vx, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_vx`\n\t\t\t\t\t}),\n\t\t\t\t\tvy: programmaticSignal$1((ctx) => resolve$1(ctx.frame).velocity.vy, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_vy`\n\t\t\t\t\t}),\n\t\t\t\t\tspeed,\n\t\t\t\t\tacceleration: speed.velocity(1),\n\t\t\t\t\theadingRad: programmaticSignal$1((ctx) => {\n\t\t\t\t\t\tconst v = resolve$1(ctx.frame).velocity;\n\t\t\t\t\t\treturn Math.atan2(v.vy, v.vx);\n\t\t\t\t\t}, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_headingRad`\n\t\t\t\t\t}),\n\t\t\t\t\theadingDeg: programmaticSignal$1((ctx) => {\n\t\t\t\t\t\tconst v = resolve$1(ctx.frame).velocity;\n\t\t\t\t\t\treturn Math.atan2(v.vy, v.vx) * 180 / Math.PI;\n\t\t\t\t\t}, {\n\t\t\t\t\t\tfps: this._fps,\n\t\t\t\t\t\tlabel: `${label}_headingDeg`\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tconfidence: programmaticSignal$1((ctx) => resolve$1(ctx.frame).score, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_score`\n\t\t\t\t}),\n\t\t\t\tactive: programmaticSignal$1((ctx) => resolve$1(ctx.frame).active ? 1 : 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_active`\n\t\t\t\t}),\n\t\t\t\tisCoasting: programmaticSignal$1((ctx) => resolve$1(ctx.frame).isCoasting ? 1 : 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_isCoasting`\n\t\t\t\t}),\n\t\t\t\tage: programmaticSignal$1((ctx) => resolve$1(ctx.frame).age, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_age`\n\t\t\t\t}),\n\t\t\t\tpose,\n\t\t\t\tcenter,\n\t\t\t\ttopCenter: this[`__pending`],\n\t\t\t\tbottomCenter: center,\n\t\t\t\ttopLeft: center,\n\t\t\t\tbottomLeft: center\n\t\t\t};\n\t\t};\n\t\tconst buildTrack = (resolve$1, label, fixedCategory, fixedId) => {\n\t\t\tconst sig = buildTrackSignals(resolve$1, label, fixedCategory, fixedId);\n\t\t\tconst anchors = sig.anchors;\n\t\t\tObject.assign(sig, {\n\t\t\t\ttopCenter: anchors.topCenter,\n\t\t\t\tbottomCenter: anchors.bottomCenter,\n\t\t\t\ttopLeft: anchors.topLeft,\n\t\t\t\tbottomLeft: anchors.bottomLeft\n\t\t\t});\n\t\t\treturn sig;\n\t\t};\n\t\tconst getTrackById = (trackId) => {\n\t\t\tlet sig = this._trackCache.get(trackId);\n\t\t\tif (!sig) {\n\t\t\t\tsig = buildTrack((frame) => this.getObjectResult(frame).objects.find((o) => o.trackId === trackId) ?? neutralTrack(trackId), `track_${trackId}`, void 0, trackId);\n\t\t\t\tthis._trackCache.set(trackId, sig);\n\t\t\t}\n\t\t\treturn sig;\n\t\t};\n\t\tconst getTrackByCategory = (category, rank = 0) => {\n\t\t\tconst cacheKey = `${category.toLowerCase()}_${rank}`;\n\t\t\tlet sig = this._categoryCache.get(cacheKey);\n\t\t\tif (!sig) {\n\t\t\t\tsig = buildTrack((frame) => {\n\t\t\t\t\treturn this.getObjectResult(frame).objects.filter((o) => o.category.toLowerCase() === category.toLowerCase() && o.active)[rank] ?? neutralTrack(0, category);\n\t\t\t\t}, `cat_${category}_${rank}`, category);\n\t\t\t\tthis._categoryCache.set(cacheKey, sig);\n\t\t\t}\n\t\t\treturn sig;\n\t\t};\n\t\tconst primaryTrack = buildTrack((frame) => {\n\t\t\tconst res = this.getObjectResult(frame);\n\t\t\tif (res.objects.length === 0) return neutralTrack(0);\n\t\t\tlet best = res.objects[0];\n\t\t\tfor (let i = 1; i < res.objects.length; i++) if (res.objects[i].score > best.score) best = res.objects[i];\n\t\t\treturn best;\n\t\t}, \"primary_object\");\n\t\tconst activeCategories = (frame) => {\n\t\t\tconst set = /* @__PURE__ */ new Set();\n\t\t\tfor (const o of this.getObjectResult(frame).objects) if (o.active) set.add(o.category);\n\t\t\treturn Array.from(set).sort();\n\t\t};\n\t\tconst buildClassSignals = (category) => {\n\t\t\tconst lower = category.toLowerCase();\n\t\t\tlet sig = this._classCache.get(lower);\n\t\t\tif (sig) return sig;\n\t\t\tsig = {\n\t\t\t\tcount: programmaticSignal$1((ctx) => this.getObjectResult(ctx.frame).objects.filter((o) => o.active && o.category.toLowerCase() === lower).length, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `class_${lower}_count`\n\t\t\t\t}),\n\t\t\t\tmaxConfidence: programmaticSignal$1((ctx) => {\n\t\t\t\t\tlet max = 0;\n\t\t\t\t\tfor (const o of this.getObjectResult(ctx.frame).objects) if (o.active && o.category.toLowerCase() === lower && o.score > max) max = o.score;\n\t\t\t\t\treturn max;\n\t\t\t\t}, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `class_${lower}_maxConf`\n\t\t\t\t}),\n\t\t\t\tpresent: programmaticSignal$1((ctx) => this.getObjectResult(ctx.frame).objects.some((o) => o.active && o.category.toLowerCase() === lower) ? 1 : 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `class_${lower}_present`\n\t\t\t\t}),\n\t\t\t\tprimary: getTrackByCategory(category)\n\t\t\t};\n\t\t\tthis._classCache.set(lower, sig);\n\t\t\treturn sig;\n\t\t};\n\t\tthis.classes = {\n\t\t\tget: buildClassSignals,\n\t\t\tget names() {\n\t\t\t\treturn activeCategories(frameSignal.value);\n\t\t\t},\n\t\t\thistogram: {\n\t\t\t\tget: (ctx) => self.getClassHistogramTensor(ctx?.frame ?? frameSignal.value),\n\t\t\t\tget value() {\n\t\t\t\t\treturn self.getClassHistogramTensor(frameSignal.value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthis.objects = {\n\t\t\tget: getTrackById,\n\t\t\tbyCategory: getTrackByCategory,\n\t\t\tprimary: primaryTrack,\n\t\t\tcount: programmaticSignal$1((ctx) => this.getObjectResult(ctx.frame).objects.filter((o) => o.active).length, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: \"tracked_objects_count\"\n\t\t\t}),\n\t\t\thasCategory: (category) => buildClassSignals(category).present,\n\t\t\tgetActiveTracks: (frame) => this.getObjectResult(frame).objects.filter((o) => o.active),\n\t\t\tget detectedCategories() {\n\t\t\t\treturn activeCategories(frameSignal.value);\n\t\t\t}\n\t\t};\n\t\tconst maskForTrack = (frame, trackId) => this.getMaskResult(frame).find((m) => m.trackId === trackId);\n\t\tconst largestMask = (frame) => {\n\t\t\tconst masks = this.getMaskResult(frame);\n\t\t\tif (masks.length === 0) return void 0;\n\t\t\tlet best = masks[0];\n\t\t\tfor (const m of masks) {\n\t\t\t\tconst bestIsPerson = best.category.toLowerCase() === \"person\";\n\t\t\t\tconst mIsPerson = m.category.toLowerCase() === \"person\";\n\t\t\t\tif (mIsPerson && !bestIsPerson) {\n\t\t\t\t\tbest = m;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (mIsPerson === bestIsPerson && m.area > best.area) best = m;\n\t\t\t}\n\t\t\treturn best;\n\t\t};\n\t\tconst buildMaskTrackSignals = (resolve$1, label) => {\n\t\t\tconst boxFor = (frame) => {\n\t\t\t\tconst mask = resolve$1(frame);\n\t\t\t\tif (!mask || mask.trackId === void 0) return void 0;\n\t\t\t\treturn this.getObjectResult(frame).objects.find((o) => o.trackId === mask.trackId);\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tget trackId() {\n\t\t\t\t\treturn resolve$1(frameSignal.value)?.trackId ?? 0;\n\t\t\t\t},\n\t\t\t\tget category() {\n\t\t\t\t\treturn resolve$1(frameSignal.value)?.category ?? \"unknown\";\n\t\t\t\t},\n\t\t\t\tarea: programmaticSignal$1((ctx) => resolve$1(ctx.frame)?.area ?? 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_area`\n\t\t\t\t}),\n\t\t\t\tcoverage: programmaticSignal$1((ctx) => resolve$1(ctx.frame)?.coverage ?? 0, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_coverage`\n\t\t\t\t}),\n\t\t\t\tsolidity: programmaticSignal$1((ctx) => {\n\t\t\t\t\tconst mask = resolve$1(ctx.frame);\n\t\t\t\t\tconst box = boxFor(ctx.frame);\n\t\t\t\t\tif (!mask || !box) return 0;\n\t\t\t\t\tconst bboxArea = box.boundingBox.width * box.boundingBox.height;\n\t\t\t\t\treturn bboxArea > 0 ? mask.area / bboxArea : 0;\n\t\t\t\t}, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_solidity`\n\t\t\t\t}),\n\t\t\t\tbboxFill: programmaticSignal$1((ctx) => {\n\t\t\t\t\tconst mask = resolve$1(ctx.frame);\n\t\t\t\t\tif (!mask || mask.width * mask.height === 0) return 0;\n\t\t\t\t\tconst box = boxFor(ctx.frame);\n\t\t\t\t\tif (!box) return 0;\n\t\t\t\t\treturn box.boundingBox.width * box.boundingBox.height / (mask.width * mask.height);\n\t\t\t\t}, {\n\t\t\t\t\tfps: this._fps,\n\t\t\t\t\tlabel: `${label}_bboxFill`\n\t\t\t\t})\n\t\t\t};\n\t\t};\n\t\tthis.masks = {\n\t\t\tget: (trackId) => {\n\t\t\t\tlet sig = this._maskTrackCache.get(trackId);\n\t\t\t\tif (!sig) {\n\t\t\t\t\tsig = buildMaskTrackSignals((frame) => maskForTrack(frame, trackId), `mask_${trackId}`);\n\t\t\t\t\tthis._maskTrackCache.set(trackId, sig);\n\t\t\t\t}\n\t\t\t\treturn sig;\n\t\t\t},\n\t\t\tsubject: buildMaskTrackSignals(largestMask, \"subject\"),\n\t\t\tcount: programmaticSignal$1((ctx) => new Set(this.getMaskResult(ctx.frame).map((m) => m.trackId ?? -1)).size, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: \"mask_count\"\n\t\t\t})\n\t\t};\n\t\tthis.segmentation = {\n\t\t\thumanSilhouette: this.masks.subject,\n\t\t\tsubject: this.masks.subject,\n\t\t\tinstanceMasks: this.masks,\n\t\t\tget stencilTexture() {\n\t\t\t\treturn self._stencilTexture;\n\t\t\t}\n\t\t};\n\t\tthis.classification = {\n\t\t\ttop1: programmaticSignal$1((ctx) => self.getClassifyResult(ctx.frame).top1, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: \"classify_top1\"\n\t\t\t}),\n\t\t\ttop1Confidence: programmaticSignal$1((ctx) => self.getClassifyResult(ctx.frame).top1Score, {\n\t\t\t\tfps: this._fps,\n\t\t\t\tlabel: \"classify_top1_conf\"\n\t\t\t}),\n\t\t\tget top5() {\n\t\t\t\treturn self.getClassifyResult(frameSignal.value).top5;\n\t\t\t},\n\t\t\ttop5At: (frame) => self.getClassifyResult(frame).top5\n\t\t};\n\t\tthis.poseLandmarksTensor = {\n\t\t\tget: (ctx) => self.getPoseLandmarksTensor(ctx?.frame ?? frameSignal.value),\n\t\t\tget value() {\n\t\t\t\treturn self.getPoseLandmarksTensor(frameSignal.value);\n\t\t\t}\n\t\t};\n\t\tthis.objectsTensor = {\n\t\t\tget: (ctx) => self.getObjectsTensor(ctx?.frame ?? frameSignal.value),\n\t\t\tget value() {\n\t\t\t\treturn self.getObjectsTensor(frameSignal.value);\n\t\t\t}\n\t\t};\n\t\tthis.masksTensor = {\n\t\t\tget: (ctx) => self.getMasksTensor(ctx?.frame ?? frameSignal.value),\n\t\t\tget value() {\n\t\t\t\treturn self.getMasksTensor(frameSignal.value);\n\t\t\t}\n\t\t};\n\t\tthis.histogramTensor = {\n\t\t\tget: (ctx) => self.getClassHistogramTensor(ctx?.frame ?? frameSignal.value),\n\t\t\tget value() {\n\t\t\t\treturn self.getClassHistogramTensor(frameSignal.value);\n\t\t\t}\n\t\t};\n\t}\n\tsetStencilTexture(texture) {\n\t\tthis._stencilTexture = texture;\n\t}\n\tget stencilTexture() {\n\t\treturn this._stencilTexture;\n\t}\n\t/**\n\t* Reads the most recent result at or before `frame`. Vision results are written one\n\t* frame behind the plate (the node renderer reads back the previous frame to infer),\n\t* and pinned-signal layout runs before the current frame's inference, so a strict\n\t* per-frame lookup would always miss. Walking back a few frames keeps signals live at\n\t* a stable one-frame lag instead of snapping to neutral defaults.\n\t*/\n\tlatestAtOrBefore(cache, frame, maxBack = 8) {\n\t\tconst start = this.clamp(frame);\n\t\tconst floor = Math.max(0, start - maxBack);\n\t\tfor (let f = start; f >= floor; f--) {\n\t\t\tconst value = cache.get(f);\n\t\t\tif (value !== void 0) return value;\n\t\t}\n\t}\n\tinvalidateSignals() {\n\t\tfor (const sig of this._registeredSignals) sig.invalidate();\n\t}\n\tsetPoseResult(frame, result) {\n\t\tthis._poseCache.set(this.clamp(frame), result);\n\t\tthis.invalidateSignals();\n\t}\n\tgetPoseResult(frame) {\n\t\treturn this.latestAtOrBefore(this._poseCache, frame) ?? createNeutralPoseResult();\n\t}\n\tsetObjectResult(frame, result) {\n\t\tconst normalized = \"objects\" in result ? result : {\n\t\t\tobjects: result,\n\t\t\trawDetections: []\n\t\t};\n\t\tthis._objectCache.set(this.clamp(frame), {\n\t\t\tobjects: normalized.objects,\n\t\t\trawDetections: normalized.rawDetections ?? []\n\t\t});\n\t\tthis.invalidateSignals();\n\t}\n\tgetObjectResult(frame) {\n\t\treturn this.latestAtOrBefore(this._objectCache, frame) ?? createNeutralObjectResult();\n\t}\n\tsetMaskResult(frame, masks) {\n\t\tthis._maskCache.set(this.clamp(frame), masks);\n\t\tthis.invalidateSignals();\n\t}\n\tgetMaskResult(frame) {\n\t\treturn this.latestAtOrBefore(this._maskCache, frame) ?? [];\n\t}\n\tsetClassifyResult(frame, result) {\n\t\tthis._classifyCache.set(this.clamp(frame), result);\n\t\tthis.invalidateSignals();\n\t}\n\tgetClassifyResult(frame) {\n\t\treturn this.latestAtOrBefore(this._classifyCache, frame) ?? {\n\t\t\ttop1: 0,\n\t\t\ttop1Score: 0,\n\t\t\ttop5: []\n\t\t};\n\t}\n\tsetObbResult(frame, result) {\n\t\tthis._obbCache.set(this.clamp(frame), result);\n\t\tthis.invalidateSignals();\n\t}\n\tgetObbResult(frame) {\n\t\treturn this.latestAtOrBefore(this._obbCache, frame) ?? { detections: [] };\n\t}\n\t/**\n\t* Serializable snapshot of one frame's object / class / mask signals (specs/yolov4plan.ts\n\t* §Phase A). Synchronous — reads only the per-frame caches, never triggers inference.\n\t*/\n\tsummary(frame = frameSignal.value) {\n\t\tconst f = this.clamp(frame);\n\t\tconst res = this.getObjectResult(f);\n\t\tconst objects = res.objects.map((o) => ({\n\t\t\ttrackId: o.trackId,\n\t\t\tcategory: o.category,\n\t\t\tscore: o.score,\n\t\t\tcenter: [o.centerX, o.centerY],\n\t\t\tspeed: o.speed,\n\t\t\tactive: o.active\n\t\t}));\n\t\tconst classSet = /* @__PURE__ */ new Set();\n\t\tfor (const o of res.objects) if (o.active) classSet.add(o.category);\n\t\tconst masks = {};\n\t\tfor (const m of this.getMaskResult(f)) masks[m.category] = (masks[m.category] ?? 0) + 1;\n\t\treturn {\n\t\t\tframe: f,\n\t\t\tobjects,\n\t\t\tclasses: Array.from(classSet).sort(),\n\t\t\tmasks\n\t\t};\n\t}\n\t/** Primary person's 17 keypoints as a [17, 3] float32 tensor. */\n\tgetPoseLandmarksTensor(frame) {\n\t\tconst kpts = this.getPoseResult(frame).people[0]?.keypoints ?? [];\n\t\tconst data = new Float32Array(51);\n\t\tfor (let i = 0; i < 17; i++) {\n\t\t\tdata[i * 3] = kpts[i]?.x ?? .5;\n\t\t\tdata[i * 3 + 1] = kpts[i]?.y ?? .5;\n\t\t\tdata[i * 3 + 2] = kpts[i]?.visibility ?? 0;\n\t\t}\n\t\treturn {\n\t\t\tdata,\n\t\t\tshape: [17, 3],\n\t\t\tdtype: \"float32\"\n\t\t};\n\t}\n\t/** Up to 16 active tracks as [16, 8]: [active, categoryHash, x, y, w, h, vx, vy]. */\n\tgetObjectsTensor(frame, maxObjects = 16) {\n\t\tconst res = this.getObjectResult(frame);\n\t\tconst data = new Float32Array(maxObjects * 8);\n\t\tconst count = Math.min(maxObjects, res.objects.length);\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst obj = res.objects[i];\n\t\t\tconst off = i * 8;\n\t\t\tlet catHash = 0;\n\t\t\tfor (let c = 0; c < obj.category.length; c++) catHash = catHash * 31 + obj.category.charCodeAt(c) & 65535;\n\t\t\tdata[off] = obj.active ? 1 : 0;\n\t\t\tdata[off + 1] = catHash;\n\t\t\tdata[off + 2] = obj.centerX;\n\t\t\tdata[off + 3] = obj.centerY;\n\t\t\tdata[off + 4] = obj.boundingBox.width;\n\t\t\tdata[off + 5] = obj.boundingBox.height;\n\t\t\tdata[off + 6] = obj.velocity.vx;\n\t\t\tdata[off + 7] = obj.velocity.vy;\n\t\t}\n\t\treturn {\n\t\t\tdata,\n\t\t\tshape: [maxObjects, 8],\n\t\t\tdtype: \"float32\"\n\t\t};\n\t}\n\t/** Per-mask coverage + solidity as [16, 2]. */\n\tgetMasksTensor(frame, maxMasks = 16) {\n\t\tconst masks = this.getMaskResult(frame);\n\t\tconst data = new Float32Array(maxMasks * 2);\n\t\tconst count = Math.min(maxMasks, masks.length);\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst m = masks[i];\n\t\t\tdata[i * 2] = m.coverage;\n\t\t\tconst box = this.getObjectResult(frame).objects.find((o) => o.trackId === m.trackId);\n\t\t\tconst bboxArea = box ? box.boundingBox.width * box.boundingBox.height : 0;\n\t\t\tdata[i * 2 + 1] = bboxArea > 0 ? m.area / bboxArea : 0;\n\t\t}\n\t\treturn {\n\t\t\tdata,\n\t\t\tshape: [maxMasks, 2],\n\t\t\tdtype: \"float32\"\n\t\t};\n\t}\n\t/** Per-class detection histogram for the frame as [nc] float32 (COCO 80 by default). */\n\tgetClassHistogramTensor(frame, nc = 80) {\n\t\tconst data = new Float32Array(nc);\n\t\tfor (const o of this.getObjectResult(frame).objects) if (o.active) {\n\t\t\tconst idx = YOLO_CLASS_INDEX_BY_NAME.get(o.category.toLowerCase());\n\t\t\tif (idx !== void 0) data[idx] += 1;\n\t\t}\n\t\treturn {\n\t\t\tdata,\n\t\t\tshape: [nc],\n\t\t\tdtype: \"float32\"\n\t\t};\n\t}\n\tclamp(frame) {\n\t\treturn Math.max(0, Math.min(this._totalFrames - 1, Math.round(frame)));\n\t}\n};\nfunction createYoloVisionBundle(options) {\n\treturn new YoloVisionBundle(options);\n}\nconst POSE_KEYPOINT_NAMES = [\n\t\"nose\",\n\t\"leftEye\",\n\t\"rightEye\",\n\t\"leftEar\",\n\t\"rightEar\",\n\t\"leftShoulder\",\n\t\"rightShoulder\",\n\t\"leftElbow\",\n\t\"rightElbow\",\n\t\"leftWrist\",\n\t\"rightWrist\",\n\t\"leftHip\",\n\t\"rightHip\",\n\t\"leftKnee\",\n\t\"rightKnee\",\n\t\"leftAnkle\",\n\t\"rightAnkle\"\n];\nconst YOLO_CLASS_INDEX_BY_NAME = new Map([\n\t\"person\",\n\t\"bicycle\",\n\t\"car\",\n\t\"motorcycle\",\n\t\"airplane\",\n\t\"bus\",\n\t\"train\",\n\t\"truck\",\n\t\"boat\",\n\t\"traffic light\",\n\t\"fire hydrant\",\n\t\"stop sign\",\n\t\"parking meter\",\n\t\"bench\",\n\t\"bird\",\n\t\"cat\",\n\t\"dog\",\n\t\"horse\",\n\t\"sheep\",\n\t\"cow\",\n\t\"elephant\",\n\t\"bear\",\n\t\"zebra\",\n\t\"giraffe\",\n\t\"backpack\",\n\t\"umbrella\",\n\t\"handbag\",\n\t\"tie\",\n\t\"suitcase\",\n\t\"frisbee\",\n\t\"skis\",\n\t\"snowboard\",\n\t\"sports ball\",\n\t\"kite\",\n\t\"baseball bat\",\n\t\"baseball glove\",\n\t\"skateboard\",\n\t\"surfboard\",\n\t\"tennis racket\",\n\t\"bottle\",\n\t\"wine glass\",\n\t\"cup\",\n\t\"fork\",\n\t\"knife\",\n\t\"spoon\",\n\t\"bowl\",\n\t\"banana\",\n\t\"apple\",\n\t\"sandwich\",\n\t\"orange\",\n\t\"broccoli\",\n\t\"carrot\",\n\t\"hot dog\",\n\t\"pizza\",\n\t\"donut\",\n\t\"cake\",\n\t\"chair\",\n\t\"couch\",\n\t\"potted plant\",\n\t\"bed\",\n\t\"dining table\",\n\t\"toilet\",\n\t\"tv\",\n\t\"laptop\",\n\t\"mouse\",\n\t\"remote\",\n\t\"keyboard\",\n\t\"cell phone\",\n\t\"microwave\",\n\t\"oven\",\n\t\"toaster\",\n\t\"sink\",\n\t\"refrigerator\",\n\t\"book\",\n\t\"clock\",\n\t\"vase\",\n\t\"scissors\",\n\t\"teddy bear\",\n\t\"hair drier\",\n\t\"toothbrush\"\n].map((name, index) => [name, index]));\n\n//#endregion\n//#region src/spatial/spatial-pin.ts\nfunction pinNodeToLandmark(node, target, options = {}) {\n\tconst offX = options.offsetX ?? 0;\n\tconst offY = options.offsetY ?? 0;\n\tconst offZ = options.offsetZ ?? 0;\n\tif (!target || typeof target !== \"object\") return node;\n\tif (\"screenX\" in target && target.screenX && typeof target.screenX === \"object\") {\n\t\tconst signals = target;\n\t\tnode.x = offX !== 0 ? signals.screenX.add(offX) : signals.screenX;\n\t\tnode.y = offY !== 0 ? signals.screenY.add(offY) : signals.screenY;\n\t\tnode.z = offZ !== 0 ? signals.z.add(offZ) : signals.z;\n\t} else if (\"x\" in target && typeof target.x === \"object\" && target.x !== null) {\n\t\tconst signals = target;\n\t\tnode.x = offX !== 0 ? signals.x.add(offX) : signals.x;\n\t\tnode.y = offY !== 0 ? signals.y.add(offY) : signals.y;\n\t\tnode.z = offZ !== 0 ? signals.z.add(offZ) : signals.z;\n\t} else {\n\t\tconst staticCoord = target;\n\t\tnode.x = (staticCoord.screenX ?? staticCoord.x) + offX;\n\t\tnode.y = (staticCoord.screenY ?? staticCoord.y) + offY;\n\t\tnode.z = (staticCoord.z ?? 0) + offZ;\n\t}\n\treturn node;\n}\nfunction pinNodeToObject(node, target, options = {}) {\n\tif (!target || typeof target !== \"object\") return node;\n\tif (\"anchors\" in target && target.anchors) {\n\t\tconst track = target;\n\t\tconst anchorName = options.anchor ?? (options.matchWidth || options.matchHeight ? \"topLeft\" : \"center\");\n\t\tconst rawAnchor = track.anchors[anchorName] ?? track.center;\n\t\tlet resolvedAnchor = rawAnchor;\n\t\tif (options.smoothFrames && options.smoothFrames > 1) resolvedAnchor = {\n\t\t\tx: rawAnchor.x.smooth(options.smoothFrames),\n\t\t\ty: rawAnchor.y.smooth(options.smoothFrames),\n\t\t\tz: rawAnchor.z,\n\t\t\tscreenX: rawAnchor.screenX.smooth(options.smoothFrames),\n\t\t\tscreenY: rawAnchor.screenY.smooth(options.smoothFrames)\n\t\t};\n\t\tif (options.matchWidth) node.width = options.smoothFrames && options.smoothFrames > 1 ? track.bounds.screenWidth.smooth(options.smoothFrames) : track.bounds.screenWidth;\n\t\tif (options.matchHeight) node.height = options.smoothFrames && options.smoothFrames > 1 ? track.bounds.screenHeight.smooth(options.smoothFrames) : track.bounds.screenHeight;\n\t\tif (options.hideWhenLost) node.opacity = track.active;\n\t\treturn pinNodeToLandmark(node, resolvedAnchor, options);\n\t}\n\treturn pinNodeToLandmark(node, target, options);\n}\n\n//#endregion\n//#region src/yolo-node.ts\n/**\n* YOLO vision node.\n*\n* LAZY BY CONSTRUCTION: creating a YoloNode performs ZERO I/O — no model\n* downloads, no sessions, no file probes. The first inference call (or an\n* explicit `await vision.ready()`) downloads the required models.\n*/\nvar YoloNode$1 = class YoloNode$1 {\n\tid;\n\tkind = \"yolo\";\n\tsource;\n\tconfig;\n\tvision;\n\t_runner;\n\t/** Runner construction options (modelsDir, provider, …) — injectable for tests/agents. */\n\t_runnerOptions;\n\tconstructor(source, config = {}, bundleOptions = {}, runnerOptions = {}) {\n\t\tthis.id = \"yolo-\" + Math.random().toString(36).slice(2, 9);\n\t\tthis.source = source;\n\t\tthis.config = config;\n\t\tthis._runnerOptions = runnerOptions;\n\t\tthis.vision = new YoloVisionBundle({\n\t\t\t...bundleOptions,\n\t\t\tconfig\n\t\t});\n\t}\n\t/** Lazily-created runner; downloads happen here on first access. */\n\trunner() {\n\t\tif (!this._runner) {\n\t\t\tconst { variant, imgsz, confidence, iouThreshold, classes, enableWorld, prompts, customModel, modelsDir, baseUrl, maskThreshold, featherRadius } = this.config;\n\t\t\tthis._runner = YoloVisionRunner.create({\n\t\t\t\t...this._runnerOptions,\n\t\t\t\t...variant !== void 0 ? { variant } : {},\n\t\t\t\t...imgsz !== void 0 ? { imgsz } : {},\n\t\t\t\t...confidence !== void 0 ? { confidence } : {},\n\t\t\t\t...iouThreshold !== void 0 ? { iouThreshold } : {},\n\t\t\t\t...classes !== void 0 ? { classes } : {},\n\t\t\t\t...enableWorld !== void 0 ? { enableWorld } : {},\n\t\t\t\t...prompts !== void 0 ? { prompts } : {},\n\t\t\t\t...customModel !== void 0 ? { customModel } : {},\n\t\t\t\t...modelsDir !== void 0 ? { modelsDir } : {},\n\t\t\t\t...baseUrl !== void 0 ? { baseUrl } : {},\n\t\t\t\t...maskThreshold !== void 0 ? { maskThreshold } : {},\n\t\t\t\t...featherRadius !== void 0 ? { featherRadius } : {}\n\t\t\t});\n\t\t}\n\t\treturn this._runner;\n\t}\n\t/** Explicit warm-up — downloads the models for the enabled tasks, ahead of first inference. */\n\tasync ready() {\n\t\tconst runner = this.runner();\n\t\tconst tasks = [];\n\t\tif (this.config.enableDetection === true) tasks.push(\"detect\");\n\t\tif (this.config.enableSegmentation === true) tasks.push(\"segment\");\n\t\tif (this.config.enablePose === true) tasks.push(\"pose\");\n\t\tif (this.config.enableObb === true) tasks.push(\"obb\");\n\t\tif (this.config.enableClassification === true) tasks.push(\"classify\");\n\t\tif (this.config.enableWorld === true) tasks.push(\"world\");\n\t\tconst defaultTask = this.config.enableWorld === true ? \"world\" : \"detect\";\n\t\tawait runner.preload(tasks.length > 0 ? tasks : [defaultTask]);\n\t\treturn runner;\n\t}\n\tclose() {\n\t\tthis._runner?.close();\n\t\tthis._runner = void 0;\n\t}\n\tstatic attach(source, config = {}, bundleOptions = {}) {\n\t\tconst nodeInstance = new YoloNode$1(source, config, bundleOptions);\n\t\tconst vision = nodeInstance.vision;\n\t\tObject.defineProperty(vision, \"node\", {\n\t\t\tvalue: {\n\t\t\t\tid: nodeInstance.id,\n\t\t\t\tkind: \"yolo\",\n\t\t\t\tsource: nodeInstance.source,\n\t\t\t\tconfig: nodeInstance.config\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\twritable: false\n\t\t});\n\t\tObject.defineProperty(vision, \"ready\", {\n\t\t\tvalue: () => nodeInstance.ready(),\n\t\t\tenumerable: false\n\t\t});\n\t\tObject.defineProperty(vision, \"runner\", {\n\t\t\tvalue: () => nodeInstance.runner(),\n\t\t\tenumerable: false\n\t\t});\n\t\tObject.defineProperty(vision, \"close\", {\n\t\t\tvalue: () => nodeInstance.close(),\n\t\t\tenumerable: false\n\t\t});\n\t\treturn vision;\n\t}\n\ttoNode() {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tkind: \"yolo\",\n\t\t\tsource: this.source,\n\t\t\tconfig: this.config\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/index.ts\nvar src_exports = /* @__PURE__ */ __exportAll({\n\tDEFAULT_MODEL_KEY_BY_TASK: () => DEFAULT_MODEL_KEY_BY_TASK,\n\tDEFAULT_YOLO_BASE_URL: () => DEFAULT_YOLO_BASE_URL,\n\tMEDIAPIPE_TO_YOLO_POSE_INDEX: () => MEDIAPIPE_TO_YOLO_POSE_INDEX,\n\tNodeSessionProvider: () => NodeSessionProvider,\n\tPOSE_LANDMARKS_YOLO: () => POSE_LANDMARKS_YOLO,\n\tPoseSkeletonRenderer: () => PoseSkeletonRenderer,\n\tSegmentationTexturePool: () => SegmentationTexturePool,\n\tSpatialLandmarkTransformer: () => SpatialLandmarkTransformer,\n\tTemporalObjectTracker: () => TemporalObjectTracker,\n\tYOLO_ASSETS_RELEASE: () => YOLO_ASSETS_RELEASE,\n\tYOLO_COCO17_BONES: () => YOLO_COCO17_BONES,\n\tYOLO_COCO_CLASSES: () => YOLO_COCO_CLASSES,\n\tYOLO_DOTA_CLASSES: () => YOLO_DOTA_CLASSES,\n\tYOLO_LETTERBOX_PAD_VALUE: () => YOLO_LETTERBOX_PAD_VALUE,\n\tYOLO_MODELS: () => YOLO_MODELS,\n\tYOLO_POSE_KEYPOINT_NAMES: () => YOLO_POSE_KEYPOINT_NAMES,\n\tYOLO_TASKS: () => YOLO_TASKS,\n\tYOLO_VARIANTS: () => YOLO_VARIANTS,\n\tYoloGpuPipeline: () => YoloGpuPipeline,\n\tYoloModelStore: () => YoloModelStore,\n\tYoloNode: () => YoloNode$1,\n\tYoloVisionBundle: () => YoloVisionBundle,\n\tYoloVisionRunner: () => YoloVisionRunner,\n\tanalyzeSequence: () => analyzeSequence,\n\tclassHistogram: () => classHistogram,\n\tcomputeIoU: () => computeIoU$1,\n\tcomputeLetterbox: () => computeLetterbox,\n\tcreateNeutralLandmarks: () => createNeutralLandmarks,\n\tcreateNeutralObjectResult: () => createNeutralObjectResult,\n\tcreateNeutralPoseResult: () => createNeutralPoseResult,\n\tcreateYoloVisionBundle: () => createYoloVisionBundle,\n\tdecodeClassifyOutput: () => decodeClassifyOutput,\n\tdecodeDetectOutput: () => decodeDetectOutput,\n\tdecodeObbOutput: () => decodeObbOutput,\n\tdecodePoseOutput: () => decodePoseOutput,\n\tdecodeSegmentOutput: () => decodeSegmentOutput,\n\tdecodeYoloBoxes: () => decodeYoloBoxes,\n\tgetDefaultModelsDir: () => getDefaultModelsDir,\n\tgetPersonBoundingBox: () => getPersonBoundingBox,\n\tletterboxResizeWgsl: () => letterboxResizeWgsl,\n\tletterboxToTensor: () => letterboxToTensor,\n\tmaskUpscaleWgsl: () => maskUpscaleWgsl,\n\tmatchPoseToTracks: () => matchPoseToTracks,\n\tnms: () => nms,\n\tpinNodeToLandmark: () => pinNodeToLandmark,\n\tpinNodeToObject: () => pinNodeToObject,\n\ttoDetectedObject: () => toDetectedObject,\n\tunletterboxPoint: () => unletterboxPoint,\n\twarpBoundingBox: () => warpBoundingBox,\n\twarpDetectedObjects: () => warpDetectedObjects,\n\twarpInstanceMask: () => warpInstanceMask,\n\twarpTrackedObjects: () => warpTrackedObjects\n});\n\n//#endregion\nexport { YOLO_VARIANTS as $, decodeSegmentOutput as A, nms as B, warpTrackedObjects as C, POSE_LANDMARKS_YOLO as D, MEDIAPIPE_TO_YOLO_POSE_INDEX as E, letterboxToTensor as F, computeIoU$1 as G, decodeClassifyOutput as H, unletterboxPoint as I, YOLO_ASSETS_RELEASE as J, DEFAULT_MODEL_KEY_BY_TASK as K, decodeDetectOutput as L, decodeObbOutput as M, YOLO_LETTERBOX_PAD_VALUE as N, YOLO_COCO17_BONES as O, computeLetterbox as P, YOLO_TASKS as Q, decodeYoloBoxes as R, warpInstanceMask as S, letterboxResizeWgsl as T, analyzeSequence as U, classHistogram as V, TemporalObjectTracker as W, YOLO_DOTA_CLASSES as X, YOLO_COCO_CLASSES as Y, YOLO_MODELS as Z, YoloGpuPipeline as _, YoloVisionBundle as a, warpBoundingBox as b, matchPoseToTracks as c, NodeSessionProvider as d, createNeutralLandmarks as f, getDefaultModelsDir as g, YoloModelStore as h, pinNodeToObject as i, decodePoseOutput as j, YOLO_POSE_KEYPOINT_NAMES as k, SpatialLandmarkTransformer as l, createNeutralPoseResult as m, YoloNode$1 as n, createYoloVisionBundle as o, createNeutralObjectResult as p, DEFAULT_YOLO_BASE_URL as q, pinNodeToLandmark as r, getPersonBoundingBox as s, src_exports as t, YoloVisionRunner as u, SegmentationTexturePool as v, maskUpscaleWgsl as w, warpDetectedObjects as x, PoseSkeletonRenderer as y, toDetectedObject as z };\n//# sourceMappingURL=src-_tHNcXK0.mjs.map","import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_BLUR = 100;\nconst blurConfig = configBuilder().field(\"blurType\", z.enum([\n\t\"Gaussian\",\n\t\"Box\",\n\t\"Median\",\n\t\"Motion\",\n\t\"Bilateral\",\n\t\"Edge-preserving\",\n\t\"Radial\",\n\t\"Zoom\"\n]).default(\"Gaussian\"), {\n\tbindable: false,\n\tlabel: \"Blur Type\"\n}).field(\"strength\", z.number().min(0).max(MAX_BLUR).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Strength Signal\",\n\tdescription: \"The intensity of the blur. 0 = no blur. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"angle\", z.number().int().min(0).max(360).default(0), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Angle\",\n\tdescription: \"Direction of a Motion blur, in degrees.\"\n}).field(\"sigmaColor\", z.number().min(.01).max(1).default(.1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Sigma Signal\",\n\tdescription: \"Sigma value for color space in Bilateral / Edge-preserving blurs. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"The X coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"The Y coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"partialBlur\", z.boolean().default(false), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Partial Blur\",\n\tdescription: \"Blurs only a specific circular area around center point.\"\n}).field(\"radius\", z.number().min(.01).max(1).default(.3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Signal\",\n\tdescription: \"Radius of the partial blur region (0.01 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"radiusY\", z.number().min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Y Signal\",\n\tdescription: \"Vertical radius of the partial blur region (0 to 1.0). 0 reuses the horizontal radius.\"\n}).field(\"shape\", z.enum([\n\t\"ellipse\",\n\t\"circle\",\n\t\"rect\"\n]).default(\"circle\"), {\n\tbindable: false,\n\tlabel: \"Partial Shape\",\n\tdescription: \"Shape of the partial blur region.\"\n}).build();\nconst BlurNodeConfigSchema = blurConfig.schema;\nconst BlurResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst BLUR_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_BLUR_UNIFORMS = `\nstruct BlurUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tstrength : f32,\n\tangle : f32,\n\n\tsigmaColor : f32,\n\tcenterX : f32,\n\tcenterY : f32,\n\tradius : f32,\n\n\tpartialBlur : f32,\n\thasStrengthSig : f32,\n\thasSigmaColorSig: f32,\n\thasCenterXSig : f32,\n\n\thasCenterYSig : f32,\n\thasRadiusSig : f32,\n\tradiusY : f32,\n\tshape : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var sigmaColorSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n\nfn applyPartialBlur(blurred: vec4<f32>, uv: vec2<f32>, dimensions: vec2<f32>) -> vec4<f32> {\n\tif (u.partialBlur <= 0.5) {\n\t\treturn blurred;\n\t}\n\tlet orig = textureSampleLevel(origTex, samp, uv, 0.0);\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusX = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradiusX = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusY = u.radiusY;\n\n\tvar mask = 0.0;\n\tif (radiusY <= 0.0) {\n\t\tlet aspect = dimensions.x / dimensions.y;\n\t\tlet diff = (uv - vec2<f32>(centerX, centerY)) * vec2<f32>(aspect, 1.0);\n\t\tlet dist = length(diff);\n\t\tlet feather = 0.05;\n\t\tmask = 1.0 - smoothstep(radiusX - feather, radiusX + feather, dist);\n\t} else {\n\t\tlet diff = abs(uv - vec2<f32>(centerX, centerY));\n\t\tif (u.shape > 0.5) {\n\t\t\tlet feather = 0.02;\n\t\t\tlet edgeX = 1.0 - smoothstep(radiusX - feather, radiusX + feather, diff.x);\n\t\t\tlet edgeY = 1.0 - smoothstep(radiusY - feather, radiusY + feather, diff.y);\n\t\t\tmask = edgeX * edgeY;\n\t\t} else {\n\t\t\tlet normDist = length(vec2<f32>(diff.x / max(1e-4, radiusX), diff.y / max(1e-4, radiusY)));\n\t\t\tlet feather = 0.08;\n\t\t\tmask = 1.0 - smoothstep(1.0 - feather, 1.0 + feather, normDist);\n\t\t}\n\t}\n\treturn mix(orig, blurred, mask);\n}\n`;\nconst GAUSSIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet radius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\t\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurred = color / totalWeight;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BOX_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = i32(round(strength));\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar count = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tcount += 1.0;\n\t}\n\n\tlet blurred = color / count;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst MEDIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\nstruct Val {\n\tluma : f32,\n\tcolor : vec4<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = min(i32(round(strength)), 16);\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet count = radius * 2 + 1;\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar values : array<Val, 33>;\n\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count) { break; }\n\t\tlet offset = vec2<f32>(f32(i - radius)) * direction * texelSize;\n\t\tlet col = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tvalues[i] = Val(dot(col.rgb, vec3<f32>(0.299, 0.587, 0.114)), col);\n\t}\n\n\t// Selection sort\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count - 1) { break; }\n\t\tvar minIdx = i;\n\t\tfor (var j = 0; j < 33; j++) {\n\t\t\tif (j <= i) { continue; }\n\t\t\tif (j >= count) { break; }\n\t\t\tif (values[j].luma < values[minIdx].luma) {\n\t\t\t\tminIdx = j;\n\t\t\t}\n\t\t}\n\t\tif (minIdx != i) {\n\t\t\tlet temp = values[i];\n\t\t\tvalues[i] = values[minIdx];\n\t\t\tvalues[minIdx] = temp;\n\t\t}\n\t}\n\n\tlet medianIdx = count / 2;\n\treturn applyPartialBlur(values[medianIdx].color, in.uv, dimensions);\n}\n`;\nconst MOTION_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet PI = 3.14159265359;\n\tlet angleRad = u.angle * PI / 180.0;\n\tlet dir = vec2<f32>(cos(angleRad), sin(angleRad));\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet step = dir * texelSize;\n\n\tlet numSamples = i32(clamp(strength, 1.0, 64.0));\n\tvar color = vec4<f32>(0.0);\n\t\n\tfor (var i = 0; i < 64; i++) {\n\t\tif (i >= numSamples) { break; }\n\t\tlet offset = f32(i - numSamples / 2) * step;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / f32(numSamples);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BILATERAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar sigmaColor = u.sigmaColor;\n\tif (u.hasSigmaColorSig > 0.5) {\n\t\tsigmaColor = textureSampleLevel(sigmaColorSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet radius = min(i32(ceil(3.0 * spatial_sigma)), 32);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -32; i <= 32; i++) {\n\t\tif (i < -radius || i > radius) { continue; }\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\n\t\tlet spatialDistSq = f32(i * i);\n\t\tlet spatialWeight = exp(-0.5 * spatialDistSq / (spatial_sigma * spatial_sigma));\n\t\t\n\t\tlet diff = sampleCol - centerCol;\n\t\tlet colorDistSq = dot(diff, diff);\n\t\tlet rangeWeight = exp(-0.5 * colorDistSq / (sigmaColor * sigmaColor));\n\t\t\n\t\tlet weight = spatialWeight * rangeWeight;\n\t\tcolor += sampleCol * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tvar blurred = centerCol;\n\tif (totalWeight > 0.0) {\n\t\tblurred = color / totalWeight;\n\t}\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst EDGE_PRESERVING_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\t// Map strength (1-10) to radius (1-6)\n\tlet radius = i32(clamp(round(strength * 5.0 / 10.0) + 1.0, 1.0, 6.0));\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\n\tvar m0 = vec3<f32>(0.0); var m1 = vec3<f32>(0.0); var m2 = vec3<f32>(0.0); var m3 = vec3<f32>(0.0);\n\tvar s0 = vec3<f32>(0.0); var s1 = vec3<f32>(0.0); var s2 = vec3<f32>(0.0); var s3 = vec3<f32>(0.0);\n\n\tlet n = f32((radius + 1) * (radius + 1));\n\n\tfor (var j = -6; j <= 6; j++) {\n\t\tif (j < -radius || j > radius) { continue; }\n\t\tfor (var i = -6; i <= 6; i++) {\n\t\t\tif (i < -radius || i > radius) { continue; }\n\t\t\t\n\t\t\tlet c = textureSampleLevel(tex, samp, in.uv + vec2<f32>(f32(i), f32(j)) * texelSize, 0.0).rgb;\n\t\t\t\n\t\t\tif (i <= 0 && j <= 0) {\n\t\t\t\tm0 += c;\n\t\t\t\ts0 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j <= 0) {\n\t\t\t\tm1 += c;\n\t\t\t\ts1 += c * c;\n\t\t\t}\n\t\t\tif (i <= 0 && j >= 0) {\n\t\t\t\tm2 += c;\n\t\t\t\ts2 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j >= 0) {\n\t\t\t\tm3 += c;\n\t\t\t\ts3 += c * c;\n\t\t\t}\n\t\t}\n\t}\n\n\tm0 = m0 / n; s0 = abs(s0 / n - m0 * m0);\n\tm1 = m1 / n; s1 = abs(s1 / n - m1 * m1);\n\tm2 = m2 / n; s2 = abs(s2 / n - m2 * m2);\n\tm3 = m3 / n; s3 = abs(s3 / n - m3 * m3);\n\n\tlet v0 = s0.r + s0.g + s0.b;\n\tlet v1 = s1.r + s1.g + s1.b;\n\tlet v2 = s2.r + s2.g + s2.b;\n\tlet v3 = s3.r + s3.g + s3.b;\n\n\tvar minVar = v0;\n\tvar finalCol = m0;\n\n\tif (v1 < minVar) {\n\t\tminVar = v1;\n\t\tfinalCol = m1;\n\t}\n\tif (v2 < minVar) {\n\t\tminVar = v2;\n\t\tfinalCol = m2;\n\t}\n\tif (v3 < minVar) {\n\t\tminVar = v3;\n\t\tfinalCol = m3;\n\t}\n\n\tlet blurred = vec4<f32>(finalCol, centerCol.a);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst RADIAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet dist = length(toPixel);\n\tif (dist <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet dir = vec2<f32>(-toPixel.y, toPixel.x);\n\tlet blurAmount = (strength / 100.0) * 0.1 * dist;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = dir * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst ZOOM_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet blurAmount = (strength / 100.0) * 0.15;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = toPixel * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tblurUniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t}\n\t\t] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getBlurResources(device, format, blurType) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `blur_${blurType}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tlet code = GAUSSIAN_BLUR_SHADER;\n\t\tif (blurType === \"Box\") code = BOX_BLUR_SHADER;\n\t\telse if (blurType === \"Median\") code = MEDIAN_BLUR_SHADER;\n\t\telse if (blurType === \"Motion\") code = MOTION_BLUR_SHADER;\n\t\telse if (blurType === \"Bilateral\") code = BILATERAL_BLUR_SHADER;\n\t\telse if (blurType === \"Edge-preserving\") code = EDGE_PRESERVING_SHADER;\n\t\telse if (blurType === \"Radial\") code = RADIAL_BLUR_SHADER;\n\t\telse if (blurType === \"Zoom\") code = ZOOM_BLUR_SHADER;\n\t\tconst blurModule = device.createShaderModule({\n\t\t\tlabel: `blur_${blurType}_${format}.wgsl`,\n\t\t\tcode\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `BlurPipeline_${blurType}_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.blurUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: blurModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: blurModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tblurPipeline: pipeline,\n\t\tblurUniformLayout: layouts.blurUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst BlurWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Blur\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst blurData = new Float32Array(16);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"blur_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal, scaleByDpi = false) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView = void 0;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst rawVal = Number(input.outputItem.data ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t} else {\n\t\t\tlet rawVal = op[configKey];\n\t\t\tif (rawVal !== void 0 && rawVal !== null) {\n\t\t\t\tif (typeof rawVal === \"object\") {\n\t\t\t\t\tif (\"get\" in rawVal && typeof rawVal.get === \"function\") rawVal = rawVal.get({\n\t\t\t\t\t\tframe,\n\t\t\t\t\t\tfps\n\t\t\t\t\t});\n\t\t\t\t\telse if (\"value\" in rawVal) {\n\t\t\t\t\t\tconst sig = rawVal;\n\t\t\t\t\t\tif (sig.gpuBinding?.textureView) {\n\t\t\t\t\t\t\tgpuTextureView = sig.gpuBinding.textureView;\n\t\t\t\t\t\t\thasStaticSig = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\trawVal = sig.value;\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof rawVal === \"function\") rawVal = rawVal(frame, fps);\n\t\t\t}\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t}\n\t\telse if (sd) {\n\t\t\tconst rawVal = Number(sd.offset ?? 0);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 5, 0, MAX_BLUR, true);\n\tconst sigmaColorRes = resolveBindable(\"sigmaColor\", .1, .01, 1, false);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1, false);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1, false);\n\tconst radiusRes = resolveBindable(\"radius\", .3, .001, 1, false);\n\tconst radiusYRes = resolveBindable(\"radiusY\", 0, 0, 1, false);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst blurType = op.blurType ?? \"Gaussian\";\n\tconst isSeparable = blurType === \"Gaussian\" || blurType === \"Box\" || blurType === \"Median\" || blurType === \"Bilateral\";\n\tconst { blurPipeline: pipeline, blurUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getBlurResources(ctx.device, ctx.renderer.format, blurType);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tfor (const bindableRes of [\n\t\tstrengthRes,\n\t\tsigmaColorRes,\n\t\tcenterXRes,\n\t\tcenterYRes,\n\t\tradiusRes\n\t]) if (bindableRes.hasStaticSig && bindableRes.sd) await signalRegistry.ensureAudioSourcesExtracted(ctx.device, bindableRes.sd, fps, props.renderId);\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.gpuTextureView) return res.gpuTextureView;\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst sigmaColorView = getSignalView(sigmaColorRes, \"sigmacolor_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerx_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centery_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst createBlurBindGroup1 = (inputTex, origTex) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTex.createView()\n\t\t\t}\n\t\t]\n\t});\n\tconst isPartial = Boolean(op.partialBlur && op.partialBlur !== \"false\" && op.partialBlur !== 0);\n\tblurData[2] = strengthRes.val;\n\tblurData[3] = Number(op.angle ?? 0);\n\tblurData[4] = sigmaColorRes.val;\n\tblurData[5] = centerXRes.val;\n\tblurData[6] = centerYRes.val;\n\tblurData[7] = radiusRes.val;\n\tblurData[8] = isPartial ? 1 : 0;\n\tblurData[9] = strengthRes.hasStaticSig ? 1 : 0;\n\tblurData[10] = sigmaColorRes.hasStaticSig ? 1 : 0;\n\tblurData[11] = centerXRes.hasStaticSig ? 1 : 0;\n\tblurData[12] = centerYRes.hasStaticSig ? 1 : 0;\n\tblurData[13] = radiusRes.hasStaticSig ? 1 : 0;\n\tblurData[14] = radiusYRes.val;\n\tblurData[15] = op.shape === \"rect\" ? 1 : 0;\n\tlet outTex2;\n\tif (isSeparable) {\n\t\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\toutTex1,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 1;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = 0;\n\t\tconst hBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex1.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\thPass.setPipeline(pipeline);\n\t\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t}]\n\t\t}));\n\t\thPass.setBindGroup(1, createBlurBindGroup1(tmpTex, tmpTex));\n\t\thPass.setBindGroup(2, ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: strengthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}));\n\t\thPass.draw(4);\n\t\thPass.end();\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 1;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst vBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex2.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tvPass.setPipeline(pipeline);\n\t\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t}]\n\t\t}));\n\t\tvPass.setBindGroup(1, createBlurBindGroup1(outTex1, tmpTex));\n\t\tvPass.setBindGroup(2, ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: strengthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}));\n\t\tvPass.draw(4);\n\t\tvPass.end();\n\t} else {\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tconst singlePass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex2.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tsinglePass.setPipeline(pipeline);\n\t\tsinglePass.setBindGroup(0, ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t}]\n\t\t}));\n\t\tsinglePass.setBindGroup(1, createBlurBindGroup1(tmpTex, tmpTex));\n\t\tsinglePass.setBindGroup(2, ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: strengthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}));\n\t\tsinglePass.draw(4);\n\t\tsinglePass.end();\n\t}\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });\n\n//#endregion\nexport { MAX_BLUR as a, BlurResultSchema as i, BLUR_OUTPUT_TYPE_MAP as n, blurConfig as o, BlurNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-ClvFyT81.mjs.map","import { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_COLOR_BALANCE_SHADER = `\nstruct ColorBalanceUniforms {\n\tshadows : vec4<f32>,\n\tmidtones : vec4<f32>,\n\thighlights : vec4<f32>,\n\tpreserveLuminosity : f32,\n\thasShadowsCyanRedSig : f32,\n\thasShadowsMagentaGreenSig : f32,\n\thasShadowsYellowBlueSig : f32,\n\n\thasMidtonesCyanRedSig : f32,\n\thasMidtonesMagentaGreenSig : f32,\n\thasMidtonesYellowBlueSig : f32,\n\thasHighlightsCyanRedSig : f32,\n\n\thasHighlightsMagentaGreenSig : f32,\n\thasHighlightsYellowBlueSig : f32,\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorBalanceUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var shadowsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowsMagentaGreenSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowsYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(3) var midtonesCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(4) var midtonesMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(5) var midtonesYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(6) var highlightsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(7) var highlightsMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(8) var highlightsYellowBlueSigTex: texture_2d<f32>;\n@group(2) @binding(9) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn set_luminance(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet d = l - get_luminance(c);\n\tvar res = c + vec3<f32>(d);\n\tlet min_c = min(res.r, min(res.g, res.b));\n\tlet max_c = max(res.r, max(res.g, res.b));\n\tif (min_c < 0.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * l) / max(l - min_c, 1e-5);\n\t}\n\tif (max_c > 1.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * (1.0 - l)) / max(max_c - l, 1e-5);\n\t}\n\treturn clamp(res, vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\tvar sShift = u.shadows.rgb;\n\tif (u.hasShadowsCyanRedSig > 0.5) {\n\t\tsShift.r = clamp(textureSampleLevel(shadowsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsMagentaGreenSig > 0.5) {\n\t\tsShift.g = clamp(textureSampleLevel(shadowsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsYellowBlueSig > 0.5) {\n\t\tsShift.b = clamp(textureSampleLevel(shadowsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar mShift = u.midtones.rgb;\n\tif (u.hasMidtonesCyanRedSig > 0.5) {\n\t\tmShift.r = clamp(textureSampleLevel(midtonesCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesMagentaGreenSig > 0.5) {\n\t\tmShift.g = clamp(textureSampleLevel(midtonesMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesYellowBlueSig > 0.5) {\n\t\tmShift.b = clamp(textureSampleLevel(midtonesYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar hShift = u.highlights.rgb;\n\tif (u.hasHighlightsCyanRedSig > 0.5) {\n\t\thShift.r = clamp(textureSampleLevel(highlightsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsMagentaGreenSig > 0.5) {\n\t\thShift.g = clamp(textureSampleLevel(highlightsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsYellowBlueSig > 0.5) {\n\t\thShift.b = clamp(textureSampleLevel(highlightsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tlet origLum = get_luminance(rgb);\n\n\t// Tonal range weighting curves\n\tlet wShadows = clamp((1.0 - origLum) * (1.0 - origLum * 1.5), 0.0, 1.0);\n\tlet wMidtones = clamp(1.0 - 4.0 * (origLum - 0.5) * (origLum - 0.5), 0.0, 1.0);\n\tlet wHighlights = clamp(origLum * (origLum * 1.5 - 0.5), 0.0, 1.0);\n\n\tlet delta = wShadows * sShift + wMidtones * mShift + wHighlights * hShift;\n\tvar adjustedRgb = clamp(rgb + delta, vec3<f32>(0.0), vec3<f32>(1.0));\n\n\tif (u.preserveLuminosity > 0.5) {\n\t\tadjustedRgb = set_luminance(adjustedRgb, origLum);\n\t}\n\n\treturn vec4<f32>(adjustedRgb * alpha, alpha);\n}\n`;\nfunction getColorBalanceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = device.createBindGroupLayout({\n\t\tlabel: \"ColorBalanceUniformLayout\",\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}]\n\t});\n\tconst textureLayout = device.createBindGroupLayout({\n\t\tlabel: \"ColorBalanceTextureLayout\",\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}]\n\t});\n\tconst signalTextureLayout = device.createBindGroupLayout({\n\t\tlabel: \"ColorBalanceSignalTextureLayout\",\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 9,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t]\n\t});\n\tconst module = device.createShaderModule({\n\t\tlabel: \"ColorBalanceShaderModule\",\n\t\tcode: WGSL_COLOR_BALANCE_SHADER\n\t});\n\tres = {\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"ColorBalancePipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(24);\nconst ColorBalanceWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorBalance\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"colorbalance_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = -100, clampMax = 100) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t};\n\tconst resolveVal = (val) => {\n\t\tif (val !== void 0 && val !== null) {\n\t\t\tif (typeof val === \"object\" && \"value\" in val) val = val.value;\n\t\t\telse if (typeof val === \"function\") val = val(frame, fps);\n\t\t}\n\t\tconst n = Number(val ?? 0);\n\t\treturn isNaN(n) ? 0 : n;\n\t};\n\tconst sCR = resolveField(op.shadows_cyanRedHandleId, resolveVal(op.shadows?.cyanRed));\n\tconst sMG = resolveField(op.shadows_magentaGreenHandleId, resolveVal(op.shadows?.magentaGreen));\n\tconst sYB = resolveField(op.shadows_yellowBlueHandleId, resolveVal(op.shadows?.yellowBlue));\n\tconst mCR = resolveField(op.midtones_cyanRedHandleId, resolveVal(op.midtones?.cyanRed));\n\tconst mMG = resolveField(op.midtones_magentaGreenHandleId, resolveVal(op.midtones?.magentaGreen));\n\tconst mYB = resolveField(op.midtones_yellowBlueHandleId, resolveVal(op.midtones?.yellowBlue));\n\tconst hCR = resolveField(op.highlights_cyanRedHandleId, resolveVal(op.highlights?.cyanRed));\n\tconst hMG = resolveField(op.highlights_magentaGreenHandleId, resolveVal(op.highlights?.magentaGreen));\n\tconst hYB = resolveField(op.highlights_yellowBlueHandleId, resolveVal(op.highlights?.yellowBlue));\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getColorBalanceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst sCRView = getSignalView(sCR, \"shadows_cyanRed_sig\");\n\tconst sMGView = getSignalView(sMG, \"shadows_magentaGreen_sig\");\n\tconst sYBView = getSignalView(sYB, \"shadows_yellowBlue_sig\");\n\tconst mCRView = getSignalView(mCR, \"midtones_cyanRed_sig\");\n\tconst mMGView = getSignalView(mMG, \"midtones_magentaGreen_sig\");\n\tconst mYBView = getSignalView(mYB, \"midtones_yellowBlue_sig\");\n\tconst hCRView = getSignalView(hCR, \"highlights_cyanRed_sig\");\n\tconst hMGView = getSignalView(hMG, \"highlights_magentaGreen_sig\");\n\tconst hYBView = getSignalView(hYB, \"highlights_yellowBlue_sig\");\n\tconst preserveLum = op.preserveLuminosity === false ? 0 : 1;\n\tuniformBufferData[0] = sCR.val / 100;\n\tuniformBufferData[1] = sMG.val / 100;\n\tuniformBufferData[2] = sYB.val / 100;\n\tuniformBufferData[3] = 0;\n\tuniformBufferData[4] = mCR.val / 100;\n\tuniformBufferData[5] = mMG.val / 100;\n\tuniformBufferData[6] = mYB.val / 100;\n\tuniformBufferData[7] = 0;\n\tuniformBufferData[8] = hCR.val / 100;\n\tuniformBufferData[9] = hMG.val / 100;\n\tuniformBufferData[10] = hYB.val / 100;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = preserveLum;\n\tuniformBufferData[13] = sCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[14] = sMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[15] = sYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[16] = mCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[17] = mMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[18] = mYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[19] = hCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[20] = hMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[21] = hYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[22] = 0;\n\tuniformBufferData[23] = 0;\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: mCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: mMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: mYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: hCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: hMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: hYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 9,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler));\n\trenderPass.setBindGroup(2, sigBindGroup);\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: props.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: ColorBalanceWebGPURenderer };\n\n//#endregion\nexport { ColorBalanceWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-DzBEC6-y.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLORKEY_SHADER = `\nstruct ColorKeyUniforms {\n\tsimilarity : f32,\n\tsmoothness : f32,\n\tspillSuppression : f32,\n\tcolorSpace : f32, // 0 for YUV, 1 for RGB\n\tspillSuppressionType : f32, // 0 for Desaturate, 1 for Neutralize, 2 for None\n\tkeyR : f32,\n\tkeyG : f32,\n\tkeyB : f32,\n\thasSimilaritySig : f32,\n\thasSmoothnessSig : f32,\n\thasSpillSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorKeyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var similaritySigTex : texture_2d<f32>;\n@group(2) @binding(1) var smoothnessSigTex : texture_2d<f32>;\n@group(2) @binding(2) var spillSigTex : texture_2d<f32>;\n@group(2) @binding(3) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn rgb2yuv(rgb: vec3<f32>) -> vec3<f32> {\n\tlet y = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;\n\tlet u = -0.169 * rgb.r - 0.331 * rgb.g + 0.500 * rgb.b;\n\tlet v = 0.500 * rgb.r - 0.419 * rgb.g - 0.081 * rgb.b;\n\treturn vec3<f32>(y, u, v);\n}\n\nfn yuv2rgb(yuv: vec3<f32>) -> vec3<f32> {\n\tlet r = yuv.x + 1.402 * yuv.z;\n\tlet g = yuv.x - 0.344 * yuv.y - 0.714 * yuv.z;\n\tlet b = yuv.x + 1.772 * yuv.y;\n\treturn vec3<f32>(r, g, b);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet src_color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (src_color.a < 1e-5) {\n\t\treturn src_color;\n\t}\n\n\t// Unpremultiply alpha for keying and grading\n\tlet unpremult_rgb = src_color.rgb / src_color.a;\n\n\t// Resolve dynamic signals if connected, otherwise use static uniform values\n\tvar similarity = u.similarity;\n\tif (u.hasSimilaritySig > 0.5) {\n\t\tsimilarity = textureSampleLevel(similaritySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar smoothness = u.smoothness;\n\tif (u.hasSmoothnessSig > 0.5) {\n\t\tsmoothness = textureSampleLevel(smoothnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tvar spillSuppression = u.spillSuppression;\n\tif (u.hasSpillSig > 0.5) {\n\t\tspillSuppression = textureSampleLevel(spillSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet keyColor = vec3<f32>(u.keyR, u.keyG, u.keyB);\n\n\t// 1. Calculate similarity distance\n\tvar dist = 0.0;\n\tif (u.colorSpace < 0.5) {\n\t\t// YUV (Chroma Distance)\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tdist = distance(C_yuv.yz, K_yuv.yz);\n\t} else {\n\t\t// RGB (Exact Distance)\n\t\tdist = distance(unpremult_rgb, keyColor);\n\t}\n\n\t// 2. Calculate transparency mask\n\tvar mask = 0.0;\n\tif (smoothness < 0.0001) {\n\t\tmask = select(0.0, 1.0, dist >= similarity);\n\t} else {\n\t\tmask = smoothstep(similarity, similarity + smoothness, dist);\n\t}\n\n\t// 3. Apply spill suppression\n\tvar final_rgb = unpremult_rgb;\n\tif (u.spillSuppressionType < 2.5) { // 0 for Desaturate, 1 for Neutralize, 2 for None\n\t\tlet C_yuv = rgb2yuv(unpremult_rgb);\n\t\tlet K_yuv = rgb2yuv(keyColor);\n\t\tlet K_chroma = K_yuv.yz;\n\t\tlet K_len_sq = dot(K_chroma, K_chroma);\n\n\t\tif (K_len_sq > 1e-6) {\n\t\t\tlet C_chroma = C_yuv.yz;\n\t\t\tlet proj = dot(C_chroma, K_chroma) / K_len_sq;\n\t\t\tif (proj > 0.0) {\n\t\t\t\tlet C_para = proj * K_chroma;\n\t\t\t\tvar C_chroma_suppressed = C_chroma;\n\n\t\t\t\tif (u.spillSuppressionType < 0.5) {\n\t\t\t\t\t// Desaturate\n\t\t\t\t\tC_chroma_suppressed = C_chroma - spillSuppression * C_para;\n\t\t\t\t} else {\n\t\t\t\t\t// Neutralize (completely shift to neutral gray chroma)\n\t\t\t\t\tC_chroma_suppressed = C_chroma - C_para;\n\t\t\t\t}\n\n\t\t\t\tfinal_rgb = yuv2rgb(vec3<f32>(C_yuv.x, C_chroma_suppressed.x, C_chroma_suppressed.y));\n\t\t\t}\n\t\t}\n\t}\n\n\tlet final_alpha = src_color.a * mask;\n\treturn vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * final_alpha, final_alpha);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst colorKeyData = new Float32Array(12);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getColorKeyResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `colorkey_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst colorKeyModule = device.createShaderModule({\n\t\t\tlabel: `colorkey_${format}.wgsl`,\n\t\t\tcode: COLORKEY_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `ColorKeyPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: colorKeyModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: colorKeyModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcolorKeyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction hexToRgb(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3) h = h.split(\"\").map((c) => c + c).join(\"\");\n\treturn [\n\t\tparseInt(h.substring(0, 2), 16) / 255,\n\t\tparseInt(h.substring(2, 4), 16) / 255,\n\t\tparseInt(h.substring(4, 6), 16) / 255\n\t];\n}\nconst ColorKeyWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorKey\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"colorkey_node\";\n\tconst similarityInput = op.similarityHandleId ? op.inputs?.[op.similarityHandleId] : null;\n\tconst hasSimilaritySig = !!(similarityInput?.connectionValid && (similarityInput.outputItem?.type === \"Signal\" || similarityInput.outputItem?.type === \"Numeric\"));\n\tconst similaritySd = hasSimilaritySig && similarityInput?.outputItem?.data ? similarityInput.outputItem.data : null;\n\tlet similarity = .4;\n\tlet hasStaticSimilaritySig = false;\n\tif (!hasSimilaritySig) if (similarityInput?.connectionValid && similarityInput.outputItem?.type === \"Number\") similarity = Math.max(0, Math.min(1, Number(similarityInput.outputItem.data ?? .4)));\n\telse similarity = Math.max(0, Math.min(1, Number(op.similarity ?? .4)));\n\telse if (similaritySd) {\n\t\tsimilarity = Math.max(0, Math.min(1, Number(similaritySd.offset ?? 0)));\n\t\thasStaticSimilaritySig = true;\n\t}\n\tconst smoothnessInput = op.smoothnessHandleId ? op.inputs?.[op.smoothnessHandleId] : null;\n\tconst hasSmoothnessSig = !!(smoothnessInput?.connectionValid && (smoothnessInput.outputItem?.type === \"Signal\" || smoothnessInput.outputItem?.type === \"Numeric\"));\n\tconst smoothnessSd = hasSmoothnessSig && smoothnessInput?.outputItem?.data ? smoothnessInput.outputItem.data : null;\n\tlet smoothness = .1;\n\tlet hasStaticSmoothnessSig = false;\n\tif (!hasSmoothnessSig) if (smoothnessInput?.connectionValid && smoothnessInput.outputItem?.type === \"Number\") smoothness = Math.max(0, Math.min(1, Number(smoothnessInput.outputItem.data ?? .1)));\n\telse smoothness = Math.max(0, Math.min(1, Number(op.smoothness ?? .1)));\n\telse if (smoothnessSd) {\n\t\tsmoothness = Math.max(0, Math.min(1, Number(smoothnessSd.offset ?? 0)));\n\t\thasStaticSmoothnessSig = true;\n\t}\n\tconst spillInput = op.spillSuppressionHandleId ? op.inputs?.[op.spillSuppressionHandleId] : null;\n\tconst hasSpillSig = !!(spillInput?.connectionValid && (spillInput.outputItem?.type === \"Signal\" || spillInput.outputItem?.type === \"Numeric\"));\n\tconst spillSd = hasSpillSig && spillInput?.outputItem?.data ? spillInput.outputItem.data : null;\n\tlet spillSuppression = .2;\n\tlet hasStaticSpillSig = false;\n\tif (!hasSpillSig) if (spillInput?.connectionValid && spillInput.outputItem?.type === \"Number\") spillSuppression = Math.max(0, Math.min(1, Number(spillInput.outputItem.data ?? .2)));\n\telse spillSuppression = Math.max(0, Math.min(1, Number(op.spillSuppression ?? .2)));\n\telse if (spillSd) {\n\t\tspillSuppression = Math.max(0, Math.min(1, Number(spillSd.offset ?? 0)));\n\t\thasStaticSpillSig = true;\n\t}\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { colorKeyPipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getColorKeyResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tlet similarityView;\n\tif (hasStaticSimilaritySig && similaritySd) similarityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, similaritySd.nodeId ?? `${nodeId}_similarity_sig`, elapsedSeconds, durationSeconds, similaritySd, width, height, props.renderId, frame, fps);\n\telse similarityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet smoothnessView;\n\tif (hasStaticSmoothnessSig && smoothnessSd) smoothnessView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, smoothnessSd.nodeId ?? `${nodeId}_smoothness_sig`, elapsedSeconds, durationSeconds, smoothnessSd, width, height, props.renderId, frame, fps);\n\telse smoothnessView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlet spillView;\n\tif (hasStaticSpillSig && spillSd) spillView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, spillSd.nodeId ?? `${nodeId}_spill_sig`, elapsedSeconds, durationSeconds, spillSd, width, height, props.renderId, frame, fps);\n\telse spillView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst [keyR, keyG, keyB] = hexToRgb(op.keyColor ?? \"#00ff00\");\n\tcolorKeyData[0] = similarity;\n\tcolorKeyData[1] = smoothness;\n\tcolorKeyData[2] = spillSuppression;\n\tcolorKeyData[3] = op.colorSpace === \"RGB\" ? 1 : 0;\n\tcolorKeyData[4] = op.spillSuppressionType === \"None\" ? 2 : op.spillSuppressionType === \"Neutralize\" ? 1 : 0;\n\tcolorKeyData[5] = keyR;\n\tcolorKeyData[6] = keyG;\n\tcolorKeyData[7] = keyB;\n\tcolorKeyData[8] = hasStaticSimilaritySig ? 1 : 0;\n\tcolorKeyData[9] = hasStaticSmoothnessSig ? 1 : 0;\n\tcolorKeyData[10] = hasStaticSpillSig ? 1 : 0;\n\tcolorKeyData[11] = 0;\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(colorKeyData);\n\tconst singlePass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tsinglePass.setPipeline(pipeline);\n\tsinglePass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: singleBuffer }\n\t\t}]\n\t}));\n\tsinglePass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\tsinglePass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: similarityView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: smoothnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: spillView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tsinglePass.draw(4);\n\tsinglePass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ColorKeyWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CaxmH3TJ.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/shared/utils.ts\nfunction getDefaultPoints() {\n\treturn [\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 100\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 100\n\t\t}\n\t];\n}\n/**\n* Computes a 3x3 homography matrix mapping normalized destination/target points (quad)\n* to normalized source points (unit square [0,1]^2).\n*\n* Target corners are input as percent coordinates (0-100) and normalized internally to [0,1].\n*\n* The homography H maps target (x, y) to source (u, v):\n* u = (h00*x + h01*y + h02) / (h20*x + h21*y + h22)\n* v = (h10*x + h11*y + h12) / (h20*x + h21*y + h22)\n*\n* We set h22 = 1.0.\n*/\nfunction solveHomography(targetPoints) {\n\tconst pts = targetPoints && targetPoints.length === 4 ? targetPoints : getDefaultPoints();\n\tconst src = [\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 1,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 1\n\t\t},\n\t\t{\n\t\t\tx: 1,\n\t\t\ty: 1\n\t\t}\n\t];\n\tconst dst = pts.map((p) => ({\n\t\tx: p.x / 100,\n\t\ty: p.y / 100\n\t}));\n\tconst A = [];\n\tconst B = [];\n\tfor (let i = 0; i < 4; i++) {\n\t\tconst xi = dst[i].x;\n\t\tconst yi = dst[i].y;\n\t\tconst ui = src[i].x;\n\t\tconst vi = src[i].y;\n\t\tA.push([\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t-xi * ui,\n\t\t\t-yi * ui\n\t\t]);\n\t\tB.push(ui);\n\t\tA.push([\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\txi,\n\t\t\tyi,\n\t\t\t1,\n\t\t\t-xi * vi,\n\t\t\t-yi * vi\n\t\t]);\n\t\tB.push(vi);\n\t}\n\tconst n = 8;\n\tfor (let i = 0; i < n; i++) {\n\t\tlet maxRow = i;\n\t\tlet maxVal = Math.abs(A[i][i]);\n\t\tfor (let k = i + 1; k < n; k++) if (Math.abs(A[k][i]) > maxVal) {\n\t\t\tmaxVal = Math.abs(A[k][i]);\n\t\t\tmaxRow = k;\n\t\t}\n\t\tconst tempRow = A[i];\n\t\tA[i] = A[maxRow];\n\t\tA[maxRow] = tempRow;\n\t\tconst tempB = B[i];\n\t\tB[i] = B[maxRow];\n\t\tB[maxRow] = tempB;\n\t\tconst pivot = A[i][i];\n\t\tif (Math.abs(pivot) < 1e-12) A[i][i] = pivot < 0 ? -1e-12 : 1e-12;\n\t\tfor (let k = i + 1; k < n; k++) {\n\t\t\tconst factor = A[k][i] / A[i][i];\n\t\t\tfor (let j = i; j < n; j++) A[k][j] -= factor * A[i][j];\n\t\t\tB[k] -= factor * B[i];\n\t\t}\n\t}\n\tconst h = new Array(8).fill(0);\n\tfor (let i = n - 1; i >= 0; i--) {\n\t\tlet sum = B[i];\n\t\tfor (let j = i + 1; j < n; j++) sum -= A[i][j] * h[j];\n\t\th[i] = sum / A[i][i];\n\t}\n\treturn [\n\t\th[0],\n\t\th[1],\n\t\th[2],\n\t\th[3],\n\t\th[4],\n\t\th[5],\n\t\th[6],\n\t\th[7],\n\t\t1\n\t];\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst cornerPinWgsl = `\nstruct CornerPinUniforms {\n\tmatrix_row0 : vec4<f32>,\n\tmatrix_row1 : vec4<f32>,\n\tmatrix_row2 : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CornerPinUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet x = in.uv.x;\n\tlet y = in.uv.y;\n\n\tlet d = u.matrix_row2.x * x + u.matrix_row2.y * y + u.matrix_row2.z;\n\tif (abs(d) < 1e-6) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet src_u = (u.matrix_row0.x * x + u.matrix_row0.y * y + u.matrix_row0.z) / d;\n\tlet src_v = (u.matrix_row1.x * x + u.matrix_row1.y * y + u.matrix_row1.z) / d;\n\n\tif (src_u < 0.0 || src_u > 1.0 || src_v < 0.0 || src_v > 1.0) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet color = textureSampleLevel(tex, samp, vec2<f32>(src_u, src_v), 0.0);\n\treturn color;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getCornerPinResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst pinUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tconst pinTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"corner_pin.wgsl\",\n\t\t\tcode: cornerPinWgsl\n\t\t});\n\t\tres = {\n\t\t\tpinPipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"CornerPinPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [pinUniformLayout, pinTextureLayout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tblend: {\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\tsrcFactor: \"src-alpha\",\n\t\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t}),\n\t\t\tpinUniformLayout,\n\t\t\tpinTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst CornerPinWebGPURenderer = async (args) => {\n\tconst { ctx, props, drawChild, targetTexture, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"CornerPin\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\targs.pass.end();\n\tconst childTex = ctx.renderer.getTemporaryTexture(sourceWidth, sourceHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, sourceWidth, sourceHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tcontainerWidth: sourceWidth,\n\t\tcontainerHeight: sourceHeight,\n\t\tvirtualMedia: childMedia\n\t}, childView, childTex, sourceWidth, sourceHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst h = solveHomography(op.points || []);\n\tconst uniformData = new Float32Array(12);\n\tuniformData[0] = h[0];\n\tuniformData[1] = h[1];\n\tuniformData[2] = h[2];\n\tuniformData[3] = 0;\n\tuniformData[4] = h[3];\n\tuniformData[5] = h[4];\n\tuniformData[6] = h[5];\n\tuniformData[7] = 0;\n\tuniformData[8] = h[6];\n\tuniformData[9] = h[7];\n\tuniformData[10] = h[8];\n\tuniformData[11] = 0;\n\tconst { pinPipeline: pipeline, pinUniformLayout: uLayout, pinTextureLayout: tLayout } = getCornerPinResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, childTex, sampler);\n\tconst outTex = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, uniformBindGroup);\n\trenderPass.setBindGroup(1, textureBindGroup);\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(outPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CornerPinWebGPURenderer });\n\n//#endregion\nexport { getDefaultPoints as n, solveHomography as r, renderers_default as t };\n//# sourceMappingURL=renderers-BJAILLZE.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst maskWgsl = `\nstruct MaskUniforms {\n\trect : vec4<f32>,\n\troundness : f32,\n\tmode : f32,\n\tnumPoints : f32,\n\tpadding : f32,\n\tpoints : array<vec2<f32>, 64>,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskUniforms;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {\n\tlet q = abs(p) - b + r;\n\treturn min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet p = in.pos.xy;\n\t\n\tif (u.mode > 0.5) { // Path\n\t\tvar inside = false;\n\t\tlet count = u32(u.numPoints);\n\t\tfor (var i = 0u; i < count; i = i + 1u) {\n\t\t\tlet j = (i + 1u) % count;\n\t\t\tlet pi = u.points[i];\n\t\t\tlet pj = u.points[j];\n\t\t\tif (((pi.y > p.y) != (pj.y > p.y)) &&\n\t\t\t\t(p.x < (pj.x - pi.x) * (p.y - pi.y) / (pj.y - pi.y) + pi.x)) {\n\t\t\t\tinside = !inside;\n\t\t\t}\n\t\t}\n\t\treturn select(vec4<f32>(0.0), vec4<f32>(1.0), inside);\n\t} else { // RRect\n\t\tlet center = u.rect.xy + u.rect.zw * 0.5;\n\t\tlet size = u.rect.zw * 0.5;\n\t\tlet d = sdRoundedRect(p - center, size, u.roundness);\n\t\tlet alpha = 1.0 - smoothstep(0.0, 1.5, d);\n\t\treturn vec4<f32>(1.0, 1.0, 1.0, alpha);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskPipeline(device, format) {\n\tlet pipeline = deviceResourceCache.get(device);\n\tif (!pipeline) {\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"CropMaskPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tdeviceResourceCache.set(device, pipeline);\n\t}\n\treturn pipeline;\n}\nconst CropWebGPURenderer = async (args) => {\n\tconst { ctx, props, drawChild, targetTexture, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, containerWidth: propsContainerWidth, containerHeight: propsContainerHeight, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"Crop\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst containerWidth = propsContainerWidth ?? ctx.surface.width;\n\tconst containerHeight = propsContainerHeight ?? ctx.surface.height;\n\tconst isRest = op.mode === \"rest\";\n\tconst isPath = op.cropType === \"path\";\n\tconst pathPoints = op.pathPoints || [];\n\tconst roundness = Number(op.roundness) || 0;\n\tlet finalLp = Number(op.leftPercentage) || 0;\n\tlet finalTp = Number(op.topPercentage) || 0;\n\tlet finalWp = Math.max(.01, Number(op.widthPercentage) || 100);\n\tlet finalHp = Math.max(.01, Number(op.heightPercentage) || 100);\n\tif (isPath && pathPoints.length > 0) {\n\t\tconst xs = pathPoints.map((p) => p.x);\n\t\tconst ys = pathPoints.map((p) => p.y);\n\t\tfinalLp = Math.min(...xs);\n\t\tfinalTp = Math.min(...ys);\n\t\tfinalWp = Math.max(.01, Math.max(...xs) - finalLp);\n\t\tfinalHp = Math.max(.01, Math.max(...ys) - finalTp);\n\t}\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\tconst srcRect = {\n\t\tx: finalLp / 100 * sourceWidth,\n\t\ty: finalTp / 100 * sourceHeight,\n\t\twidth: finalWp / 100 * sourceWidth,\n\t\theight: finalHp / 100 * sourceHeight\n\t};\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t};\n\targs.pass.end();\n\tconst childTex = ctx.renderer.getTemporaryTexture(sourceWidth, sourceHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, sourceWidth, sourceHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tcontainerWidth: sourceWidth,\n\t\tcontainerHeight: sourceHeight\n\t}, childView, childTex, sourceWidth, sourceHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tif (!(roundness > 0 || isPath || isRest) && !isRest) {\n\t\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tctx.renderer.drawTextureRegion(outPass, childTex, srcRect, dstRect, { opacity });\n\t\targs.pass = outPass;\n\t\treturn;\n\t}\n\tlet maskedSourceTex = childTex;\n\tif (!isRest) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTextureRegion(upscaledPass, childTex, srcRect, dstRect);\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t} else if (sourceWidth !== containerWidth || sourceHeight !== containerHeight) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTexture(upscaledPass, childTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerWidth,\n\t\t\theight: containerHeight\n\t\t});\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t}\n\tconst maskTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\tmaskedSourceTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst maskView = maskTex.createView();\n\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, containerWidth, containerHeight, \"clear\");\n\tconst maskPipeline = getMaskPipeline(ctx.device, ctx.renderer.format);\n\tconst maskData = new Float32Array(136);\n\tconst rectX = isRest ? finalLp / 100 * containerWidth : 0;\n\tconst rectY = isRest ? finalTp / 100 * containerHeight : 0;\n\tconst rectW = isRest ? finalWp / 100 * containerWidth : containerWidth;\n\tconst rectH = isRest ? finalHp / 100 * containerHeight : containerHeight;\n\tconst pixelRoundness = roundness / 100 * (Math.min(rectW, rectH) / 2);\n\tmaskData[0] = rectX;\n\tmaskData[1] = rectY;\n\tmaskData[2] = rectW;\n\tmaskData[3] = rectH;\n\tmaskData[4] = pixelRoundness;\n\tmaskData[5] = isPath ? 1 : 0;\n\tmaskData[6] = pathPoints.length;\n\tif (isPath) for (let i = 0; i < Math.min(pathPoints.length, 64); i++) {\n\t\tlet px = pathPoints[i].x / 100 * containerWidth;\n\t\tlet py = pathPoints[i].y / 100 * containerHeight;\n\t\tif (!isRest) {\n\t\t\tpx = (pathPoints[i].x - finalLp) / finalWp * containerWidth;\n\t\t\tpy = (pathPoints[i].y - finalTp) / finalHp * containerHeight;\n\t\t}\n\t\tmaskData[8 + i * 2] = px;\n\t\tmaskData[8 + i * 2 + 1] = py;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(maskData);\n\tconst bindGroup = ctx.device.createBindGroup({\n\t\tlayout: maskPipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tmaskPass.setPipeline(maskPipeline);\n\tmaskPass.setBindGroup(0, bindGroup);\n\tmaskPass.draw(4);\n\tmaskPass.end();\n\tconst resultTex = ctx.renderer.composite(encoder, maskedSourceTex, maskTex, isRest ? \"mask-out\" : \"mask-in\", [\n\t\tmaskedSourceTex,\n\t\tmaskTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, resultTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CropWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BNuRuACX.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/shared/spline.ts\n/**\n* Solves the Fritsch-Carlson Monotonic Cubic Hermite Spline interpolation\n* for a set of control points. Returns an interpolation function.\n*/\nfunction solveMonotonicSpline(points) {\n\tconst pts = [...points].sort((a, b) => a.x - b.x);\n\tconst uniquePts = [];\n\tfor (const p of pts) if (uniquePts.length === 0 || Math.abs(p.x - uniquePts[uniquePts.length - 1].x) > 1e-6) uniquePts.push(p);\n\tconst n = uniquePts.length;\n\tif (n === 0) return (x) => x;\n\tif (n === 1) return () => uniquePts[0].y;\n\tconst dx = new Float32Array(n - 1);\n\tconst dy = new Float32Array(n - 1);\n\tconst ms = new Float32Array(n - 1);\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tdx[i] = uniquePts[i + 1].x - uniquePts[i].x;\n\t\tdy[i] = uniquePts[i + 1].y - uniquePts[i].y;\n\t\tms[i] = dy[i] / dx[i];\n\t}\n\tconst tangents = new Float32Array(n);\n\ttangents[0] = ms[0];\n\tfor (let i = 1; i < n - 1; i++) tangents[i] = (ms[i - 1] + ms[i]) / 2;\n\ttangents[n - 1] = ms[n - 2];\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tconst m = ms[i];\n\t\tif (Math.abs(m) < 1e-9) {\n\t\t\ttangents[i] = 0;\n\t\t\ttangents[i + 1] = 0;\n\t\t} else {\n\t\t\tconst alpha = tangents[i] / m;\n\t\t\tconst beta = tangents[i + 1] / m;\n\t\t\tconst alphaSq = alpha * alpha;\n\t\t\tconst betaSq = beta * beta;\n\t\t\tif (alphaSq + betaSq > 9) {\n\t\t\t\tconst tau = 3 / Math.sqrt(alphaSq + betaSq);\n\t\t\t\ttangents[i] = tau * alpha * m;\n\t\t\t\ttangents[i + 1] = tau * beta * m;\n\t\t\t}\n\t\t}\n\t}\n\treturn (x) => {\n\t\tif (x <= uniquePts[0].x) return uniquePts[0].y;\n\t\tif (x >= uniquePts[n - 1].x) return uniquePts[n - 1].y;\n\t\tlet low = 0;\n\t\tlet high = n - 2;\n\t\tlet idx = 0;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (x >= uniquePts[mid].x && x <= uniquePts[mid + 1].x) {\n\t\t\t\tidx = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (x < uniquePts[mid].x) high = mid - 1;\n\t\t\telse low = mid + 1;\n\t\t}\n\t\tconst h = dx[idx];\n\t\tconst t = (x - uniquePts[idx].x) / h;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst h00 = 2 * t3 - 3 * t2 + 1;\n\t\tconst h10 = t3 - 2 * t2 + t;\n\t\tconst h01 = -2 * t3 + 3 * t2;\n\t\tconst h11 = t3 - t2;\n\t\tconst y = uniquePts[idx].y * h00 + h * tangents[idx] * h10 + uniquePts[idx + 1].y * h01 + h * tangents[idx + 1] * h11;\n\t\treturn Math.max(0, Math.min(1, y));\n\t};\n}\n\n//#endregion\n//#region src/renderers/histogram-computer.ts\nconst PER_CHAN_SIZE = 256 * 4;\nconst HISTOGRAM_COMPUTE_SHADER = `\n@group(0) @binding(0) var t_src: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;\n@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;\n@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;\n@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;\n\n@compute @workgroup_size(8, 8)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n\tlet dims = textureDimensions(t_src, 0);\n\tif (gid.x >= dims.x || gid.y >= dims.y) { return; }\n\n\tlet color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);\n\tlet a = color.a;\n\tif (a < 1e-5) { return; }\n\n\tlet rgb = color.rgb / a;\n\n\tlet ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));\n\tlet gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));\n\tlet bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));\n\tlet luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;\n\tlet lumai = u32(clamp(luma * 255.0, 0.0, 255.0));\n\n\tatomicAdd(&bins_r[ri], 1u);\n\tatomicAdd(&bins_g[gi], 1u);\n\tatomicAdd(&bins_b[bi], 1u);\n\tatomicAdd(&bins_luma[lumai], 1u);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getHistogramResources(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst bindGroupLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\ttexture: {\n\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\tviewDimension: \"2d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t}\n\t\t] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"histogram.wgsl\",\n\t\t\tcode: HISTOGRAM_COMPUTE_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createComputePipeline({\n\t\t\t\tlabel: \"HistogramPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tbindGroupLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst histogramCallbacks = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Set();\n/**\n* Records histogram compute + buffer copy commands into the provided encoder.\n* The async readback fires after the queue processes the encoder's commands.\n* This ensures the source texture data is valid when the compute pass reads it.\n*/\nfunction computeHistogramFromEncoder(device, encoder, srcTexture, nodeId) {\n\tif (!histogramCallbacks.get(nodeId)) return;\n\tif (inflight.has(nodeId)) return;\n\tinflight.add(nodeId);\n\tconst { pipeline, bindGroupLayout } = getHistogramResources(device);\n\tconst makeStorage = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t});\n\tconst bufR = makeStorage();\n\tconst bufG = makeStorage();\n\tconst bufB = makeStorage();\n\tconst bufLuma = makeStorage();\n\tencoder.clearBuffer(bufR);\n\tencoder.clearBuffer(bufG);\n\tencoder.clearBuffer(bufB);\n\tencoder.clearBuffer(bufLuma);\n\tconst bindGroup = device.createBindGroup({\n\t\tlayout: bindGroupLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: srcTexture.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: bufR }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: bufG }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: bufB }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: bufLuma }\n\t\t\t}\n\t\t]\n\t});\n\tconst pass = encoder.beginComputePass({ label: \"histogram-pass\" });\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup);\n\tpass.dispatchWorkgroups(Math.ceil(srcTexture.width / 8), Math.ceil(srcTexture.height / 8));\n\tpass.end();\n\tconst makeReadback = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst rbR = makeReadback();\n\tconst rbG = makeReadback();\n\tconst rbB = makeReadback();\n\tconst rbLuma = makeReadback();\n\tencoder.copyBufferToBuffer(bufR, 0, rbR, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufG, 0, rbG, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufB, 0, rbB, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufLuma, 0, rbLuma, 0, PER_CHAN_SIZE);\n\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\treturn Promise.all([\n\t\t\trbR.mapAsync(GPUMapMode.READ),\n\t\t\trbG.mapAsync(GPUMapMode.READ),\n\t\t\trbB.mapAsync(GPUMapMode.READ),\n\t\t\trbLuma.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t}).then(() => {\n\t\tconst r = new Uint32Array(rbR.getMappedRange().slice(0));\n\t\tconst g = new Uint32Array(rbG.getMappedRange().slice(0));\n\t\tconst b = new Uint32Array(rbB.getMappedRange().slice(0));\n\t\tconst luma = new Uint32Array(rbLuma.getMappedRange().slice(0));\n\t\trbR.unmap();\n\t\trbG.unmap();\n\t\trbB.unmap();\n\t\trbLuma.unmap();\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t\tconst currentCb = histogramCallbacks.get(nodeId);\n\t\tif (currentCb) currentCb({\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tluma\n\t\t});\n\t}).catch(() => {\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t});\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_SIZE = 1024;\nconst LUT_FORMAT = \"rgba8unorm\";\nconst LUT_BYTES_PER_ROW = LUT_SIZE * 4;\nconst CURVES_RGB_SHADER = `\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@group(0) @binding(0) var t_lut : texture_2d<f32>;\n@group(0) @binding(1) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_r = (rgb.r * (N - 1.0) + 0.5) / N;\n\tlet uv_g = (rgb.g * (N - 1.0) + 0.5) / N;\n\tlet uv_b = (rgb.b * (N - 1.0) + 0.5) / N;\n\n\tlet r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;\n\tlet g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;\n\tlet b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;\n\n\tlet graded = vec3<f32>(r_graded, g_graded, b_graded);\n\treturn vec4<f32>(graded * src.a, src.a);\n}\n`;\nconst CURVES_HSL_SHADER = `\nstruct Uniforms {\n\tmode: u32,\n\tpad0: u32,\n\tpad1: u32,\n\tpad2: u32,\n};\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var t_lut : texture_2d<f32>;\n@group(0) @binding(2) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0), vec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0), vec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0), vec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {\n\tlet r = rgb.r; let g = rgb.g; let b = rgb.b;\n\tlet cmax = max(r, max(g, b));\n\tlet cmin = min(r, min(g, b));\n\tlet delta = cmax - cmin;\n\n\tvar h = 0.0;\n\tvar s = 0.0;\n\tlet l = (cmax + cmin) * 0.5;\n\n\tif (delta > 1e-5) {\n\t\ts = delta / (1.0 - abs(2.0 * l - 1.0));\n\t\tif (cmax == r) {\n\t\t\th = ((g - b) / delta) % 6.0;\n\t\t} else if (cmax == g) {\n\t\t\th = (b - r) / delta + 2.0;\n\t\t} else {\n\t\t\th = (r - g) / delta + 4.0;\n\t\t}\n\t\th = h / 6.0;\n\t\tif (h < 0.0) { h = h + 1.0; }\n\t}\n\treturn vec3<f32>(h, s, l);\n}\n\nfn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {\n\tlet h = hsl.x; let s = hsl.y; let l = hsl.z;\n\tlet c = (1.0 - abs(2.0 * l - 1.0)) * s;\n\tlet x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));\n\tlet m = l - c * 0.5;\n\n\tvar rgb = vec3<f32>(0.0);\n\tlet hi = u32(h * 6.0) % 6u;\n\tif (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }\n\telse if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }\n\telse if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }\n\telse if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }\n\telse if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }\n\telse { rgb = vec3<f32>(c, 0.0, x); }\n\treturn rgb + vec3<f32>(m);\n}\n\nfn lut_sample(x: f32) -> f32 {\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_x = (x * (N - 1.0) + 0.5) / N;\n\treturn textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\tlet hsl = rgb_to_hsl(rgb);\n\n\tvar out_hsl = hsl;\n\n\tif (u.mode == 0u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);\n\t} else if (u.mode == 1u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else if (u.mode == 2u) {\n\t\tlet adj = lut_sample(hsl.z);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else {\n\t\tlet adj = lut_sample(hsl.y);\n\t\tout_hsl.y = clamp(adj, 0.0, 1.0);\n\t}\n\n\tlet out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(out_rgb * src.a, src.a);\n}\n`;\nconst rgbResourceCache = /* @__PURE__ */ new WeakMap();\nconst hslResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRgbResources(device, format) {\n\tlet res = rgbResourceCache.get(device);\n\tif (!res) {\n\t\tconst lutBGL = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst srcBGL = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"curves-rgb.wgsl\",\n\t\t\tcode: CURVES_RGB_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"CurvesRgbPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [lutBGL, srcBGL] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t}),\n\t\t\tlutBindGroupLayout: lutBGL,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\trgbResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getHslResources(device, format) {\n\tlet res = hslResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] });\n\t\tconst srcBGL = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"curves-hsl.wgsl\",\n\t\t\tcode: CURVES_HSL_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"CurvesHslPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, srcBGL] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\thslResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst LUT_CACHE_LIMIT = 32;\nconst deviceTextureCache = /* @__PURE__ */ new WeakMap();\nfunction getLut(device, configKey, build) {\n\tlet cache = deviceTextureCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdeviceTextureCache.set(device, cache);\n\t}\n\tconst hit = cache.get(configKey);\n\tif (hit) {\n\t\tcache.delete(configKey);\n\t\tcache.set(configKey, hit);\n\t\treturn hit;\n\t}\n\tconst texture = build();\n\tcache.set(configKey, texture);\n\tif (cache.size > LUT_CACHE_LIMIT) {\n\t\tconst [oldestKey, oldest] = cache.entries().next().value;\n\t\tcache.delete(oldestKey);\n\t\toldest.destroy();\n\t}\n\treturn texture;\n}\nfunction buildRgbLut(device, op) {\n\tconst masterSpline = solveMonotonicSpline(op.master || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst redSpline = solveMonotonicSpline(op.red || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst greenSpline = solveMonotonicSpline(op.green || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst blueSpline = solveMonotonicSpline(op.blue || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst masterVal = masterSpline(i / (LUT_SIZE - 1));\n\t\tconst r = Math.max(0, Math.min(1, redSpline(masterVal)));\n\t\tconst g = Math.max(0, Math.min(1, greenSpline(masterVal)));\n\t\tconst b = Math.max(0, Math.min(1, blueSpline(masterVal)));\n\t\tlutData[i * 4 + 0] = Math.round(r * 255);\n\t\tlutData[i * 4 + 1] = Math.round(g * 255);\n\t\tlutData[i * 4 + 2] = Math.round(b * 255);\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nfunction buildHslLut(device, points) {\n\tconst spline = solveMonotonicSpline(points);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst u = i / (LUT_SIZE - 1);\n\t\tconst val = Math.round(Math.max(0, Math.min(1, spline(u))) * 255);\n\t\tlutData[i * 4 + 0] = val;\n\t\tlutData[i * 4 + 1] = val;\n\t\tlutData[i * 4 + 2] = val;\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nconst HSL_MODE_MAP = {\n\t\"hue-vs-hue\": 0,\n\t\"hue-vs-sat\": 1,\n\t\"lum-vs-sat\": 2,\n\t\"sat-vs-sat\": 3\n};\nconst HSL_CURVE_KEY_MAP = {\n\t\"hue-vs-hue\": \"hueVsHue\",\n\t\"hue-vs-sat\": \"hueVsSat\",\n\t\"lum-vs-sat\": \"lumVsSat\",\n\t\"sat-vs-sat\": \"satVsSat\"\n};\nconst CurvesWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Curves\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.nodeId || \"curves_fallback\";\n\tconst curveType = op.curveType || \"rgb\";\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tif (curveType === \"rgb\") {\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tmaster: op.master,\n\t\t\tred: op.red,\n\t\t\tgreen: op.green,\n\t\t\tblue: op.blue\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildRgbLut(ctx.device, op));\n\t\tconst { pipeline, lutBindGroupLayout, srcBindGroupLayout } = getRgbResources(ctx.device, ctx.renderer.format);\n\t\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\trenderPass.setPipeline(pipeline);\n\t\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\t\tlayout: lutBindGroupLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}));\n\t\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler));\n\t\trenderPass.draw(4);\n\t\trenderPass.end();\n\t} else {\n\t\tconst hslPoints = op[HSL_CURVE_KEY_MAP[curveType]] || [{\n\t\t\tx: 0,\n\t\t\ty: .5\n\t\t}, {\n\t\t\tx: 1,\n\t\t\ty: .5\n\t\t}];\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tpoints: hslPoints\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildHslLut(ctx.device, hslPoints));\n\t\tconst uniformData = new Uint32Array([\n\t\t\tHSL_MODE_MAP[curveType] ?? 0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\t\tconst { pipeline, uniformLayout, srcBindGroupLayout } = getHslResources(ctx.device, ctx.renderer.format);\n\t\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: outTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\trenderPass.setPipeline(pipeline);\n\t\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: lut.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}));\n\t\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler));\n\t\trenderPass.draw(4);\n\t\trenderPass.end();\n\t}\n\tcomputeHistogramFromEncoder(ctx.device, encoder, outTex, nodeId);\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: props.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nconst rendererNode = defineRenderer({ WebGPURenderer: CurvesWebGPURenderer });\nvar renderers_default = rendererNode;\n\n//#endregion\nexport { renderers_default as n, solveMonotonicSpline as r, rendererNode as t };\n//# sourceMappingURL=renderers-BlDhAHo2.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { TemporalDeflickerPipeline } from \"@gitframes/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nfunction resolveVal(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"number\") return Number.isFinite(val) ? val : fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t}\n\tif (typeof val === \"function\") try {\n\t\tconst n$1 = Number(val({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t}));\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction resolveProp(op, fieldName, defaultValue, minVal, maxVal, frame, fps) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst input = handleId ? op.inputs?.[handleId] : null;\n\tlet raw;\n\tif (input?.connectionValid && input.outputItem) {\n\t\tconst outData = input.outputItem.data;\n\t\traw = outData && typeof outData === \"object\" && \"offset\" in outData ? outData.offset : input.outputItem.data;\n\t} else raw = op[fieldName];\n\tconst resolved = resolveVal(raw, defaultValue, frame, fps);\n\treturn Math.max(minVal, Math.min(maxVal, resolved));\n}\nconst pipelineCache = /* @__PURE__ */ new Map();\nfunction getOrCreatePipeline(device, key) {\n\tlet pipe = pipelineCache.get(key);\n\tif (!pipe) {\n\t\tpipe = new TemporalDeflickerPipeline(device);\n\t\tpipelineCache.set(key, pipe);\n\t}\n\treturn pipe;\n}\nconst TemporalDeflickerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"TemporalDeflicker\" && op.op !== \"Deflicker\") return;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst srcTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst srcView = srcTex.createView();\n\tctx.renderer.beginFrame(encoder, srcView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t}, srcView, srcTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst blendWeight = resolveProp(op, \"blendWeight\", .35, 0, 1, frame, fps);\n\tconst disocclusionThreshold = resolveProp(op, \"disocclusionThreshold\", .15, .01, 1, frame, fps);\n\tconst maxMotionPixels = resolveProp(op, \"maxMotionPixels\", 64, 1, 256, frame, fps);\n\tconst scale = resolveProp(op, \"scale\", .5, .1, 1, frame, fps);\n\tconst windowSize = Math.round(resolveProp(op, \"windowSize\", 2, 1, 5, frame, fps));\n\tconst pipelineKey = props.virtualMedia?.metadata?.id || op.id || `deflicker_${props.renderId ?? \"global\"}`;\n\tconst deflickerPipe = getOrCreatePipeline(ctx.device, pipelineKey);\n\tif (frame === 0) deflickerPipe.reset();\n\tconst deflickeredTex = deflickerPipe.execute(srcTex, {\n\t\tblendWeight,\n\t\tdisocclusionThreshold,\n\t\tmaxMotionPixels,\n\t\tscale,\n\t\twindowSize\n\t}, encoder);\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"load\");\n\tconst opacity = typeof op.opacity === \"number\" ? op.opacity : 1;\n\tctx.renderer.drawTexture(finalPass, deflickeredTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t}, { opacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ci7KAuBM.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst STRENGTH_MIN = 0;\nconst STRENGTH_MAX = 500;\nfunction clamp(value, min, max) {\n\treturn Math.min(max, Math.max(min, value));\n}\nconst DISPLACEMENT_MAP_SHADER = `\nstruct DisplacementUniforms {\n strengthX : f32,\n strengthY : f32,\n xChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n yChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n\n wrapMode : f32, // 0=Clamp, 1=Repeat, 2=Mirror\n hasSignalX : f32,\n hasSignalY : f32,\n _pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : DisplacementUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n@group(2) @binding(0) var mapTex : texture_2d<f32>;\n@group(2) @binding(1) var mapSamp : sampler;\n@group(3) @binding(0) var sigXTex : texture_2d<f32>;\n@group(3) @binding(1) var sigYTex : texture_2d<f32>;\n@group(3) @binding(2) var sigSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn extractChannel(color: vec4<f32>, channel: f32) -> f32 {\n if (channel < 0.5) { return color.r; }\n if (channel < 1.5) { return color.g; }\n if (channel < 2.5) { return color.b; }\n if (channel < 3.5) { return color.a; }\n // Luminance\n return dot(color.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn applyWrap(coord: f32, mode: f32) -> f32 {\n if (mode < 0.5) {\n // Clamp\n return clamp(coord, 0.0, 1.0);\n }\n if (mode < 1.5) {\n // Repeat\n return fract(coord);\n }\n // Mirror\n let t = fract(coord * 0.5) * 2.0;\n if (t > 1.0) {\n return 2.0 - t;\n }\n return t;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let mapColor = textureSampleLevel(mapTex, mapSamp, in.uv, 0.0);\n\n // Extract displacement values from chosen channels, centered around 0.5 and gated by alpha\n // NOTE (P3, not changed here): this yields a max offset of strength/2 px at\n // either extreme (peak-to-peak swing == strength). Confirm with design whether\n // \"strength in pixels\" should mean peak amplitude instead — see review doc.\n let dispX = (extractChannel(mapColor, u.xChannel) - 0.5) * mapColor.a;\n let dispY = (extractChannel(mapColor, u.yChannel) - 0.5) * mapColor.a;\n\n // Get strength, potentially from signal textures\n var sX = u.strengthX;\n var sY = u.strengthY;\n if (u.hasSignalX > 0.5) {\n sX = textureSampleLevel(sigXTex, sigSamp, in.uv, 0.0).r;\n }\n if (u.hasSignalY > 0.5) {\n sY = textureSampleLevel(sigYTex, sigSamp, in.uv, 0.0).r;\n }\n\n // Compute displacement in UV space (strength is in pixels, convert to UV)\n let srcDims = vec2<f32>(textureDimensions(srcTex));\n let offset = vec2<f32>(\n dispX * sX / srcDims.x,\n dispY * sY / srcDims.y,\n );\n\n let displaced = vec2<f32>(\n applyWrap(in.uv.x + offset.x, u.wrapMode),\n applyWrap(in.uv.y + offset.y, u.wrapMode),\n );\n\n return textureSampleLevel(srcTex, srcSamp, displaced, 0.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(8);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsrcTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tmapTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getDisplacementResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `displacement_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `displacement_${format}.wgsl`,\n\t\t\tcode: DISPLACEMENT_MAP_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `DisplacementMapPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.mapTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tmapTextureLayout: layouts.mapTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction channelToFloat(ch) {\n\tswitch (ch) {\n\t\tcase \"Green\": return 1;\n\t\tcase \"Blue\": return 2;\n\t\tcase \"Alpha\": return 3;\n\t\tcase \"Luminance\": return 4;\n\t\tdefault: return 0;\n\t}\n}\nfunction wrapModeToFloat(mode) {\n\tswitch (mode) {\n\t\tcase \"Repeat\": return 1;\n\t\tcase \"Mirror\": return 2;\n\t\tdefault: return 0;\n\t}\n}\nfunction resolveSignalField(op, fieldName, defaultValue) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && signalInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = clamp(Number(signalInput.outputItem.data ?? defaultValue), STRENGTH_MIN, STRENGTH_MAX);\n\telse value = Number(op[fieldName] ?? defaultValue);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst DisplacementMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"DisplacementMap\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tconst mapMedia = op.mapMedia;\n\tif (!sourceMedia || !mapMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst strengthXInfo = resolveSignalField(op, \"strengthX\", 50);\n\tconst strengthYInfo = resolveSignalField(op, \"strengthY\", 50);\n\tconst srcTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst srcView = srcTex.createView();\n\tctx.renderer.beginFrame(encoder, srcView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-c0`,\n\t\texcludeTextures: [...props.excludeTextures || [], srcTex]\n\t}, srcView, srcTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst mapTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\ttargetTexture,\n\t\tsrcTex\n\t]);\n\tconst mapView = mapTex.createView();\n\tctx.renderer.beginFrame(encoder, mapView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(mapMedia, {\n\t\t...props,\n\t\tvirtualMedia: mapMedia,\n\t\trenderId: `${props.renderId}-c1`,\n\t\texcludeTextures: [\n\t\t\t...props.excludeTextures || [],\n\t\t\tsrcTex,\n\t\t\tmapTex\n\t\t]\n\t}, mapView, mapTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, mapTextureLayout: mapLayout, signalTextureLayout: sigLayout } = getDisplacementResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet sigXView;\n\tlet sigYView;\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tif (strengthXInfo.hasSignal && strengthXInfo.sd) sigXView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthXInfo.sd.nodeId ?? \"displace_sx_sig\", elapsedSeconds, durationSeconds, strengthXInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigXView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tif (strengthYInfo.hasSignal && strengthYInfo.sd) sigYView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthYInfo.sd.nodeId ?? \"displace_sy_sig\", elapsedSeconds, durationSeconds, strengthYInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigYView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformData[0] = strengthXInfo.value;\n\tuniformData[1] = strengthYInfo.value;\n\tuniformData[2] = channelToFloat(op.xChannel);\n\tuniformData[3] = channelToFloat(op.yChannel);\n\tuniformData[4] = wrapModeToFloat(op.wrapMode);\n\tuniformData[5] = strengthXInfo.hasSignal ? 1 : 0;\n\tuniformData[6] = strengthYInfo.hasSignal ? 1 : 0;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tmapTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcLayout, srcTex, sampler));\n\trenderPass.setBindGroup(2, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, mapLayout, mapTex, sampler));\n\trenderPass.setBindGroup(3, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sigXView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sigYView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DisplacementMapWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Brm2CX39.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst FILM_GRAIN_SHADER = `\nstruct FilmUniforms {\n strength : f32,\n size : f32,\n monochrome : f32,\n animated : f32,\n\n frameIndex : f32, // discrete per-output-frame counter (speed-scaled), NOT continuous time\n shadows : f32,\n midtones : f32,\n highlights : f32,\n\n hasSignal : f32,\n _pad0 : f32,\n _pad1 : f32,\n _pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : FilmUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var signalTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn hash2D(p: vec2<f32>) -> f32 {\n var p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\nfn smoothNoise(p: vec2<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n\n // Quintic interpolation\n let w = pf * pf * pf * (pf * (pf * 6.0 - 15.0) + 10.0);\n\n let h00 = hash2D(pi + vec2<f32>(0.0, 0.0));\n let h10 = hash2D(pi + vec2<f32>(1.0, 0.0));\n let h01 = hash2D(pi + vec2<f32>(0.0, 1.0));\n let h11 = hash2D(pi + vec2<f32>(1.0, 1.0));\n\n let n0 = mix(h00, h10, w.x);\n let n1 = mix(h01, h11, w.x);\n\n return mix(n0, n1, w.y);\n}\n\n// Produces a pseudo-random, NON-directional offset that changes once per\n// output frame. This replaces the old time * constant translation, which\n// smoothly scrolled the noise lattice in a fixed direction (17.31, 43.19)\n// every frame -- that's why grain visibly drifted instead of flickering.\n//\n// The frame index is wrapped into a bounded range before hashing so the\n// pattern stays high quality over long renders (f32 precision degrades on\n// very large hash inputs); the wrap period is long enough that any repeat\n// is imperceptible in grain.\nfn frameJitter(frameIndex: f32) -> vec2<f32> {\n let raw = floor(frameIndex);\n let n = raw - floor(raw / 4096.0) * 4096.0;\n let hx = hash2D(vec2<f32>(n, n * 1.6180339887));\n let hy = hash2D(vec2<f32>(n * 3.14159265, n + 91.7));\n return vec2<f32>(hx, hy) * 1024.0;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n var strength = u.strength;\n if (u.hasSignal > 0.5) {\n let sigVal = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n strength = sigVal;\n }\n\n if (strength <= 0.0) {\n return color;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let grainCoord = (in.uv * dimensions) / u.size;\n\n let jitter = select(vec2<f32>(0.0), frameJitter(u.frameIndex), u.animated > 0.5);\n\n let luminance = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n // Luminance response curve logic\n let shadowFactor = exp(-luminance * luminance / 0.1);\n let highlightFactor = exp(-(1.0 - luminance) * (1.0 - luminance) / 0.1);\n let midtoneFactor = max(0.0, 1.0 - shadowFactor - highlightFactor);\n\n let response = (u.shadows * shadowFactor) + (u.midtones * midtoneFactor) + (u.highlights * highlightFactor);\n let finalGrainStrength = (strength / 100.0) * response * 0.15; // Normalized scale\n\n if (u.monochrome > 0.5) {\n let seed = grainCoord + jitter;\n let noiseVal = smoothNoise(seed);\n let grain = (noiseVal - 0.5) * finalGrainStrength;\n color.r += grain;\n color.g += grain;\n color.b += grain;\n } else {\n // Fixed per-channel spatial offsets (unrelated to time) keep the\n // R/G/B lattices decorrelated from each other; temporal variation\n // comes entirely from jitter now.\n let seedR = grainCoord + jitter;\n let seedG = grainCoord + jitter + vec2<f32>(173.3, 281.9);\n let seedB = grainCoord + jitter + vec2<f32>(391.7, 127.1);\n\n let noiseR = smoothNoise(seedR);\n let noiseG = smoothNoise(seedG);\n let noiseB = smoothNoise(seedB);\n\n color.r += (noiseR - 0.5) * finalGrainStrength;\n color.g += (noiseG - 0.5) * finalGrainStrength;\n color.b += (noiseB - 0.5) * finalGrainStrength;\n }\n\n return clamp(color, vec4<f32>(0.0), vec4<f32>(1.0));\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst filmGrainUniformData = new Float32Array(12);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tfilmUniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getFilmGrainResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `filmgrain_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst filmModule = device.createShaderModule({\n\t\t\tlabel: `filmgrain_${format}.wgsl`,\n\t\t\tcode: FILM_GRAIN_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `FilmGrainPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.filmUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: filmModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: filmModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tfilmPipeline: pipeline,\n\t\tfilmUniformLayout: layouts.filmUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst FilmGrainWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"FilmGrain\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst signalInput = op.strengthHandleId ? op.inputs?.[op.strengthHandleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tconst resolveVal = (val, fallback) => {\n\t\tif (val === void 0 || val === null) return fallback;\n\t\tif (typeof val === \"object\" && \"value\" in val) val = val.value;\n\t\telse if (typeof val === \"function\") val = val(frame, fps);\n\t\tconst n = Number(val);\n\t\treturn Number.isFinite(n) ? n : fallback;\n\t};\n\tlet strength = 0;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") strength = Math.max(0, Number(signalInput.outputItem.data ?? 0));\n\telse strength = Math.max(0, resolveVal(op.strength, 15));\n\telse if (sd) {\n\t\tstrength = Math.max(0, Number(sd.offset ?? 0));\n\t\thasStaticSignal = true;\n\t}\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst { filmPipeline: pipeline, filmUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getFilmGrainResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet signalView;\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tif (hasStaticSignal && sd) signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"filmgrain_strength_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\telse signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tconst size = Math.max(.5, resolveVal(op.size, 1.5)) * dpiScale;\n\tconst animated = op.animated ?? true;\n\tconst grainFrameIndex = frame * (resolveVal(op.speed, 50) / 50);\n\tfilmGrainUniformData[0] = strength;\n\tfilmGrainUniformData[1] = size;\n\tfilmGrainUniformData[2] = op.monochrome ?? true ? 1 : 0;\n\tfilmGrainUniformData[3] = animated ? 1 : 0;\n\tfilmGrainUniformData[4] = grainFrameIndex;\n\tfilmGrainUniformData[5] = resolveVal(op.shadows, .2);\n\tfilmGrainUniformData[6] = resolveVal(op.midtones, 1);\n\tfilmGrainUniformData[7] = resolveVal(op.highlights, .2);\n\tfilmGrainUniformData[8] = hasStaticSignal ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(filmGrainUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst filmPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tfilmPass.setPipeline(pipeline);\n\tfilmPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tfilmPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\tfilmPass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: signalView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t}));\n\tfilmPass.draw(4);\n\tfilmPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: resolveVal(op.opacity, 1) });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: FilmGrainWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CeBgXAeP.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FLIP_SHADER = `\nstruct FlipUniforms {\n\tflipH : f32,\n\tflipV : f32,\n\tdiagonal : f32,\n\tsymmetry : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : FlipUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar uv = in.uv;\n\n\t// 1. Split-Mirror / Symmetry\n\tif (u.symmetry > 0.5 && u.symmetry < 1.5) {\n\t\t// leftToRight: mirror left half to right half\n\t\tuv.x = select(uv.x, 1.0 - uv.x, uv.x > 0.5);\n\t} else if (u.symmetry > 1.5 && u.symmetry < 2.5) {\n\t\t// rightToLeft: mirror right half to left half\n\t\tuv.x = select(1.0 - uv.x, uv.x, uv.x > 0.5);\n\t} else if (u.symmetry > 2.5 && u.symmetry < 3.5) {\n\t\t// topToBottom: mirror top half to bottom half\n\t\tuv.y = select(uv.y, 1.0 - uv.y, uv.y > 0.5);\n\t} else if (u.symmetry > 3.5 && u.symmetry < 4.5) {\n\t\t// bottomToTop: mirror bottom half to top half\n\t\tuv.y = select(1.0 - uv.y, uv.y, uv.y > 0.5);\n\t} else if (u.symmetry > 4.5) {\n\t\t// quadrant: 4-way kaleidoscopic symmetry\n\t\tuv.x = select(uv.x, 1.0 - uv.x, uv.x > 0.5);\n\t\tuv.y = select(uv.y, 1.0 - uv.y, uv.y > 0.5);\n\t}\n\n\t// 2. Diagonal Swap (Transposition: x <-> y)\n\tif (u.diagonal > 0.5) {\n\t\tlet temp = uv.x;\n\t\tuv.x = uv.y;\n\t\tuv.y = temp;\n\t}\n\n\t// 3. Horizontal / Vertical Flip\n\tif (u.flipH > 0.5) {\n\t\tuv.x = 1.0 - uv.x;\n\t}\n\tif (u.flipV > 0.5) {\n\t\tuv.y = 1.0 - uv.y;\n\t}\n\n\treturn textureSampleLevel(tex, samp, uv, 0.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getFlipResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\ttexture: { sampleType: \"float\" }\n\t}, {\n\t\tbinding: 1,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tsampler: { type: \"filtering\" }\n\t}] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_FLIP_SHADER });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, textureLayout] });\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat: targetFormat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"src-alpha\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Flip\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst sourceWidth = childMedia.metadata?.width ?? props.containerWidth ?? width;\n\tconst sourceHeight = childMedia.metadata?.height ?? props.containerHeight ?? height;\n\tconst childTex = ctx.renderer.getTemporaryTexture(sourceWidth, sourceHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, sourceWidth, sourceHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tcontainerWidth: sourceWidth,\n\t\tcontainerHeight: sourceHeight,\n\t\tvirtualMedia: childMedia\n\t}, childView, childTex, sourceWidth, sourceHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout } = getFlipResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst mode = op.mode ?? \"horizontal\";\n\tlet isFlipH = false;\n\tlet isFlipV = false;\n\tlet isDiag = false;\n\tif (mode === \"horizontal\") isFlipH = true;\n\telse if (mode === \"vertical\") isFlipV = true;\n\telse if (mode === \"both\") {\n\t\tisFlipH = true;\n\t\tisFlipV = true;\n\t} else if (mode === \"diagonal\") isDiag = true;\n\telse if (mode === \"antiDiagonal\") {\n\t\tisDiag = true;\n\t\tisFlipH = true;\n\t\tisFlipV = true;\n\t} else if (mode === \"custom\") {\n\t\tisFlipH = op.horizontal ?? true;\n\t\tisFlipV = op.vertical ?? false;\n\t\tisDiag = op.diagonal ?? false;\n\t}\n\tlet symVal = 0;\n\tif (op.symmetry === \"leftToRight\") symVal = 1;\n\telse if (op.symmetry === \"rightToLeft\") symVal = 2;\n\telse if (op.symmetry === \"topToBottom\") symVal = 3;\n\telse if (op.symmetry === \"bottomToTop\") symVal = 4;\n\telse if (op.symmetry === \"quadrant\") symVal = 5;\n\tuniformData[0] = isFlipH ? 1 : 0;\n\tuniformData[1] = isFlipV ? 1 : 0;\n\tuniformData[2] = isDiag ? 1 : 0;\n\tuniformData[3] = symVal;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: childTex.createView()\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, uBindGroup);\n\trenderPass.setBindGroup(1, tBindGroup);\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CS09Wd2n.mjs.map","import { parseColor, signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_GRADIENT_MAP_SHADER = `\nstruct GradientStop {\n\tpos : vec4<f32>,\n\tcol : vec4<f32>,\n};\n\nstruct GradientMapUniforms {\n\tnumStops : f32,\n\tisSmooth : f32,\n\tdither : f32,\n\topacity : f32,\n\n\thasOpacitySig : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\n\tstops : array<GradientStop, 16>,\n};\n\n@group(0) @binding(0) var<uniform> u : GradientMapUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(1) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn ditherNoise(pos: vec2<f32>) -> f32 {\n\tlet p = fract(pos * vec2<f32>(0.1031, 0.1030));\n\tlet d = dot(p, p.yx + 33.33);\n\treturn fract((p.x + p.y) * d) - 0.5;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\t// ITU-R BT.709 Luminance\n\tvar lum = dot(rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\n\tif (u.dither > 0.5) {\n\t\tlet d = ditherNoise(in.pos.xy) * (1.0 / 255.0);\n\t\tlum = clamp(lum + d, 0.0, 1.0);\n\t} else {\n\t\tlum = clamp(lum, 0.0, 1.0);\n\t}\n\n\tlet count = i32(clamp(u.numStops, 2.0, 16.0));\n\tvar gradColor = u.stops[0].col.rgb;\n\n\tif (lum <= u.stops[0].pos.x) {\n\t\tgradColor = u.stops[0].col.rgb;\n\t} else if (lum >= u.stops[count - 1].pos.x) {\n\t\tgradColor = u.stops[count - 1].col.rgb;\n\t} else {\n\t\tfor (var i = 0; i < 15; i = i + 1) {\n\t\t\tif (i >= count - 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlet p0 = u.stops[i].pos.x;\n\t\t\tlet p1 = u.stops[i + 1].pos.x;\n\n\t\t\tif (lum >= p0 && lum <= p1) {\n\t\t\t\tlet range = max(p1 - p0, 1e-5);\n\t\t\t\tlet t = clamp((lum - p0) / range, 0.0, 1.0);\n\t\t\t\tif (u.isSmooth > 0.5) {\n\t\t\t\t\tgradColor = mix(u.stops[i].col.rgb, u.stops[i + 1].col.rgb, t);\n\t\t\t\t} else {\n\t\t\t\t\tgradColor = u.stops[i].col.rgb;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar opacity = u.opacity;\n\tif (u.hasOpacitySig > 0.5) {\n\t\topacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\topacity = clamp(opacity, 0.0, 1.0);\n\n\tlet finalRgb = mix(rgb, gradColor, opacity);\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nfunction getGradientMapResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = device.createBindGroupLayout({\n\t\tlabel: \"GradientMapUniformLayout\",\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}]\n\t});\n\tconst textureLayout = device.createBindGroupLayout({\n\t\tlabel: \"GradientMapTextureLayout\",\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}]\n\t});\n\tconst signalLayout = device.createBindGroupLayout({\n\t\tlabel: \"GradientMapSignalLayout\",\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}]\n\t});\n\tconst module = device.createShaderModule({\n\t\tlabel: \"GradientMapShaderModule\",\n\t\tcode: WGSL_GRADIENT_MAP_SHADER\n\t});\n\tres = {\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"GradientMapPipeline\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(136);\nconst GradientMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"GradientMap\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst sortedStops = [...Array.isArray(op.stops) ? op.stops : [{\n\t\tposition: 0,\n\t\tcolor: \"#000000\"\n\t}, {\n\t\tposition: 1,\n\t\tcolor: \"#ffffff\"\n\t}]].sort((a, b) => a.position - b.position);\n\tconst numStops = Math.min(Math.max(sortedStops.length, 2), 16);\n\tconst opacityHandleId = op.opacityHandleId;\n\tconst opacitySignalInput = opacityHandleId ? op.inputs?.[opacityHandleId] : null;\n\tconst hasOpacitySig = !!(opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Signal\");\n\tconst opacitySigData = hasOpacitySig ? opacitySignalInput?.outputItem?.data : null;\n\tlet opacityVal = Number(op.opacity ?? 1);\n\tif (!hasOpacitySig && opacitySignalInput?.connectionValid && opacitySignalInput.outputItem?.type === \"Number\") opacityVal = Number(opacitySignalInput.outputItem.data ?? 1);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tlet opacityView;\n\tif (hasOpacitySig && opacitySigData) opacityView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, opacitySigData.nodeId ?? \"gradient_map_opacity\", elapsedSeconds, durationSeconds, opacitySigData, width, height, props.renderId, frame, fps);\n\telse opacityView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = numStops;\n\tuniformBufferData[1] = op.smooth === false ? 0 : 1;\n\tuniformBufferData[2] = op.dither === false ? 0 : 1;\n\tuniformBufferData[3] = opacityVal;\n\tuniformBufferData[4] = hasOpacitySig ? 1 : 0;\n\tuniformBufferData[5] = 0;\n\tuniformBufferData[6] = 0;\n\tuniformBufferData[7] = 0;\n\tfor (let i = 0; i < 16; i++) {\n\t\tconst stop = sortedStops[Math.min(i, numStops - 1)];\n\t\tconst baseIdx = 8 + i * 8;\n\t\tconst parsed = parseColor(stop.color);\n\t\tuniformBufferData[baseIdx + 0] = stop.position;\n\t\tuniformBufferData[baseIdx + 1] = 0;\n\t\tuniformBufferData[baseIdx + 2] = 0;\n\t\tuniformBufferData[baseIdx + 3] = 0;\n\t\tuniformBufferData[baseIdx + 4] = parsed.r;\n\t\tuniformBufferData[baseIdx + 5] = parsed.g;\n\t\tuniformBufferData[baseIdx + 6] = parsed.b;\n\t\tuniformBufferData[baseIdx + 7] = parsed.a;\n\t}\n\tconst { pipeline, uniformLayout, textureLayout, signalLayout } = getGradientMapResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler));\n\trenderPass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: signalLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: opacityView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: props.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: GradientMapWebGPURenderer };\n\n//#endregion\nexport { GradientMapWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-5Ajbk-l7.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { parseColor, signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HALFTONE_SHADER = `\nstruct HalftoneUniforms {\n mode : f32, // 0 = Monochrome, 1 = CMYK\n dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square\n frequency : f32,\n angle : f32,\n\n contrast : f32,\n invert : f32,\n isSmooth : f32,\n opacity : f32,\n\n dotColor : vec4<f32>,\n paperColor : vec4<f32>,\n\n cyanAngle : f32,\n magentaAngle : f32,\n yellowAngle : f32,\n blackAngle : f32,\n\n hasFreqSig : f32,\n hasAngleSig : f32,\n hasContrastSig : f32,\n hasCyanSig : f32,\n\n hasMagSig : f32,\n hasYelSig : f32,\n hasBlkSig : f32,\n hasOpacitySig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HalftoneUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var freqSigTex : texture_2d<f32>;\n@group(2) @binding(1) var angleSigTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;\n@group(2) @binding(4) var magSigTex : texture_2d<f32>;\n@group(2) @binding(5) var yelSigTex : texture_2d<f32>;\n@group(2) @binding(6) var blkSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nconst PI: f32 = 3.141592653589793;\n\nfn getCellCenterUV(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32\n) -> vec2<f32> {\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);\n let cellCenterRot = cellIndex * cellSize;\n let cellCenterPixelPos = invRot * cellCenterRot;\n let cellCenterUV = (cellCenterPixelPos + center) / dimensions;\n return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));\n}\n\nfn evalDotCoverage(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32,\n shape: f32,\n density: f32,\n contrastMultiplier: f32,\n isSmooth: f32\n) -> f32 {\n var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);\n if (d <= 0.0001) { return 0.0; }\n if (d >= 0.9999) { return 1.0; }\n\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);\n\n var spot: f32 = 0.0;\n\n if (shape < 0.5) {\n // 0: Euclidean Round Dot\n spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);\n } else if (shape < 1.5) {\n // 1: Diamond\n spot = abs(cellUV.x) + abs(cellUV.y);\n } else if (shape < 2.5) {\n // 2: Line\n spot = abs(cellUV.y) * 2.0;\n } else {\n // 3: Square\n spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;\n }\n\n let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);\n\n return select(\n step(spot, d),\n smoothstep(d + edgeWidth, d - edgeWidth, spot),\n isSmooth > 0.5\n );\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n if (sourceCol.a < 1e-5) {\n return sourceCol;\n }\n\n // Resolve parameter overrides or dynamic signals\n var frequency = u.frequency;\n if (u.hasFreqSig > 0.5) {\n frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var baseAngle = u.angle;\n if (u.hasAngleSig > 0.5) {\n baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var contrast = u.contrast;\n if (u.hasContrastSig > 0.5) {\n contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var cyanAngle = u.cyanAngle;\n if (u.hasCyanSig > 0.5) {\n cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var magentaAngle = u.magentaAngle;\n if (u.hasMagSig > 0.5) {\n magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var yellowAngle = u.yellowAngle;\n if (u.hasYelSig > 0.5) {\n yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var blackAngle = u.blackAngle;\n if (u.hasBlkSig > 0.5) {\n blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var effectOpacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let unpremult = sourceCol.rgb / sourceCol.a;\n\n var screenedRgb: vec3<f32>;\n\n if (u.mode < 0.5) {\n // --- Monochrome Mode ---\n let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);\n let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);\n let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);\n let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n var inkDensity = 1.0 - luminance;\n if (u.invert > 0.5) {\n inkDensity = luminance;\n }\n\n let coverage = evalDotCoverage(\n in.uv,\n dimensions,\n baseAngle,\n frequency,\n u.dotShape,\n inkDensity,\n contrast,\n u.isSmooth\n );\n\n screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);\n } else {\n // --- CMYK Mode ---\n let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);\n let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);\n let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);\n let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);\n let invKC = 1.0 - kC;\n var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);\n\n let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);\n let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);\n let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);\n let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);\n let invKM = 1.0 - kM;\n var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);\n\n let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);\n let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);\n let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);\n let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);\n let invKY = 1.0 - kY;\n var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);\n\n let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);\n let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);\n let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);\n var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);\n\n if (u.invert > 0.5) {\n densC = 1.0 - densC;\n densM = 1.0 - densM;\n densY = 1.0 - densY;\n densK = 1.0 - densK;\n }\n\n let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);\n let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);\n let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);\n let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);\n\n // Subtractive synthesis onto paper substrate\n let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);\n let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);\n let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);\n\n screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));\n }\n\n // Apply effect opacity blend\n let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));\n return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getHalftoneResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `halftone_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst halftoneModule = device.createShaderModule({\n\t\t\tlabel: `halftone_${format}.wgsl`,\n\t\t\tcode: WGSL_HALFTONE_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `HalftonePipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: halftoneModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: halftoneModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\thalftonePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst HalftoneScreenWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HalftoneScreen\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"halftone_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && input.outputItem?.type === \"Signal\");\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse val = Math.max(minVal, Math.min(maxVal, Number(op[configKey] ?? defaultValue)));\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst freqRes = resolveBindable(\"frequency\", 30, 1, 200);\n\tconst angleRes = resolveBindable(\"angle\", 45, 0, 360);\n\tconst contrastRes = resolveBindable(\"contrast\", 1, .1, 5);\n\tconst cyanRes = resolveBindable(\"cyanAngle\", 15, 0, 360);\n\tconst magRes = resolveBindable(\"magentaAngle\", 75, 0, 360);\n\tconst yelRes = resolveBindable(\"yellowAngle\", 0, 0, 360);\n\tconst blkRes = resolveBindable(\"blackAngle\", 45, 0, 360);\n\tconst opacityRes = resolveBindable(\"opacity\", 1, 0, 1);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { halftonePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHalftoneResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst freqView = getSignalView(freqRes, \"freq_sig\");\n\tconst angleView = getSignalView(angleRes, \"angle_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst cyanView = getSignalView(cyanRes, \"cyan_sig\");\n\tconst magView = getSignalView(magRes, \"mag_sig\");\n\tconst yelView = getSignalView(yelRes, \"yel_sig\");\n\tconst blkView = getSignalView(blkRes, \"blk_sig\");\n\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\tconst modeVal = op.mode === \"CMYK\" ? 1 : 0;\n\tlet dotShapeVal = 0;\n\tif (op.dotShape === \"Diamond\") dotShapeVal = 1;\n\telse if (op.dotShape === \"Line\") dotShapeVal = 2;\n\telse if (op.dotShape === \"Square\") dotShapeVal = 3;\n\tconst dotCol = parseColor(op.dotColor ?? \"#000000\");\n\tconst paperCol = parseColor(op.paperColor ?? \"#ffffff\");\n\tconst halftoneUniformData = new Float32Array(28);\n\thalftoneUniformData[0] = modeVal;\n\thalftoneUniformData[1] = dotShapeVal;\n\thalftoneUniformData[2] = freqRes.val;\n\thalftoneUniformData[3] = angleRes.val;\n\thalftoneUniformData[4] = contrastRes.val;\n\thalftoneUniformData[5] = op.invert ? 1 : 0;\n\thalftoneUniformData[6] = op.smooth !== false ? 1 : 0;\n\thalftoneUniformData[7] = opacityRes.val;\n\thalftoneUniformData[8] = dotCol.r;\n\thalftoneUniformData[9] = dotCol.g;\n\thalftoneUniformData[10] = dotCol.b;\n\thalftoneUniformData[11] = dotCol.a;\n\thalftoneUniformData[12] = paperCol.r;\n\thalftoneUniformData[13] = paperCol.g;\n\thalftoneUniformData[14] = paperCol.b;\n\thalftoneUniformData[15] = paperCol.a;\n\thalftoneUniformData[16] = cyanRes.val;\n\thalftoneUniformData[17] = magRes.val;\n\thalftoneUniformData[18] = yelRes.val;\n\thalftoneUniformData[19] = blkRes.val;\n\thalftoneUniformData[20] = freqRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[21] = angleRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[22] = contrastRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[23] = cyanRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[24] = magRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[25] = yelRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[26] = blkRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[27] = opacityRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(halftoneUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst halftonePass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thalftonePass.setPipeline(pipeline);\n\thalftonePass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\thalftonePass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\thalftonePass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: freqView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: angleView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: contrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: cyanView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: magView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: yelView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: blkView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: opacityView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\thalftonePass.draw(4);\n\thalftonePass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CeLVEbxF.mjs.map","import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 250;\nconst highPassConfig = configBuilder().field(\"radius\", z.number().min(.1).max(MAX_RADIUS).default(3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius Signal\",\n\tdescription: \"The cutoff radius in pixels. Frequencies smaller than this radius are preserved.\"\n}).field(\"contrastBoost\", z.number().multipleOf(.01).min(1).max(10).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Contrast Boost Signal\",\n\tdescription: \"Multiplier applied to the extracted high-frequency detail delta.\"\n}).field(\"monochrome\", z.boolean().default(true), { description: \"When enabled, high-pass delta is converted to luminance before centering on 50% neutral gray.\" }).build();\nconst HighPassNodeConfigSchema = highPassConfig.schema;\nconst HighPassResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst HIGH_PASS_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HIGHPASS_UNIFORMS = `\nstruct HighPassUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tcontrastBoost : f32,\n\n\tmonochrome : f32,\n\thasRadiusSig : f32,\n\thasContrastSig : f32,\n\tisSecondPass : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HighPassUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar contrastBoost = u.contrastBoost;\n\tif (u.hasContrastSig > 0.5) {\n\t\tcontrastBoost = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\tif (radius <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn vec4<f32>(vec3<f32>(0.5) * origCol.a, origCol.a);\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet spatial_sigma = radius;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar blurred = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tblurred += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurResult = blurred / max(totalWeight, 1e-5);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// Pass 1: Intermediate horizontal blur\n\t\treturn blurResult;\n\t}\n\n\t// Pass 2: Vertical blur complete -> Calculate High Pass difference against original\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tlet origUnpremult = origCol.rgb / origCol.a;\n\tlet blurUnpremult = blurResult.rgb / max(blurResult.a, 1e-5);\n\tlet diff = origUnpremult - blurUnpremult;\n\n\tvar highPassRgb : vec3<f32>;\n\tif (u.monochrome > 0.5) {\n\t\tlet lumaDiff = dot(diff, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\thighPassRgb = vec3<f32>(0.5) + vec3<f32>(lumaDiff * contrastBoost);\n\t} else {\n\t\thighPassRgb = vec3<f32>(0.5) + diff * contrastBoost;\n\t}\n\n\tlet clampedRgb = clamp(highPassRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(clampedRgb * origCol.a, origCol.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst highPassUniformData = new Float32Array(8);\nfunction getHighPassResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst highPassUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst singleTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_HIGHPASS_UNIFORMS });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tconst res = {\n\t\thighPassUniformLayout,\n\t\tsingleTextureLayout,\n\t\tsignalTextureLayout,\n\t\thighPassPipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: targetFormat }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"HighPass\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"highpass_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t};\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 3), .1, MAX_RADIUS);\n\tconst contrastRes = resolveField(op.contrastBoostHandleId, Number(op.contrastBoost ?? 1), 1, 10);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { highPassPipeline: pipeline, highPassUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHighPassResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst createHighPassBindGroup1 = (inputTex, origTexture) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTexture.createView()\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[2] = radiusRes.val;\n\thighPassUniformData[3] = contrastRes.val;\n\thighPassUniformData[4] = op.monochrome ?? true ? 1 : 0;\n\thighPassUniformData[5] = radiusRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[6] = contrastRes.hasStaticSig ? 1 : 0;\n\thighPassUniformData[7] = 0;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: contrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\thighPassUniformData[0] = 1;\n\thighPassUniformData[1] = 0;\n\thighPassUniformData[7] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex1.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thPass.setPipeline(pipeline);\n\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: hBuffer }\n\t\t}]\n\t}));\n\thPass.setBindGroup(1, createHighPassBindGroup1(tmpTex, tmpTex));\n\thPass.setBindGroup(2, sigBindGroup);\n\thPass.draw(4);\n\thPass.end();\n\thighPassUniformData[0] = 0;\n\thighPassUniformData[1] = 1;\n\thighPassUniformData[7] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(highPassUniformData);\n\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex2.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvPass.setPipeline(pipeline);\n\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: vBuffer }\n\t\t}]\n\t}));\n\tvPass.setBindGroup(1, createHighPassBindGroup1(outTex1, tmpTex));\n\tvPass.setBindGroup(2, sigBindGroup);\n\tvPass.draw(4);\n\tvPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, HighPassResultSchema as i, HIGH_PASS_OUTPUT_TYPE_MAP as n, highPassConfig as o, HighPassNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-CWx5Dtic.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tconst singleTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\tcode: motionBlurWgsl\n\t\t});\n\t\tres = {\n\t\t\tmotionBlurPipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [motionBlurUniformLayout, singleTextureLayout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tconst tempTex = ctx.renderer.getTemporaryTexture(sourceWidth, sourceHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst tempView = tempTex.createView();\n\tpass.end();\n\tctx.renderer.beginFrame(encoder, tempView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, sourceWidth, sourceHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tcontainerWidth: sourceWidth,\n\t\tcontainerHeight: sourceHeight\n\t}, tempView, tempTex, sourceWidth, sourceHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst blurView = blurTex.createView();\n\t\tconst blurPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: blurView,\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\tblurPass.setPipeline(pipeline);\n\t\tblurPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}));\n\t\tblurPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler));\n\t\tblurPass.draw(4);\n\t\tblurPass.end();\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DBo4t48l.mjs.map","import { ColorSchema, ImageResultSchema, VideoResultSchema } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/shared/config.ts\nconst LAYER_STYLE_BLEND_MODES = [\n\t{\n\t\tvalue: \"normal\",\n\t\tlabel: \"Normal\"\n\t},\n\t{\n\t\tvalue: \"multiply\",\n\t\tlabel: \"Multiply\"\n\t},\n\t{\n\t\tvalue: \"screen\",\n\t\tlabel: \"Screen\"\n\t},\n\t{\n\t\tvalue: \"overlay\",\n\t\tlabel: \"Overlay\"\n\t},\n\t{\n\t\tvalue: \"darken\",\n\t\tlabel: \"Darken\"\n\t},\n\t{\n\t\tvalue: \"lighten\",\n\t\tlabel: \"Lighten\"\n\t},\n\t{\n\t\tvalue: \"color-dodge\",\n\t\tlabel: \"Color Dodge\"\n\t},\n\t{\n\t\tvalue: \"color-burn\",\n\t\tlabel: \"Color Burn\"\n\t},\n\t{\n\t\tvalue: \"hard-light\",\n\t\tlabel: \"Hard Light\"\n\t},\n\t{\n\t\tvalue: \"soft-light\",\n\t\tlabel: \"Soft Light\"\n\t},\n\t{\n\t\tvalue: \"difference\",\n\t\tlabel: \"Difference\"\n\t},\n\t{\n\t\tvalue: \"exclusion\",\n\t\tlabel: \"Exclusion\"\n\t},\n\t{\n\t\tvalue: \"hue\",\n\t\tlabel: \"Hue\"\n\t},\n\t{\n\t\tvalue: \"saturation\",\n\t\tlabel: \"Saturation\"\n\t},\n\t{\n\t\tvalue: \"color\",\n\t\tlabel: \"Color\"\n\t},\n\t{\n\t\tvalue: \"luminosity\",\n\t\tlabel: \"Luminosity\"\n\t},\n\t{\n\t\tvalue: \"lighter\",\n\t\tlabel: \"Lighter (Add)\"\n\t},\n\t{\n\t\tvalue: \"copy\",\n\t\tlabel: \"Copy\"\n\t},\n\t{\n\t\tvalue: \"xor\",\n\t\tlabel: \"XOR\"\n\t},\n\t{\n\t\tvalue: \"source-over\",\n\t\tlabel: \"Source Over\"\n\t},\n\t{\n\t\tvalue: \"source-in\",\n\t\tlabel: \"Source In\"\n\t},\n\t{\n\t\tvalue: \"source-out\",\n\t\tlabel: \"Source Out\"\n\t},\n\t{\n\t\tvalue: \"source-atop\",\n\t\tlabel: \"Source Atop\"\n\t},\n\t{\n\t\tvalue: \"destination-over\",\n\t\tlabel: \"Destination Over\"\n\t},\n\t{\n\t\tvalue: \"destination-in\",\n\t\tlabel: \"Destination In\"\n\t},\n\t{\n\t\tvalue: \"destination-out\",\n\t\tlabel: \"Destination Out\"\n\t},\n\t{\n\t\tvalue: \"destination-atop\",\n\t\tlabel: \"Destination Atop\"\n\t}\n];\nconst DropShadowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#000000\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tangle: z.number().min(0).max(360).default(120),\n\tdistance: z.number().min(0).max(500).default(10),\n\tspread: z.number().min(0).max(100).default(0),\n\tsize: z.number().min(0).max(250).default(10),\n\tblendMode: z.string().default(\"multiply\")\n});\nconst InnerShadowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#000000\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tangle: z.number().min(0).max(360).default(120),\n\tdistance: z.number().min(0).max(500).default(5),\n\tchoke: z.number().min(0).max(100).default(0),\n\tsize: z.number().min(0).max(250).default(5),\n\tblendMode: z.string().default(\"multiply\")\n});\nconst StrokeStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tsize: z.number().min(0).max(100).default(2),\n\tposition: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).default(\"outside\"),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().default(\"normal\")\n});\nconst GlowStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#ffffff\"),\n\topacity: z.number().min(0).max(1).default(.75),\n\tsize: z.number().min(0).max(250).default(15),\n\tspread: z.number().min(0).max(100).default(0),\n\tblendMode: z.string().default(\"screen\")\n});\nconst BevelEmbossStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tstyle: z.enum([\n\t\t\"InnerBevel\",\n\t\t\"OuterBevel\",\n\t\t\"Emboss\",\n\t\t\"PillowEmboss\"\n\t]).default(\"InnerBevel\"),\n\ttechnique: z.enum([\n\t\t\"Smooth\",\n\t\t\"ChiselHard\",\n\t\t\"ChiselSoft\"\n\t]).default(\"Smooth\"),\n\tdepth: z.number().min(1).max(1e3).default(100),\n\tdirection: z.enum([\"Up\", \"Down\"]).default(\"Up\"),\n\tsize: z.number().min(0).max(250).default(5),\n\tsoften: z.number().min(0).max(50).default(0),\n\tangle: z.number().min(0).max(360).default(120),\n\taltitude: z.number().min(0).max(90).default(30),\n\thighlightColor: ColorSchema.default(\"#ffffff\"),\n\thighlightOpacity: z.number().min(0).max(1).default(.75),\n\tshadowColor: ColorSchema.default(\"#000000\"),\n\tshadowOpacity: z.number().min(0).max(1).default(.75)\n});\nconst ColorOverlayStyleSchema = z.object({\n\tenabled: z.boolean().default(false),\n\tcolor: ColorSchema.default(\"#ff0000\"),\n\topacity: z.number().min(0).max(1).default(1),\n\tblendMode: z.string().default(\"normal\")\n});\nconst DEFAULT_DROP_SHADOW = {\n\tenabled: false,\n\tcolor: \"#000000\",\n\topacity: .75,\n\tangle: 120,\n\tdistance: 10,\n\tspread: 0,\n\tsize: 10,\n\tblendMode: \"multiply\"\n};\nconst DEFAULT_INNER_SHADOW = {\n\tenabled: false,\n\tcolor: \"#000000\",\n\topacity: .75,\n\tangle: 120,\n\tdistance: 5,\n\tchoke: 0,\n\tsize: 5,\n\tblendMode: \"multiply\"\n};\nconst DEFAULT_GLOW = {\n\tenabled: false,\n\tcolor: \"#ffffff\",\n\topacity: .75,\n\tsize: 15,\n\tspread: 0,\n\tblendMode: \"screen\"\n};\nconst DEFAULT_STROKE = {\n\tenabled: false,\n\tsize: 2,\n\tposition: \"outside\",\n\tcolor: \"#ffffff\",\n\topacity: 1,\n\tblendMode: \"normal\"\n};\nconst DEFAULT_BEVEL_EMBOSS = {\n\tenabled: false,\n\tstyle: \"InnerBevel\",\n\ttechnique: \"Smooth\",\n\tdepth: 100,\n\tdirection: \"Up\",\n\tsize: 5,\n\tsoften: 0,\n\tangle: 120,\n\taltitude: 30,\n\thighlightColor: \"#ffffff\",\n\thighlightOpacity: .75,\n\tshadowColor: \"#000000\",\n\tshadowOpacity: .75\n};\nconst DEFAULT_COLOR_OVERLAY = {\n\tenabled: false,\n\tcolor: \"#ff0000\",\n\topacity: 1,\n\tblendMode: \"normal\"\n};\nconst LayerStyleNodeConfigSchema = z.object({\n\tdropShadow: DropShadowStyleSchema.default(DEFAULT_DROP_SHADOW),\n\tinnerShadow: InnerShadowStyleSchema.default(DEFAULT_INNER_SHADOW),\n\touterGlow: GlowStyleSchema.default(DEFAULT_GLOW),\n\tinnerGlow: GlowStyleSchema.default(DEFAULT_GLOW),\n\tstroke: StrokeStyleSchema.default(DEFAULT_STROKE),\n\tbevelEmboss: BevelEmbossStyleSchema.default(DEFAULT_BEVEL_EMBOSS),\n\tcolorOverlay: ColorOverlayStyleSchema.default(DEFAULT_COLOR_OVERLAY),\n\tdropShadowAngleHandleId: z.string().nullable().optional(),\n\tdropShadowDistanceHandleId: z.string().nullable().optional(),\n\tdropShadowSpreadHandleId: z.string().nullable().optional(),\n\tdropShadowSizeHandleId: z.string().nullable().optional(),\n\tdropShadowOpacityHandleId: z.string().nullable().optional(),\n\tinnerShadowAngleHandleId: z.string().nullable().optional(),\n\tinnerShadowDistanceHandleId: z.string().nullable().optional(),\n\tinnerShadowChokeHandleId: z.string().nullable().optional(),\n\tinnerShadowSizeHandleId: z.string().nullable().optional(),\n\tinnerShadowOpacityHandleId: z.string().nullable().optional(),\n\touterGlowSizeHandleId: z.string().nullable().optional(),\n\touterGlowSpreadHandleId: z.string().nullable().optional(),\n\touterGlowOpacityHandleId: z.string().nullable().optional(),\n\tinnerGlowSizeHandleId: z.string().nullable().optional(),\n\tinnerGlowSpreadHandleId: z.string().nullable().optional(),\n\tinnerGlowOpacityHandleId: z.string().nullable().optional(),\n\tstrokeSizeHandleId: z.string().nullable().optional(),\n\tstrokeOpacityHandleId: z.string().nullable().optional(),\n\tbevelEmbossDepthHandleId: z.string().nullable().optional(),\n\tbevelEmbossSizeHandleId: z.string().nullable().optional(),\n\tbevelEmbossSoftenHandleId: z.string().nullable().optional(),\n\tbevelEmbossAngleHandleId: z.string().nullable().optional(),\n\tbevelEmbossAltitudeHandleId: z.string().nullable().optional(),\n\tbevelEmbossHighlightOpacityHandleId: z.string().nullable().optional(),\n\tbevelEmbossShadowOpacityHandleId: z.string().nullable().optional(),\n\tcolorOverlayOpacityHandleId: z.string().nullable().optional()\n});\nfunction computeLayerStylePadding(config) {\n\tlet padX = 0;\n\tlet padY = 0;\n\tif (config.dropShadow?.enabled) {\n\t\tconst angleRad = (config.dropShadow.angle ?? 120) * Math.PI / 180;\n\t\tconst dist = config.dropShadow.distance ?? 0;\n\t\tconst dx = Math.ceil(Math.abs(Math.cos(angleRad)) * dist);\n\t\tconst dy = Math.ceil(Math.abs(Math.sin(angleRad)) * dist);\n\t\tpadX = Math.max(padX, dx);\n\t\tpadY = Math.max(padY, dy);\n\t}\n\tif (config.stroke?.enabled && config.stroke.position !== \"inside\") {\n\t\tconst strokePad = config.stroke.position === \"outside\" ? Math.ceil(config.stroke.size ?? 2) : Math.ceil((config.stroke.size ?? 2) * .5);\n\t\tpadX = Math.max(padX, strokePad);\n\t\tpadY = Math.max(padY, strokePad);\n\t}\n\treturn {\n\t\tpadX,\n\t\tpadY\n\t};\n}\nconst LAYER_STYLE_CONFIG_HANDLES = [\n\t{\n\t\tconfigKey: \"dropShadowAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Angle Signal\",\n\t\tdescription: \"Light angle for drop shadow in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowDistance\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Distance Signal\",\n\t\tdescription: \"Offset distance for drop shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Blur Signal\",\n\t\tdescription: \"Blur radius for drop shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Spread Signal\",\n\t\tdescription: \"Edge expansion/sharpness percentage for drop shadow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"dropShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Drop Shadow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for drop shadow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Angle Signal\",\n\t\tdescription: \"Light angle for inner shadow in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowDistance\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Distance Signal\",\n\t\tdescription: \"Offset distance for inner shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Blur Signal\",\n\t\tdescription: \"Blur radius for inner shadow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowChoke\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Choke Signal\",\n\t\tdescription: \"Choke sharpness percentage for inner shadow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"innerShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Shadow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for inner shadow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Size Signal\",\n\t\tdescription: \"Glow radius for outer glow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Spread Signal\",\n\t\tdescription: \"Spread percentage for outer glow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"outerGlowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Outer Glow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for outer glow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Size Signal\",\n\t\tdescription: \"Glow radius for inner glow in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowSpread\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Spread Signal\",\n\t\tdescription: \"Spread percentage for inner glow (0–100%).\"\n\t},\n\t{\n\t\tconfigKey: \"innerGlowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Inner Glow Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for inner glow (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"strokeSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Stroke Width Signal\",\n\t\tdescription: \"Stroke line width in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"strokeOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Stroke Opacity Signal\",\n\t\tdescription: \"Opacity multiplier for stroke (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossDepth\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Depth Signal\",\n\t\tdescription: \"Bevel depth / extrusion percentage (1–1000%).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossSize\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Size Signal\",\n\t\tdescription: \"Bevel beveling size in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossSoften\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Soften Signal\",\n\t\tdescription: \"Edge softening blur radius in pixels.\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossAngle\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Light Angle Signal\",\n\t\tdescription: \"Azimuth light direction in degrees (0–360°).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossAltitude\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Light Altitude Signal\",\n\t\tdescription: \"Elevation light altitude in degrees (0–90°).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossHighlightOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Highlight Opacity Signal\",\n\t\tdescription: \"Highlight specular intensity (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"bevelEmbossShadowOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Bevel Shadow Opacity Signal\",\n\t\tdescription: \"Shadow diffuse intensity (0–1).\"\n\t},\n\t{\n\t\tconfigKey: \"colorOverlayOpacity\",\n\t\tdataTypes: [\"Number\", \"Signal\"],\n\t\tlabel: \"Color Overlay Opacity Signal\",\n\t\tdescription: \"Color overlay blend opacity (0–1).\"\n\t}\n];\nconst LayerStyleResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LAYER_STYLE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\nconst LAYER_STYLE_PRESETS = [\n\t{\n\t\tid: \"subtle-drop-shadow\",\n\t\tname: \"Subtle Drop Shadow\",\n\t\tdescription: \"Clean modern floating shadow for UI and graphics\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .35,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 8,\n\t\t\t\tspread: 0,\n\t\t\t\tsize: 16,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .75,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 5,\n\t\t\t\tchoke: 0,\n\t\t\t\tsize: 5,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .75,\n\t\t\t\tsize: 15,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .75,\n\t\t\t\tsize: 15,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tenabled: false,\n\t\t\t\tsize: 2,\n\t\t\t\tposition: \"outside\",\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\tenabled: false,\n\t\t\t\tstyle: \"InnerBevel\",\n\t\t\t\ttechnique: \"Smooth\",\n\t\t\t\tdepth: 100,\n\t\t\t\tdirection: \"Up\",\n\t\t\t\tsize: 5,\n\t\t\t\tsoften: 0,\n\t\t\t\tangle: 120,\n\t\t\t\taltitude: 30,\n\t\t\t\thighlightColor: \"#ffffff\",\n\t\t\t\thighlightOpacity: .75,\n\t\t\t\tshadowColor: \"#000000\",\n\t\t\t\tshadowOpacity: .75\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ff0000\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tid: \"sticker-outline-shadow\",\n\t\tname: \"Sticker Border & Shadow\",\n\t\tdescription: \"Crisp white die-cut sticker border with contact shadow\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .4,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 6,\n\t\t\t\tspread: 0,\n\t\t\t\tsize: 10,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tenabled: true,\n\t\t\t\tsize: 6,\n\t\t\t\tposition: \"outside\",\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .75,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 5,\n\t\t\t\tchoke: 0,\n\t\t\t\tsize: 5,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .75,\n\t\t\t\tsize: 15,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .75,\n\t\t\t\tsize: 15,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\tenabled: false,\n\t\t\t\tstyle: \"InnerBevel\",\n\t\t\t\ttechnique: \"Smooth\",\n\t\t\t\tdepth: 100,\n\t\t\t\tdirection: \"Up\",\n\t\t\t\tsize: 5,\n\t\t\t\tsoften: 0,\n\t\t\t\tangle: 120,\n\t\t\t\taltitude: 30,\n\t\t\t\thighlightColor: \"#ffffff\",\n\t\t\t\thighlightOpacity: .75,\n\t\t\t\tshadowColor: \"#000000\",\n\t\t\t\tshadowOpacity: .75\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ff0000\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tid: \"neon-cyber-glow\",\n\t\tname: \"Neon Glow\",\n\t\tdescription: \"Vibrant outer and inner luminescence with soft cyan radiation\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .75,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 10,\n\t\t\t\tspread: 0,\n\t\t\t\tsize: 10,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .75,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 5,\n\t\t\t\tchoke: 0,\n\t\t\t\tsize: 5,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#00f0ff\",\n\t\t\t\topacity: .9,\n\t\t\t\tsize: 28,\n\t\t\t\tspread: 12,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .8,\n\t\t\t\tsize: 10,\n\t\t\t\tspread: 5,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tenabled: true,\n\t\t\t\tsize: 2,\n\t\t\t\tposition: \"center\",\n\t\t\t\tcolor: \"#00f0ff\",\n\t\t\t\topacity: .9,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\tenabled: false,\n\t\t\t\tstyle: \"InnerBevel\",\n\t\t\t\ttechnique: \"Smooth\",\n\t\t\t\tdepth: 100,\n\t\t\t\tdirection: \"Up\",\n\t\t\t\tsize: 5,\n\t\t\t\tsoften: 0,\n\t\t\t\tangle: 120,\n\t\t\t\taltitude: 30,\n\t\t\t\thighlightColor: \"#ffffff\",\n\t\t\t\thighlightOpacity: .75,\n\t\t\t\tshadowColor: \"#000000\",\n\t\t\t\tshadowOpacity: .75\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ff0000\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tid: \"glass-emboss\",\n\t\tname: \"Glass & Emboss\",\n\t\tdescription: \"Pristine glass beveling with specular highlights and depth\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .25,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 6,\n\t\t\t\tspread: 0,\n\t\t\t\tsize: 12,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .3,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 4,\n\t\t\t\tchoke: 0,\n\t\t\t\tsize: 6,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .75,\n\t\t\t\tsize: 15,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .6,\n\t\t\t\tsize: 8,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tenabled: false,\n\t\t\t\tsize: 2,\n\t\t\t\tposition: \"outside\",\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\tenabled: true,\n\t\t\t\tstyle: \"InnerBevel\",\n\t\t\t\ttechnique: \"Smooth\",\n\t\t\t\tdepth: 180,\n\t\t\t\tdirection: \"Up\",\n\t\t\t\tsize: 8,\n\t\t\t\tsoften: 2,\n\t\t\t\tangle: 120,\n\t\t\t\taltitude: 35,\n\t\t\t\thighlightColor: \"#ffffff\",\n\t\t\t\thighlightOpacity: .9,\n\t\t\t\tshadowColor: \"#000000\",\n\t\t\t\tshadowOpacity: .5\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ff0000\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tid: \"letterpress-carved\",\n\t\tname: \"Letterpress / Carved\",\n\t\tdescription: \"Debossed letterpress engraving into paper surface\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .85,\n\t\t\t\tangle: 300,\n\t\t\t\tdistance: 2,\n\t\t\t\tspread: 0,\n\t\t\t\tsize: 1,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .7,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 3,\n\t\t\t\tchoke: 10,\n\t\t\t\tsize: 4,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .75,\n\t\t\t\tsize: 15,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: .75,\n\t\t\t\tsize: 15,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tenabled: false,\n\t\t\t\tsize: 2,\n\t\t\t\tposition: \"outside\",\n\t\t\t\tcolor: \"#ffffff\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\tenabled: true,\n\t\t\t\tstyle: \"InnerBevel\",\n\t\t\t\ttechnique: \"ChiselHard\",\n\t\t\t\tdepth: 150,\n\t\t\t\tdirection: \"Down\",\n\t\t\t\tsize: 3,\n\t\t\t\tsoften: 0,\n\t\t\t\tangle: 120,\n\t\t\t\taltitude: 30,\n\t\t\t\thighlightColor: \"#ffffff\",\n\t\t\t\thighlightOpacity: .6,\n\t\t\t\tshadowColor: \"#000000\",\n\t\t\t\tshadowOpacity: .8\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\tenabled: false,\n\t\t\t\tcolor: \"#ff0000\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tid: \"gold-bevel\",\n\t\tname: \"Metallic Gold Bevel\",\n\t\tdescription: \"High-specular chisel gold badge with deep relief\",\n\t\tconfig: {\n\t\t\tdropShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#000000\",\n\t\t\t\topacity: .6,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 8,\n\t\t\t\tspread: 5,\n\t\t\t\tsize: 12,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\tinnerShadow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#573a08\",\n\t\t\t\topacity: .5,\n\t\t\t\tangle: 120,\n\t\t\t\tdistance: 3,\n\t\t\t\tchoke: 0,\n\t\t\t\tsize: 5,\n\t\t\t\tblendMode: \"multiply\"\n\t\t\t},\n\t\t\touterGlow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#ffc83b\",\n\t\t\t\topacity: .4,\n\t\t\t\tsize: 20,\n\t\t\t\tspread: 5,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tinnerGlow: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#fff7d1\",\n\t\t\t\topacity: .5,\n\t\t\t\tsize: 6,\n\t\t\t\tspread: 0,\n\t\t\t\tblendMode: \"screen\"\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tenabled: true,\n\t\t\t\tsize: 2,\n\t\t\t\tposition: \"outside\",\n\t\t\t\tcolor: \"#b38728\",\n\t\t\t\topacity: 1,\n\t\t\t\tblendMode: \"normal\"\n\t\t\t},\n\t\t\tbevelEmboss: {\n\t\t\t\tenabled: true,\n\t\t\t\tstyle: \"InnerBevel\",\n\t\t\t\ttechnique: \"ChiselHard\",\n\t\t\t\tdepth: 350,\n\t\t\t\tdirection: \"Up\",\n\t\t\t\tsize: 10,\n\t\t\t\tsoften: 1,\n\t\t\t\tangle: 120,\n\t\t\t\taltitude: 40,\n\t\t\t\thighlightColor: \"#fff4cc\",\n\t\t\t\thighlightOpacity: .95,\n\t\t\t\tshadowColor: \"#422b00\",\n\t\t\t\tshadowOpacity: .85\n\t\t\t},\n\t\t\tcolorOverlay: {\n\t\t\t\tenabled: true,\n\t\t\t\tcolor: \"#f5b324\",\n\t\t\t\topacity: .35,\n\t\t\t\tblendMode: \"overlay\"\n\t\t\t}\n\t\t}\n\t}\n];\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nfunction hexToRgba(hex) {\n\tif (!hex) return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tlet cleaned = hex.trim().replace(/^#/, \"\");\n\tif (cleaned.length === 3) cleaned = cleaned.split(\"\").map((c) => c + c).join(\"\") + \"ff\";\n\telse if (cleaned.length === 6) cleaned = cleaned + \"ff\";\n\telse if (cleaned.length === 8) {} else return [\n\t\t1,\n\t\t1,\n\t\t1,\n\t\t1\n\t];\n\tconst r = parseInt(cleaned.slice(0, 2), 16) / 255;\n\tconst g = parseInt(cleaned.slice(2, 4), 16) / 255;\n\tconst b = parseInt(cleaned.slice(4, 6), 16) / 255;\n\tconst a = parseInt(cleaned.slice(6, 8), 16) / 255;\n\treturn [\n\t\tNumber.isFinite(r) ? r : 1,\n\t\tNumber.isFinite(g) ? g : 1,\n\t\tNumber.isFinite(b) ? b : 1,\n\t\tNumber.isFinite(a) ? a : 1\n\t];\n}\nconst BLEND_MODE_MAP = {\n\tnormal: 0,\n\t\"source-over\": 0,\n\tmultiply: 1,\n\tscreen: 2,\n\toverlay: 3,\n\tdarken: 4,\n\tlighten: 5,\n\t\"color-dodge\": 6,\n\t\"color-burn\": 7,\n\t\"hard-light\": 8,\n\t\"soft-light\": 9,\n\tdifference: 10,\n\texclusion: 11,\n\thue: 12,\n\tsaturation: 13,\n\tcolor: 14,\n\tluminosity: 15,\n\t\"mask-in\": 16,\n\t\"destination-in\": 16,\n\t\"mask-out\": 17,\n\t\"destination-out\": 17,\n\t\"source-in\": 18,\n\t\"source-out\": 19,\n\t\"source-atop\": 20,\n\t\"destination-over\": 21,\n\t\"destination-atop\": 22,\n\tlighter: 23,\n\tcopy: 24,\n\txor: 25\n};\nconst BEVEL_STYLE_MAP = {\n\tInnerBevel: 0,\n\tOuterBevel: 1,\n\tEmboss: 2,\n\tPillowEmboss: 3\n};\nconst BEVEL_TECHNIQUE_MAP = {\n\tSmooth: 0,\n\tChiselHard: 1,\n\tChiselSoft: 2\n};\nconst STROKE_POS_MAP = {\n\toutside: 0,\n\tcenter: 1,\n\tinside: 2\n};\nconst WGSL_LAYER_STYLE_SHADER = `\nstruct LayerStyleUniforms {\n\t// Drop Shadow (vec4 x 3)\n\tdropShadowColor : vec4<f32>,\n\tdropShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tdropShadowParams2 : vec4<f32>, // x: spread, y: size, z: blendMode, w: pad\n\n\t// Inner Shadow (vec4 x 3)\n\tinnerShadowColor : vec4<f32>,\n\tinnerShadowParams : vec4<f32>, // x: enabled, y: opacity, z: angle(rad), w: distance\n\tinnerShadowParams2 : vec4<f32>, // x: choke, y: size, z: blendMode, w: pad\n\n\t// Outer Glow (vec4 x 3)\n\touterGlowColor : vec4<f32>,\n\touterGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\touterGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Inner Glow (vec4 x 3)\n\tinnerGlowColor : vec4<f32>,\n\tinnerGlowParams : vec4<f32>, // x: enabled, y: opacity, z: size, w: spread\n\tinnerGlowParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Stroke (vec4 x 3)\n\tstrokeColor : vec4<f32>,\n\tstrokeParams : vec4<f32>, // x: enabled, y: size, z: position(0:out,1:center,2:in), w: opacity\n\tstrokeParams2 : vec4<f32>, // x: blendMode, yzw: pad\n\n\t// Bevel & Emboss (vec4 x 5)\n\tbevelHighlightColor : vec4<f32>,\n\tbevelShadowColor : vec4<f32>,\n\tbevelParams1 : vec4<f32>, // x: enabled, y: style, z: technique, w: depth\n\tbevelParams2 : vec4<f32>, // x: direction(1:up, -1:down), y: size, z: soften, w: angle(rad)\n\tbevelParams3 : vec4<f32>, // x: altitude(rad), y: hlOpacity, z: shOpacity, w: pad\n\n\t// Color Overlay (vec4 x 2)\n\tcolorOverlayColor : vec4<f32>,\n\tcolorOverlayParams : vec4<f32>, // x: enabled, y: opacity, z: blendMode, w: pad\n};\n\n@group(0) @binding(0) var<uniform> u : LayerStyleUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn sampleAlpha(uv: vec2<f32>) -> f32 {\n\tif (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n\t\treturn 0.0;\n\t}\n\treturn textureSampleLevel(tex, samp, uv, 0.0).a;\n}\n\nfn lum(c: vec3<f32>) -> f32 {\n\treturn 0.3 * c.r + 0.59 * c.g + 0.11 * c.b;\n}\n\nfn clip_color(c: vec3<f32>) -> vec3<f32> {\n\tlet l = lum(c);\n\tlet n = min(min(c.r, c.g), c.b);\n\tlet x = max(max(c.r, c.g), c.b);\n\tvar res = c;\n\tif (n < 0.0) {\n\t\tres = l + (((res - l) * l) / max(l - n, 1e-5));\n\t}\n\tif (x > 1.0) {\n\t\tres = l + (((res - l) * (1.0 - l)) / max(x - l, 1e-5));\n\t}\n\treturn res;\n}\n\nfn set_lum(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet diff = l - lum(c);\n\treturn clip_color(c + vec3<f32>(diff));\n}\n\nfn sat(c: vec3<f32>) -> f32 {\n\treturn max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b);\n}\n\nfn set_sat(c: vec3<f32>, s: f32) -> vec3<f32> {\n\tlet c_min = min(min(c.r, c.g), c.b);\n\tlet c_max = max(max(c.r, c.g), c.b);\n\tif (c_max <= c_min) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\treturn (c - vec3<f32>(c_min)) * s / max(c_max - c_min, 1e-5);\n}\n\nfn blendRgb(d_rgb: vec3<f32>, s_rgb: vec3<f32>, mode: u32) -> vec3<f32> {\n\tswitch (mode) {\n\t\tcase 1u: { // multiply\n\t\t\treturn d_rgb * s_rgb;\n\t\t}\n\t\tcase 2u: { // screen\n\t\t\treturn d_rgb + s_rgb - d_rgb * s_rgb;\n\t\t}\n\t\tcase 3u: { // overlay\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\td_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 4u: { // darken\n\t\t\treturn min(d_rgb, s_rgb);\n\t\t}\n\t\tcase 5u: { // lighten\n\t\t\treturn max(d_rgb, s_rgb);\n\t\t}\n\t\tcase 6u: { // color-dodge\n\t\t\treturn select(min(d_rgb / max(1.0 - s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(1.0), s_rgb >= vec3<f32>(0.999));\n\t\t}\n\t\tcase 7u: { // color-burn\n\t\t\treturn select(1.0 - min((1.0 - d_rgb) / max(s_rgb, vec3<f32>(1e-4)), vec3<f32>(1.0)), vec3<f32>(0.0), s_rgb <= vec3<f32>(0.001));\n\t\t}\n\t\tcase 8u: { // hard-light\n\t\t\treturn select(\n\t\t\t\t1.0 - 2.0 * (1.0 - d_rgb) * (1.0 - s_rgb),\n\t\t\t\t2.0 * d_rgb * s_rgb,\n\t\t\t\ts_rgb < vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 9u: { // soft-light\n\t\t\treturn select(\n\t\t\t\td_rgb + (2.0 * s_rgb - 1.0) * (sqrt(d_rgb) - d_rgb),\n\t\t\t\td_rgb - (1.0 - 2.0 * s_rgb) * d_rgb * (1.0 - d_rgb),\n\t\t\t\ts_rgb <= vec3<f32>(0.5)\n\t\t\t);\n\t\t}\n\t\tcase 10u: { // difference\n\t\t\treturn abs(d_rgb - s_rgb);\n\t\t}\n\t\tcase 11u: { // exclusion\n\t\t\treturn d_rgb + s_rgb - 2.0 * d_rgb * s_rgb;\n\t\t}\n\t\tcase 12u: { // hue\n\t\t\treturn set_lum(set_sat(s_rgb, sat(d_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 13u: { // saturation\n\t\t\treturn set_lum(set_sat(d_rgb, sat(s_rgb)), lum(d_rgb));\n\t\t}\n\t\tcase 14u: { // color\n\t\t\treturn set_lum(s_rgb, lum(d_rgb));\n\t\t}\n\t\tcase 15u: { // luminosity\n\t\t\treturn set_lum(d_rgb, lum(s_rgb));\n\t\t}\n\t\tdefault: { // normal / source-over\n\t\t\treturn s_rgb;\n\t\t}\n\t}\n}\n\nfn compositeLayer(dst: vec4<f32>, src: vec4<f32>, blendMode: u32) -> vec4<f32> {\n\tlet sa = clamp(src.a, 0.0, 1.0);\n\tif (sa <= 0.0001) {\n\t\treturn dst;\n\t}\n\tlet da = clamp(dst.a, 0.0, 1.0);\n\tif (da <= 0.0001) {\n\t\treturn src;\n\t}\n\n\tswitch (blendMode) {\n\t\tcase 16u: { return dst * sa; } // mask-in / destination-in\n\t\tcase 17u: { return dst * (1.0 - sa); } // mask-out / destination-out\n\t\tcase 18u: { return src * da; } // source-in\n\t\tcase 19u: { return src * (1.0 - da); } // source-out\n\t\tcase 20u: { return src * da + dst * (1.0 - sa); } // source-atop\n\t\tcase 21u: { return dst + src * (1.0 - da); } // destination-over\n\t\tcase 22u: { return dst * sa + src * (1.0 - da); } // destination-atop\n\t\tcase 23u: { return src + dst; } // lighter / add\n\t\tcase 24u: { return src; } // copy\n\t\tcase 25u: { return src * (1.0 - da) + dst * (1.0 - sa); } // xor\n\t\tdefault: {}\n\t}\n\n\tlet b_rgb = blendRgb(dst.rgb, src.rgb, blendMode);\n\tlet out_a = sa + da * (1.0 - sa);\n\tlet out_rgb = select(\n\t\t((1.0 - da) * src.rgb + (1.0 - sa) * dst.rgb + sa * da * b_rgb) / max(out_a, 1e-5),\n\t\tb_rgb,\n\t\tout_a <= 1e-4\n\t);\n\n\treturn vec4<f32>(out_rgb, out_a);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\tlet origColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tlet origA = origColor.a;\n\n\tvar result = vec4<f32>(0.0);\n\n\t// =========================================================================\n\t// 1. DROP SHADOW (Bottom Layer)\n\t// =========================================================================\n\tif (u.dropShadowParams.x > 0.5) {\n\t\tlet opacity = u.dropShadowParams.y;\n\t\tlet angle = u.dropShadowParams.z;\n\t\tlet distance = u.dropShadowParams.w;\n\t\tlet spread = u.dropShadowParams2.x;\n\t\tlet size = u.dropShadowParams2.y;\n\t\tlet blendMode = u32(u.dropShadowParams2.z);\n\n\t\tlet shadowOffset = vec2<f32>(-cos(angle), sin(angle)) * distance * texelSize;\n\t\tlet shadowCenterUv = in.uv - shadowOffset;\n\n\t\tvar shadowAccum = 0.0;\n\t\tvar shadowWeightSum = 0.0;\n\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\n\t\tif (size <= 0.5) {\n\t\t\tshadowAccum = sampleAlpha(shadowCenterUv);\n\t\t\tshadowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tshadowAccum += sampleAlpha(shadowCenterUv + offset) * weight;\n\t\t\t\t\tshadowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredShadow = shadowAccum / max(shadowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet finalShadowAlpha = clamp(blurredShadow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * opacity;\n\n\t\tif (finalShadowAlpha > 0.001) {\n\t\t\tlet shadowCol = vec4<f32>(u.dropShadowColor.rgb, finalShadowAlpha);\n\t\t\tresult = compositeLayer(result, shadowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 2. OUTER GLOW\n\t// =========================================================================\n\tif (u.outerGlowParams.x > 0.5) {\n\t\tlet opacity = u.outerGlowParams.y;\n\t\tlet size = u.outerGlowParams.z;\n\t\tlet spread = u.outerGlowParams.w;\n\t\tlet blendMode = u32(u.outerGlowParams2.x);\n\n\t\tvar glowAccum = 0.0;\n\t\tvar glowWeightSum = 0.0;\n\t\tlet sigma = max(0.5, size * 0.4);\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\n\t\tif (size <= 0.5) {\n\t\t\tglowAccum = origA;\n\t\t\tglowWeightSum = 1.0;\n\t\t} else {\n\t\t\tlet stepVal = max(1, sampleRadius / 8);\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tlet weight = exp(-0.5 * distSq / (sigma * sigma));\n\t\t\t\t\tglowAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tglowWeightSum += weight;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet blurredGlow = glowAccum / max(glowWeightSum, 1e-4);\n\t\tlet spreadFactor = spread / 100.0;\n\t\tlet spreadGlow = clamp(blurredGlow / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0);\n\t\tlet finalGlowAlpha = max(0.0, spreadGlow - origA) * opacity;\n\n\t\tif (finalGlowAlpha > 0.001) {\n\t\t\tlet glowCol = vec4<f32>(u.outerGlowColor.rgb, finalGlowAlpha);\n\t\t\tresult = compositeLayer(result, glowCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 3. OUTSIDE STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z < 0.5) { // position == 0: outside\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\t\tlet sizeSq = size * size;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet strokeAlpha = clamp(maxAlpha - origA, 0.0, 1.0) * opacity;\n\t\tif (strokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, strokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// 4. BASE IMAGE LAYER (with Color Overlay, Bevel & Emboss, Inner Glow/Shadow)\n\t// =========================================================================\n\tif (origA > 0.001) {\n\t\tvar baseRgb = origColor.rgb;\n\n\t\t// Color Overlay\n\t\tif (u.colorOverlayParams.x > 0.5) {\n\t\t\tlet overlayOpacity = u.colorOverlayParams.y;\n\t\t\tlet overlayBlendMode = u32(u.colorOverlayParams.z);\n\t\t\tlet blendedOverlay = blendRgb(baseRgb, u.colorOverlayColor.rgb, overlayBlendMode);\n\t\t\tbaseRgb = mix(baseRgb, blendedOverlay, overlayOpacity);\n\t\t}\n\n\t\t// Bevel & Emboss\n\t\tif (u.bevelParams1.x > 0.5) {\n\t\t\tlet style = u.bevelParams1.y;\n\t\t\tlet technique = u.bevelParams1.z;\n\t\t\tlet depth = u.bevelParams1.w / 100.0;\n\t\t\tlet direction = u.bevelParams2.x;\n\t\t\tlet bevelSize = max(0.5, u.bevelParams2.y);\n\t\t\tlet soften = u.bevelParams2.z;\n\t\t\tlet lightAngle = u.bevelParams2.w;\n\t\t\tlet lightAltitude = u.bevelParams3.x;\n\t\t\tlet hlOpacity = u.bevelParams3.y;\n\t\t\tlet shOpacity = u.bevelParams3.z;\n\n\t\t\tlet lightDir = normalize(vec3<f32>(\n\t\t\t\t-cos(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAngle) * cos(lightAltitude),\n\t\t\t\tsin(lightAltitude)\n\t\t\t));\n\n\t\t\tlet stepSize = max(1.0, bevelSize * 0.5 + soften) * texelSize;\n\t\t\tlet aL = sampleAlpha(in.uv - vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aR = sampleAlpha(in.uv + vec2<f32>(stepSize.x, 0.0));\n\t\t\tlet aT = sampleAlpha(in.uv - vec2<f32>(0.0, stepSize.y));\n\t\t\tlet aB = sampleAlpha(in.uv + vec2<f32>(0.0, stepSize.y));\n\n\t\t\tvar dx = (aR - aL) * depth * direction;\n\t\t\tvar dy = (aB - aT) * depth * direction;\n\n\t\t\tif (technique > 0.5) { // ChiselHard or ChiselSoft\n\t\t\t\tlet rampFactor = select(2.0, 1.5, technique > 1.5);\n\t\t\t\tdx = clamp(dx * rampFactor, -1.0, 1.0);\n\t\t\t\tdy = clamp(dy * rampFactor, -1.0, 1.0);\n\t\t\t}\n\n\t\t\tlet normal = normalize(vec3<f32>(-dx, -dy, 1.0));\n\t\t\tlet nDotL = dot(normal, lightDir);\n\n\t\t\tlet highlightAmount = max(0.0, nDotL) * hlOpacity;\n\t\t\tlet shadowAmount = max(0.0, -nDotL) * shOpacity;\n\n\t\t\tlet hlColor = mix(baseRgb, u.bevelHighlightColor.rgb + baseRgb, highlightAmount);\n\t\t\tlet shColor = mix(baseRgb, baseRgb * (1.0 - shadowAmount) + u.bevelShadowColor.rgb * shadowAmount, shadowAmount);\n\t\t\tbaseRgb = mix(shColor, hlColor, clamp(nDotL * 0.5 + 0.5, 0.0, 1.0));\n\t\t}\n\n\t\t// Inner Glow\n\t\tif (u.innerGlowParams.x > 0.5) {\n\t\t\tlet igOpacity = u.innerGlowParams.y;\n\t\t\tlet igSize = u.innerGlowParams.z;\n\t\t\tlet igSpread = u.innerGlowParams.w;\n\t\t\tlet igBlendMode = u32(u.innerGlowParams2.x);\n\n\t\t\tvar innerAccum = 0.0;\n\t\t\tvar innerWeight = 0.0;\n\t\t\tlet sigma = max(0.5, igSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(igSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tinnerAccum += sampleAlpha(in.uv + offset) * weight;\n\t\t\t\t\tinnerWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredInner = innerAccum / max(innerWeight, 1e-4);\n\t\t\tlet innerGlowMask = max(0.0, origA - blurredInner);\n\t\t\tlet spreadFactor = igSpread / 100.0;\n\t\t\tlet finalInnerGlowAlpha = clamp(innerGlowMask / max(1.0 - spreadFactor * 0.95, 0.01), 0.0, 1.0) * igOpacity;\n\n\t\t\tif (finalInnerGlowAlpha > 0.001) {\n\t\t\t\tlet igBlended = blendRgb(baseRgb, u.innerGlowColor.rgb, igBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, igBlended, finalInnerGlowAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inner Shadow\n\t\tif (u.innerShadowParams.x > 0.5) {\n\t\t\tlet isOpacity = u.innerShadowParams.y;\n\t\t\tlet isAngle = u.innerShadowParams.z;\n\t\t\tlet isDistance = u.innerShadowParams.w;\n\t\t\tlet isChoke = u.innerShadowParams2.x;\n\t\t\tlet isSize = u.innerShadowParams2.y;\n\t\t\tlet isBlendMode = u32(u.innerShadowParams2.z);\n\n\t\t\tlet isOffset = vec2<f32>(-cos(isAngle), sin(isAngle)) * isDistance * texelSize;\n\t\t\tlet shiftedA = sampleAlpha(in.uv + isOffset);\n\n\t\t\tvar isAccum = 0.0;\n\t\t\tvar isWeight = 0.0;\n\t\t\tlet sigma = max(0.5, isSize * 0.4);\n\t\t\tlet sampleRadius = min(i32(ceil(isSize)), 16);\n\t\t\tlet stepVal = max(1, sampleRadius / 6);\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y += stepVal) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x += stepVal) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(x), f32(y)) * texelSize;\n\t\t\t\t\tlet weight = exp(-0.5 * f32(x * x + y * y) / (sigma * sigma));\n\t\t\t\t\tlet sShifted = sampleAlpha(in.uv + isOffset + offset);\n\t\t\t\t\tlet sOrig = sampleAlpha(in.uv + offset);\n\t\t\t\t\tisAccum += max(0.0, sOrig - sShifted) * weight;\n\t\t\t\t\tisWeight += weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurredIS = isAccum / max(isWeight, 1e-4);\n\t\t\tlet chokeFactor = isChoke / 100.0;\n\t\t\tlet finalISAlpha = clamp(blurredIS / max(1.0 - chokeFactor * 0.95, 0.01), 0.0, 1.0) * isOpacity;\n\n\t\t\tif (finalISAlpha > 0.001) {\n\t\t\t\tlet isBlended = blendRgb(baseRgb, u.innerShadowColor.rgb, isBlendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, isBlended, finalISAlpha);\n\t\t\t}\n\t\t}\n\n\t\t// Inside Stroke\n\t\tif (u.strokeParams.x > 0.5 && u.strokeParams.z > 1.5) { // position == 2: inside\n\t\t\tlet size = u.strokeParams.y;\n\t\t\tlet opacity = u.strokeParams.w;\n\t\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\t\tvar minAlpha = 1.0;\n\t\t\tlet sampleRadius = min(i32(ceil(size)), 24);\n\t\t\tlet sizeSq = size * size;\n\n\t\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\t\tif (distSq <= sizeSq) {\n\t\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet insideStrokeAlpha = clamp(origA - minAlpha, 0.0, 1.0) * opacity;\n\t\t\tif (insideStrokeAlpha > 0.001) {\n\t\t\t\tlet sBlended = blendRgb(baseRgb, u.strokeColor.rgb, blendMode);\n\t\t\t\tbaseRgb = mix(baseRgb, sBlended, insideStrokeAlpha);\n\t\t\t}\n\t\t}\n\n\t\tlet baseLayer = vec4<f32>(baseRgb, origA);\n\t\tresult = compositeLayer(result, baseLayer, 0u);\n\t}\n\n\t// =========================================================================\n\t// 5. CENTER STROKE\n\t// =========================================================================\n\tif (u.strokeParams.x > 0.5 && u.strokeParams.z >= 0.5 && u.strokeParams.z <= 1.5) { // position == 1: center\n\t\tlet size = u.strokeParams.y;\n\t\tlet opacity = u.strokeParams.w;\n\t\tlet blendMode = u32(u.strokeParams2.x);\n\n\t\tvar maxAlpha = 0.0;\n\t\tvar minAlpha = 1.0;\n\t\tlet halfSize = max(0.5, size * 0.5);\n\t\tlet sampleRadius = min(i32(ceil(halfSize)), 24);\n\t\tlet halfSizeSq = halfSize * halfSize;\n\n\t\tfor (var y = -sampleRadius; y <= sampleRadius; y++) {\n\t\t\tfor (var x = -sampleRadius; x <= sampleRadius; x++) {\n\t\t\t\tlet distSq = f32(x * x + y * y);\n\t\t\t\tif (distSq <= halfSizeSq) {\n\t\t\t\t\tlet sAlpha = sampleAlpha(in.uv + vec2<f32>(f32(x), f32(y)) * texelSize);\n\t\t\t\t\tmaxAlpha = max(maxAlpha, sAlpha);\n\t\t\t\t\tminAlpha = min(minAlpha, sAlpha);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet centerStrokeAlpha = clamp(maxAlpha - minAlpha, 0.0, 1.0) * opacity;\n\t\tif (centerStrokeAlpha > 0.001) {\n\t\t\tlet strokeCol = vec4<f32>(u.strokeColor.rgb, centerStrokeAlpha);\n\t\t\tresult = compositeLayer(result, strokeCol, blendMode);\n\t\t}\n\t}\n\n\t// Output premultiplied alpha for QuadPipeline / WebGPU rendering\n\treturn vec4<f32>(result.rgb * result.a, result.a);\n}\n`;\nconst resourcesCache = /* @__PURE__ */ new WeakMap();\nfunction getLayerStyleResources(device, format) {\n\tlet res = resourcesCache.get(device);\n\tif (res) return res;\n\tconst module = device.createShaderModule({ code: WGSL_LAYER_STYLE_SHADER });\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\ttexture: { sampleType: \"float\" }\n\t}, {\n\t\tbinding: 1,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tsampler: { type: \"filtering\" }\n\t}] });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, textureLayout] });\n\tres = {\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout\n\t};\n\tresourcesCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(88);\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"LayerStyle\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : (props.frame ?? 0) / (props.fps || 30);\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (!outputItem) return Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t\t\tif (outputItem.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, numVal));\n\t\t\t}\n\t\t\tif (outputItem.type === \"Signal\") {\n\t\t\t\tconst data = outputItem.data;\n\t\t\t\tif (typeof data === \"number\") return Math.max(clampMin, Math.min(clampMax, data));\n\t\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\t\tif (typeof data.value === \"number\") return Math.max(clampMin, Math.min(clampMax, data.value));\n\t\t\t\t\tconst amp = typeof data.amplitude === \"number\" ? data.amplitude : 1;\n\t\t\t\t\tconst freq = typeof data.frequency === \"number\" ? data.frequency : 1;\n\t\t\t\t\tconst phase = typeof data.phase === \"number\" ? data.phase : 0;\n\t\t\t\t\tconst offset = typeof data.offset === \"number\" ? data.offset : fallbackVal;\n\t\t\t\t\tconst t = elapsedSeconds;\n\t\t\t\t\tconst computed = offset + amp * Math.sin(2 * Math.PI * freq * t + phase);\n\t\t\t\t\treturn Math.max(clampMin, Math.min(clampMax, computed));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Math.max(clampMin, Math.min(clampMax, fallbackVal));\n\t};\n\tconst padding = computeLayerStylePadding(op);\n\tconst padX = padding.padX;\n\tconst padY = padding.padY;\n\tconst childW = Math.max(1, width - padX * 2);\n\tconst childH = Math.max(1, height - padY * 2);\n\tconst childTex = ctx.renderer.getTemporaryTexture(childW, childH, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, childW, childH, \"clear\").end();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: childW,\n\t\tcontainerHeight: childH\n\t}, childView, childTex, childW, childH);\n\tconst inputTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst inputView = inputTex.createView();\n\tconst inputPass = ctx.renderer.beginFrame(encoder, inputView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\");\n\tctx.renderer.drawTexture(inputPass, childTex, {\n\t\tx: padX,\n\t\ty: padY,\n\t\twidth: childW,\n\t\theight: childH\n\t}, { opacity: 1 });\n\tinputPass.end();\n\tconst { pipeline, uniformLayout, textureLayout } = getLayerStyleResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst ds = op.dropShadow ?? {};\n\tconst is = op.innerShadow ?? {};\n\tconst og = op.outerGlow ?? {};\n\tconst ig = op.innerGlow ?? {};\n\tconst st = op.stroke ?? {};\n\tconst be = op.bevelEmboss ?? {};\n\tconst co = op.colorOverlay ?? {};\n\tconst dsCol = hexToRgba(ds.color ?? \"#000000\");\n\tconst dsOpacity = resolveField(op.dropShadowOpacityHandleId, ds.opacity ?? .75, 0, 1);\n\tconst dsAngle = resolveField(op.dropShadowAngleHandleId, ds.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst dsDist = resolveField(op.dropShadowDistanceHandleId, ds.distance ?? 10, 0, 500);\n\tconst dsSpread = resolveField(op.dropShadowSpreadHandleId, ds.spread ?? 0, 0, 100);\n\tconst dsSize = resolveField(op.dropShadowSizeHandleId, ds.size ?? 10, 0, 250);\n\tconst dsBlend = BLEND_MODE_MAP[ds.blendMode ?? \"multiply\"] ?? 1;\n\tconst isCol = hexToRgba(is.color ?? \"#000000\");\n\tconst isOpacity = resolveField(op.innerShadowOpacityHandleId, is.opacity ?? .75, 0, 1);\n\tconst isAngle = resolveField(op.innerShadowAngleHandleId, is.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst isDist = resolveField(op.innerShadowDistanceHandleId, is.distance ?? 5, 0, 500);\n\tconst isChoke = resolveField(op.innerShadowChokeHandleId, is.choke ?? 0, 0, 100);\n\tconst isSize = resolveField(op.innerShadowSizeHandleId, is.size ?? 5, 0, 250);\n\tconst isBlend = BLEND_MODE_MAP[is.blendMode ?? \"multiply\"] ?? 1;\n\tconst ogCol = hexToRgba(og.color ?? \"#ffffff\");\n\tconst ogOpacity = resolveField(op.outerGlowOpacityHandleId, og.opacity ?? .75, 0, 1);\n\tconst ogSize = resolveField(op.outerGlowSizeHandleId, og.size ?? 15, 0, 250);\n\tconst ogSpread = resolveField(op.outerGlowSpreadHandleId, og.spread ?? 0, 0, 100);\n\tconst ogBlend = BLEND_MODE_MAP[og.blendMode ?? \"screen\"] ?? 2;\n\tconst igCol = hexToRgba(ig.color ?? \"#ffffff\");\n\tconst igOpacity = resolveField(op.innerGlowOpacityHandleId, ig.opacity ?? .75, 0, 1);\n\tconst igSize = resolveField(op.innerGlowSizeHandleId, ig.size ?? 15, 0, 250);\n\tconst igSpread = resolveField(op.innerGlowSpreadHandleId, ig.spread ?? 0, 0, 100);\n\tconst igBlend = BLEND_MODE_MAP[ig.blendMode ?? \"screen\"] ?? 2;\n\tconst stCol = hexToRgba(st.color ?? \"#ffffff\");\n\tconst stSize = resolveField(op.strokeSizeHandleId, st.size ?? 2, 0, 100);\n\tconst stPos = STROKE_POS_MAP[st.position ?? \"outside\"] ?? 0;\n\tconst stOpacity = resolveField(op.strokeOpacityHandleId, st.opacity ?? 1, 0, 1);\n\tconst stBlend = BLEND_MODE_MAP[st.blendMode ?? \"normal\"] ?? 0;\n\tconst beHlCol = hexToRgba(be.highlightColor ?? \"#ffffff\");\n\tconst beShCol = hexToRgba(be.shadowColor ?? \"#000000\");\n\tconst beStyle = BEVEL_STYLE_MAP[be.style ?? \"InnerBevel\"] ?? 0;\n\tconst beTech = BEVEL_TECHNIQUE_MAP[be.technique ?? \"Smooth\"] ?? 0;\n\tconst beDepth = resolveField(op.bevelEmbossDepthHandleId, be.depth ?? 100, 1, 1e3);\n\tconst beDir = be.direction === \"Down\" ? -1 : 1;\n\tconst beSize = resolveField(op.bevelEmbossSizeHandleId, be.size ?? 5, 0, 250);\n\tconst beSoften = resolveField(op.bevelEmbossSoftenHandleId, be.soften ?? 0, 0, 50);\n\tconst beAngle = resolveField(op.bevelEmbossAngleHandleId, be.angle ?? 120, 0, 360) * Math.PI / 180;\n\tconst beAltitude = resolveField(op.bevelEmbossAltitudeHandleId, be.altitude ?? 30, 0, 90) * Math.PI / 180;\n\tconst beHlOpacity = resolveField(op.bevelEmbossHighlightOpacityHandleId, be.highlightOpacity ?? .75, 0, 1);\n\tconst beShOpacity = resolveField(op.bevelEmbossShadowOpacityHandleId, be.shadowOpacity ?? .75, 0, 1);\n\tconst coCol = hexToRgba(co.color ?? \"#ff0000\");\n\tconst coOpacity = resolveField(op.colorOverlayOpacityHandleId, co.opacity ?? 1, 0, 1);\n\tconst coBlend = BLEND_MODE_MAP[co.blendMode ?? \"normal\"] ?? 0;\n\tuniformBufferData.fill(0);\n\tuniformBufferData[0] = dsCol[0];\n\tuniformBufferData[1] = dsCol[1];\n\tuniformBufferData[2] = dsCol[2];\n\tuniformBufferData[3] = dsCol[3];\n\tuniformBufferData[4] = ds.enabled ? 1 : 0;\n\tuniformBufferData[5] = dsOpacity;\n\tuniformBufferData[6] = dsAngle;\n\tuniformBufferData[7] = dsDist;\n\tuniformBufferData[8] = dsSpread;\n\tuniformBufferData[9] = dsSize;\n\tuniformBufferData[10] = dsBlend;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = isCol[0];\n\tuniformBufferData[13] = isCol[1];\n\tuniformBufferData[14] = isCol[2];\n\tuniformBufferData[15] = isCol[3];\n\tuniformBufferData[16] = is.enabled ? 1 : 0;\n\tuniformBufferData[17] = isOpacity;\n\tuniformBufferData[18] = isAngle;\n\tuniformBufferData[19] = isDist;\n\tuniformBufferData[20] = isChoke;\n\tuniformBufferData[21] = isSize;\n\tuniformBufferData[22] = isBlend;\n\tuniformBufferData[23] = 0;\n\tuniformBufferData[24] = ogCol[0];\n\tuniformBufferData[25] = ogCol[1];\n\tuniformBufferData[26] = ogCol[2];\n\tuniformBufferData[27] = ogCol[3];\n\tuniformBufferData[28] = og.enabled ? 1 : 0;\n\tuniformBufferData[29] = ogOpacity;\n\tuniformBufferData[30] = ogSize;\n\tuniformBufferData[31] = ogSpread;\n\tuniformBufferData[32] = ogBlend;\n\tuniformBufferData[33] = 0;\n\tuniformBufferData[34] = 0;\n\tuniformBufferData[35] = 0;\n\tuniformBufferData[36] = igCol[0];\n\tuniformBufferData[37] = igCol[1];\n\tuniformBufferData[38] = igCol[2];\n\tuniformBufferData[39] = igCol[3];\n\tuniformBufferData[40] = ig.enabled ? 1 : 0;\n\tuniformBufferData[41] = igOpacity;\n\tuniformBufferData[42] = igSize;\n\tuniformBufferData[43] = igSpread;\n\tuniformBufferData[44] = igBlend;\n\tuniformBufferData[45] = 0;\n\tuniformBufferData[46] = 0;\n\tuniformBufferData[47] = 0;\n\tuniformBufferData[48] = stCol[0];\n\tuniformBufferData[49] = stCol[1];\n\tuniformBufferData[50] = stCol[2];\n\tuniformBufferData[51] = stCol[3];\n\tuniformBufferData[52] = st.enabled ? 1 : 0;\n\tuniformBufferData[53] = stSize;\n\tuniformBufferData[54] = stPos;\n\tuniformBufferData[55] = stOpacity;\n\tuniformBufferData[56] = stBlend;\n\tuniformBufferData[57] = 0;\n\tuniformBufferData[58] = 0;\n\tuniformBufferData[59] = 0;\n\tuniformBufferData[60] = beHlCol[0];\n\tuniformBufferData[61] = beHlCol[1];\n\tuniformBufferData[62] = beHlCol[2];\n\tuniformBufferData[63] = beHlCol[3];\n\tuniformBufferData[64] = beShCol[0];\n\tuniformBufferData[65] = beShCol[1];\n\tuniformBufferData[66] = beShCol[2];\n\tuniformBufferData[67] = beShCol[3];\n\tuniformBufferData[68] = be.enabled ? 1 : 0;\n\tuniformBufferData[69] = beStyle;\n\tuniformBufferData[70] = beTech;\n\tuniformBufferData[71] = beDepth;\n\tuniformBufferData[72] = beDir;\n\tuniformBufferData[73] = beSize;\n\tuniformBufferData[74] = beSoften;\n\tuniformBufferData[75] = beAngle;\n\tuniformBufferData[76] = beAltitude;\n\tuniformBufferData[77] = beHlOpacity;\n\tuniformBufferData[78] = beShOpacity;\n\tuniformBufferData[79] = 0;\n\tuniformBufferData[80] = coCol[0];\n\tuniformBufferData[81] = coCol[1];\n\tuniformBufferData[82] = coCol[2];\n\tuniformBufferData[83] = coCol[3];\n\tuniformBufferData[84] = co.enabled ? 1 : 0;\n\tuniformBufferData[85] = coOpacity;\n\tuniformBufferData[86] = coBlend;\n\tuniformBufferData[87] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: inputView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tinputTex,\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, uBindGroup);\n\trenderPass.setBindGroup(1, tBindGroup);\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { LayerStyleNodeConfigSchema as _, DEFAULT_COLOR_OVERLAY as a, computeLayerStylePadding as b, DEFAULT_INNER_SHADOW as c, GlowStyleSchema as d, InnerShadowStyleSchema as f, LAYER_STYLE_PRESETS as g, LAYER_STYLE_OUTPUT_TYPE_MAP as h, DEFAULT_BEVEL_EMBOSS as i, DEFAULT_STROKE as l, LAYER_STYLE_CONFIG_HANDLES as m, BevelEmbossStyleSchema as n, DEFAULT_DROP_SHADOW as o, LAYER_STYLE_BLEND_MODES as p, ColorOverlayStyleSchema as r, DEFAULT_GLOW as s, renderers_default as t, DropShadowStyleSchema as u, LayerStyleResultSchema as v, StrokeStyleSchema as y };\n//# sourceMappingURL=renderers-fzmE8CWs.mjs.map","import { ImageResultSchema, VideoResultSchema } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { colorMatrixWgsl } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst LevelChannelSchema = z.object({\n\tinBlack: z.number().min(0).max(1).default(0),\n\tinWhite: z.number().min(0).max(1).default(1),\n\toutBlack: z.number().min(0).max(1).default(0),\n\toutWhite: z.number().min(0).max(1).default(1)\n}).strict().superRefine((val, ctx) => {\n\tif (val.inBlack >= val.inWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"inWhite\"],\n\t\tmessage: \"inWhite must be greater than inBlack\"\n\t});\n\tif (val.outBlack >= val.outWhite) ctx.addIssue({\n\t\tcode: z.ZodIssueCode.custom,\n\t\tpath: [\"outWhite\"],\n\t\tmessage: \"outWhite must be greater than outBlack\"\n\t});\n});\nconst LevelsNodeConfigSchema = z.object({\n\tmaster: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tred: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tgreen: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t}),\n\tblue: LevelChannelSchema.default({\n\t\tinBlack: 0,\n\t\tinWhite: 1,\n\t\toutBlack: 0,\n\t\toutWhite: 1\n\t})\n}).strict();\nconst LevelsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst LevelsOperationSchema = LevelsNodeConfigSchema.extend({\n\top: z.literal(\"Levels\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultLevelChannel = {\n\tinBlack: 0,\n\tinWhite: 1,\n\toutBlack: 0,\n\toutWhite: 1\n};\nconst defaultLevelsConfig = {\n\tmaster: { ...defaultLevelChannel },\n\tred: { ...defaultLevelChannel },\n\tgreen: { ...defaultLevelChannel },\n\tblue: { ...defaultLevelChannel }\n};\nconst LEVELS_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst colorMatrixData = new Float32Array(20);\nfunction getColorMatrixResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst colorMatrixUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tconst singleTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst colorMatrixModule = device.createShaderModule({\n\t\t\tlabel: \"color-matrix.wgsl\",\n\t\t\tcode: colorMatrixWgsl\n\t\t});\n\t\tres = {\n\t\t\tcolorMatrixPipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"ColorMatrixPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [colorMatrixUniformLayout, singleTextureLayout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: colorMatrixModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: colorMatrixModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t}),\n\t\t\tcolorMatrixUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getTransform(ch) {\n\tconst inRange = Math.max(ch.inWhite - ch.inBlack, 1e-5);\n\tconst scale = (ch.outWhite - ch.outBlack) / inRange;\n\treturn {\n\t\tscale,\n\t\tbias: ch.outBlack - ch.inBlack * scale\n\t};\n}\nconst LevelsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Levels\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst m = getTransform(op.master ?? defaultLevelChannel);\n\tconst r = getTransform(op.red ?? defaultLevelChannel);\n\tconst g = getTransform(op.green ?? defaultLevelChannel);\n\tconst b = getTransform(op.blue ?? defaultLevelChannel);\n\tconst matrix = [\n\t\tr.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\tr.bias * m.scale + m.bias,\n\t\t0,\n\t\tg.scale * m.scale,\n\t\t0,\n\t\t0,\n\t\tg.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\tb.scale * m.scale,\n\t\t0,\n\t\tb.bias * m.scale + m.bias,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t1,\n\t\t0\n\t];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { colorMatrixPipeline: pipeline, colorMatrixUniformLayout: uLayout, singleTextureLayout: tLayout } = getColorMatrixResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tcolorMatrixData[0] = matrix[0];\n\tcolorMatrixData[1] = matrix[1];\n\tcolorMatrixData[2] = matrix[2];\n\tcolorMatrixData[3] = matrix[3];\n\tcolorMatrixData[4] = matrix[5];\n\tcolorMatrixData[5] = matrix[6];\n\tcolorMatrixData[6] = matrix[7];\n\tcolorMatrixData[7] = matrix[8];\n\tcolorMatrixData[8] = matrix[10];\n\tcolorMatrixData[9] = matrix[11];\n\tcolorMatrixData[10] = matrix[12];\n\tcolorMatrixData[11] = matrix[13];\n\tcolorMatrixData[12] = matrix[15];\n\tcolorMatrixData[13] = matrix[16];\n\tcolorMatrixData[14] = matrix[17];\n\tcolorMatrixData[15] = matrix[18];\n\tcolorMatrixData[16] = matrix[4];\n\tcolorMatrixData[17] = matrix[9];\n\tcolorMatrixData[18] = matrix[14];\n\tcolorMatrixData[19] = matrix[19];\n\tconst buffer = ctx.renderer.getTemporaryBuffer(colorMatrixData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: props.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LevelsWebGPURenderer });\n\n//#endregion\nexport { LevelsOperationSchema as a, defaultLevelsConfig as c, LevelsNodeConfigSchema as i, LEVELS_OUTPUT_TYPE_MAP as n, LevelsResultSchema as o, LevelChannelSchema as r, defaultLevelChannel as s, renderers_default as t };\n//# sourceMappingURL=renderers-DOmrZ7dd.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst MAX_OPERATIONS = 1024;\nconst LIQUIFY_SHADER = `\nstruct LiquifyOpData {\n\topType : f32, // 0=Push, 1=Pull, 2=Bloat, 3=Pucker, 4=TwirlCW, 5=TwirlCCW\n\tx : f32,\n\ty : f32,\n\tradius : f32,\n\tstrength : f32,\n\tdx : f32,\n\tdy : f32,\n\t_pad : f32,\n};\n\nstruct LiquifyUniforms {\n\topCount : f32,\n\taspectRatio : f32,\n\topacity : f32,\n\t_pad0 : f32,\n\tops : array<LiquifyOpData, 1024>,\n};\n\n@group(0) @binding(0) var<uniform> u : LiquifyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nconst PI = 3.141592653589793;\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar currentUV = in.uv;\n\tlet count = u32(u.opCount);\n\tlet aspect = u.aspectRatio;\n\n\tfor (var i = 0u; i < count && i < 1024u; i = i + 1u) {\n\t\tlet op = u.ops[i];\n\t\tlet center = vec2<f32>(op.x, op.y);\n\t\tlet delta = currentUV - center;\n\t\tlet deltaAspect = vec2<f32>(delta.x * aspect, delta.y);\n\t\tlet dist = length(deltaAspect);\n\n\t\tif (dist < op.radius && op.radius > 0.0001) {\n\t\t\tlet t = dist / op.radius;\n\t\t\tlet falloff = (1.0 - t * t) * (1.0 - t * t);\n\t\t\tlet s = op.strength;\n\n\t\t\tif (op.opType < 0.5) {\n\t\t\t\t// 0 = Push\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV - shift;\n\t\t\t} else if (op.opType < 1.5) {\n\t\t\t\t// 1 = Pull\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV + shift;\n\t\t\t} else if (op.opType < 2.5) {\n\t\t\t\t// 2 = Bloat\n\t\t\t\tlet factor = 1.0 - s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 3.5) {\n\t\t\t\t// 3 = Pucker\n\t\t\t\tlet factor = 1.0 + s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 4.5) {\n\t\t\t\t// 4 = TwirlCW\n\t\t\t\tlet angle = -s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t} else {\n\t\t\t\t// 5 = TwirlCCW\n\t\t\t\tlet angle = s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet clampedUV = clamp(currentUV, vec2<f32>(0.0), vec2<f32>(1.0));\n\tlet sampledColor = textureSampleLevel(tex, samp, clampedUV, 0.0);\n\treturn sampledColor;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getLiquifyResources(device, format) {\n\tlet layouts = deviceResourceCache.get(device);\n\tif (!layouts) {\n\t\tlayouts = {\n\t\t\tuniformLayout: device.createBindGroupLayout({\n\t\t\t\tlabel: \"LiquifyUniformLayout\",\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tsingleTextureLayout: device.createBindGroupLayout({\n\t\t\t\tlabel: \"LiquifyTextureLayout\",\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t\t}, {\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t\t};\n\t\tdeviceResourceCache.set(device, layouts);\n\t}\n\tconst cacheKey = format;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"liquify.wgsl\",\n\t\t\tcode: LIQUIFY_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `LiquifyPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layouts.uniformLayout, layouts.singleTextureLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"src-alpha\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tliquifyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout\n\t};\n}\nconst TYPE_ENUM_MAP = {\n\tPush: 0,\n\tPull: 1,\n\tBloat: 2,\n\tPucker: 3,\n\tTwirlCW: 4,\n\tTwirlCCW: 5\n};\nconst LiquifyWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Liquify\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst aspectRatio = height > 0 ? width / height : 1;\n\tconst childTexture = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTexture.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height,\n\t\texcludeTextures: [...props.excludeTextures || [], childTexture]\n\t}, childView, childTexture, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst operations = op.operations || [];\n\tconst opCount = Math.min(operations.length, MAX_OPERATIONS);\n\tconst uniformData = new Float32Array(4 + MAX_OPERATIONS * 8);\n\tuniformData[0] = opCount;\n\tuniformData[1] = aspectRatio;\n\tuniformData[2] = 1;\n\tuniformData[3] = 0;\n\tfor (let i = 0; i < opCount; i++) {\n\t\tconst item = operations[i];\n\t\tif (!item) continue;\n\t\tconst offset = 4 + i * 8;\n\t\tuniformData[offset + 0] = TYPE_ENUM_MAP[item.type] ?? 2;\n\t\tuniformData[offset + 1] = item.x;\n\t\tuniformData[offset + 2] = item.y;\n\t\tuniformData[offset + 3] = item.radius ?? .15;\n\t\tuniformData[offset + 4] = item.strength ?? .5;\n\t\tuniformData[offset + 5] = item.dx ?? 0;\n\t\tuniformData[offset + 6] = item.dy ?? 0;\n\t\tuniformData[offset + 7] = 0;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst resources = getLiquifyResources(ctx.device, ctx.renderer.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, resources.singleTextureLayout, childTexture, sampler);\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"load\");\n\toutPass.setPipeline(resources.liquifyPipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\toutPass.draw(4, 1, 0, 0);\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer });\n\n//#endregion\nexport { LiquifyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D9rt5Xm7.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { lutStore, signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_3D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_3d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\t// Coordinate adjustment to sample from texel centers\n\tlet uvw = inputColor.rgb * ((u.lutSize - 1.0) / u.lutSize) + vec3<f32>(0.5 / u.lutSize);\n\tlet mappedColor = textureSampleLevel(lutTex, lutSamp, uvw, 0.0);\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (mappedColor.rgb - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst LUT_1D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_1d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\tlet rCoord = inputColor.r * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet gCoord = inputColor.g * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet bCoord = inputColor.b * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\t\n\tlet mappedR = textureSampleLevel(lutTex, lutSamp, rCoord, 0.0).r;\n\tlet mappedG = textureSampleLevel(lutTex, lutSamp, gCoord, 0.0).g;\n\tlet mappedB = textureSampleLevel(lutTex, lutSamp, bCoord, 0.0).b;\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (vec3<f32>(mappedR, mappedG, mappedB) - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst lutUniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tlutUniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tlutTextureLayout3D: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: {\n\t\t\t\tviewDimension: \"3d\",\n\t\t\t\tsampleType: \"float\"\n\t\t\t}\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tlutTextureLayout1D: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: {\n\t\t\t\tviewDimension: \"1d\",\n\t\t\t\tsampleType: \"float\"\n\t\t\t}\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getLutResources(device, format, type) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `lut_${type}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderCode = type === \"3D\" ? LUT_3D_SHADER : LUT_1D_SHADER;\n\t\tconst lutModule = device.createShaderModule({\n\t\t\tlabel: `lut_${type.toLowerCase()}_${format}.wgsl`,\n\t\t\tcode: shaderCode\n\t\t});\n\t\tconst currentLutLayout = type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D;\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `LutPipeline_${type}_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.lutUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tcurrentLutLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: lutModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: lutModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tlutPipeline: pipeline,\n\t\tlutUniformLayout: layouts.lutUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tlutTextureLayout: type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst LutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ApplyLUT\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst lutUrl = op.lutUrl;\n\tif (!lutUrl) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intensityInput = op.intensityHandleId ? op.inputs?.[op.intensityHandleId] : null;\n\tconst hasSignal = !!(intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? intensityInput?.outputItem?.data : null;\n\tlet intensity = 1;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Number\") intensity = Number(intensityInput.outputItem.data ?? 1);\n\telse intensity = Number(op.intensity ?? 1);\n\telse if (sd && typeof sd === \"object\") {\n\t\tintensity = Number(sd.offset ?? 1);\n\t\thasStaticSignal = true;\n\t}\n\tintensity = Math.max(0, Math.min(10, intensity));\n\tlet lut = lutStore.get(lutUrl, ctx.device);\n\tif (!lut) {\n\t\tif ((props.isHeadless ?? (typeof window === \"undefined\" || globalThis.__IS_HEADLESS_RENDERER__)) || props.forceWait) try {\n\t\t\tlut = await lutStore.getOrLoad(lutUrl, ctx.device);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof DOMException && err.name === \"AbortError\") && !(err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\")) console.error(\"[ApplyLUT] Failed to load LUT synchronously:\", err);\n\t\t}\n\t\telse lutStore.getOrLoad(lutUrl, ctx.device).catch((err) => {\n\t\t\tif (err instanceof DOMException && err.name === \"AbortError\" || err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\") return;\n\t\t\tconsole.error(\"[ApplyLUT] Failed to load LUT in background:\", err);\n\t\t});\n\t\tif (!lut && lutUrl.startsWith(\"runtime://lut/\")) {\n\t\t\tconst prefix = lutUrl.substring(0, lutUrl.lastIndexOf(\"-\") + 1);\n\t\t\tif (prefix) lut = lutStore.getAnyMatching(prefix, ctx.device);\n\t\t}\n\t}\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tif (!lut) {\n\t\tconst finalPass$1 = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tctx.renderer.drawTexture(finalPass$1, tmpTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight\n\t\t}, { opacity: op.opacity ?? 1 });\n\t\targs.pass = finalPass$1;\n\t\treturn;\n\t}\n\tconst { lutPipeline: pipeline, lutUniformLayout: uLayout, singleTextureLayout: tLayout, lutTextureLayout: lLayout, signalTextureLayout: sigLayout } = getLutResources(ctx.device, ctx.renderer.format, lut.type);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tlet signalView;\n\tif (hasStaticSignal) {\n\t\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\t\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\t\tsignalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"lut_intensity_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\t} else signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlutUniformData[0] = intensity;\n\tlutUniformData[1] = lut.size;\n\tlutUniformData[2] = hasStaticSignal ? 1 : 0;\n\tlutUniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(lutUniformData);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\trenderPass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: lLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: lut.texture.createView()\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(3, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: signalView\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C3hgvvNN.mjs.map","import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 200;\nconst MaskOperationEnum = z.enum([\n\t\"Union\",\n\t\"Intersect\",\n\t\"Subtract\",\n\t\"Difference\",\n\t\"Invert\",\n\t\"Dilate\",\n\t\"Erode\",\n\t\"Choke\",\n\t\"Feather\"\n]);\nconst MaskChannelEnum = z.enum([\n\t\"Alpha\",\n\t\"Luminance\",\n\t\"Red\",\n\t\"Green\",\n\t\"Blue\"\n]);\nconst MaskOutputFormatEnum = z.enum([\n\t\"WhiteWithAlpha\",\n\t\"GrayscaleRGB\",\n\t\"AlphaOnly\",\n\t\"PassthroughRGB\"\n]);\nconst maskMathConfig = configBuilder().field(\"operation\", MaskOperationEnum.default(\"Union\"), {\n\tlabel: \"Operation\",\n\tdescription: \"Morphological or Boolean set operation applied to input alpha masks.\"\n}).field(\"radius\", z.number().min(0).max(MAX_RADIUS).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius / Width (px)\",\n\tdescription: \"Kernel radius in pixels for Dilate, Erode, Choke, or Feather operations.\"\n}).field(\"threshold\", z.number().multipleOf(.01).min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Threshold\",\n\tdescription: \"Cutoff threshold level (0.0–1.0) for binarization step or non-linear choke.\"\n}).field(\"clampMin\", z.number().multipleOf(.01).min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Clamp Min\",\n\tdescription: \"Minimum alpha matte cutoff limit (0.0–1.0).\"\n}).field(\"clampMax\", z.number().multipleOf(.01).min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Clamp Max\",\n\tdescription: \"Maximum alpha matte cutoff limit (0.0–1.0).\"\n}).field(\"channelA\", MaskChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Mask A Channel\",\n\tdescription: \"Source channel to extract mask from Mask A (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"channelB\", MaskChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Mask B Channel\",\n\tdescription: \"Source channel to extract mask from Mask B (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"binarize\", z.boolean().default(false), {\n\tlabel: \"Binarize\",\n\tdescription: \"When enabled, outputs crisp 1-bit binary matte based on threshold.\"\n}).field(\"invertResult\", z.boolean().default(false), {\n\tlabel: \"Invert Result\",\n\tdescription: \"Inverts final matte output.\"\n}).field(\"outputFormat\", MaskOutputFormatEnum.default(\"WhiteWithAlpha\"), {\n\tlabel: \"Output Format\",\n\tdescription: \"WhiteWithAlpha (rgba(1,1,1,a)), GrayscaleRGB (rgba(a,a,a,1)), AlphaOnly (rgba(0,0,0,a)), PassthroughRGB (Mask A RGB with new alpha).\"\n}).build();\nconst MaskMathNodeConfigSchema = maskMathConfig.schema;\nconst MaskMathResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst MASK_MATH_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst OPERATION_MAP = {\n\tUnion: 0,\n\tIntersect: 1,\n\tSubtract: 2,\n\tDifference: 3,\n\tInvert: 4,\n\tDilate: 5,\n\tErode: 6,\n\tChoke: 7,\n\tFeather: 8\n};\nconst CHANNEL_MAP = {\n\tAlpha: 0,\n\tLuminance: 1,\n\tRed: 2,\n\tGreen: 3,\n\tBlue: 4\n};\nconst OUTPUT_FORMAT_MAP = {\n\tWhiteWithAlpha: 0,\n\tGrayscaleRGB: 1,\n\tAlphaOnly: 2,\n\tPassthroughRGB: 3\n};\nconst WGSL_MASKMATH = `\nstruct MaskMathUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tthreshold : f32,\n\n\tclampMin : f32,\n\tclampMax : f32,\n\toperation : f32,\n\tchannelA : f32,\n\n\tchannelB : f32,\n\tbinarize : f32,\n\tinvertResult : f32,\n\toutputFormat : f32,\n\n\thasMaskB : f32,\n\thasRadiusSig : f32,\n\thasThreshSig : f32,\n\thasClampMinSig : f32,\n\n\thasClampMaxSig : f32,\n\tisSecondPass : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskMathUniforms;\n\n@group(1) @binding(0) var texA : texture_2d<f32>;\n@group(1) @binding(1) var texB : texture_2d<f32>;\n@group(1) @binding(2) var origTexA : texture_2d<f32>;\n@group(1) @binding(3) var samp : sampler;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var threshSigTex : texture_2d<f32>;\n@group(2) @binding(2) var clampMinSigTex : texture_2d<f32>;\n@group(2) @binding(3) var clampMaxSigTex : texture_2d<f32>;\n@group(2) @binding(4) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn extractChannel(color : vec4<f32>, chCode : f32) -> f32 {\n\tif (chCode < 0.5) {\n\t\t// Alpha\n\t\treturn color.a;\n\t} else if (chCode < 1.5) {\n\t\t// Luminance\n\t\tlet luma = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, luma / color.a);\n\t\t}\n\t\treturn luma;\n\t} else if (chCode < 2.5) {\n\t\t// Red\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.r / color.a);\n\t\t}\n\t\treturn color.r;\n\t} else if (chCode < 3.5) {\n\t\t// Green\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.g / color.a);\n\t\t}\n\t\treturn color.g;\n\t} else {\n\t\t// Blue\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.b / color.a);\n\t\t}\n\t\treturn color.b;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(texA));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = clamp(textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 200.0);\n\t}\n\tvar threshold = u.threshold;\n\tif (u.hasThreshSig > 0.5) {\n\t\tthreshold = clamp(textureSampleLevel(threshSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar clampMin = u.clampMin;\n\tif (u.hasClampMinSig > 0.5) {\n\t\tclampMin = clamp(textureSampleLevel(clampMinSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar clampMax = u.clampMax;\n\tif (u.hasClampMaxSig > 0.5) {\n\t\tclampMax = clamp(textureSampleLevel(clampMaxSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\n\tlet op = u.operation;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar val = 0.0;\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// -------------------------------------------------------------\n\t\t// PASS 1: Horizontal pass / Boolean operation\n\t\t// -------------------------------------------------------------\n\t\tlet sampleA = textureSampleLevel(texA, samp, in.uv, 0.0);\n\t\tlet sampleB = textureSampleLevel(texB, samp, in.uv, 0.0);\n\n\t\tlet a = extractChannel(sampleA, u.channelA);\n\t\tlet b = select(0.0, extractChannel(sampleB, u.channelB), u.hasMaskB > 0.5);\n\n\t\tif (op < 0.5) {\n\t\t\t// Union (A + B)\n\t\t\tval = select(a, clamp(a + b, 0.0, 1.0), u.hasMaskB > 0.5);\n\t\t} else if (op < 1.5) {\n\t\t\t// Intersect (min(A, B))\n\t\t\tval = select(a, min(a, b), u.hasMaskB > 0.5);\n\t\t} else if (op < 2.5) {\n\t\t\t// Subtract (clamp(A - B, 0, 1))\n\t\t\tval = select(a, clamp(a - b, 0.0, 1.0), u.hasMaskB > 0.5);\n\t\t} else if (op < 3.5) {\n\t\t\t// Difference (|A - B|)\n\t\t\tval = select(a, abs(a - b), u.hasMaskB > 0.5);\n\t\t} else if (op < 4.5) {\n\t\t\t// Invert (1 - A)\n\t\t\tval = 1.0 - a;\n\t\t} else if (op < 5.5) {\n\t\t\t// Dilate (Horizontal Max)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\t\tvar maxVal = a;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\tmaxVal = max(maxVal, extractChannel(s, u.channelA));\n\t\t\t\t}\n\t\t\t\tval = maxVal;\n\t\t\t}\n\t\t} else if (op < 7.5) {\n\t\t\t// Erode & Choke (Horizontal Min)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\t\tvar minVal = a;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\tminVal = min(minVal, extractChannel(s, u.channelA));\n\t\t\t\t}\n\t\t\t\tval = minVal;\n\t\t\t}\n\t\t} else {\n\t\t\t// Feather (Horizontal Gaussian Blur)\n\t\t\tif (radius <= 0.0) {\n\t\t\t\tval = a;\n\t\t\t} else {\n\t\t\t\tlet spatial_sigma = max(0.1, radius / 2.0);\n\t\t\t\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\t\t\t\tlet effectiveSigma = spatial_sigma / stepScale;\n\t\t\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 48);\n\t\t\t\tvar accum = 0.0;\n\t\t\t\tvar totalWeight = 0.0;\n\t\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\t\tlet x = f32(i) * stepScale;\n\t\t\t\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\t\taccum += extractChannel(s, u.channelA) * weight;\n\t\t\t\t\ttotalWeight += weight;\n\t\t\t\t}\n\t\t\t\tval = accum / max(totalWeight, 1e-5);\n\t\t\t}\n\t\t}\n\n\t\treturn vec4<f32>(val, val, val, val);\n\t}\n\n\t// -------------------------------------------------------------\n\t// PASS 2: Vertical pass & Post-processing (clamp, binarize, format)\n\t// -------------------------------------------------------------\n\tlet samplePass1 = textureSampleLevel(texA, samp, in.uv, 0.0);\n\tvar matte = samplePass1.r;\n\n\t// 1. Spatial kernel processing (Dilate, Erode, Choke, Feather) when radius > 0\n\tif (radius > 0.0) {\n\t\tif (op >= 4.5 && op < 5.5) {\n\t\t\t// Dilate (Vertical Max)\n\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\tvar maxVal = matte;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\tmaxVal = max(maxVal, s.r);\n\t\t\t}\n\t\t\tmatte = maxVal;\n\t\t} else if (op >= 5.5 && op < 7.5) {\n\t\t\t// Erode & Choke (Vertical Min)\n\t\t\tlet stepScale = max(1.0, radius / 20.0);\n\t\t\tlet sampleRadius = min(i32(ceil(radius / stepScale)), 48);\n\t\t\tvar minVal = matte;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\tminVal = min(minVal, s.r);\n\t\t\t}\n\t\t\tmatte = minVal;\n\t\t} else if (op >= 7.5) {\n\t\t\t// Feather (Vertical Gaussian Blur)\n\t\t\tlet spatial_sigma = max(0.1, radius / 2.0);\n\t\t\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\t\t\tlet effectiveSigma = spatial_sigma / stepScale;\n\t\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 48);\n\t\t\tvar accum = 0.0;\n\t\t\tvar totalWeight = 0.0;\n\t\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\t\tlet x = f32(i) * stepScale;\n\t\t\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\t\t\tlet s = textureSampleLevel(texA, samp, in.uv + offset, 0.0);\n\t\t\t\taccum += s.r * weight;\n\t\t\t\ttotalWeight += weight;\n\t\t\t}\n\t\t\tmatte = accum / max(totalWeight, 1e-5);\n\t\t}\n\t}\n\n\t// 2. Choke non-linear threshold contraction curve (applies even if radius == 0)\n\tif (op >= 6.5 && op < 7.5) {\n\t\tlet threshRange = max(0.01, 1.0 - threshold);\n\t\tmatte = clamp((matte - threshold) / threshRange, 0.0, 1.0);\n\t}\n\n\t// Range clamping\n\tlet lowerLimit = min(clampMin, clampMax);\n\tlet upperLimit = max(clampMin, clampMax);\n\tmatte = clamp(matte, lowerLimit, upperLimit);\n\n\t// Optional Binarization\n\tif (u.binarize > 0.5) {\n\t\tmatte = select(0.0, 1.0, matte >= threshold);\n\t}\n\n\t// Optional Inversion\n\tif (u.invertResult > 0.5) {\n\t\tmatte = 1.0 - matte;\n\t}\n\n\t// Output format conversion\n\tlet fmt = u.outputFormat;\n\tif (fmt < 0.5) {\n\t\t// WhiteWithAlpha: vec4(matte, matte, matte, matte) (premultiplied standard mask)\n\t\treturn vec4<f32>(matte, matte, matte, matte);\n\t} else if (fmt < 1.5) {\n\t\t// GrayscaleRGB: vec4(matte, matte, matte, 1.0)\n\t\treturn vec4<f32>(matte, matte, matte, 1.0);\n\t} else if (fmt < 2.5) {\n\t\t// AlphaOnly: vec4(0.0, 0.0, 0.0, matte)\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, matte);\n\t} else {\n\t\t// PassthroughRGB: Mask A color with new alpha\n\t\tlet origCol = textureSampleLevel(origTexA, samp, in.uv, 0.0);\n\t\tif (origCol.a < 1e-4) {\n\t\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t\t}\n\t\tlet unpremult = origCol.rgb / origCol.a;\n\t\treturn vec4<f32>(unpremult * matte, matte);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskMathResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 4,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_MASKMATH });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: targetFormat }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"MaskMath\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null,\n\t\t\t\t\thandleId\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data,\n\t\t\t\thandleId\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null,\n\t\t\thandleId\n\t\t};\n\t};\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 0), 0, MAX_RADIUS);\n\tconst thresholdRes = resolveField(op.thresholdHandleId, Number(op.threshold ?? .5), 0, 1);\n\tconst clampMinRes = resolveField(op.clampMinHandleId, Number(op.clampMin ?? 0), 0, 1);\n\tconst clampMaxRes = resolveField(op.clampMaxHandleId, Number(op.clampMax ?? 1), 0, 1);\n\tconst tmpATex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpAView = tmpATex.createView();\n\tctx.renderer.beginFrame(encoder, tmpAView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-maskA`,\n\t\texcludeTextures: [...props.excludeTextures || [], tmpATex]\n\t}, tmpAView, tmpATex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tlet tmpBTex = null;\n\tif (op.maskBMedia) {\n\t\ttmpBTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\t...props.excludeTextures || [],\n\t\t\ttargetTexture,\n\t\t\ttmpATex\n\t\t]);\n\t\tconst tmpBView = tmpBTex.createView();\n\t\tctx.renderer.beginFrame(encoder, tmpBView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, width, height, \"clear\").end();\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(op.maskBMedia, {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskBMedia,\n\t\t\trenderId: `${props.renderId}-maskB`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttmpATex,\n\t\t\t\ttmpBTex\n\t\t\t]\n\t\t}, tmpBView, tmpBTex, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t}\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getMaskMathResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) {\n\t\t\tconst cacheNodeId = res.sd.nodeId ?? res.handleId ?? `${props.renderId ?? \"maskmath\"}_${suffix}`;\n\t\t\treturn signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, cacheNodeId, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\t}\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst threshView = getSignalView(thresholdRes, \"threshold_sig\");\n\tconst clampMinView = getSignalView(clampMinRes, \"clampMin_sig\");\n\tconst clampMaxView = getSignalView(clampMaxRes, \"clampMax_sig\");\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: threshView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: clampMinView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: clampMaxView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst operationCode = OPERATION_MAP[op.operation ?? \"Union\"] ?? 0;\n\tconst channelACode = CHANNEL_MAP[op.channelA ?? \"Alpha\"] ?? 0;\n\tconst channelBCode = CHANNEL_MAP[op.channelB ?? \"Alpha\"] ?? 0;\n\tconst outputFormatCode = OUTPUT_FORMAT_MAP[op.outputFormat ?? \"WhiteWithAlpha\"] ?? 0;\n\tconst dummyBView = tmpBTex ? tmpBTex.createView() : tmpAView;\n\tconst hUniformData = new Float32Array(20);\n\tconst vUniformData = new Float32Array(20);\n\tconst baseUniforms = [\n\t\t0,\n\t\t0,\n\t\tradiusRes.val,\n\t\tthresholdRes.val,\n\t\tclampMinRes.val,\n\t\tclampMaxRes.val,\n\t\toperationCode,\n\t\tchannelACode,\n\t\tchannelBCode,\n\t\top.binarize ? 1 : 0,\n\t\top.invertResult ? 1 : 0,\n\t\toutputFormatCode,\n\t\ttmpBTex ? 1 : 0,\n\t\tradiusRes.hasStaticSig ? 1 : 0,\n\t\tthresholdRes.hasStaticSig ? 1 : 0,\n\t\tclampMinRes.hasStaticSig ? 1 : 0,\n\t\tclampMaxRes.hasStaticSig ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t];\n\thUniformData.set(baseUniforms);\n\thUniformData[0] = 1;\n\thUniformData[1] = 0;\n\thUniformData[17] = 0;\n\tvUniformData.set(baseUniforms);\n\tvUniformData[0] = 0;\n\tvUniformData[1] = 1;\n\tvUniformData[17] = 1;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpATex,\n\t\t...tmpBTex ? [tmpBTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpATex,\n\t\t...tmpBTex ? [tmpBTex] : [],\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(hUniformData);\n\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex1.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thPass.setPipeline(pipeline);\n\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: hBuffer }\n\t\t}]\n\t}));\n\thPass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: tmpAView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: dummyBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpAView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\thPass.setBindGroup(2, sigBindGroup);\n\thPass.draw(4);\n\thPass.end();\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(vUniformData);\n\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex2.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvPass.setPipeline(pipeline);\n\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: vBuffer }\n\t\t}]\n\t}));\n\tvPass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: outTex1.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: dummyBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpAView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tvPass.setBindGroup(2, sigBindGroup);\n\tvPass.draw(4);\n\tvPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tconst finalOpacity = props.opacity ?? op.opacity ?? 1;\n\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: finalOpacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { MaskChannelEnum as a, MaskOperationEnum as c, MAX_RADIUS as i, MaskOutputFormatEnum as l, WebGPURenderer as n, MaskMathNodeConfigSchema as o, MASK_MATH_OUTPUT_TYPE_MAP as r, MaskMathResultSchema as s, renderers_default as t, maskMathConfig as u };\n//# sourceMappingURL=renderers-DZ9kssU1.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/shared/utils.ts\nfunction createUniformGrid(cols, rows) {\n\tconst points = [];\n\tfor (let r = 0; r < rows; r++) {\n\t\tconst y = r / (rows - 1) * 100;\n\t\tfor (let c = 0; c < cols; c++) {\n\t\t\tconst x = c / (cols - 1) * 100;\n\t\t\tpoints.push({\n\t\t\t\tx,\n\t\t\t\ty\n\t\t\t});\n\t\t}\n\t}\n\treturn points;\n}\nfunction interpolateGridPoint(u, v, oldPoints, oldCols, oldRows) {\n\tconst px = u * (oldCols - 1);\n\tconst py = v * (oldRows - 1);\n\tconst x0 = Math.floor(px);\n\tconst x1 = Math.min(oldCols - 1, x0 + 1);\n\tconst y0 = Math.floor(py);\n\tconst y1 = Math.min(oldRows - 1, y0 + 1);\n\tconst tx = px - x0;\n\tconst ty = py - y0;\n\tconst p00 = oldPoints[y0 * oldCols + x0];\n\tconst p10 = oldPoints[y0 * oldCols + x1];\n\tconst p01 = oldPoints[y1 * oldCols + x0];\n\tconst p11 = oldPoints[y1 * oldCols + x1];\n\tif (!p00 || !p10 || !p01 || !p11) return {\n\t\tx: u * 100,\n\t\ty: v * 100\n\t};\n\treturn {\n\t\tx: (1 - tx) * (1 - ty) * p00.x + tx * (1 - ty) * p10.x + (1 - tx) * ty * p01.x + tx * ty * p11.x,\n\t\ty: (1 - tx) * (1 - ty) * p00.y + tx * (1 - ty) * p10.y + (1 - tx) * ty * p01.y + tx * ty * p11.y\n\t};\n}\nfunction resizeGrid(oldPoints, oldCols, oldRows, newCols, newRows) {\n\tif (!oldPoints || oldPoints.length !== oldCols * oldRows) return createUniformGrid(newCols, newRows);\n\tconst points = [];\n\tfor (let r = 0; r < newRows; r++) {\n\t\tconst v = r / (newRows - 1);\n\t\tfor (let c = 0; c < newCols; c++) {\n\t\t\tconst u = c / (newCols - 1);\n\t\t\tpoints.push(interpolateGridPoint(u, v, oldPoints, oldCols, oldRows));\n\t\t}\n\t}\n\treturn points;\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst meshWarpWgsl = `\nstruct MeshUniforms {\n\tgridSize : vec2<f32>,\n\tlayerSize : vec2<f32>,\n\tmatrix_col0 : vec4<f32>,\n\tmatrix_col1 : vec4<f32>,\n\tpoints : array<vec4<f32>, 144>,\n};\n\n@group(0) @binding(0) var<uniform> u : MeshUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tlet cols = u32(u.gridSize.x);\n\tlet rows = u32(u.gridSize.y);\n\t\n\tlet cellsCol = cols - 1u;\n\tlet cellsRow = rows - 1u;\n\tlet totalCells = cellsCol * cellsRow;\n\t\n\tlet cellIndex = vi / 6u;\n\tlet vertexInCell = vi % 6u;\n\t\n\tif (cellIndex >= totalCells) {\n\t\treturn VSOut(vec4<f32>(0.0), vec4<f32>(0.0).xy);\n\t}\n\t\n\tlet cellC = cellIndex % cellsCol;\n\tlet cellR = cellIndex / cellsCol;\n\t\n\tvar colOffset = 0u;\n\tvar rowOffset = 0u;\n\t\n\t// Mapping vertex index in cell to quad corner offset\n\t// Triangle 1: TL (0,0), TR (1,0), BL (0,1)\n\t// Triangle 2: TR (1,0), BR (1,1), BL (0,1)\n\tif (vertexInCell == 1u) { // TR\n\t\tcolOffset = 1u;\n\t\trowOffset = 0u;\n\t} else if (vertexInCell == 2u) { // BL\n\t\tcolOffset = 0u;\n\t\trowOffset = 1u;\n\t} else if (vertexInCell == 3u) { // TR\n\t\tcolOffset = 1u;\n\t\trowOffset = 0u;\n\t} else if (vertexInCell == 4u) { // BR\n\t\tcolOffset = 1u;\n\t\trowOffset = 1u;\n\t} else if (vertexInCell == 5u) { // BL\n\t\tcolOffset = 0u;\n\t\trowOffset = 1u;\n\t}\n\t// Vertex 0 is TL (colOffset=0, rowOffset=0)\n\t\n\tlet gridC = cellC + colOffset;\n\tlet gridR = cellR + rowOffset;\n\t\n\tlet pointIndex = gridR * cols + gridC;\n\tlet warpedPoint = u.points[pointIndex].xy;\n\t\n\tlet lx = (warpedPoint.x / 100.0) * u.layerSize.x;\n\tlet ly = (warpedPoint.y / 100.0) * u.layerSize.y;\n\t\n\tlet tx = u.matrix_col0.x * lx + u.matrix_col0.y * ly + u.matrix_col0.z;\n\tlet ty = u.matrix_col1.x * lx + u.matrix_col1.y * ly + u.matrix_col1.z;\n\t\n\tlet targetW = u.matrix_col0.w;\n\tlet targetH = u.matrix_col1.w;\n\t\n\tlet x_clip = (tx / targetW) * 2.0 - 1.0;\n\tlet y_clip = 1.0 - (ty / targetH) * 2.0;\n\t\n\tlet u_coord = f32(gridC) / f32(cellsCol);\n\tlet v_coord = f32(gridR) / f32(cellsRow);\n\t\n\treturn VSOut(vec4<f32>(x_clip, y_clip, 0.0, 1.0), vec2<f32>(u_coord, v_coord));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\treturn color;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMeshWarpResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst warpUniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tconst warpTextureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"mesh_warp.wgsl\",\n\t\t\tcode: meshWarpWgsl\n\t\t});\n\t\tres = {\n\t\t\twarpPipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"MeshWarpPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [warpUniformLayout, warpTextureLayout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tblend: {\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\tsrcFactor: \"src-alpha\",\n\t\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-list\" }\n\t\t\t}),\n\t\t\twarpUniformLayout,\n\t\t\twarpTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst MeshWarpWebGPURenderer = async (args) => {\n\tconst { ctx, props, drawChild, targetTexture, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"MeshWarp\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\targs.pass.end();\n\tconst childTex = ctx.renderer.getTemporaryTexture(sourceWidth, sourceHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, sourceWidth, sourceHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tcontainerWidth: sourceWidth,\n\t\tcontainerHeight: sourceHeight\n\t}, childView, childTex, sourceWidth, sourceHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst cols = Number(op.cols) || 3;\n\tconst rows = Number(op.rows) || 3;\n\tconst points = op.points || [];\n\tconst finalPoints = points.length === cols * rows ? points : createUniformGrid(cols, rows);\n\tconst maxPoints = 144;\n\tconst uniformData = new Float32Array(12 + maxPoints * 4);\n\tuniformData[0] = cols;\n\tuniformData[1] = rows;\n\tuniformData[2] = props.containerWidth ?? sourceWidth;\n\tuniformData[3] = props.containerHeight ?? sourceHeight;\n\tconst matrix = ctx.renderer.getCurrentTransform();\n\tuniformData[4] = matrix.a;\n\tuniformData[5] = matrix.c;\n\tuniformData[6] = matrix.e;\n\tuniformData[7] = targetWidth;\n\tuniformData[8] = matrix.b;\n\tuniformData[9] = matrix.d;\n\tuniformData[10] = matrix.f;\n\tuniformData[11] = targetHeight;\n\tfor (let i = 0; i < maxPoints; i++) {\n\t\tconst pt = finalPoints[i] || {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\t\tuniformData[12 + i * 4] = pt.x;\n\t\tuniformData[12 + i * 4 + 1] = pt.y;\n\t}\n\tconst { warpPipeline: pipeline, warpUniformLayout: uLayout, warpTextureLayout: tLayout } = getMeshWarpResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, childTex, sampler);\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\toutPass.setPipeline(pipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\tconst vertexCount = (cols - 1) * (rows - 1) * 6;\n\toutPass.draw(vertexCount);\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: MeshWarpWebGPURenderer });\n\n//#endregion\nexport { resizeGrid as i, createUniformGrid as n, interpolateGridPoint as r, renderers_default as t };\n//# sourceMappingURL=renderers-CLaqaABL.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { parseColor } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst PaintWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetView, targetTexture, targetWidth, targetHeight, encoder, props, drawChild } = args;\n\tconst { virtualMedia } = props;\n\tif (virtualMedia.operation?.op !== \"Paint\") return;\n\tconst childMedia = virtualMedia?.children?.[0];\n\tconst containerW = props.containerWidth ?? childMedia?.metadata?.width ?? targetWidth;\n\tconst containerH = props.containerHeight ?? childMedia?.metadata?.height ?? targetHeight;\n\tconst config = virtualMedia.operation;\n\tconst isMaskMode = config.mode === \"mask\";\n\tconst strokes = config.strokes ?? [];\n\tpass.end();\n\tctx.renderer.pushIdentity();\n\tconst baseTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [...props.excludeTextures || [], targetTexture]);\n\tconst baseView = baseTex.createView();\n\tif (isMaskMode) ctx.renderer.beginFrame(encoder, baseView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 1\n\t}, containerW, containerH, \"clear\").end();\n\telse if (childMedia) await drawChild(childMedia, props, baseView, baseTex, containerW, containerH);\n\telse {\n\t\tconst basePass = ctx.renderer.beginFrame(encoder, baseView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\");\n\t\tif (config.backgroundColor) ctx.renderer.drawRect(basePass, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerW,\n\t\t\theight: containerH\n\t\t}, config.backgroundColor);\n\t\tbasePass.end();\n\t}\n\tlet finalTex = baseTex;\n\tif (strokes.length > 0) {\n\t\tconst origW = childMedia?.metadata?.width ?? containerW;\n\t\tconst origH = childMedia?.metadata?.height ?? containerH;\n\t\tconst scaleX = origW > 0 ? containerW / origW : 1;\n\t\tconst scaleY = origH > 0 ? containerH / origH : 1;\n\t\tlet scalePushed = false;\n\t\tif (scaleX !== 1 || scaleY !== 1) {\n\t\t\tctx.renderer.pushTransform(new DOMMatrix().scale(scaleX, scaleY));\n\t\t\tscalePushed = true;\n\t\t}\n\t\tconst paintTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\tbaseTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst paintView = paintTex.createView();\n\t\tctx.renderer.beginFrame(encoder, paintView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerW, containerH, \"clear\").end();\n\t\tconst allStrokes = strokes;\n\t\tlet currentLayer = paintTex;\n\t\tlet currentPass = null;\n\t\tfor (const stroke of allStrokes) if (stroke.tool === \"brush\") {\n\t\t\tif (!currentPass) currentPass = ctx.renderer.beginFrame(encoder, currentLayer.createView(), {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"load\");\n\t\t\tconst parsedColor = parseColor(stroke.color);\n\t\t\tconst drawColor = isMaskMode ? {\n\t\t\t\tr: parsedColor.a,\n\t\t\t\tg: parsedColor.a,\n\t\t\t\tb: parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t} : {\n\t\t\t\tr: parsedColor.r * parsedColor.a,\n\t\t\t\tg: parsedColor.g * parsedColor.a,\n\t\t\t\tb: parsedColor.b * parsedColor.a,\n\t\t\t\ta: parsedColor.a\n\t\t\t};\n\t\t\tctx.renderer.drawPath(currentPass, stroke.path, drawColor, stroke.size, {\n\t\t\t\topacity: stroke.opacity ?? 1,\n\t\t\t\tblendMode: \"max\"\n\t\t\t});\n\t\t} else if (stroke.tool === \"eraser\") {\n\t\t\tif (currentPass) {\n\t\t\t\tcurrentPass.end();\n\t\t\t\tcurrentPass = null;\n\t\t\t}\n\t\t\tconst maskTex = ctx.renderer.getTemporaryTexture(containerW, containerH, [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t\tconst maskView = maskTex.createView();\n\t\t\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, containerW, containerH, \"clear\");\n\t\t\tctx.renderer.drawPath(maskPass, stroke.path, \"#ffffff\", stroke.size, { blendMode: \"max\" });\n\t\t\tmaskPass.end();\n\t\t\tcurrentLayer = ctx.renderer.composite(encoder, currentLayer, maskTex, \"mask-out\", [\n\t\t\t\tbaseTex,\n\t\t\t\tpaintTex,\n\t\t\t\ttargetTexture,\n\t\t\t\t...props.excludeTextures || []\n\t\t\t]);\n\t\t}\n\t\tif (currentPass) currentPass.end();\n\t\tfinalTex = ctx.renderer.composite(encoder, baseTex, currentLayer, \"normal\", [\n\t\t\tbaseTex,\n\t\t\tcurrentLayer,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tif (scalePushed) ctx.renderer.popTransform();\n\t}\n\tctx.renderer.popTransform();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, finalTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerW,\n\t\theight: containerH\n\t});\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PaintWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DoOCb9Vp.mjs.map","import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 500;\nconst MAX_FEATHER = 100;\nconst MAX_OFFSET = 4096;\nconst PatchItemSchema = z.object({\n\tid: z.string().default(() => Math.random().toString(36).substring(7)),\n\tcenterX: z.number().min(0).max(1).default(.5),\n\tcenterY: z.number().min(0).max(1).default(.5),\n\toffsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),\n\toffsetY: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0),\n\tradius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tsourceRadius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tfeather: z.number().min(0).max(MAX_FEATHER).default(50),\n\topacity: z.number().min(0).max(1).default(1),\n\tmode: z.enum([\n\t\t\"Clone\",\n\t\t\"SeamlessHeal\",\n\t\t\"TextureTransfer\"\n\t]).default(\"SeamlessHeal\")\n});\nconst patchHealConfig = configBuilder().field(\"patches\", z.array(PatchItemSchema).optional(), {\n\tlabel: \"Patches\",\n\tdescription: \"List of patch healing operations applied sequentially.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"Horizontal normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"Vertical normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"offsetX\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset X Signal\",\n\tdescription: \"Horizontal pixel distance from destination to sample source patch.\"\n}).field(\"offsetY\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset Y Signal\",\n\tdescription: \"Vertical pixel distance from destination to sample source patch.\"\n}).field(\"radius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Target Radius Signal\",\n\tdescription: \"Radius of the destination circular patch in pixels (used when no explicit Mask input is connected).\"\n}).field(\"sourceRadius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Radius Signal\",\n\tdescription: \"Radius of the source sample circular patch in pixels.\"\n}).field(\"feather\", z.number().min(0).max(MAX_FEATHER).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather Signal\",\n\tdescription: \"Softness edge falloff percentage (0–100%).\"\n}).field(\"opacity\", z.number().min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Opacity Signal\",\n\tdescription: \"Blending opacity of the healed patch (0.0–1.0).\"\n}).field(\"mode\", z.enum([\n\t\"Clone\",\n\t\"SeamlessHeal\",\n\t\"TextureTransfer\"\n]).default(\"SeamlessHeal\"), {\n\tlabel: \"Healing Mode\",\n\tdescription: \"Healing algorithm: Clone (direct stamp), SeamlessHeal (Poisson color/lighting blend), TextureTransfer (luminance structure matching).\"\n}).build();\nconst PatchHealNodeConfigSchema = patchHealConfig.schema;\nfunction normalizePatches(config) {\n\tif (config?.patches && config.patches.length > 0) return config.patches.map((p, idx) => ({\n\t\tid: p.id || `patch-${idx + 1}`,\n\t\tcenterX: p.centerX ?? .5,\n\t\tcenterY: p.centerY ?? .5,\n\t\toffsetX: p.offsetX ?? 50,\n\t\toffsetY: p.offsetY ?? 0,\n\t\tradius: p.radius ?? 25,\n\t\tsourceRadius: p.sourceRadius ?? p.radius ?? 25,\n\t\tfeather: p.feather ?? 50,\n\t\topacity: p.opacity ?? 1,\n\t\tmode: p.mode ?? \"SeamlessHeal\"\n\t}));\n\tconst fallbackRadius = config?.radius ?? 25;\n\treturn [{\n\t\tid: \"patch-1\",\n\t\tcenterX: config?.centerX ?? .5,\n\t\tcenterY: config?.centerY ?? .5,\n\t\toffsetX: config?.offsetX ?? 50,\n\t\toffsetY: config?.offsetY ?? 0,\n\t\tradius: fallbackRadius,\n\t\tsourceRadius: config?.sourceRadius ?? fallbackRadius,\n\t\tfeather: config?.feather ?? 50,\n\t\topacity: config?.opacity ?? 1,\n\t\tmode: config?.mode ?? \"SeamlessHeal\"\n\t}];\n}\nconst PatchHealResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst PATCH_HEAL_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FULLSCREEN_VS = `\nstruct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uvs = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n var output : VertexOutput;\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n output.uv = uvs[vertexIndex];\n return output;\n}\n`;\nconst WGSL_PATCHHEAL_FS = `\n\nstruct PatchHealUniforms {\n offsetX : f32,\n offsetY : f32,\n centerX : f32,\n centerY : f32,\n\n radius : f32,\n sourceRadius : f32,\n feather : f32,\n opacity : f32,\n\n mode : f32,\n hasMask : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n hasRadiusSig : f32,\n hasSourceRadSig : f32,\n\n hasFeatherSig : f32,\n hasOpacitySig : f32,\n pad0 : f32,\n pad1 : f32,\n};\n\n\n@group(0) @binding(0) var<uniform> u : PatchHealUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var maskTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var sourceRadSigTex : texture_2d<f32>;\n@group(2) @binding(6) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nfn getLuminance(c : vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn sampleBoxBlur(tex : texture_2d<f32>, smp : sampler, centerUv : vec2<f32>, blurPx : f32, dims : vec2<f32>) -> vec4<f32> {\n let texel = 1.0 / dims;\n let stepSize = max(1.0, blurPx / 3.0);\n var accum = vec4<f32>(0.0);\n var count = 0.0;\n\n for (var y = -2; y <= 2; y++) {\n for (var x = -2; x <= 2; x++) {\n let offset = vec2<f32>(f32(x) * stepSize, f32(y) * stepSize) * texel;\n let sampleUv = clamp(centerUv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n accum += textureSampleLevel(tex, smp, sampleUv, 0.0);\n count += 1.0;\n }\n }\n return accum / count;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n let dimensions = vec2<f32>(textureDimensions(srcTex));\n\n var offsetX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n offsetX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var offsetY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n offsetY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var sourceRadius = u.sourceRadius;\n if (u.hasSourceRadSig > 0.5) {\n sourceRadius = textureSampleLevel(sourceRadSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var feather = u.feather;\n if (u.hasFeatherSig > 0.5) {\n feather = textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var opacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n opacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dstCol = textureSampleLevel(srcTex, samp, in.uv, 0.0);\n\n // Calculate mask weight (either from explicit mask or procedural circular patch)\n var maskWeight = 0.0;\n let targetCenterUV = vec2<f32>(centerX, centerY);\n\n if (u.hasMask > 0.5) {\n let maskCol = textureSampleLevel(maskTex, samp, in.uv, 0.0);\n maskWeight = max(maskCol.a, max(maskCol.r, max(maskCol.g, maskCol.b)));\n } else {\n let distPx = length((in.uv - targetCenterUV) * dimensions);\n let innerRadius = radius * max(0.0, 1.0 - feather / 100.0);\n maskWeight = 1.0 - smoothstep(innerRadius, max(innerRadius + 0.001, radius), distPx);\n }\n\n let blendWeight = clamp(maskWeight * opacity, 0.0, 1.0);\n if (blendWeight < 1e-4) {\n return dstCol;\n }\n\n // Compute source sample coordinate (scaling from sourceRadius to target radius if different)\n let sourceCenterUV = targetCenterUV + vec2<f32>(offsetX, offsetY) / dimensions;\n let srcScale = max(1.0, sourceRadius) / max(1.0, radius);\n let uvFromTargetCenter = in.uv - targetCenterUV;\n let srcUV = clamp(sourceCenterUV + uvFromTargetCenter * srcScale, vec2<f32>(0.0), vec2<f32>(1.0));\n let srcCol = textureSampleLevel(srcTex, samp, srcUV, 0.0);\n\n var healedCol = srcCol;\n\n if (u.mode > 0.5 && u.mode < 1.5) {\n // Mode 1: Seamless Heal (Poisson gradient / local illumination matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n let dstBlur = sampleBoxBlur(srcTex, samp, in.uv, blurRadius, dimensions);\n\n let srcDetail = srcCol.rgb - srcBlur.rgb;\n let healedRgb = dstBlur.rgb + srcDetail;\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(srcCol.a));\n healedCol = vec4<f32>(clampedRgb, srcCol.a);\n } else if (u.mode >= 1.5) {\n // Mode 2: Texture Transfer (Luminance structure matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n\n let lumaSrc = getLuminance(srcCol.rgb);\n let lumaSrcBlur = getLuminance(srcBlur.rgb);\n let lumaDelta = lumaSrc - lumaSrcBlur;\n\n let healedRgb = dstCol.rgb + vec3<f32>(lumaDelta);\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(dstCol.a));\n healedCol = vec4<f32>(clampedRgb, dstCol.a);\n }\n\n return mix(dstCol, healedCol, blendWeight);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 4,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 5,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 6,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 7,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 8,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\\n${WGSL_PATCHHEAL_FS}` });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tres = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs_main\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs_main\",\n\t\t\t\ttargets: [{\n\t\t\t\t\tformat,\n\t\t\t\t\tblend: {\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\talpha: {\n\t\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\t\t\toperation: \"add\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst PatchHealWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"PatchHeal\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"patch_heal_node\";\n\tconst signalRegistry$1 = signalRegistry;\n\tconst tmpSrcTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpSrcView = tmpSrcTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpSrcView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-src`,\n\t\texcludeTextures: [...props.excludeTextures || [], tmpSrcTex]\n\t}, tmpSrcView, tmpSrcTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tlet maskTex = null;\n\tif (op.maskMedia) {\n\t\tmaskTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\t...props.excludeTextures || [],\n\t\t\ttargetTexture,\n\t\t\ttmpSrcTex\n\t\t]);\n\t\tconst maskView = maskTex.createView();\n\t\tctx.renderer.beginFrame(encoder, maskView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, width, height, \"clear\").end();\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(op.maskMedia, {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskMedia,\n\t\t\trenderId: `${props.renderId}-mask`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttmpSrcTex,\n\t\t\t\tmaskTex\n\t\t\t]\n\t\t}, maskView, maskTex, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t}\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst patches = normalizePatches(op);\n\tconst resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = fallbackVal;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst numVal = typeof input.outputItem.data === \"number\" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(numVal)));\n\t\t} else val = Math.max(minVal, Math.min(maxVal, fallbackVal));\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst dummyMaskView = maskTex ? maskTex.createView() : tmpSrcView;\n\tlet currentInputTex = tmpSrcTex;\n\tconst pingTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst pongTex = patches.length > 1 ? ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\tpingTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]) : pingTex;\n\tfor (let i = 0; i < patches.length; i++) {\n\t\tconst patch = patches[i];\n\t\tconst isFirstPatch = i === 0;\n\t\tconst centerXRes = isFirstPatch ? resolveBindable(\"centerX\", patch.centerX, 0, 1) : {\n\t\t\tval: patch.centerX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst centerYRes = isFirstPatch ? resolveBindable(\"centerY\", patch.centerY, 0, 1) : {\n\t\t\tval: patch.centerY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetXRes = isFirstPatch ? resolveBindable(\"offsetX\", patch.offsetX, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetYRes = isFirstPatch ? resolveBindable(\"offsetY\", patch.offsetY, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst radiusRes = isFirstPatch ? resolveBindable(\"radius\", patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst sourceRadiusRes = isFirstPatch ? resolveBindable(\"sourceRadius\", patch.sourceRadius ?? patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.sourceRadius ?? patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst featherRes = isFirstPatch ? resolveBindable(\"feather\", patch.feather, 0, MAX_FEATHER) : {\n\t\t\tval: patch.feather,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst opacityRes = isFirstPatch ? resolveBindable(\"opacity\", patch.opacity, 0, 1) : {\n\t\t\tval: patch.opacity,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst getSignalView = (res, suffix) => {\n\t\t\tif (res.hasStaticSig && res.sd && signalRegistry$1) return signalRegistry$1.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\t\treturn signalRegistry$1 ? signalRegistry$1.getDummy1x1TextureView(ctx.device) : tmpSrcView;\n\t\t};\n\t\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\t\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\t\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\t\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\t\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\t\tconst sourceRadiusView = getSignalView(sourceRadiusRes, \"sourceRadius_sig\");\n\t\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\t\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\t\tconst modeNum = patch.mode === \"Clone\" ? 0 : patch.mode === \"TextureTransfer\" ? 2 : 1;\n\t\tconst patchData = new Float32Array(20);\n\t\tpatchData[0] = offsetXRes.val;\n\t\tpatchData[1] = offsetYRes.val;\n\t\tpatchData[2] = centerXRes.val;\n\t\tpatchData[3] = centerYRes.val;\n\t\tpatchData[4] = radiusRes.val;\n\t\tpatchData[5] = sourceRadiusRes.val;\n\t\tpatchData[6] = featherRes.val;\n\t\tpatchData[7] = opacityRes.val;\n\t\tpatchData[8] = modeNum;\n\t\tpatchData[9] = maskTex ? 1 : 0;\n\t\tpatchData[10] = offsetXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[11] = offsetYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[12] = centerXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[13] = centerYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[14] = radiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[15] = sourceRadiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[16] = featherRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[17] = opacityRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[18] = 0;\n\t\tpatchData[19] = 0;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(patchData);\n\t\tconst destinationTex = i % 2 === 0 ? pingTex : pongTex;\n\t\tconst texBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: tLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: currentInputTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMaskView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sourceRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: featherView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst healPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\t\tview: destinationTex.createView(),\n\t\t\tloadOp: \"clear\",\n\t\t\tstoreOp: \"store\",\n\t\t\tclearValue: {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}\n\t\t}] });\n\t\thealPass.setPipeline(pipeline);\n\t\thealPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}));\n\t\thealPass.setBindGroup(1, texBindGroup);\n\t\thealPass.setBindGroup(2, sigBindGroup);\n\t\thealPass.draw(4);\n\t\thealPass.end();\n\t\tcurrentInputTex = destinationTex;\n\t}\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"load\");\n\tctx.renderer.drawTexture(finalPass, currentInputTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t}, { opacity: 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, PatchHealResultSchema as c, patchHealConfig as d, MAX_OFFSET as i, PatchItemSchema as l, PatchHealWebGPURenderer as n, PATCH_HEAL_OUTPUT_TYPE_MAP as o, MAX_FEATHER as r, PatchHealNodeConfigSchema as s, renderers_default as t, normalizePatches as u };\n//# sourceMappingURL=renderers-C8B6JWnF.mjs.map","import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MIN_DECONTAMINATE = 0;\nconst MAX_DECONTAMINATE = 1;\nconst MIN_RADIUS = .5;\nconst MAX_RADIUS = 50;\nconst MIN_SMOOTH = 0;\nconst MAX_SMOOTH = 100;\nconst MIN_FEATHER = 0;\nconst MAX_FEATHER = 50;\nconst MIN_SHIFT_EDGE = -100;\nconst MAX_SHIFT_EDGE = 100;\nconst MatteChannelEnum = z.enum([\n\t\"Alpha\",\n\t\"Luminance\",\n\t\"Red\",\n\t\"Green\",\n\t\"Blue\"\n]);\nconst RefineEdgeOutputModeEnum = z.enum([\n\t\"Composite\",\n\t\"MatteOnly\",\n\t\"DecontaminatedRGB\"\n]);\nconst refineEdgeConfig = configBuilder().field(\"decontaminateAmount\", z.number().multipleOf(.01).min(MIN_DECONTAMINATE).max(MAX_DECONTAMINATE).default(.7), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Decontaminate Colors\",\n\tdescription: \"Amount of edge color spill decontamination/defringing (0.0–1.0).\"\n}).field(\"radius\", z.number().multipleOf(.1).min(MIN_RADIUS).max(MAX_RADIUS).default(2), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Edge Detection Radius (px)\",\n\tdescription: \"Radius in pixels around alpha transitions to refine and decontaminate.\"\n}).field(\"smooth\", z.number().min(MIN_SMOOTH).max(MAX_SMOOTH).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Smoothness\",\n\tdescription: \"Matte edge smoothing curve intensity (0–100).\"\n}).field(\"feather\", z.number().multipleOf(.1).min(MIN_FEATHER).max(MAX_FEATHER).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather (px)\",\n\tdescription: \"Sub-pixel gaussian softness along the matte boundary.\"\n}).field(\"shiftEdge\", z.number().min(MIN_SHIFT_EDGE).max(MAX_SHIFT_EDGE).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shift Edge (%)\",\n\tdescription: \"Contract (<0) or expand (>0) the edge boundary (-100% to +100%).\"\n}).field(\"matteChannel\", MatteChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Matte Channel\",\n\tdescription: \"Channel to extract matte from (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"outputMode\", RefineEdgeOutputModeEnum.default(\"Composite\"), {\n\tlabel: \"Output Mode\",\n\tdescription: \"Composite (decontaminated RGB + refined alpha), MatteOnly (grayscale mask), DecontaminatedRGB (clean RGB with full alpha).\"\n}).build();\nconst RefineEdgeNodeConfigSchema = refineEdgeConfig.schema;\nconst RefineEdgeResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst REFINE_EDGE_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst CHANNEL_MAP = {\n\tAlpha: 0,\n\tLuminance: 1,\n\tRed: 2,\n\tGreen: 3,\n\tBlue: 4\n};\nconst OUTPUT_MODE_MAP = {\n\tComposite: 0,\n\tMatteOnly: 1,\n\tDecontaminatedRGB: 2\n};\nconst WGSL_REFINE_EDGE = `\nstruct RefineEdgeUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tdecontaminateAmount : f32,\n\tradius : f32,\n\n\tsmoothness : f32,\n\tfeather : f32,\n\tshiftEdge : f32,\n\tmatteChannel : f32,\n\n\toutputMode : f32,\n\thasMatte : f32,\n\thasDecontamSig : f32,\n\thasRadiusSig : f32,\n\n\thasSmoothSig : f32,\n\thasFeatherSig : f32,\n\thasShiftEdgeSig : f32,\n\tisSecondPass : f32,\n\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\tpad3 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : RefineEdgeUniforms;\n\n@group(1) @binding(0) var texInput : texture_2d<f32>;\n@group(1) @binding(1) var texMatte : texture_2d<f32>;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n@group(1) @binding(3) var samp : sampler;\n\n@group(2) @binding(0) var decontamSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var smoothSigTex : texture_2d<f32>;\n@group(2) @binding(3) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(4) var shiftEdgeSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn extractChannel(color : vec4<f32>, chCode : f32) -> f32 {\n\tif (chCode < 0.5) {\n\t\t// Alpha\n\t\treturn color.a;\n\t} else if (chCode < 1.5) {\n\t\t// Luminance\n\t\tlet luma = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, luma / color.a);\n\t\t}\n\t\treturn luma;\n\t} else if (chCode < 2.5) {\n\t\t// Red\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.r / color.a);\n\t\t}\n\t\treturn color.r;\n\t} else if (chCode < 3.5) {\n\t\t// Green\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.g / color.a);\n\t\t}\n\t\treturn color.g;\n\t} else {\n\t\t// Blue\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.b / color.a);\n\t\t}\n\t\treturn color.b;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(texInput));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\n\tvar decontam = u.decontaminateAmount;\n\tif (u.hasDecontamSig > 0.5) {\n\t\tdecontam = clamp(textureSampleLevel(decontamSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = clamp(textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.5, 50.0);\n\t}\n\tvar smoothVal = u.smoothness;\n\tif (u.hasSmoothSig > 0.5) {\n\t\tsmoothVal = clamp(textureSampleLevel(smoothSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 100.0);\n\t}\n\tvar featherVal = u.feather;\n\tif (u.hasFeatherSig > 0.5) {\n\t\tfeatherVal = clamp(textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 50.0);\n\t}\n\tvar shiftEdgeVal = u.shiftEdge;\n\tif (u.hasShiftEdgeSig > 0.5) {\n\t\tshiftEdgeVal = clamp(textureSampleLevel(shiftEdgeSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0);\n\t}\n\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\t// Combined sigma for smoothing & feathering\n\tlet smoothSigma = max(0.0, smoothVal * 0.15);\n\tlet featherSigma = max(0.0, featherVal);\n\tlet totalSigma = max(0.1, sqrt(smoothSigma * smoothSigma + featherSigma * featherSigma));\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// =============================================================\n\t\t// PASS 1: Horizontal Pass (Alpha filter + FG color sampling)\n\t\t// =============================================================\n\t\tlet centerInput = textureSampleLevel(texInput, samp, in.uv, 0.0);\n\t\tlet centerMatte = textureSampleLevel(texMatte, samp, in.uv, 0.0);\n\n\t\tvar centerRawAlpha = centerInput.a;\n\t\tif (u.hasMatte > 0.5) {\n\t\t\tcenterRawAlpha = extractChannel(centerMatte, u.matteChannel);\n\t\t}\n\n\t\t// 1. Horizontal Alpha Blur / Filter\n\t\tvar alphaAccum = 0.0;\n\t\tvar alphaWeightSum = 0.0;\n\n\t\tlet stepScale = max(1.0, totalSigma / 15.0);\n\t\tlet effectiveSigma = totalSigma / stepScale;\n\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 32);\n\n\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\t\tlet sampleInput = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\t\tvar sAlpha = sampleInput.a;\n\t\t\tif (u.hasMatte > 0.5) {\n\t\t\t\tlet sMatte = textureSampleLevel(texMatte, samp, sampleUv, 0.0);\n\t\t\t\tsAlpha = extractChannel(sMatte, u.matteChannel);\n\t\t\t}\n\n\t\t\tlet dist = f32(i) * stepScale;\n\t\t\tlet weight = exp(-0.5 * (dist / totalSigma) * (dist / totalSigma));\n\t\t\talphaAccum += sAlpha * weight;\n\t\t\talphaWeightSum += weight;\n\t\t}\n\n\t\tlet smoothedAlpha = alphaAccum / max(alphaWeightSum, 1e-5);\n\n\t\t// 2. Horizontal Foreground Color Sampling for Defringing\n\t\tvar fgColorAccum = vec3<f32>(0.0);\n\t\tvar fgWeightSum = 0.0;\n\n\t\tlet rStepScale = max(1.0, radius / 15.0);\n\t\tlet rSampleCount = min(i32(ceil(radius / rStepScale)), 32);\n\n\t\tfor (var i = -rSampleCount; i <= rSampleCount; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * rStepScale) * direction * texelSize;\n\t\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\t\tlet sampleCol = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\t\tvar sampleA = sampleCol.a;\n\t\t\tif (u.hasMatte > 0.5) {\n\t\t\t\tlet sm = textureSampleLevel(texMatte, samp, sampleUv, 0.0);\n\t\t\t\tsampleA = extractChannel(sm, u.matteChannel);\n\t\t\t}\n\n\t\t\tlet sampleRgb = select(sampleCol.rgb, sampleCol.rgb / max(sampleCol.a, 1e-4), sampleCol.a > 1e-4);\n\t\t\tlet spatialDist = f32(i) * rStepScale;\n\t\t\tlet spatialWeight = exp(-0.5 * (spatialDist / max(radius, 0.5)) * (spatialDist / max(radius, 0.5)));\n\t\t\t// Weight foreground pixels by alpha confidence\n\t\t\tlet fgConfidence = clamp((sampleA - 0.2) / 0.8, 0.0, 1.0);\n\t\t\tlet weight = fgConfidence * spatialWeight;\n\n\t\t\tfgColorAccum += sampleRgb * weight;\n\t\t\tfgWeightSum += weight;\n\t\t}\n\n\t\tlet centerUnpremult = select(centerInput.rgb, centerInput.rgb / max(centerInput.a, 1e-4), centerInput.a > 1e-4);\n\t\tlet fgColor = select(centerUnpremult, fgColorAccum / max(fgWeightSum, 1e-5), fgWeightSum > 1e-4);\n\n\t\treturn vec4<f32>(fgColor, smoothedAlpha);\n\t}\n\n\t// =============================================================\n\t// PASS 2: Vertical Pass & Final Defringe/Composite\n\t// =============================================================\n\tlet pass1Sample = textureSampleLevel(texInput, samp, in.uv, 0.0);\n\tlet origSample = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\n\tvar rawMatteAlpha = origSample.a;\n\tif (u.hasMatte > 0.5) {\n\t\tlet rawMatteSample = textureSampleLevel(texMatte, samp, in.uv, 0.0);\n\t\trawMatteAlpha = extractChannel(rawMatteSample, u.matteChannel);\n\t}\n\n\t// 1. Vertical Alpha Blur / Filter\n\tvar alphaAccum = 0.0;\n\tvar alphaWeightSum = 0.0;\n\n\tlet stepScale = max(1.0, totalSigma / 15.0);\n\tlet effectiveSigma = totalSigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 32);\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\tlet sPass1 = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\tlet sAlpha = sPass1.a;\n\n\t\tlet dist = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (dist / totalSigma) * (dist / totalSigma));\n\t\talphaAccum += sAlpha * weight;\n\t\talphaWeightSum += weight;\n\t}\n\n\tvar refinedAlpha = alphaAccum / max(alphaWeightSum, 1e-5);\n\n\t// 2. Shift Edge (Choke < 0 or Expand > 0)\n\tif (abs(shiftEdgeVal) > 0.01) {\n\t\tlet shiftNorm = shiftEdgeVal / 100.0;\n\t\tif (shiftNorm < 0.0) {\n\t\t\t// Contract / Choke\n\t\t\tlet chokeLimit = abs(shiftNorm);\n\t\t\trefinedAlpha = clamp((refinedAlpha - chokeLimit) / max(1.0 - chokeLimit, 1e-4), 0.0, 1.0);\n\t\t} else {\n\t\t\t// Expand / Dilate\n\t\t\trefinedAlpha = clamp(refinedAlpha / max(1.0 - shiftNorm, 1e-4), 0.0, 1.0);\n\t\t}\n\t}\n\n\t// 3. Vertical Foreground Color Sampling for Defringing\n\tvar fgColorAccum = vec3<f32>(0.0);\n\tvar fgWeightSum = 0.0;\n\n\tlet rStepScale = max(1.0, radius / 15.0);\n\tlet rSampleCount = min(i32(ceil(radius / rStepScale)), 32);\n\n\tfor (var i = -rSampleCount; i <= rSampleCount; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * rStepScale) * direction * texelSize;\n\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\tlet sPass1 = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\tlet sRgb = sPass1.rgb;\n\t\tlet sA = sPass1.a;\n\n\t\tlet spatialDist = f32(i) * rStepScale;\n\t\tlet spatialWeight = exp(-0.5 * (spatialDist / max(radius, 0.5)) * (spatialDist / max(radius, 0.5)));\n\t\tlet fgConfidence = clamp((sA - 0.2) / 0.8, 0.0, 1.0);\n\t\tlet weight = fgConfidence * spatialWeight;\n\n\t\tfgColorAccum += sRgb * weight;\n\t\tfgWeightSum += weight;\n\t}\n\n\tlet origUnpremult = select(origSample.rgb, origSample.rgb / max(origSample.a, 1e-4), origSample.a > 1e-4);\n\tlet fgColor = select(origUnpremult, fgColorAccum / max(fgWeightSum, 1e-5), fgWeightSum > 1e-4);\n\n\t// Edge zone detection: transitions between foreground and background\n\tlet edgeWeight = clamp(4.0 * rawMatteAlpha * (1.0 - rawMatteAlpha), 0.0, 1.0);\n\tlet decontamFactor = clamp(decontam * max(edgeWeight, (1.0 - refinedAlpha) * 0.8), 0.0, 1.0);\n\n\tlet decontaminatedColor = mix(origUnpremult, fgColor, decontamFactor);\n\n\t// Format Output\n\tlet mode = u.outputMode;\n\tif (mode < 0.5) {\n\t\t// Composite: Decontaminated RGB with refined alpha (premultiplied)\n\t\treturn vec4<f32>(decontaminatedColor * refinedAlpha, refinedAlpha);\n\t} else if (mode < 1.5) {\n\t\t// MatteOnly: Grayscale refined alpha mask\n\t\treturn vec4<f32>(refinedAlpha, refinedAlpha, refinedAlpha, 1.0);\n\t} else {\n\t\t// DecontaminatedRGB: Clean defringed RGB with full alpha\n\t\treturn vec4<f32>(decontaminatedColor, 1.0);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRefineEdgeResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 4,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 5,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_REFINE_EDGE });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: targetFormat }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"RefineEdge\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null,\n\t\t\t\t\thandleId\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data,\n\t\t\t\thandleId\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null,\n\t\t\thandleId\n\t\t};\n\t};\n\tconst decontamRes = resolveField(op.decontaminateAmountHandleId, Number(op.decontaminateAmount ?? .7), MIN_DECONTAMINATE, MAX_DECONTAMINATE);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 2), MIN_RADIUS, MAX_RADIUS);\n\tconst smoothRes = resolveField(op.smoothHandleId, Number(op.smooth ?? 5), MIN_SMOOTH, MAX_SMOOTH);\n\tconst featherRes = resolveField(op.featherHandleId, Number(op.feather ?? .5), MIN_FEATHER, MAX_FEATHER);\n\tconst shiftEdgeRes = resolveField(op.shiftEdgeHandleId, Number(op.shiftEdge ?? 0), MIN_SHIFT_EDGE, MAX_SHIFT_EDGE);\n\tconst tmpInputTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpInputView = tmpInputTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpInputView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-input`,\n\t\texcludeTextures: [...props.excludeTextures || [], tmpInputTex]\n\t}, tmpInputView, tmpInputTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tlet tmpMatteTex = null;\n\tif (op.matteMedia) {\n\t\ttmpMatteTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\t...props.excludeTextures || [],\n\t\t\ttargetTexture,\n\t\t\ttmpInputTex\n\t\t]);\n\t\tconst tmpMatteView = tmpMatteTex.createView();\n\t\tctx.renderer.beginFrame(encoder, tmpMatteView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, width, height, \"clear\").end();\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(op.matteMedia, {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.matteMedia,\n\t\t\trenderId: `${props.renderId}-matte`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttmpInputTex,\n\t\t\t\ttmpMatteTex\n\t\t\t]\n\t\t}, tmpMatteView, tmpMatteTex, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t}\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getRefineEdgeResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) {\n\t\t\tconst cacheNodeId = res.sd.nodeId ?? res.handleId ?? `${props.renderId ?? \"refineedge\"}_${suffix}`;\n\t\t\treturn signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, cacheNodeId, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\t}\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst decontamView = getSignalView(decontamRes, \"decontam_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst smoothView = getSignalView(smoothRes, \"smooth_sig\");\n\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\tconst shiftEdgeView = getSignalView(shiftEdgeRes, \"shiftEdge_sig\");\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: decontamView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: smoothView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: featherView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: shiftEdgeView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst matteChannelCode = CHANNEL_MAP[op.matteChannel ?? \"Alpha\"] ?? 0;\n\tconst outputModeCode = OUTPUT_MODE_MAP[op.outputMode ?? \"Composite\"] ?? 0;\n\tconst dummyMatteView = tmpMatteTex ? tmpMatteTex.createView() : tmpInputView;\n\tconst hUniformData = new Float32Array(20);\n\tconst vUniformData = new Float32Array(20);\n\tconst baseUniforms = [\n\t\t0,\n\t\t0,\n\t\tdecontamRes.val,\n\t\tradiusRes.val,\n\t\tsmoothRes.val,\n\t\tfeatherRes.val,\n\t\tshiftEdgeRes.val,\n\t\tmatteChannelCode,\n\t\toutputModeCode,\n\t\ttmpMatteTex ? 1 : 0,\n\t\tdecontamRes.hasStaticSig ? 1 : 0,\n\t\tradiusRes.hasStaticSig ? 1 : 0,\n\t\tsmoothRes.hasStaticSig ? 1 : 0,\n\t\tfeatherRes.hasStaticSig ? 1 : 0,\n\t\tshiftEdgeRes.hasStaticSig ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0\n\t];\n\thUniformData.set(baseUniforms);\n\thUniformData[0] = 1;\n\thUniformData[1] = 0;\n\thUniformData[15] = 0;\n\tvUniformData.set(baseUniforms);\n\tvUniformData[0] = 0;\n\tvUniformData[1] = 1;\n\tvUniformData[15] = 1;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpInputTex,\n\t\t...tmpMatteTex ? [tmpMatteTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpInputTex,\n\t\t...tmpMatteTex ? [tmpMatteTex] : [],\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(hUniformData);\n\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex1.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thPass.setPipeline(pipeline);\n\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: hBuffer }\n\t\t}]\n\t}));\n\thPass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: tmpInputView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: dummyMatteView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpInputView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\thPass.setBindGroup(2, sigBindGroup);\n\thPass.draw(4);\n\thPass.end();\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(vUniformData);\n\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex2.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvPass.setPipeline(pipeline);\n\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: vBuffer }\n\t\t}]\n\t}));\n\tvPass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: outTex1.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: dummyMatteView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpInputView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tvPass.setBindGroup(2, sigBindGroup);\n\tvPass.draw(4);\n\tvPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tconst finalOpacity = props.opacity ?? op.opacity ?? 1;\n\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: finalOpacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { RefineEdgeResultSchema as _, MAX_RADIUS as a, MIN_DECONTAMINATE as c, MIN_SHIFT_EDGE as d, MIN_SMOOTH as f, RefineEdgeOutputModeEnum as g, RefineEdgeNodeConfigSchema as h, MAX_FEATHER as i, MIN_FEATHER as l, REFINE_EDGE_OUTPUT_TYPE_MAP as m, WebGPURenderer as n, MAX_SHIFT_EDGE as o, MatteChannelEnum as p, MAX_DECONTAMINATE as r, MAX_SMOOTH as s, renderers_default as t, MIN_RADIUS as u, refineEdgeConfig as v };\n//# sourceMappingURL=renderers-C_lHpfNq.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { parseColor, signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst REFRACTION_CAUSTICS_SHADER = `\nstruct RefractionCausticsUniforms {\n // vec4 0\n _pad0 : f32,\n ior : f32,\n dispersion : f32,\n refractionScale : f32,\n\n // vec4 1\n causticBrightness : f32,\n causticScale : f32,\n fluidRipples : f32,\n rippleSpeed : f32,\n\n // vec4 2\n roughness : f32,\n specularIntensity : f32,\n lightPosX : f32,\n lightPosY : f32,\n\n // vec4 3\n tintStrength : f32,\n depthInvert : f32,\n depthScale : f32,\n hasDepthMap : f32,\n\n // vec4 4\n timeProgress : f32,\n aspect : f32,\n _pad1 : f32,\n _pad2 : f32,\n\n // vec4 5: signal flags\n hasSigIOR : f32,\n hasSigDispersion : f32,\n hasSigRefractScale : f32,\n hasSigCaustic : f32,\n\n // vec4 6: signal flags\n hasSigRipples : f32,\n hasSigRoughness : f32,\n hasSigLightPosX : f32,\n hasSigLightPosY : f32,\n\n // vec4 7: reserved\n _pad3 : f32,\n _pad4 : f32,\n _pad5 : f32,\n _pad6 : f32,\n\n // vec4 8: color\n tintColor : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RefractionCausticsUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n\n@group(2) @binding(0) var depthTex : texture_2d<f32>;\n@group(2) @binding(1) var depthSamp : sampler;\n\n@group(3) @binding(0) var iorSigTex : texture_2d<f32>;\n@group(3) @binding(1) var dispersionSigTex : texture_2d<f32>;\n@group(3) @binding(2) var refractScaleSigTex : texture_2d<f32>;\n@group(3) @binding(3) var causticSigTex : texture_2d<f32>;\n@group(3) @binding(4) var ripplesSigTex : texture_2d<f32>;\n@group(3) @binding(5) var roughnessSigTex : texture_2d<f32>;\n@group(3) @binding(6) var lightPosXSigTex : texture_2d<f32>;\n@group(3) @binding(7) var lightPosYSigTex : texture_2d<f32>;\n@group(3) @binding(8) var sigSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn sampleDepth(uv: vec2<f32>) -> f32 {\n let clampedUV = clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0));\n var raw: f32 = 0.0;\n if (u.hasDepthMap > 0.5) {\n let dSample = textureSampleLevel(depthTex, depthSamp, clampedUV, 0.0);\n raw = dot(dSample.rgb, vec3<f32>(0.299, 0.587, 0.114));\n } else {\n let c = textureSampleLevel(srcTex, srcSamp, clampedUV, 0.0);\n raw = dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n }\n if (u.depthInvert > 0.5) {\n raw = 1.0 - raw;\n }\n return clamp(raw, 0.0, 1.0);\n}\n\nfn sampleSmoothDepth(uv: vec2<f32>, texelSize: vec2<f32>) -> f32 {\n let d0 = sampleDepth(uv);\n let d1 = sampleDepth(uv + vec2<f32>(texelSize.x, 0.0));\n let d2 = sampleDepth(uv - vec2<f32>(texelSize.x, 0.0));\n let d3 = sampleDepth(uv + vec2<f32>(0.0, texelSize.y));\n let d4 = sampleDepth(uv - vec2<f32>(0.0, texelSize.y));\n return (d0 * 4.0 + d1 + d2 + d3 + d4) * 0.125;\n}\n\n// Analytical fluid ripple wave height and normal gradient\nfn getFluidWave(uv: vec2<f32>, time: f32, freqScale: f32) -> vec3<f32> {\n let p = uv * freqScale * 18.0;\n let t = time * 3.0;\n\n let a1 = sin(p.x * 1.4 + p.y * 1.0 + t * 1.2);\n let a2 = sin(p.x * -1.8 + p.y * 1.6 + t * 0.9);\n let a3 = cos((p.x + p.y) * 2.2 - t * 1.4);\n\n let height = (a1 + a2 + a3) * 0.333;\n\n let dx = (1.4 * cos(p.x * 1.4 + p.y * 1.0 + t * 1.2)\n - 1.8 * cos(p.x * -1.8 + p.y * 1.6 + t * 0.9)\n - 2.2 * sin((p.x + p.y) * 2.2 - t * 1.4)) * freqScale * 18.0 * 0.333;\n\n let dy = (1.0 * cos(p.x * 1.4 + p.y * 1.0 + t * 1.2)\n + 1.6 * cos(p.x * -1.8 + p.y * 1.6 + t * 0.9)\n - 2.2 * sin((p.x + p.y) * 2.2 - t * 1.4)) * freqScale * 18.0 * 0.333;\n\n return vec3<f32>(dx, dy, height);\n}\n\n// Photometric cellular water caustic web (swimming pool / sunlight underwater filaments)\nfn getWaterCaustics(uv: vec2<f32>, time: f32, scale: f32) -> f32 {\n let p = uv * scale * 32.0;\n let t1 = time * 0.8;\n let t2 = time * 1.1;\n\n var p1 = p;\n p1.x = p1.x + sin(p.y * 0.45 + t1) * 1.6;\n p1.y = p1.y + cos(p.x * 0.45 + t1 * 0.8) * 1.6;\n\n var p2 = p * 1.2 + vec2<f32>(4.7, 2.1);\n p2.x = p2.x + cos(p2.y * 0.5 - t2 * 0.9) * 1.4;\n p2.y = p2.y + sin(p2.x * 0.5 + t2) * 1.4;\n\n let k1 = 1.0 - abs(sin(p1.x) * sin(p1.y));\n let k2 = 1.0 - abs(cos(p2.x) * cos(p2.y));\n\n // Sharp interconnected caustic web filaments\n let web = pow(k1 * k2, 3.5);\n return web;\n}\n\nfn computeSurfaceNormal(uv: vec2<f32>, texelSize: vec2<f32>, fluidRippleAmount: f32, rippleTime: f32, depthScaleVal: f32, causticScaleVal: f32) -> vec3<f32> {\n let step = texelSize * 2.0;\n let dL = sampleSmoothDepth(uv - vec2<f32>(step.x, 0.0), texelSize);\n let dR = sampleSmoothDepth(uv + vec2<f32>(step.x, 0.0), texelSize);\n let dD = sampleSmoothDepth(uv - vec2<f32>(0.0, step.y), texelSize);\n let dU = sampleSmoothDepth(uv + vec2<f32>(0.0, step.y), texelSize);\n\n var dx = (dR - dL) * depthScaleVal * 2.0;\n var dy = (dU - dD) * depthScaleVal * 2.0;\n\n if (fluidRippleAmount > 0.001) {\n let wave = getFluidWave(uv, rippleTime, causticScaleVal);\n dx = dx + wave.x * fluidRippleAmount * 0.08;\n dy = dy + wave.y * fluidRippleAmount * 0.08;\n }\n\n return normalize(vec3<f32>(-dx, -dy, 1.0));\n}\n\n// Snell's Law ray refraction with Total Internal Reflection (TIR) fallback\nfn calcRefractOffset(I: vec3<f32>, N: vec3<f32>, eta: f32, thickness: f32) -> vec2<f32> {\n let cosi = dot(-I, N);\n let cost2 = 1.0 - eta * eta * (1.0 - cosi * cosi);\n if (cost2 < 0.0) {\n // Total internal reflection -> reflect\n let R = reflect(I, N);\n return R.xy * thickness * 0.5;\n }\n let R = eta * I + (eta * cosi - sqrt(cost2)) * N;\n return R.xy * (thickness / max(0.2, abs(R.z)));\n}\n\nfn sampleAlbedoSafe(uv: vec2<f32>) -> vec4<f32> {\n if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) {\n return textureSampleLevel(srcTex, srcSamp, uv, 0.0);\n }\n // Mirror with subtle clamp for border inpainting / anti-tearing\n let mirroredUV = abs(fract(uv * 0.5 + 0.5) * 2.0 - 1.0);\n let clampedUV = clamp(mirroredUV, vec2<f32>(0.001), vec2<f32>(0.999));\n return textureSampleLevel(srcTex, srcSamp, clampedUV, 0.0);\n}\n\nfn spectralWavelength(t: f32) -> vec3<f32> {\n let x = clamp(t, 0.0, 1.0) * 6.0;\n var r: f32 = 0.0;\n var g: f32 = 0.0;\n var b: f32 = 0.0;\n\n if (x < 1.0) {\n r = 1.0;\n g = x;\n b = 0.0;\n } else if (x < 2.0) {\n r = 2.0 - x;\n g = 1.0;\n b = 0.0;\n } else if (x < 3.0) {\n r = 0.0;\n g = 1.0;\n b = x - 2.0;\n } else if (x < 4.0) {\n r = 0.0;\n g = 4.0 - x;\n b = 1.0;\n } else if (x < 5.0) {\n r = x - 4.0;\n g = 0.0;\n b = 1.0;\n } else {\n r = 1.0;\n g = 0.0;\n b = max(0.4, 6.0 - x);\n }\n return vec3<f32>(r, g, b);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let dims = vec2<f32>(textureDimensions(srcTex));\n let texelSize = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let aspect = select(u.aspect, dims.x / max(1.0, dims.y), u.aspect <= 0.0);\n\n // Resolve signals\n var ior = u.ior;\n if (u.hasSigIOR > 0.5) {\n ior = clamp(textureSampleLevel(iorSigTex, sigSamp, in.uv, 0.0).r, 1.0, 2.5);\n }\n\n var dispersion = u.dispersion;\n if (u.hasSigDispersion > 0.5) {\n dispersion = clamp(textureSampleLevel(dispersionSigTex, sigSamp, in.uv, 0.0).r, 0.0, 0.2);\n }\n\n var refractionScale = u.refractionScale;\n if (u.hasSigRefractScale > 0.5) {\n refractionScale = clamp(textureSampleLevel(refractScaleSigTex, sigSamp, in.uv, 0.0).r, 0.0, 2.0);\n }\n\n var causticBrightness = u.causticBrightness;\n if (u.hasSigCaustic > 0.5) {\n causticBrightness = clamp(textureSampleLevel(causticSigTex, sigSamp, in.uv, 0.0).r, 0.0, 2.0);\n }\n\n var fluidRipples = u.fluidRipples;\n if (u.hasSigRipples > 0.5) {\n fluidRipples = clamp(textureSampleLevel(ripplesSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n var roughness = u.roughness;\n if (u.hasSigRoughness > 0.5) {\n roughness = clamp(textureSampleLevel(roughnessSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n var lightPosX = u.lightPosX;\n if (u.hasSigLightPosX > 0.5) {\n lightPosX = clamp(textureSampleLevel(lightPosXSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n var lightPosY = u.lightPosY;\n if (u.hasSigLightPosY > 0.5) {\n lightPosY = clamp(textureSampleLevel(lightPosYSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n let depthScaleVal = u.depthScale;\n let causticScaleVal = max(0.1, u.causticScale);\n let rippleSpeedVal = u.rippleSpeed;\n let rippleTime = u.timeProgress * rippleSpeedVal * 6.2831853;\n\n // Surface Normal & Incident Vectors\n let N = computeSurfaceNormal(in.uv, texelSize, fluidRipples, rippleTime, depthScaleVal, causticScaleVal);\n let I = vec3<f32>(0.0, 0.0, -1.0); // View vector towards surface\n let V = vec3<f32>(0.0, 0.0, 1.0); // View vector towards camera\n\n // Base Snell's Law Refraction\n let eta = 1.0 / max(1.001, ior);\n let refractVec = calcRefractOffset(I, N, eta, refractionScale * 0.16);\n let baseUV = in.uv + vec2<f32>(refractVec.x / aspect, refractVec.y);\n\n // Multi-Spectral Chromatic Rainbow Dispersion\n var accumColor = vec3<f32>(0.0);\n var accumWeight = vec3<f32>(0.0);\n var accumAlpha: f32 = 0.0;\n\n let dispersionStrength = dispersion * refractionScale * 0.6;\n let dispDirection = vec2<f32>(N.x / aspect, N.y);\n\n // 7-tap spectral rainbow integration across wavelength spectrum (Red -> Yellow -> Green -> Cyan -> Blue -> Violet)\n for (var s = 0; s < 7; s = s + 1) {\n let t = f32(s) / 6.0; // 0.0 (Red) to 1.0 (Violet)\n let specColor = spectralWavelength(t);\n let lambdaOffset = dispDirection * ((t - 0.5) * dispersionStrength);\n let sampleUV = baseUV + lambdaOffset;\n\n var sampledTex = sampleAlbedoSafe(sampleUV);\n\n // Microfacet frosted blur if roughness is enabled\n if (roughness > 0.005) {\n let blurRad = roughness * 0.018;\n let j1 = sampleAlbedoSafe(sampleUV + vec2<f32>(blurRad / aspect, blurRad * 0.5));\n let j2 = sampleAlbedoSafe(sampleUV - vec2<f32>(blurRad / aspect, blurRad * 0.5));\n sampledTex = (sampledTex * 2.0 + j1 + j2) * 0.25;\n }\n\n accumColor = accumColor + sampledTex.rgb * specColor;\n accumWeight = accumWeight + specColor;\n accumAlpha = accumAlpha + sampledTex.a;\n }\n\n let finalRefractedRGB = accumColor / max(accumWeight, vec3<f32>(0.001));\n let finalAlpha = accumAlpha / 7.0;\n\n // Incident light vector\n let lightPos3D = vec3<f32>((lightPosX - 0.5) * aspect, lightPosY - 0.5, 0.85);\n let surfPos3D = vec3<f32>((in.uv.x - 0.5) * aspect, in.uv.y - 0.5, 0.0);\n let L = normalize(lightPos3D - surfPos3D);\n\n // 1. Dynamic Fluid Caustics (active when fluidRipples > 0.001)\n var fluidCaustic = 0.0;\n if (fluidRipples > 0.001) {\n let web = getWaterCaustics(in.uv, rippleTime, causticScaleVal);\n let pLight = vec2<f32>(lightPosX, lightPosY);\n let distLight = length((in.uv - pLight) * vec2<f32>(aspect, 1.0));\n let lightAtt = 1.0 / (1.0 + distLight * distLight * 1.2);\n fluidCaustic = web * lightAtt * fluidRipples * causticBrightness * 0.45;\n }\n\n // 2. Specular Highlights & Fresnel Reflectance (Schlick's approximation)\n let f0 = pow((ior - 1.0) / (ior + 1.0), 2.0);\n let NdotV = max(dot(N, V), 0.0);\n let fresnel = f0 + (1.0 - f0) * pow(1.0 - NdotV, 5.0);\n\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specShininess = mix(256.0, 32.0, roughness);\n let specular = pow(NdotH, specShininess) * u.specularIntensity * fresnel * 1.5;\n\n // Glass Absorption & Tinting\n let tintStrengthVal = u.tintStrength;\n let tintedBase = mix(finalRefractedRGB, finalRefractedRGB * u.tintColor.rgb, tintStrengthVal);\n\n // Final Composite (Refracted Rainbow Spectrum + Fluid Caustics + Crisp Specular)\n let finalRGB = tintedBase + vec3<f32>(fluidCaustic) * u.tintColor.rgb + vec3<f32>(specular);\n\n return vec4<f32>(clamp(finalRGB, vec3<f32>(0.0), vec3<f32>(1.0)), finalAlpha);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsrcTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tdepthTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getRefractionCausticsResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `refraction_caustics_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `refraction_caustics_${format}.wgsl`,\n\t\t\tcode: REFRACTION_CAUSTICS_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `RefractionCausticsPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.depthTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tdepthTextureLayout: layouts.depthTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction resolveSignalField(op, fieldName, defaultValue, minVal, maxVal) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") {\n\t\tconst raw = Number(signalInput.outputItem.data ?? defaultValue);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t} else {\n\t\tconst raw = Number(op[fieldName] ?? defaultValue);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\telse if (sd) {\n\t\tconst raw = Number(sd.offset ?? defaultValue);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst RefractionCaustics3DWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 60;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"RefractionCaustics3D\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst srcTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst srcView = srcTex.createView();\n\tctx.renderer.beginFrame(encoder, srcView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t}, srcView, srcTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst depthMedia = op.depthMedia;\n\tlet depthTex;\n\tlet depthView;\n\tlet hasDepthMap = false;\n\tif (depthMedia) {\n\t\tdepthTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\t...props.excludeTextures || [],\n\t\t\ttargetTexture,\n\t\t\tsrcTex\n\t\t]);\n\t\tdepthView = depthTex.createView();\n\t\tctx.renderer.beginFrame(encoder, depthView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, width, height, \"clear\").end();\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(depthMedia, {\n\t\t\t...props,\n\t\t\tvirtualMedia: depthMedia,\n\t\t\tcontainerWidth: width,\n\t\t\tcontainerHeight: height\n\t\t}, depthView, depthTex, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t\thasDepthMap = true;\n\t} else {\n\t\tdepthTex = srcTex;\n\t\tdepthView = srcView;\n\t\thasDepthMap = false;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, depthTextureLayout: depthLayout, signalTextureLayout: sigLayout } = getRefractionCausticsResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 4;\n\tconst timeProgress = durationSeconds > 0 ? elapsedSeconds % durationSeconds / durationSeconds : 0;\n\tconst iorInfo = resolveSignalField(op, \"ior\", 1.52, 1, 2.5);\n\tconst dispersionInfo = resolveSignalField(op, \"dispersion\", .04, 0, .2);\n\tconst refractScaleInfo = resolveSignalField(op, \"refractionScale\", .5, 0, 2);\n\tconst causticInfo = resolveSignalField(op, \"causticBrightness\", .6, 0, 2);\n\tconst causticScaleInfo = resolveSignalField(op, \"causticScale\", 1, .1, 5);\n\tconst ripplesInfo = resolveSignalField(op, \"fluidRipples\", 0, 0, 1);\n\tconst roughnessInfo = resolveSignalField(op, \"roughness\", 0, 0, 1);\n\tconst lightPosXInfo = resolveSignalField(op, \"lightPosX\", .5, 0, 1);\n\tconst lightPosYInfo = resolveSignalField(op, \"lightPosY\", .2, 0, 1);\n\tconst specularInfo = resolveSignalField(op, \"specularIntensity\", .8, 0, 2);\n\tconst depthScaleInfo = resolveSignalField(op, \"depthScale\", 1, .1, 5);\n\tconst tintStrengthInfo = resolveSignalField(op, \"tintStrength\", 0, 0, 1);\n\tconst rippleSpeedInfo = resolveSignalField(op, \"rippleSpeed\", 1, 0, 5);\n\tconst getSigTextureView = (info, fallbackId) => {\n\t\tif (info.hasSignal && info.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, info.sd.nodeId ?? fallbackId, elapsedSeconds, durationSeconds, info.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst sigIORView = getSigTextureView(iorInfo, \"refr_ior_sig\");\n\tconst sigDispersionView = getSigTextureView(dispersionInfo, \"refr_disp_sig\");\n\tconst sigRefractScaleView = getSigTextureView(refractScaleInfo, \"refr_scale_sig\");\n\tconst sigCausticView = getSigTextureView(causticInfo, \"refr_caust_sig\");\n\tconst sigRipplesView = getSigTextureView(ripplesInfo, \"refr_rip_sig\");\n\tconst sigRoughnessView = getSigTextureView(roughnessInfo, \"refr_rough_sig\");\n\tconst sigLightPosXView = getSigTextureView(lightPosXInfo, \"refr_lightx_sig\");\n\tconst sigLightPosYView = getSigTextureView(lightPosYInfo, \"refr_lighty_sig\");\n\tconst uniformData = new Float32Array(36);\n\tuniformData[0] = 0;\n\tuniformData[1] = iorInfo.value;\n\tuniformData[2] = dispersionInfo.value;\n\tuniformData[3] = refractScaleInfo.value;\n\tuniformData[4] = causticInfo.value;\n\tuniformData[5] = causticScaleInfo.value;\n\tuniformData[6] = ripplesInfo.value;\n\tuniformData[7] = rippleSpeedInfo.value;\n\tuniformData[8] = roughnessInfo.value;\n\tuniformData[9] = specularInfo.value;\n\tuniformData[10] = lightPosXInfo.value;\n\tuniformData[11] = lightPosYInfo.value;\n\tuniformData[12] = tintStrengthInfo.value;\n\tuniformData[13] = op.depthInvert ? 1 : 0;\n\tuniformData[14] = depthScaleInfo.value;\n\tuniformData[15] = hasDepthMap ? 1 : 0;\n\tuniformData[16] = timeProgress;\n\tuniformData[17] = width / Math.max(1, height);\n\tuniformData[18] = 0;\n\tuniformData[19] = 0;\n\tuniformData[20] = iorInfo.hasSignal ? 1 : 0;\n\tuniformData[21] = dispersionInfo.hasSignal ? 1 : 0;\n\tuniformData[22] = refractScaleInfo.hasSignal ? 1 : 0;\n\tuniformData[23] = causticInfo.hasSignal ? 1 : 0;\n\tuniformData[24] = ripplesInfo.hasSignal ? 1 : 0;\n\tuniformData[25] = roughnessInfo.hasSignal ? 1 : 0;\n\tuniformData[26] = lightPosXInfo.hasSignal ? 1 : 0;\n\tuniformData[27] = lightPosYInfo.hasSignal ? 1 : 0;\n\tuniformData[28] = 0;\n\tuniformData[29] = 0;\n\tuniformData[30] = 0;\n\tuniformData[31] = 0;\n\tconst tintParsed = parseColor(op.tintColor ?? \"#ffffff\");\n\tuniformData[32] = tintParsed.r;\n\tuniformData[33] = tintParsed.g;\n\tuniformData[34] = tintParsed.b;\n\tuniformData[35] = tintParsed.a;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tdepthTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcLayout, srcTex, sampler));\n\trenderPass.setBindGroup(2, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, depthLayout, depthTex, sampler));\n\trenderPass.setBindGroup(3, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sigIORView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sigDispersionView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sigRefractScaleView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sigCausticView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sigRipplesView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sigRoughnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: sigLightPosXView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: sigLightPosYView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: RefractionCaustics3DWebGPURenderer });\n\n//#endregion\nexport { RefractionCaustics3DWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CJE3kjP7.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { parseColor, signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RELIGHT_SHADER = `\nstruct RelightUniforms {\n // vec4 0\n lightType : f32, // 0=Point, 1=Spot, 2=Directional, 3=Rim\n intensity : f32,\n lightPosX : f32,\n lightPosY : f32,\n\n // vec4 1\n lightPosZ : f32,\n lightRadius : f32,\n spotConeAngle : f32, // in radians\n specularRoughness : f32,\n\n // vec4 2\n specularStrength : f32,\n metallic : f32,\n ambientIntensity : f32,\n volumetricDensity : f32,\n\n // vec4 3\n depthScale : f32,\n depthInvert : f32,\n hasDepthMap : f32,\n hasNormalMap : f32,\n\n // vec4 4: signal flags\n hasSigIntensity : f32,\n hasSigPosX : f32,\n hasSigPosY : f32,\n hasSigPosZ : f32,\n\n // vec4 5: signal flags\n hasSigRadius : f32,\n hasSigRoughness : f32,\n hasSigSpecular : f32,\n hasSigVolumetric : f32,\n\n // vec4 6 & 7: colors\n lightColor : vec4<f32>,\n ambientColor : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RelightUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n\n@group(2) @binding(0) var depthTex : texture_2d<f32>;\n@group(2) @binding(1) var depthSamp : sampler;\n\n@group(3) @binding(0) var intensitySigTex : texture_2d<f32>;\n@group(3) @binding(1) var posXSigTex : texture_2d<f32>;\n@group(3) @binding(2) var posYSigTex : texture_2d<f32>;\n@group(3) @binding(3) var posZSigTex : texture_2d<f32>;\n@group(3) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(3) @binding(5) var roughnessSigTex : texture_2d<f32>;\n@group(3) @binding(6) var specularSigTex : texture_2d<f32>;\n@group(3) @binding(7) var volumetricSigTex : texture_2d<f32>;\n@group(3) @binding(8) var sigSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn sampleDepth(uv: vec2<f32>) -> f32 {\n var raw: f32 = 0.0;\n if (u.hasDepthMap > 0.5) {\n let dSample = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(dSample.rgb, vec3<f32>(0.299, 0.587, 0.114));\n } else {\n let c = textureSampleLevel(srcTex, srcSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n }\n if (u.depthInvert > 0.5) {\n raw = 1.0 - raw;\n }\n return raw;\n}\n\nfn sampleSmoothDepth(uv: vec2<f32>, texelSize: vec2<f32>) -> f32 {\n let d0 = sampleDepth(uv);\n let d1 = sampleDepth(uv + vec2<f32>(texelSize.x, 0.0));\n let d2 = sampleDepth(uv - vec2<f32>(texelSize.x, 0.0));\n let d3 = sampleDepth(uv + vec2<f32>(0.0, texelSize.y));\n let d4 = sampleDepth(uv - vec2<f32>(0.0, texelSize.y));\n return (d0 * 4.0 + d1 + d2 + d3 + d4) * 0.125;\n}\n\nfn computeNormal(uv: vec2<f32>, texelSize: vec2<f32>) -> vec3<f32> {\n if (u.hasNormalMap > 0.5) {\n let rawNormal = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0).rgb;\n return normalize(rawNormal * 2.0 - 1.0);\n }\n let step = texelSize * 2.5;\n let dL = sampleSmoothDepth(uv - vec2<f32>(step.x, 0.0), texelSize);\n let dR = sampleSmoothDepth(uv + vec2<f32>(step.x, 0.0), texelSize);\n let dD = sampleSmoothDepth(uv - vec2<f32>(0.0, step.y), texelSize);\n let dU = sampleSmoothDepth(uv + vec2<f32>(0.0, step.y), texelSize);\n\n let dx = (dR - dL) * u.depthScale * 1.5;\n let dy = (dU - dD) * u.depthScale * 1.5;\n return normalize(vec3<f32>(-dx, -dy, 1.0));\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let albedo = textureSampleLevel(srcTex, srcSamp, in.uv, 0.0);\n if (albedo.a <= 0.0) {\n return albedo;\n }\n\n let dims = vec2<f32>(textureDimensions(srcTex));\n let texelSize = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let aspect = dims.x / dims.y;\n\n // Resolve signals\n var intensity = u.intensity;\n if (u.hasSigIntensity > 0.5) {\n intensity = textureSampleLevel(intensitySigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posX = u.lightPosX;\n if (u.hasSigPosX > 0.5) {\n posX = textureSampleLevel(posXSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posY = u.lightPosY;\n if (u.hasSigPosY > 0.5) {\n posY = textureSampleLevel(posYSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posZ = u.lightPosZ;\n if (u.hasSigPosZ > 0.5) {\n posZ = textureSampleLevel(posZSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var radius = u.lightRadius;\n if (u.hasSigRadius > 0.5) {\n radius = max(0.05, textureSampleLevel(radiusSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var roughness = u.specularRoughness;\n if (u.hasSigRoughness > 0.5) {\n roughness = clamp(textureSampleLevel(roughnessSigTex, sigSamp, in.uv, 0.0).r, 0.01, 1.0);\n }\n\n var specularStrength = u.specularStrength;\n if (u.hasSigSpecular > 0.5) {\n specularStrength = max(0.0, textureSampleLevel(specularSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var volumetricDensity = u.volumetricDensity;\n if (u.hasSigVolumetric > 0.5) {\n volumetricDensity = clamp(textureSampleLevel(volumetricSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n // Geometry & Surface Normals\n let depth = sampleSmoothDepth(in.uv, texelSize) * u.depthScale;\n let N = computeNormal(in.uv, texelSize);\n let V = vec3<f32>(0.0, 0.0, 1.0);\n\n // 3D coordinates (Aspect corrected for uniform radius)\n let pSurface = vec3<f32>((in.uv.x - 0.5) * aspect, in.uv.y - 0.5, - (1.0 - depth) * 0.4);\n let pLight = vec3<f32>((posX - 0.5) * aspect, posY - 0.5, max(0.02, posZ));\n\n let toLight = pLight - pSurface;\n let dist3D = length(toLight);\n var L = normalize(toLight);\n\n // Attenuation\n var att = 1.0 / (1.0 + (dist3D / max(0.05, radius)) * (dist3D / max(0.05, radius)));\n var diffuse = max(dot(N, L), 0.0);\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);\n var specular = pow(NdotH, specPower) * specularStrength;\n\n let lightMode = u.lightType;\n\n if (lightMode > 0.5 && lightMode < 1.5) {\n // Spot Light\n let spotDir = normalize(vec3<f32>(0.0, 0.0, -1.0));\n let spotAngleCos = dot(-L, spotDir);\n let coneCos = cos(u.spotConeAngle);\n let spotAtt = smoothstep(coneCos, coneCos + 0.15, spotAngleCos);\n\n diffuse = diffuse * spotAtt;\n specular = specular * spotAtt;\n } else if (lightMode > 1.5 && lightMode < 2.5) {\n // Directional Light\n L = normalize(vec3<f32>(posX - 0.5, posY - 0.5, max(0.1, posZ)));\n att = 1.0;\n diffuse = max(dot(N, L), 0.0);\n let dirH = normalize(L + V);\n specular = pow(max(dot(N, dirH), 0.0), specPower) * specularStrength;\n } else if (lightMode > 2.5) {\n // Rim Light\n let rimTerm = 1.0 - max(dot(N, V), 0.0);\n let rim = pow(rimTerm, 2.5) * (0.5 + depth * 0.8) * 1.5;\n diffuse = max(dot(N, L), 0.0) * 0.2 + rim;\n }\n\n // Volumetric Atmospheric Light Scatter / Glow\n let dist2D = length(vec2<f32>((in.uv.x - posX) * aspect, in.uv.y - posY));\n let volGlow = volumetricDensity * (1.0 / (1.0 + (dist2D / (radius * 0.5)) * (dist2D / (radius * 0.5)))) * (1.0 - clamp(depth * 0.3, 0.0, 0.8));\n\n let lightCol = u.lightColor.rgb;\n let ambientCol = u.ambientColor.rgb;\n\n // Natural Relighting Energy Distribution\n let ambientLighting = ambientCol * clamp(u.ambientIntensity, 0.0, 1.5);\n let diffuseLighting = lightCol * (diffuse * att * intensity * 0.6);\n let specularLighting = mix(vec3<f32>(1.0), albedo.rgb, u.metallic) * (specular * att * intensity * 0.35);\n let volLighting = lightCol * (volGlow * intensity * 0.2);\n\n let litRgb = albedo.rgb * (ambientLighting + diffuseLighting) + specularLighting + volLighting;\n\n return vec4<f32>(clamp(litRgb, vec3<f32>(0.0), vec3<f32>(1.0)), albedo.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsrcTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tdepthTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getRelightResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `relight_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `relight_${format}.wgsl`,\n\t\t\tcode: RELIGHT_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `RelightPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.depthTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tdepthTextureLayout: layouts.depthTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction resolveVal(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"number\") return Number.isFinite(val) ? val : fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t}\n\tif (typeof val === \"function\") try {\n\t\tconst n$1 = Number(val({\n\t\t\tframe,\n\t\t\tfps,\n\t\t\ttime: fps > 0 ? frame / fps : 0\n\t\t}));\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction resolveSignalField(op, fieldName, defaultValue, minVal, maxVal, frame = 0, fps = 30) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") {\n\t\tconst raw = resolveVal(signalInput.outputItem.data, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t} else {\n\t\tconst raw = resolveVal(op[fieldName], defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\telse if (sd) {\n\t\tconst raw = resolveVal(sd.offset, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst Relight3DWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Relight3D\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst srcTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst srcView = srcTex.createView();\n\tctx.renderer.beginFrame(encoder, srcView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(sourceMedia, {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t}, srcView, srcTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst normalMedia = op.normalMedia ?? (op.inputs?.normalMap?.connectionValid ? op.inputs.normalMap.outputItem?.data : null);\n\tconst depthMedia = normalMedia ?? op.depthMedia;\n\tlet depthTex;\n\tlet depthView;\n\tlet hasDepthMap = false;\n\tconst hasNormalMap = Boolean(normalMedia);\n\tif (depthMedia) {\n\t\tdepthTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\t...props.excludeTextures || [],\n\t\t\ttargetTexture,\n\t\t\tsrcTex\n\t\t]);\n\t\tdepthView = depthTex.createView();\n\t\tctx.renderer.beginFrame(encoder, depthView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, width, height, \"clear\").end();\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(depthMedia, {\n\t\t\t...props,\n\t\t\tvirtualMedia: depthMedia,\n\t\t\tcontainerWidth: width,\n\t\t\tcontainerHeight: height\n\t\t}, depthView, depthTex, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t\thasDepthMap = true;\n\t} else {\n\t\tdepthTex = srcTex;\n\t\tdepthView = srcView;\n\t\thasDepthMap = false;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, depthTextureLayout: depthLayout, signalTextureLayout: sigLayout } = getRelightResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 4;\n\tconst intensityInfo = resolveSignalField(op, \"intensity\", 1, 0, 10, frame, fps);\n\tconst posXInfo = resolveSignalField(op, \"lightPosX\", .5, 0, 1, frame, fps);\n\tconst posYInfo = resolveSignalField(op, \"lightPosY\", .5, 0, 1, frame, fps);\n\tconst posZInfo = resolveSignalField(op, \"lightPosZ\", .3, -2, 2, frame, fps);\n\tconst radiusInfo = resolveSignalField(op, \"lightRadius\", .8, .05, 5, frame, fps);\n\tconst spotConeInfo = resolveSignalField(op, \"spotConeAngle\", 45, 5, 90, frame, fps);\n\tconst roughnessInfo = resolveSignalField(op, \"specularRoughness\", .35, .01, 1, frame, fps);\n\tconst specularInfo = resolveSignalField(op, \"specularStrength\", .7, 0, 3, frame, fps);\n\tconst metallicInfo = resolveSignalField(op, \"metallic\", 0, 0, 1, frame, fps);\n\tconst ambientInfo = resolveSignalField(op, \"ambientIntensity\", .4, 0, 2, frame, fps);\n\tconst volumetricInfo = resolveSignalField(op, \"volumetricDensity\", .2, 0, 1, frame, fps);\n\tconst depthScaleInfo = resolveSignalField(op, \"depthScale\", 1, .1, 10, frame, fps);\n\tconst getSigTextureView = (info, fallbackId) => {\n\t\tif (info.hasSignal && info.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, info.sd.nodeId ?? fallbackId, elapsedSeconds, durationSeconds, info.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst sigIntensityView = getSigTextureView(intensityInfo, \"relight_int_sig\");\n\tconst sigPosXView = getSigTextureView(posXInfo, \"relight_posx_sig\");\n\tconst sigPosYView = getSigTextureView(posYInfo, \"relight_posy_sig\");\n\tconst sigPosZView = getSigTextureView(posZInfo, \"relight_posz_sig\");\n\tconst sigRadiusView = getSigTextureView(radiusInfo, \"relight_rad_sig\");\n\tconst sigRoughnessView = getSigTextureView(roughnessInfo, \"relight_rough_sig\");\n\tconst sigSpecularView = getSigTextureView(specularInfo, \"relight_spec_sig\");\n\tconst sigVolumetricView = getSigTextureView(volumetricInfo, \"relight_vol_sig\");\n\tconst uniformData = new Float32Array(32);\n\tconst lightColorParsed = parseColor(op.lightColor ?? \"#ffffff\");\n\tconst ambientColorParsed = parseColor(op.ambientColor ?? \"#ffffff\");\n\tuniformData[0] = op.lightType === \"Spot\" ? 1 : op.lightType === \"Directional\" ? 2 : op.lightType === \"Rim\" ? 3 : 0;\n\tuniformData[1] = intensityInfo.value;\n\tuniformData[2] = posXInfo.value;\n\tuniformData[3] = posYInfo.value;\n\tuniformData[4] = posZInfo.value;\n\tuniformData[5] = radiusInfo.value;\n\tuniformData[6] = spotConeInfo.value * Math.PI / 180;\n\tuniformData[7] = roughnessInfo.value;\n\tuniformData[8] = specularInfo.value;\n\tuniformData[9] = metallicInfo.value;\n\tuniformData[10] = ambientInfo.value;\n\tuniformData[11] = volumetricInfo.value;\n\tuniformData[12] = depthScaleInfo.value;\n\tuniformData[13] = op.depthInvert ? 1 : 0;\n\tuniformData[14] = hasDepthMap || hasNormalMap ? 1 : 0;\n\tuniformData[15] = hasNormalMap ? 1 : 0;\n\tuniformData[16] = intensityInfo.hasSignal ? 1 : 0;\n\tuniformData[17] = posXInfo.hasSignal ? 1 : 0;\n\tuniformData[18] = posYInfo.hasSignal ? 1 : 0;\n\tuniformData[19] = posZInfo.hasSignal ? 1 : 0;\n\tuniformData[20] = radiusInfo.hasSignal ? 1 : 0;\n\tuniformData[21] = roughnessInfo.hasSignal ? 1 : 0;\n\tuniformData[22] = specularInfo.hasSignal ? 1 : 0;\n\tuniformData[23] = volumetricInfo.hasSignal ? 1 : 0;\n\tuniformData[24] = lightColorParsed.r;\n\tuniformData[25] = lightColorParsed.g;\n\tuniformData[26] = lightColorParsed.b;\n\tuniformData[27] = lightColorParsed.a;\n\tuniformData[28] = ambientColorParsed.r;\n\tuniformData[29] = ambientColorParsed.g;\n\tuniformData[30] = ambientColorParsed.b;\n\tuniformData[31] = ambientColorParsed.a;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tdepthTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcLayout, srcTex, sampler));\n\trenderPass.setBindGroup(2, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, depthLayout, depthTex, sampler));\n\trenderPass.setBindGroup(3, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sigIntensityView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sigPosXView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sigPosYView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sigPosZView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sigRadiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sigRoughnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: sigSpecularView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: sigVolumetricView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C_O8q9lv.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_SELECTIVE_COLOR_SHADER = `\nstruct SelectiveColorUniforms {\n\treds : vec4<f32>,\n\tyellows : vec4<f32>,\n\tgreens : vec4<f32>,\n\tcyans : vec4<f32>,\n\tblues : vec4<f32>,\n\tmagentas : vec4<f32>,\n\twhites : vec4<f32>,\n\tneutrals : vec4<f32>,\n\tblacks : vec4<f32>,\n\tmethod : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SelectiveColorUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn calcAdjustment(cmy: vec3<f32>, adj: vec4<f32>, weight: f32, isAbsolute: bool) -> vec3<f32> {\n\tif (weight <= 0.00001) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\tlet adjC = adj.x;\n\tlet adjM = adj.y;\n\tlet adjY = adj.z;\n\tlet adjK = adj.w;\n\n\tif (isAbsolute) {\n\t\tlet cDelta = adjC + adjK * (1.0 + adjC);\n\t\tlet mDelta = adjM + adjK * (1.0 + adjM);\n\t\tlet yDelta = adjY + adjK * (1.0 + adjY);\n\t\treturn vec3<f32>(cDelta, mDelta, yDelta) * weight;\n\t} else {\n\t\tlet cDelta = ((1.0 + adjK) * (1.0 + adjC) - 1.0) * cmy.x;\n\t\tlet mDelta = ((1.0 + adjK) * (1.0 + adjM) - 1.0) * cmy.y;\n\t\tlet yDelta = ((1.0 + adjK) * (1.0 + adjY) - 1.0) * cmy.z;\n\t\treturn vec3<f32>(cDelta, mDelta, yDelta) * weight;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet rgb = clamp(color.rgb / max(color.a, 0.00001), vec3<f32>(0.0), vec3<f32>(1.0));\n\tlet r = rgb.r;\n\tlet g = rgb.g;\n\tlet b = rgb.b;\n\n\tlet maxVal = max(r, max(g, b));\n\tlet minVal = min(r, min(g, b));\n\n\t// Chromatic weights\n\tlet wRed = max(0.0, r - max(g, b));\n\tlet wYellow = max(0.0, min(r, g) - b);\n\tlet wGreen = max(0.0, g - max(r, b));\n\tlet wCyan = max(0.0, min(g, b) - r);\n\tlet wBlue = max(0.0, b - max(r, g));\n\tlet wMagenta = max(0.0, min(r, b) - g);\n\n\t// Achromatic weights (Whites, Blacks, and true Midtone Neutrals)\n\tlet wWhite = max(0.0, (minVal - 0.5) * 2.0);\n\tlet wBlack = max(0.0, (0.5 - maxVal) * 2.0);\n\tlet wNeutral = max(0.0, 1.0 - (wRed + wYellow + wGreen + wCyan + wBlue + wMagenta + wWhite + wBlack));\n\n\tlet cmy = vec3<f32>(1.0 - r, 1.0 - g, 1.0 - b);\n\tlet isAbs = u.method > 0.5;\n\n\tvar totalDelta = vec3<f32>(0.0);\n\ttotalDelta += calcAdjustment(cmy, u.reds, wRed, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.yellows, wYellow, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.greens, wGreen, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.cyans, wCyan, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.blues, wBlue, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.magentas, wMagenta, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.whites, wWhite, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.neutrals, wNeutral, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.blacks, wBlack, isAbs);\n\n\tlet finalCMY = clamp(cmy + totalDelta, vec3<f32>(0.0), vec3<f32>(1.0));\n\tlet finalRGB = vec3<f32>(1.0 - finalCMY.x, 1.0 - finalCMY.y, 1.0 - finalCMY.z);\n\n\treturn vec4<f32>(finalRGB * color.a, color.a);\n}\n`;\nfunction getSelectiveColorResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] });\n\t\tconst textureLayout = device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] });\n\t\tconst shaderModule = device.createShaderModule({\n\t\t\tlabel: \"selective-color.wgsl\",\n\t\t\tcode: WGSL_SELECTIVE_COLOR_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createRenderPipeline({\n\t\t\t\tlabel: \"SelectiveColorPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, textureLayout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule: shaderModule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\ttextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction packAdjustment(data, offset, adj) {\n\tdata[offset + 0] = (adj?.cyan ?? 0) / 100;\n\tdata[offset + 1] = (adj?.magenta ?? 0) / 100;\n\tdata[offset + 2] = (adj?.yellow ?? 0) / 100;\n\tdata[offset + 3] = (adj?.black ?? 0) / 100;\n}\nconst uniformBufferData = new Float32Array(40);\nconst SelectiveColorWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"SelectiveColor\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tpackAdjustment(uniformBufferData, 0, op.reds);\n\tpackAdjustment(uniformBufferData, 4, op.yellows);\n\tpackAdjustment(uniformBufferData, 8, op.greens);\n\tpackAdjustment(uniformBufferData, 12, op.cyans);\n\tpackAdjustment(uniformBufferData, 16, op.blues);\n\tpackAdjustment(uniformBufferData, 20, op.magentas);\n\tpackAdjustment(uniformBufferData, 24, op.whites);\n\tpackAdjustment(uniformBufferData, 28, op.neutrals);\n\tpackAdjustment(uniformBufferData, 32, op.blacks);\n\tuniformBufferData[36] = op.method === \"Absolute\" ? 1 : 0;\n\tuniformBufferData[37] = 0;\n\tuniformBufferData[38] = 0;\n\tuniformBufferData[39] = 0;\n\tconst { pipeline, uniformLayout, textureLayout } = getSelectiveColorResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}));\n\trenderPass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler));\n\trenderPass.draw(4);\n\trenderPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: props.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: SelectiveColorWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BiBcP2Pa.mjs.map","import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 250;\nconst MIN_RADIUS = 1;\nconst MAX_AMOUNT = 100;\nconst shadowsHighlightsConfig = configBuilder().field(\"shadowAmount\", z.number().min(0).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Boost (%)\",\n\tdescription: \"Percentage to lift and recover crushed shadow details (0–100%).\"\n}).field(\"shadowTonalWidth\", z.number().min(0).max(100).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Range (%)\",\n\tdescription: \"Range of dark tones affected by shadow adjustments (0–100%).\"\n}).field(\"shadowRadius\", z.number().min(1).max(250).default(30), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shadow Radius (px)\",\n\tdescription: \"Local neighborhood radius in pixels to determine shadow illumination (1–250px).\"\n}).field(\"highlightAmount\", z.number().min(0).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Suppression (%)\",\n\tdescription: \"Percentage to suppress and recover blown highlight details (0–100%).\"\n}).field(\"highlightTonalWidth\", z.number().min(0).max(100).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Range (%)\",\n\tdescription: \"Range of bright tones affected by highlight adjustments (0–100%).\"\n}).field(\"highlightRadius\", z.number().min(1).max(250).default(30), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Highlight Radius (px)\",\n\tdescription: \"Local neighborhood radius in pixels to determine highlight exposure (1–250px).\"\n}).field(\"colorCorrection\", z.number().min(-100).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Correction (%)\",\n\tdescription: \"Fine-tunes color saturation in recovered shadow/highlight zones (-100 to +100%).\"\n}).field(\"midtoneContrast\", z.number().min(-100).max(100).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Midtone Contrast (%)\",\n\tdescription: \"Adjusts contrast centered on the midtones (-100 to +100%).\"\n}).build();\nconst ShadowsHighlightsNodeConfigSchema = shadowsHighlightsConfig.schema;\nconst ShadowsHighlightsResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst ShadowsHighlightsOperationSchema = ShadowsHighlightsNodeConfigSchema.extend({\n\top: z.literal(\"ShadowsHighlights\"),\n\tmetadata: z.unknown().optional()\n});\nconst defaultShadowsHighlightsConfig = ShadowsHighlightsNodeConfigSchema.parse({});\nconst SHADOWS_HIGHLIGHTS_PRESETS = [\n\t{\n\t\tid: \"default\",\n\t\tname: \"Default (Neutral)\",\n\t\tdescription: \"Zero adjustments across dynamic range\",\n\t\tconfig: {\n\t\t\tshadowAmount: 0,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 0,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 0,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"shadow-lift\",\n\t\tname: \"Shadow Detail Lift\",\n\t\tdescription: \"Gently opens up underexposed shadows without bleaching midtones\",\n\t\tconfig: {\n\t\t\tshadowAmount: 40,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 35,\n\t\t\thighlightAmount: 0,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 10,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"highlight-recovery\",\n\t\tname: \"Highlight Recovery\",\n\t\tdescription: \"Pulls back blown sky, cloud, and specular highlight clipping\",\n\t\tconfig: {\n\t\t\tshadowAmount: 0,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 45,\n\t\t\thighlightTonalWidth: 40,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: -5,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t},\n\t{\n\t\tid: \"hdr-balance\",\n\t\tname: \"HDR Dynamic Range\",\n\t\tdescription: \"Balanced recovery expanding visible dynamic range in high contrast scenes\",\n\t\tconfig: {\n\t\t\tshadowAmount: 35,\n\t\t\tshadowTonalWidth: 50,\n\t\t\tshadowRadius: 40,\n\t\t\thighlightAmount: 35,\n\t\t\thighlightTonalWidth: 50,\n\t\t\thighlightRadius: 40,\n\t\t\tcolorCorrection: 15,\n\t\t\tmidtoneContrast: 10\n\t\t}\n\t},\n\t{\n\t\tid: \"backlight-correction\",\n\t\tname: \"Backlight Correction\",\n\t\tdescription: \"Compensates for harsh backlighting illuminating silhouetted subjects\",\n\t\tconfig: {\n\t\t\tshadowAmount: 60,\n\t\t\tshadowTonalWidth: 60,\n\t\t\tshadowRadius: 50,\n\t\t\thighlightAmount: 20,\n\t\t\thighlightTonalWidth: 35,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 20,\n\t\t\tmidtoneContrast: 5\n\t\t}\n\t},\n\t{\n\t\tid: \"dramatic-punch\",\n\t\tname: \"Dramatic Contrast & Clarity\",\n\t\tdescription: \"Deepens shadows, compresses highlights, and boosts midtone punch\",\n\t\tconfig: {\n\t\t\tshadowAmount: 10,\n\t\t\tshadowTonalWidth: 30,\n\t\t\tshadowRadius: 25,\n\t\t\thighlightAmount: 30,\n\t\t\thighlightTonalWidth: 55,\n\t\t\thighlightRadius: 25,\n\t\t\tcolorCorrection: 5,\n\t\t\tmidtoneContrast: 25\n\t\t}\n\t},\n\t{\n\t\tid: \"gentle-fill\",\n\t\tname: \"Gentle Fill Light\",\n\t\tdescription: \"Subtle lift to low-light areas preserving photographic atmosphere\",\n\t\tconfig: {\n\t\t\tshadowAmount: 20,\n\t\t\tshadowTonalWidth: 40,\n\t\t\tshadowRadius: 30,\n\t\t\thighlightAmount: 15,\n\t\t\thighlightTonalWidth: 40,\n\t\t\thighlightRadius: 30,\n\t\t\tcolorCorrection: 5,\n\t\t\tmidtoneContrast: 0\n\t\t}\n\t}\n];\nconst SHADOWS_HIGHLIGHTS_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_SHADOWS_HIGHLIGHTS_UNIFORMS = `\nstruct ShadowsHighlightsUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tshadowRadius : f32,\n\thighlightRadius : f32,\n\n\tshadowAmount : f32,\n\tshadowTonalWidth : f32,\n\thighlightAmount : f32,\n\thighlightTonalWidth : f32,\n\n\tcolorCorrection : f32,\n\tmidtoneContrast : f32,\n\tisSecondPass : f32,\n\t_pad0 : f32,\n\n\thasShadowAmountSig : f32,\n\thasShadowTonalWidthSig : f32,\n\thasShadowRadiusSig : f32,\n\thasHighlightAmountSig : f32,\n\n\thasHighlightTonalWidthSig : f32,\n\thasHighlightRadiusSig : f32,\n\thasColorCorrectionSig : f32,\n\thasMidtoneContrastSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ShadowsHighlightsUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var shadowAmountSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowTonalWidthSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowRadiusSigTex : texture_2d<f32>;\n@group(2) @binding(3) var highlightAmountSigTex : texture_2d<f32>;\n@group(2) @binding(4) var highlightTonalWidthSigTex : texture_2d<f32>;\n@group(2) @binding(5) var highlightRadiusSigTex : texture_2d<f32>;\n@group(2) @binding(6) var colorCorrectionSigTex : texture_2d<f32>;\n@group(2) @binding(7) var midtoneContrastSigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\n\tvar sAmount = u.shadowAmount;\n\tif (u.hasShadowAmountSig > 0.5) {\n\t\tsAmount = textureSampleLevel(shadowAmountSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsAmount = clamp(sAmount, 0.0, 100.0);\n\n\tvar sTonalWidthVal = u.shadowTonalWidth;\n\tif (u.hasShadowTonalWidthSig > 0.5) {\n\t\tsTonalWidthVal = textureSampleLevel(shadowTonalWidthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsTonalWidthVal = clamp(sTonalWidthVal, 0.0, 100.0);\n\n\tvar sRadius = u.shadowRadius;\n\tif (u.hasShadowRadiusSig > 0.5) {\n\t\tsRadius = textureSampleLevel(shadowRadiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tsRadius = clamp(sRadius, 1.0, 250.0);\n\n\tvar hAmount = u.highlightAmount;\n\tif (u.hasHighlightAmountSig > 0.5) {\n\t\thAmount = textureSampleLevel(highlightAmountSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thAmount = clamp(hAmount, 0.0, 100.0);\n\n\tvar hTonalWidthVal = u.highlightTonalWidth;\n\tif (u.hasHighlightTonalWidthSig > 0.5) {\n\t\thTonalWidthVal = textureSampleLevel(highlightTonalWidthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thTonalWidthVal = clamp(hTonalWidthVal, 0.0, 100.0);\n\n\tvar hRadius = u.highlightRadius;\n\tif (u.hasHighlightRadiusSig > 0.5) {\n\t\thRadius = textureSampleLevel(highlightRadiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\thRadius = clamp(hRadius, 1.0, 250.0);\n\n\tvar colCorrVal = u.colorCorrection;\n\tif (u.hasColorCorrectionSig > 0.5) {\n\t\tcolCorrVal = textureSampleLevel(colorCorrectionSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolCorrVal = clamp(colCorrVal, -100.0, 100.0);\n\n\tvar midContrastVal = u.midtoneContrast;\n\tif (u.hasMidtoneContrastSig > 0.5) {\n\t\tmidContrastVal = textureSampleLevel(midtoneContrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tmidContrastVal = clamp(midContrastVal, -100.0, 100.0);\n\n\tif (sAmount <= 0.0 && hAmount <= 0.0 && abs(midContrastVal) <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn origCol;\n\t\t}\n\t\treturn origCol;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tlet lumaOrig = get_luminance(origCol.rgb / max(origCol.a, 1e-5));\n\n\t// Shadow blur parameters\n\tlet sSpatialSigma = sRadius;\n\tlet stepScaleS = max(1.0, sSpatialSigma / 20.0);\n\tlet effectiveSigmaS = sSpatialSigma / stepScaleS;\n\tlet sampleRadiusS = min(i32(ceil(3.0 * effectiveSigmaS)), 64);\n\n\t// Highlight blur parameters\n\tlet hSpatialSigma = hRadius;\n\tlet stepScaleH = max(1.0, hSpatialSigma / 20.0);\n\tlet effectiveSigmaH = hSpatialSigma / stepScaleH;\n\tlet sampleRadiusH = min(i32(ceil(3.0 * effectiveSigmaH)), 64);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// PASS 1: Horizontal blur of luminance from origTex\n\t\t// Output packed channels: R = sLumaPass1, G = hLumaPass1, B = sAlphaPass1, A = hAlphaPass1\n\t\tvar sSum = 0.0;\n\t\tvar sWeightSum = 0.0;\n\t\tvar sAlphaSum = 0.0;\n\t\tvar sKernelSum = 0.0;\n\n\t\tfor (var i = -sampleRadiusS; i <= sampleRadiusS; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScaleS) * direction * texelSize;\n\t\t\tlet x = f32(i) * stepScaleS;\n\t\t\tlet weight = exp(-0.5 * (x / sSpatialSigma) * (x / sSpatialSigma));\n\t\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\tlet sampleAlpha = sampleCol.a;\n\t\t\tlet sampleLuma = get_luminance(sampleCol.rgb / max(sampleAlpha, 1e-5));\n\t\t\tsSum += sampleLuma * weight * sampleAlpha;\n\t\t\tsWeightSum += weight * sampleAlpha;\n\t\t\tsAlphaSum += sampleAlpha * weight;\n\t\t\tsKernelSum += weight;\n\t\t}\n\n\t\tvar hSum = 0.0;\n\t\tvar hWeightSum = 0.0;\n\t\tvar hAlphaSum = 0.0;\n\t\tvar hKernelSum = 0.0;\n\n\t\tfor (var i = -sampleRadiusH; i <= sampleRadiusH; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScaleH) * direction * texelSize;\n\t\t\tlet x = f32(i) * stepScaleH;\n\t\t\tlet weight = exp(-0.5 * (x / hSpatialSigma) * (x / hSpatialSigma));\n\t\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\tlet sampleAlpha = sampleCol.a;\n\t\t\tlet sampleLuma = get_luminance(sampleCol.rgb / max(sampleAlpha, 1e-5));\n\t\t\thSum += sampleLuma * weight * sampleAlpha;\n\t\t\thWeightSum += weight * sampleAlpha;\n\t\t\thAlphaSum += sampleAlpha * weight;\n\t\t\thKernelSum += weight;\n\t\t}\n\n\t\tlet sLumaPass1 = select(lumaOrig, sSum / sWeightSum, sWeightSum > 1e-5);\n\t\tlet sAlphaPass1 = sAlphaSum / max(sKernelSum, 1e-5);\n\t\tlet hLumaPass1 = select(lumaOrig, hSum / hWeightSum, hWeightSum > 1e-5);\n\t\tlet hAlphaPass1 = hAlphaSum / max(hKernelSum, 1e-5);\n\n\t\treturn vec4<f32>(sLumaPass1, hLumaPass1, sAlphaPass1, hAlphaPass1);\n\t}\n\n\t// PASS 2: Vertical blur of Pass 1 + Dynamic Range Recovery\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tvar sSum = 0.0;\n\tvar sWeightSum = 0.0;\n\n\tfor (var i = -sampleRadiusS; i <= sampleRadiusS; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScaleS) * direction * texelSize;\n\t\tlet x = f32(i) * stepScaleS;\n\t\tlet weight = exp(-0.5 * (x / sSpatialSigma) * (x / sSpatialSigma));\n\t\tlet samplePass1 = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tlet sampleAlpha = samplePass1.b;\n\t\tlet sampleLuma = samplePass1.r;\n\t\tsSum += sampleLuma * weight * sampleAlpha;\n\t\tsWeightSum += weight * sampleAlpha;\n\t}\n\n\tvar hSum = 0.0;\n\tvar hWeightSum = 0.0;\n\n\tfor (var i = -sampleRadiusH; i <= sampleRadiusH; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScaleH) * direction * texelSize;\n\t\tlet x = f32(i) * stepScaleH;\n\t\tlet weight = exp(-0.5 * (x / hSpatialSigma) * (x / hSpatialSigma));\n\t\tlet samplePass1 = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tlet sampleAlpha = samplePass1.a;\n\t\tlet sampleLuma = samplePass1.g;\n\t\thSum += sampleLuma * weight * sampleAlpha;\n\t\thWeightSum += weight * sampleAlpha;\n\t}\n\n\tlet sLumaBlur = select(lumaOrig, sSum / sWeightSum, sWeightSum > 1e-5);\n\tlet hLumaBlur = select(lumaOrig, hSum / hWeightSum, hWeightSum > 1e-5);\n\n\tlet alpha = origCol.a;\n\tlet rgb = origCol.rgb / alpha;\n\n\tlet sAmountNorm = sAmount / 100.0;\n\tlet hAmountNorm = hAmount / 100.0;\n\tlet sTonalWidth = clamp(sTonalWidthVal / 100.0, 0.01, 1.0);\n\tlet hTonalWidth = clamp(hTonalWidthVal / 100.0, 0.01, 1.0);\n\tlet colCorrNorm = colCorrVal / 100.0;\n\tlet midContrastNorm = midContrastVal / 100.0;\n\n\tlet sEvalLuma = 0.65 * sLumaBlur + 0.35 * lumaOrig;\n\tlet hEvalLuma = 0.65 * hLumaBlur + 0.35 * lumaOrig;\n\n\tlet wShadow = 1.0 - smoothstep(0.0, sTonalWidth, sEvalLuma);\n\tlet wHighlight = smoothstep(1.0 - hTonalWidth, 1.0, hEvalLuma);\n\n\tlet shadowBoost = sAmountNorm * wShadow * (1.0 - lumaOrig) * (1.0 - sqrt(clamp(sLumaBlur, 0.0, 1.0)));\n\tlet highlightSuppression = hAmountNorm * wHighlight * lumaOrig * sqrt(clamp(hLumaBlur, 0.0, 1.0));\n\n\tvar targetLuma = clamp(lumaOrig + shadowBoost - highlightSuppression, 0.0, 1.0);\n\n\tif (abs(midContrastNorm) > 0.001) {\n\t\tlet midDiff = targetLuma - 0.5;\n\t\tlet sCurve = midDiff * (1.0 - 4.0 * midDiff * midDiff);\n\t\ttargetLuma = clamp(targetLuma + midContrastNorm * sCurve * 0.4, 0.0, 1.0);\n\t}\n\n\tvar adjustedRgb = rgb * ((targetLuma + 1e-4) / (lumaOrig + 1e-4));\n\n\tlet effectIntensity = sAmountNorm * wShadow + hAmountNorm * wHighlight;\n\tlet satFactor = clamp(1.0 + colCorrNorm * effectIntensity * 1.5, 0.0, 3.0);\n\tadjustedRgb = mix(vec3<f32>(targetLuma), adjustedRgb, satFactor);\n\n\tlet finalRgb = clamp(adjustedRgb, vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(finalRgb * alpha, alpha);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst shadowsHighlightsUniformData = new Float32Array(20);\nfunction getShadowsHighlightsResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 4,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 5,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 6,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 7,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 8,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_SHADOWS_HIGHLIGHTS_UNIFORMS });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: targetFormat }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ShadowsHighlights\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"shadowshighlights_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t};\n\tconst shadowAmountRes = resolveField(op.shadowAmountHandleId, Number(op.shadowAmount ?? 0), 0, MAX_AMOUNT);\n\tconst shadowTonalWidthRes = resolveField(op.shadowTonalWidthHandleId, Number(op.shadowTonalWidth ?? 50), 0, 100);\n\tconst shadowRadiusRes = resolveField(op.shadowRadiusHandleId, Number(op.shadowRadius ?? 30), MIN_RADIUS, MAX_RADIUS);\n\tconst highlightAmountRes = resolveField(op.highlightAmountHandleId, Number(op.highlightAmount ?? 0), 0, MAX_AMOUNT);\n\tconst highlightTonalWidthRes = resolveField(op.highlightTonalWidthHandleId, Number(op.highlightTonalWidth ?? 50), 0, 100);\n\tconst highlightRadiusRes = resolveField(op.highlightRadiusHandleId, Number(op.highlightRadius ?? 30), MIN_RADIUS, MAX_RADIUS);\n\tconst colorCorrectionRes = resolveField(op.colorCorrectionHandleId, Number(op.colorCorrection ?? 0), -100, 100);\n\tconst midtoneContrastRes = resolveField(op.midtoneContrastHandleId, Number(op.midtoneContrast ?? 0), -100, 100);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tif (shadowAmountRes.val <= 0 && !shadowAmountRes.hasStaticSig && highlightAmountRes.val <= 0 && !highlightAmountRes.hasStaticSig && midtoneContrastRes.val === 0 && !midtoneContrastRes.hasStaticSig) {\n\t\tconst finalPass$1 = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tctx.renderer.drawTexture(finalPass$1, tmpTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight\n\t\t}, { opacity: op.opacity ?? 1 });\n\t\targs.pass = finalPass$1;\n\t\treturn;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getShadowsHighlightsResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst shadowAmountView = getSignalView(shadowAmountRes, \"shadow_amount_sig\");\n\tconst shadowTonalWidthView = getSignalView(shadowTonalWidthRes, \"shadow_tonal_width_sig\");\n\tconst shadowRadiusView = getSignalView(shadowRadiusRes, \"shadow_radius_sig\");\n\tconst highlightAmountView = getSignalView(highlightAmountRes, \"highlight_amount_sig\");\n\tconst highlightTonalWidthView = getSignalView(highlightTonalWidthRes, \"highlight_tonal_width_sig\");\n\tconst highlightRadiusView = getSignalView(highlightRadiusRes, \"highlight_radius_sig\");\n\tconst colorCorrectionView = getSignalView(colorCorrectionRes, \"color_correction_sig\");\n\tconst midtoneContrastView = getSignalView(midtoneContrastRes, \"midtone_contrast_sig\");\n\tconst createBindGroup = (inputTex, origTexture) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTexture.createView()\n\t\t\t}\n\t\t]\n\t});\n\tshadowsHighlightsUniformData[2] = shadowRadiusRes.val;\n\tshadowsHighlightsUniformData[3] = highlightRadiusRes.val;\n\tshadowsHighlightsUniformData[4] = shadowAmountRes.val;\n\tshadowsHighlightsUniformData[5] = shadowTonalWidthRes.val;\n\tshadowsHighlightsUniformData[6] = highlightAmountRes.val;\n\tshadowsHighlightsUniformData[7] = highlightTonalWidthRes.val;\n\tshadowsHighlightsUniformData[8] = colorCorrectionRes.val;\n\tshadowsHighlightsUniformData[9] = midtoneContrastRes.val;\n\tshadowsHighlightsUniformData[10] = 0;\n\tshadowsHighlightsUniformData[11] = 0;\n\tshadowsHighlightsUniformData[12] = shadowAmountRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[13] = shadowTonalWidthRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[14] = shadowRadiusRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[15] = highlightAmountRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[16] = highlightTonalWidthRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[17] = highlightRadiusRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[18] = colorCorrectionRes.hasStaticSig ? 1 : 0;\n\tshadowsHighlightsUniformData[19] = midtoneContrastRes.hasStaticSig ? 1 : 0;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: shadowAmountView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: shadowTonalWidthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: shadowRadiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: highlightAmountView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: highlightTonalWidthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: highlightRadiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: colorCorrectionView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: midtoneContrastView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tshadowsHighlightsUniformData[0] = 1;\n\tshadowsHighlightsUniformData[1] = 0;\n\tshadowsHighlightsUniformData[10] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(shadowsHighlightsUniformData);\n\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex1.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thPass.setPipeline(pipeline);\n\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: hBuffer }\n\t\t}]\n\t}));\n\thPass.setBindGroup(1, createBindGroup(tmpTex, tmpTex));\n\thPass.setBindGroup(2, sigBindGroup);\n\thPass.draw(4);\n\thPass.end();\n\tshadowsHighlightsUniformData[0] = 0;\n\tshadowsHighlightsUniformData[1] = 1;\n\tshadowsHighlightsUniformData[10] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(shadowsHighlightsUniformData);\n\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex2.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvPass.setPipeline(pipeline);\n\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: vBuffer }\n\t\t}]\n\t}));\n\tvPass.setBindGroup(1, createBindGroup(outTex1, tmpTex));\n\tvPass.setBindGroup(2, sigBindGroup);\n\tvPass.draw(4);\n\tvPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer };\n\n//#endregion\nexport { MIN_RADIUS as a, ShadowsHighlightsNodeConfigSchema as c, defaultShadowsHighlightsConfig as d, shadowsHighlightsConfig as f, MAX_RADIUS as i, ShadowsHighlightsOperationSchema as l, WebGPURenderer as n, SHADOWS_HIGHLIGHTS_OUTPUT_TYPE_MAP as o, MAX_AMOUNT as r, SHADOWS_HIGHLIGHTS_PRESETS as s, renderers_default as t, ShadowsHighlightsResultSchema as u };\n//# sourceMappingURL=renderers-s5KsGSY3.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst TILE_OFFSET_SHADER = `\nstruct TileOffsetUniforms {\n offsetX : f32,\n offsetY : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n layerWidth : f32,\n layerHeight : f32,\n edgeMode : f32,\n pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : TileOffsetUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var offX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n let sigX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offX = offX + sigX;\n }\n\n var offY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n let sigY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offY = offY + sigY;\n }\n\n let normOffset = vec2<f32>(\n offX / max(1.0, u.layerWidth),\n offY / max(1.0, u.layerHeight)\n );\n var uv = in.uv - normOffset;\n\n // Edge Modes:\n // 0.0 = wrap (seamless modulo)\n // 1.0 = clamp (edge smear)\n // 2.0 = transparent (clear bounds)\n // 3.0 = mirror (ping-pong reflection)\n if (u.edgeMode < 0.5) {\n uv = fract(uv);\n } else if (u.edgeMode < 1.5) {\n uv = clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0));\n } else if (u.edgeMode < 2.5) {\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n return vec4<f32>(0.0);\n }\n } else {\n uv = 1.0 - abs(fract(uv * 0.5) * 2.0 - 1.0);\n }\n\n let color = textureSampleLevel(tex, samp, uv, 0.0);\n return color;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(8);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getTileOffsetResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `tile_offset_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `tile_offset_${format}.wgsl`,\n\t\t\tcode: TILE_OFFSET_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `TileOffsetPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst TileOffsetWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"TileOffset\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"tile_offset_node\";\n\tconst resolveBindable = (configKey, defaultValue) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Number(input.outputItem.data ?? defaultValue);\n\t\telse val = Number(op[configKey] ?? defaultValue);\n\t\telse if (sd) {\n\t\t\tval = Number(sd.offset ?? 0);\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst offsetXRes = resolveBindable(\"offsetX\", 0);\n\tconst offsetYRes = resolveBindable(\"offsetY\", 0);\n\tlet edgeModeIndex = 0;\n\tconst edgeMode = op.edgeMode ?? (op.wrap !== false ? \"wrap\" : \"transparent\");\n\tif (edgeMode === \"clamp\") edgeModeIndex = 1;\n\telse if (edgeMode === \"transparent\" || op.wrap === false) edgeModeIndex = 2;\n\telse if (edgeMode === \"mirror\") edgeModeIndex = 3;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getTileOffsetResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\tuniformData[0] = offsetXRes.val;\n\tuniformData[1] = offsetYRes.val;\n\tuniformData[2] = offsetXRes.hasStaticSig ? 1 : 0;\n\tuniformData[3] = offsetYRes.hasStaticSig ? 1 : 0;\n\tuniformData[4] = width;\n\tuniformData[5] = height;\n\tuniformData[6] = edgeModeIndex;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst tilePass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\ttilePass.setPipeline(pipeline);\n\ttilePass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\ttilePass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\ttilePass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: offsetXView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: offsetYView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\ttilePass.draw(4);\n\ttilePass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\nconst WebGPURenderer = TileOffsetWebGPURenderer;\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-UzlleXVD.mjs.map","import { ImageResultSchema, VideoResultSchema, configBuilder } from \"@gitframes/node-sdk\";\nimport { z } from \"zod\";\nimport { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 50;\nconst MAX_AMOUNT = 500;\nconst MAX_THRESHOLD = 255;\nconst unsharpMaskConfig = configBuilder().field(\"amount\", z.number().min(0).max(MAX_AMOUNT).default(100), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Amount Signal\",\n\tdescription: \"Sharpening intensity percentage (0–500%).\"\n}).field(\"radius\", z.number().min(.1).max(MAX_RADIUS).default(1.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Radius Signal\",\n\tdescription: \"The Gaussian blur radius in pixels used to detect edge contrast.\"\n}).field(\"threshold\", z.number().int().min(0).max(MAX_THRESHOLD).default(3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Threshold Signal\",\n\tdescription: \"Minimum tonal level difference (0–255) required before sharpening is applied to avoid amplifying noise.\"\n}).build();\nconst UnsharpMaskNodeConfigSchema = unsharpMaskConfig.schema;\nconst UnsharpMaskResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst UNSHARP_MASK_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_UNSHARPMASK_UNIFORMS = `\nstruct UnsharpMaskUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tradius : f32,\n\tamount : f32,\n\n\tthreshold : f32,\n\thasRadiusSig : f32,\n\thasAmountSig : f32,\n\thasThresholdSig: f32,\n\n\tisSecondPass : f32,\n\t_pad0 : f32,\n\t_pad1 : f32,\n\t_pad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : UnsharpMaskUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(1) var amountSigTex : texture_2d<f32>;\n@group(2) @binding(2) var thresholdSigTex : texture_2d<f32>;\n@group(2) @binding(3) var signalSamp : sampler;\n\nstruct VSOut {\n\t@builtin(position) pos : vec4<f32>,\n\t@location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar amount = u.amount;\n\tif (u.hasAmountSig > 0.5) {\n\t\tamount = textureSampleLevel(amountSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar threshold = u.threshold;\n\tif (u.hasThresholdSig > 0.5) {\n\t\tthreshold = textureSampleLevel(thresholdSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet origCol = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\tif (radius <= 0.0 || amount <= 0.0) {\n\t\tif (u.isSecondPass > 0.5) {\n\t\t\treturn origCol;\n\t\t}\n\t\treturn textureSampleLevel(tex, samp, in.uv, 0.0);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet spatial_sigma = radius;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar blurred = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tblurred += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurResult = blurred / max(totalWeight, 1e-5);\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// Pass 1: Intermediate horizontal blur\n\t\treturn blurResult;\n\t}\n\n\t// Pass 2: Vertical blur complete -> Calculate Precision Unsharp Mask\n\tif (origCol.a < 1e-5) {\n\t\treturn vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\t}\n\n\tlet delta = origCol.rgb - blurResult.rgb;\n\tlet lumaDiff = abs(dot(delta, vec3<f32>(0.2126, 0.7152, 0.0722)));\n\tlet threshNorm = (max(0.0, threshold) / 255.0) * origCol.a;\n\n\tvar factor = 1.0;\n\tif (threshold > 0.0) {\n\t\tlet ramp = (2.0 / 255.0) * origCol.a;\n\t\tfactor = smoothstep(threshNorm, threshNorm + ramp, lumaDiff);\n\t}\n\n\tlet sharpRgb = origCol.rgb + (amount / 100.0) * delta * factor;\n\tlet clampedRgb = clamp(sharpRgb, vec3<f32>(0.0), vec3<f32>(origCol.a));\n\treturn vec4<f32>(clampedRgb, origCol.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst unsharpMaskUniformData = new Float32Array(12);\nfunction getUnsharpMaskResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = device.createBindGroupLayout({ entries: [{\n\t\tbinding: 0,\n\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\tbuffer: { type: \"uniform\" }\n\t}] });\n\tconst textureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tconst signalTextureLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 3,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}\n\t] });\n\tconst shaderModule = device.createShaderModule({ code: WGSL_UNSHARPMASK_UNIFORMS });\n\tconst pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t] });\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlayout: pipelineLayout,\n\t\t\tvertex: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: shaderModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: targetFormat }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"UnsharpMask\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"unsharpmask_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => {\n\t\tif (handleId && op.inputs?.[handleId]?.connectionValid) {\n\t\t\tconst outputItem = op.inputs[handleId].outputItem;\n\t\t\tif (outputItem?.type === \"Number\") {\n\t\t\t\tconst numVal = typeof outputItem.data === \"number\" ? outputItem.data : outputItem.data?.value ?? fallbackVal;\n\t\t\t\treturn {\n\t\t\t\t\tval: Math.max(clampMin, Math.min(clampMax, numVal)),\n\t\t\t\t\thasStaticSig: false,\n\t\t\t\t\tsd: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (outputItem?.type === \"Signal\" && outputItem.data) return {\n\t\t\t\tval: fallbackVal,\n\t\t\t\thasStaticSig: true,\n\t\t\t\tsd: outputItem.data\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tval: Math.max(clampMin, Math.min(clampMax, fallbackVal)),\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t};\n\tconst amountRes = resolveField(op.amountHandleId, Number(op.amount ?? 100), 0, MAX_AMOUNT);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 1.5), .1, MAX_RADIUS);\n\tconst thresholdRes = resolveField(op.thresholdHandleId, Number(op.threshold ?? 3), 0, MAX_THRESHOLD);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getUnsharpMaskResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst amountView = getSignalView(amountRes, \"amount_sig\");\n\tconst thresholdView = getSignalView(thresholdRes, \"threshold_sig\");\n\tconst createUnsharpMaskBindGroup = (inputTex, origTexture) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTexture.createView()\n\t\t\t}\n\t\t]\n\t});\n\tunsharpMaskUniformData[2] = radiusRes.val;\n\tunsharpMaskUniformData[3] = amountRes.val;\n\tunsharpMaskUniformData[4] = thresholdRes.val;\n\tunsharpMaskUniformData[5] = radiusRes.hasStaticSig ? 1 : 0;\n\tunsharpMaskUniformData[6] = amountRes.hasStaticSig ? 1 : 0;\n\tunsharpMaskUniformData[7] = thresholdRes.hasStaticSig ? 1 : 0;\n\tunsharpMaskUniformData[8] = 0;\n\tunsharpMaskUniformData[9] = 0;\n\tunsharpMaskUniformData[10] = 0;\n\tunsharpMaskUniformData[11] = 0;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: amountView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: thresholdView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tunsharpMaskUniformData[0] = 1;\n\tunsharpMaskUniformData[1] = 0;\n\tunsharpMaskUniformData[8] = 0;\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(unsharpMaskUniformData);\n\tconst hPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex1.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\thPass.setPipeline(pipeline);\n\thPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: hBuffer }\n\t\t}]\n\t}));\n\thPass.setBindGroup(1, createUnsharpMaskBindGroup(tmpTex, tmpTex));\n\thPass.setBindGroup(2, sigBindGroup);\n\thPass.draw(4);\n\thPass.end();\n\tunsharpMaskUniformData[0] = 0;\n\tunsharpMaskUniformData[1] = 1;\n\tunsharpMaskUniformData[8] = 1;\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(unsharpMaskUniformData);\n\tconst vPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex2.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvPass.setPipeline(pipeline);\n\tvPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: vBuffer }\n\t\t}]\n\t}));\n\tvPass.setBindGroup(1, createUnsharpMaskBindGroup(outTex1, tmpTex));\n\tvPass.setBindGroup(2, sigBindGroup);\n\tvPass.draw(4);\n\tvPass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex2, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { UNSHARP_MASK_OUTPUT_TYPE_MAP as a, unsharpMaskConfig as c, MAX_THRESHOLD as i, MAX_AMOUNT as n, UnsharpMaskNodeConfigSchema as o, MAX_RADIUS as r, UnsharpMaskResultSchema as s, renderers_default as t };\n//# sourceMappingURL=renderers-drUQxsWI.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { signalRegistry } from \"@gitframes/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst VIGNETTE_SHADER = `\nstruct VignetteUniforms {\n strength : f32,\n radius : f32,\n softness : f32,\n roundness : f32,\n\n centerX : f32,\n centerY : f32,\n hasStrengthSig : f32,\n hasRadiusSig : f32,\n\n hasSoftnessSig : f32,\n hasRoundnessSig: f32,\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : VignetteUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var softnessSigTex : texture_2d<f32>;\n@group(2) @binding(3) var roundnessSigTex : texture_2d<f32>;\n@group(2) @binding(4) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(5) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(6) var signalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n if (color.a < 1e-5) {\n return color;\n }\n\n // Resolve parameter overrides or dynamic signals\n var strength = u.strength;\n if (u.hasStrengthSig > 0.5) {\n strength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var softness = u.softness;\n if (u.hasSoftnessSig > 0.5) {\n softness = textureSampleLevel(softnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var roundness = u.roundness;\n if (u.hasRoundnessSig > 0.5) {\n roundness = textureSampleLevel(roundnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let center = vec2<f32>(centerX, centerY);\n let dimensions = vec2<f32>(textureDimensions(tex));\n let aspect = dimensions.x / dimensions.y;\n let uvOffset = in.uv - center;\n\n // Calculate aspect ratio corrected coordinate for circle\n let correctedOffset = vec2<f32>(\n uvOffset.x * mix(1.0, aspect, roundness),\n uvOffset.y\n );\n let dist = length(correctedOffset);\n\n // Calculate vignette edge falloff\n let edge0 = radius;\n let edge1 = max(0.0, radius - softness);\n let vignetteFactor = smoothstep(edge0, edge1, dist);\n\n // Blend based on strength\n let intensity = strength / 100.0;\n let finalVignette = mix(1.0, vignetteFactor, intensity);\n\n // Unpremultiply, apply vignette, and repremultiply\n let unpremult_rgb = color.rgb / color.a;\n let final_rgb = unpremult_rgb * finalVignette;\n\n return vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * color.a, color.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst vignetteUniformData = new Float32Array(12);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getVignetteResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `vignette_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst vignetteModule = device.createShaderModule({\n\t\t\tlabel: `vignette_${format}.wgsl`,\n\t\t\tcode: VIGNETTE_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `VignettePipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: vignetteModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: vignetteModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tvignettePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst VignetteWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Vignette\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"vignette_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView = void 0;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tlet rawVal = op[configKey];\n\t\t\tif (rawVal !== void 0 && rawVal !== null) {\n\t\t\t\tif (typeof rawVal === \"object\" && \"value\" in rawVal) {\n\t\t\t\t\tconst sig = rawVal;\n\t\t\t\t\tif (sig.gpuBinding?.textureView) {\n\t\t\t\t\t\tgpuTextureView = sig.gpuBinding.textureView;\n\t\t\t\t\t\thasStaticSig = true;\n\t\t\t\t\t}\n\t\t\t\t\trawVal = sig.value;\n\t\t\t\t} else if (typeof rawVal === \"function\") rawVal = rawVal(frame, fps);\n\t\t\t}\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 50, 0, 100);\n\tconst radiusRes = resolveBindable(\"radius\", 1, .1, 2);\n\tconst softnessRes = resolveBindable(\"softness\", .5, 0, 1);\n\tconst roundnessRes = resolveBindable(\"roundness\", .5, 0, 1);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst { vignettePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getVignetteResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.gpuTextureView) return res.gpuTextureView;\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst softnessView = getSignalView(softnessRes, \"softness_sig\");\n\tconst roundnessView = getSignalView(roundnessRes, \"roundness_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\tvignetteUniformData[0] = strengthRes.val;\n\tvignetteUniformData[1] = radiusRes.val;\n\tvignetteUniformData[2] = softnessRes.val;\n\tvignetteUniformData[3] = roundnessRes.val;\n\tvignetteUniformData[4] = centerXRes.val;\n\tvignetteUniformData[5] = centerYRes.val;\n\tvignetteUniformData[6] = strengthRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[7] = radiusRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[8] = softnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[9] = roundnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[10] = centerXRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[11] = centerYRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(vignetteUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst vignettePass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvignettePass.setPipeline(pipeline);\n\tvignettePass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tvignettePass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\tvignettePass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: strengthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: softnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: roundnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: centerXView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: centerYView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tvignettePass.draw(4);\n\tvignettePass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: VignetteWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Bf-Lh4-Q.mjs.map","import { defineRenderer } from \"@gitframes/node-sdk/renderer\";\nimport { PoseSkeletonRenderer, SegmentationTexturePool, TemporalObjectTracker, YoloVisionRunner, matchPoseToTracks } from \"@gitframes/yolo\";\n\n//#region src/renderers/webgpu-renderer.ts\nlet sharedRunner = null;\nlet sharedSkeletonRenderer = null;\nlet sharedTexturePool = null;\nlet sharedObjectTracker = null;\n/**\n* Persistent per-node child textures. The shared frame encoder is submitted at\n* the END of the frame, so a node renderer cannot read back the child it just\n* drew. We keep the texture around and read back the PREVIOUS frame's pixels at\n* the start of the next call — a stable one-frame delay instead of the\n* unpredictable multi-frame lag you get from pooled textures.\n*\n* Keyed on the stable Yolo `Effect` instance (render ids change every frame),\n* with a size-keyed fallback for raw operation nodes.\n*/\nconst yoloChildTexturesByEffect = /* @__PURE__ */ new WeakMap();\nconst yoloChildTexturesByKey = /* @__PURE__ */ new Map();\n/**\n* Last successful subject mask, reused for a few frames when the model misses —\n* a transient miss then holds the silhouette instead of flashing the raw plate.\n* Keyed per node/effect so multiple YOLO nodes do not collide.\n*/\nconst lastSubjectByNode = /* @__PURE__ */ new Map();\nconst SUBJECT_HOLD_FRAMES = 3;\n/**\n* Lazy shared runner — `create()` is a pure constructor (zero I/O); the first frame that\n* requests a task triggers that task's model download at inference time (never at init).\n*/\nfunction getSharedRunner(op) {\n\tif (!sharedRunner || sharedRunner.variant !== op.variant || sharedRunner.enableWorld !== op.enableWorld || sharedRunner.prompts !== op.prompts || sharedRunner.customModel !== op.customModel || sharedRunner.featherRadius !== op.featherRadius || sharedRunner.maskThreshold !== op.maskThreshold) sharedRunner = YoloVisionRunner.create({\n\t\tvariant: op.variant,\n\t\timgsz: op.imgsz,\n\t\tconfidence: op.confidence,\n\t\tiouThreshold: op.iouThreshold,\n\t\tclasses: op.classes,\n\t\tenableWorld: op.enableWorld,\n\t\tprompts: op.prompts,\n\t\tcustomModel: op.customModel,\n\t\tmaskThreshold: op.maskThreshold,\n\t\tfeatherRadius: op.featherRadius,\n\t\tmodelsDir: op.modelsDir,\n\t\tbaseUrl: op.baseUrl\n\t});\n\treturn sharedRunner;\n}\n/** Lazy shared tracker — detections (incl. OBB) are tracked under one stable identity space. */\nfunction getSharedObjectTracker(op) {\n\tif (!sharedObjectTracker) sharedObjectTracker = new TemporalObjectTracker({\n\t\tiouThreshold: op.iouThreshold ?? .25,\n\t\tmaxMissedFrames: op.maxMissedFrames ?? 15\n\t});\n\treturn sharedObjectTracker;\n}\n/**\n* Normalizes the runner's pose keypoints (plate pixel space) to [0, 1] landmarks, which is\n* the contract the signal bundle and the skeleton pipeline expect.\n*/\nfunction normalizePoseKeypoints(result, width, height) {\n\tif (width <= 0 || height <= 0) return result;\n\treturn { people: result.people.map((person) => ({\n\t\t...person,\n\t\tkeypoints: person.keypoints.map((k) => ({\n\t\t\tx: k.x / width,\n\t\t\ty: k.y / height,\n\t\t\tvisibility: k.visibility\n\t\t}))\n\t})) };\n}\n/** Assigns each decoded instance mask to the temporal track whose box center is nearest the mask's centroid. */\nfunction assignMasksToTracks(masks, tracked) {\n\treturn masks.map((mask) => {\n\t\tconst { cx, cy } = maskCentroid(mask);\n\t\tlet best = null;\n\t\tfor (const obj of tracked) {\n\t\t\tconst dx = obj.centerX - cx;\n\t\t\tconst dy = obj.centerY - cy;\n\t\t\tconst distance = dx * dx + dy * dy;\n\t\t\tif (!best || distance < best.distance) best = {\n\t\t\t\ttrackId: obj.trackId,\n\t\t\t\tdistance\n\t\t\t};\n\t\t}\n\t\treturn best ? {\n\t\t\t...mask,\n\t\t\ttrackId: best.trackId\n\t\t} : mask;\n\t});\n}\n/** Picks the subject mask: the largest instance, preferring a person when present. */\nfunction selectSubjectMask(masks) {\n\tif (masks.length === 0) return void 0;\n\tlet best = masks[0];\n\tfor (const m of masks) {\n\t\tconst mIsPerson = m.category.toLowerCase() === \"person\";\n\t\tconst bestIsPerson = best.category.toLowerCase() === \"person\";\n\t\tif (mIsPerson && !bestIsPerson) {\n\t\t\tbest = m;\n\t\t\tcontinue;\n\t\t}\n\t\tif (mIsPerson === bestIsPerson && m.area > best.area) best = m;\n\t}\n\treturn best;\n}\n/**\n* Grows a person mask into connected foreground pixels — the COCO person head\n* drops a flowing dress (treats it as non-person), so seeding a flood fill from\n* the body through pixels that differ from the sampled backdrop recovers the\n* fabric without adding the near-uniform studio wall or its soft grey shadow.\n*/\nfunction fillInternalHoles(mask, width, height) {\n\tconst exterior = new Uint8Array(width * height);\n\tconst queue = [];\n\tconst tryPushBg = (x, y) => {\n\t\tif (x < 0 || y < 0 || x >= width || y >= height) return;\n\t\tconst idx = y * width + x;\n\t\tif (exterior[idx] || mask[idx] > 0) return;\n\t\texterior[idx] = 1;\n\t\tqueue.push(idx);\n\t};\n\tfor (let x = 0; x < width; x++) {\n\t\ttryPushBg(x, 0);\n\t\ttryPushBg(x, height - 1);\n\t}\n\tfor (let y = 0; y < height; y++) {\n\t\ttryPushBg(0, y);\n\t\ttryPushBg(width - 1, y);\n\t}\n\tlet head = 0;\n\twhile (head < queue.length) {\n\t\tconst idx = queue[head++];\n\t\tconst x = idx % width;\n\t\tconst y = idx / width | 0;\n\t\ttryPushBg(x + 1, y);\n\t\ttryPushBg(x - 1, y);\n\t\ttryPushBg(x, y + 1);\n\t\ttryPushBg(x, y - 1);\n\t}\n\tfor (let i = 0; i < mask.length; i++) if (mask[i] === 0 && exterior[i] === 0) mask[i] = 255;\n}\nfunction smoothMaskBoundary(mask, width, height, radius = 2) {\n\tif (radius <= 0) return mask;\n\tconst temp = new Uint8Array(width * height);\n\tconst out = new Uint8Array(width * height);\n\tconst div = 2 * radius + 1;\n\tfor (let y = 0; y < height; y++) {\n\t\tconst row = y * width;\n\t\tlet sum = 0;\n\t\tfor (let k = -radius; k <= radius; k++) {\n\t\t\tconst x = Math.max(0, Math.min(width - 1, k));\n\t\t\tsum += mask[row + x];\n\t\t}\n\t\tfor (let x = 0; x < width; x++) {\n\t\t\ttemp[row + x] = Math.round(sum / div);\n\t\t\tconst xOut = Math.max(0, x - radius);\n\t\t\tconst xIn = Math.min(width - 1, x + radius + 1);\n\t\t\tsum += mask[row + xIn] - mask[row + xOut];\n\t\t}\n\t}\n\tfor (let x = 0; x < width; x++) {\n\t\tlet sum = 0;\n\t\tfor (let k = -radius; k <= radius; k++) {\n\t\t\tconst y = Math.max(0, Math.min(height - 1, k));\n\t\t\tsum += temp[y * width + x];\n\t\t}\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tout[y * width + x] = Math.round(sum / div);\n\t\t\tconst yOut = Math.max(0, y - radius);\n\t\t\tconst yIn = Math.min(height - 1, y + radius + 1);\n\t\t\tsum += temp[yIn * width + x] - temp[yOut * width + x];\n\t\t}\n\t}\n\treturn out;\n}\nfunction growMaskIntoForeground(mask, width, height, pixels, threshold, featherRadius) {\n\tlet br = 0;\n\tlet bg = 0;\n\tlet bb = 0;\n\tlet n = 0;\n\tconst sample = (x, y) => {\n\t\tconst i = y * width + x;\n\t\tif (mask[i]) return;\n\t\tconst p = i * 4;\n\t\tbr += pixels[p];\n\t\tbg += pixels[p + 1];\n\t\tbb += pixels[p + 2];\n\t\tn++;\n\t};\n\tfor (let x = 0; x < width; x += 4) {\n\t\tsample(x, 0);\n\t\tsample(x, height - 1);\n\t}\n\tfor (let y = 0; y < height; y += 4) {\n\t\tsample(0, y);\n\t\tsample(width - 1, y);\n\t}\n\tif (n === 0) return mask;\n\tbr /= n;\n\tbg /= n;\n\tbb /= n;\n\tconst isForeground = (i) => {\n\t\tconst p = i * 4;\n\t\treturn Math.max(Math.abs(pixels[p] - br), Math.abs(pixels[p + 1] - bg), Math.abs(pixels[p + 2] - bb)) > threshold;\n\t};\n\tconst queue = [];\n\tfor (let i = 0; i < mask.length; i++) if (mask[i] > 0) {\n\t\tif (isForeground(i)) mask[i] = 255;\n\t\tqueue.push(i);\n\t}\n\tlet head = 0;\n\twhile (head < queue.length) {\n\t\tconst i = queue[head++];\n\t\tconst x = i % width;\n\t\tconst y = i / width | 0;\n\t\tconst tryPush = (nx, ny) => {\n\t\t\tif (nx < 0 || ny < 0 || nx >= width || ny >= height) return;\n\t\t\tconst ni = ny * width + nx;\n\t\t\tif (mask[ni] === 255 || !isForeground(ni)) return;\n\t\t\tmask[ni] = 255;\n\t\t\tqueue.push(ni);\n\t\t};\n\t\ttryPush(x + 1, y);\n\t\ttryPush(x - 1, y);\n\t\ttryPush(x, y + 1);\n\t\ttryPush(x, y - 1);\n\t}\n\tfillInternalHoles(mask, width, height);\n\treturn smoothMaskBoundary(mask, width, height, featherRadius !== void 0 && featherRadius > 0 ? Math.max(1, Math.min(8, Math.round(featherRadius * 50))) : 2);\n}\nfunction maskCentroid(mask) {\n\tconst { mask: data, width, height } = mask;\n\tlet sumX = 0;\n\tlet sumY = 0;\n\tlet count = 0;\n\tfor (let y = 0; y < height; y++) {\n\t\tconst row = y * width;\n\t\tfor (let x = 0; x < width; x++) if (data[row + x] > 0) {\n\t\t\tsumX += x;\n\t\t\tsumY += y;\n\t\t\tcount++;\n\t\t}\n\t}\n\tif (count === 0) return {\n\t\tcx: 0,\n\t\tcy: 0\n\t};\n\treturn {\n\t\tcx: sumX / count,\n\t\tcy: sumY / count\n\t};\n}\nconst YoloWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetWidth, targetHeight, props, drawChild } = args;\n\tconst { virtualMedia } = props;\n\tconst rawOp = virtualMedia?.operation;\n\tif (!rawOp) return;\n\tconst op = normalizeOperation(rawOp);\n\tif (!op) return;\n\tpass.end();\n\tconst childMedia = virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tconst effectKey = op.effect;\n\tconst hasEffectKey = effectKey !== void 0 && effectKey !== null;\n\tconst nodeKeyStr = virtualMedia?.id ?? rawOp?.id ?? `${targetWidth}x${targetHeight}_${op.mode}_${op.variant}_${op.keyBackground}_${op.backgroundKeyThreshold}`;\n\tconst fallbackKey = `yolo-${nodeKeyStr}`;\n\tlet childTex = hasEffectKey ? yoloChildTexturesByEffect.get(effectKey) : yoloChildTexturesByKey.get(fallbackKey);\n\tif (childTex && (childTex.width !== targetWidth || childTex.height !== targetHeight)) {\n\t\tchildTex.destroy();\n\t\tchildTex = void 0;\n\t\tif (hasEffectKey) yoloChildTexturesByEffect.delete(effectKey);\n\t\telse yoloChildTexturesByKey.delete(fallbackKey);\n\t}\n\tconst hasPreviousFrame = childTex !== void 0;\n\tif (!childTex) {\n\t\tchildTex = ctx.device.createTexture({\n\t\t\tsize: [targetWidth, targetHeight],\n\t\t\tformat: ctx.renderer.format,\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC,\n\t\t\tlabel: \"yolo_child_persistent\"\n\t\t});\n\t\tif (hasEffectKey) yoloChildTexturesByEffect.set(effectKey, childTex);\n\t\telse yoloChildTexturesByKey.set(fallbackKey, childTex);\n\t\tif (yoloChildTexturesByKey.size > 4) {\n\t\t\tconst oldest = yoloChildTexturesByKey.keys().next().value;\n\t\t\tif (oldest && oldest !== fallbackKey) {\n\t\t\t\tyoloChildTexturesByKey.get(oldest)?.destroy();\n\t\t\t\tyoloChildTexturesByKey.delete(oldest);\n\t\t\t}\n\t\t}\n\t}\n\tlet framePixels = null;\n\tif (hasPreviousFrame) {\n\t\tconst unalignedBytesPerRow = targetWidth * 4;\n\t\tconst bytesPerRow = Math.ceil(unalignedBytesPerRow / 256) * 256;\n\t\tconst bufferSize = bytesPerRow * targetHeight;\n\t\tconst stagingBuffer = ctx.device.createBuffer({\n\t\t\tsize: bufferSize,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n\t\t\tlabel: \"yolo_frame_staging\"\n\t\t});\n\t\tconst readbackEncoder = ctx.device.createCommandEncoder({ label: \"yolo_readback_encoder\" });\n\t\treadbackEncoder.copyTextureToBuffer({ texture: childTex }, {\n\t\t\tbuffer: stagingBuffer,\n\t\t\tbytesPerRow,\n\t\t\trowsPerImage: targetHeight\n\t\t}, [\n\t\t\ttargetWidth,\n\t\t\ttargetHeight,\n\t\t\t1\n\t\t]);\n\t\tctx.device.queue.submit([readbackEncoder.finish()]);\n\t\tawait stagingBuffer.mapAsync(GPUMapMode.READ);\n\t\tconst mappedBytes = new Uint8Array(stagingBuffer.getMappedRange());\n\t\tframePixels = new Uint8ClampedArray(targetWidth * targetHeight * 4);\n\t\tif (bytesPerRow === unalignedBytesPerRow) framePixels.set(mappedBytes.subarray(0, framePixels.length));\n\t\telse for (let y = 0; y < targetHeight; y++) framePixels.set(mappedBytes.subarray(y * bytesPerRow, y * bytesPerRow + unalignedBytesPerRow), y * unalignedBytesPerRow);\n\t\tstagingBuffer.unmap();\n\t\tstagingBuffer.destroy();\n\t}\n\tconst childView = childTex.createView();\n\tctx.renderer.beginFrame(encoder, childView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"clear\").end();\n\tawait drawChild(childMedia, { ...props }, childView, childTex, targetWidth, targetHeight);\n\tconst frameIdx = props.frame ?? 0;\n\tconst visionBundle = op.visionBundle ?? virtualMedia.visionBundle;\n\tconst runner = await getSharedRunner(op);\n\tconst image = framePixels ? {\n\t\tdata: framePixels,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t} : null;\n\tif (image && op.mode !== \"obb\" && (op.enableDetection !== false || op.mode === \"boxes\" || op.mode === \"tracking\")) {\n\t\tconst detections = await runner.detect(image);\n\t\tconst tracker = getSharedObjectTracker(op);\n\t\tif (frameIdx === 0) tracker.reset();\n\t\tconst tracked = tracker.update(detections, frameIdx, props.fps ?? 24);\n\t\tvisionBundle?.setObjectResult(frameIdx, {\n\t\t\tobjects: tracked,\n\t\t\trawDetections: detections\n\t\t});\n\t}\n\tconst needsSegmentation = op.enableSegmentation === true || op.mode === \"mask\" || op.mode === \"matte\" || op.mode === \"crop\";\n\tlet frameMasks = [];\n\tif (image && needsSegmentation) {\n\t\tconst segRes = await runner.segment(image);\n\t\tconst tracked = visionBundle?.getObjectResult(frameIdx).objects ?? [];\n\t\tframeMasks = assignMasksToTracks(segRes.masks, tracked);\n\t\tvisionBundle?.setMaskResult(frameIdx, frameMasks);\n\t}\n\tlet currentPoseRes;\n\tif (image && (op.enablePose === true || op.mode === \"skeleton\")) {\n\t\tconst normalized = normalizePoseKeypoints(await runner.pose(image), image.width, image.height);\n\t\tconst tracked = visionBundle?.getObjectResult(frameIdx).objects ?? [];\n\t\tcurrentPoseRes = { people: matchPoseToTracks(normalized.people, tracked) };\n\t\tvisionBundle?.setPoseResult(frameIdx, currentPoseRes);\n\t}\n\tif (image && op.enableClassification === true) {\n\t\tconst classifyRes = await runner.classify(image);\n\t\tvisionBundle?.setClassifyResult(frameIdx, classifyRes);\n\t}\n\tif (image && (op.enableObb === true || op.mode === \"obb\")) {\n\t\tconst obbRes = await runner.detectObb(image);\n\t\tvisionBundle?.setObbResult(frameIdx, obbRes);\n\t\tconst detections = obbRes.detections.map((d) => ({\n\t\t\tcategory: d.category,\n\t\t\tscore: d.score,\n\t\t\tboundingBox: d.boundingBox\n\t\t}));\n\t\tconst tracker = getSharedObjectTracker(op);\n\t\tif (frameIdx === 0) tracker.reset();\n\t\tconst tracked = tracker.update(detections, frameIdx, props.fps ?? 24);\n\t\tvisionBundle?.setObjectResult(frameIdx, {\n\t\t\tobjects: tracked,\n\t\t\trawDetections: detections\n\t\t});\n\t}\n\tconst mode = op.mode ?? \"passthrough\";\n\tif (mode === \"mask\" || mode === \"matte\" || mode === \"crop\") {\n\t\tif (!sharedTexturePool) sharedTexturePool = new SegmentationTexturePool(ctx.device);\n\t\tconst selected = selectSubjectMask(frameMasks.length > 0 ? frameMasks : visionBundle?.getMaskResult(frameIdx) ?? []);\n\t\tlet subject;\n\t\tconst lastSubjectEntry = lastSubjectByNode.get(nodeKeyStr);\n\t\tconst lastSubjectMask = lastSubjectEntry?.mask ?? null;\n\t\tconst lastSubjectFrame = lastSubjectEntry?.frame ?? Number.NEGATIVE_INFINITY;\n\t\tif (selected) {\n\t\t\tsubject = selected;\n\t\t\tlastSubjectByNode.set(nodeKeyStr, {\n\t\t\t\tmask: selected,\n\t\t\t\tframe: frameIdx\n\t\t\t});\n\t\t} else if (lastSubjectMask && frameIdx - lastSubjectFrame <= SUBJECT_HOLD_FRAMES) subject = lastSubjectMask;\n\t\tif (!subject || !framePixels) {\n\t\t\tctx.renderer.beginFrame(encoder, targetView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, targetWidth, targetHeight, \"clear\").end();\n\t\t\treturn;\n\t\t}\n\t\tif (op.keyBackground === true) {\n\t\t\tconst rawThreshold = op.backgroundKeyThreshold;\n\t\t\tconst threshold = typeof rawThreshold === \"number\" ? rawThreshold : typeof rawThreshold?.get === \"function\" ? Number(rawThreshold.get({\n\t\t\t\tframe: frameIdx,\n\t\t\t\tfps: props.fps ?? 30\n\t\t\t})) : typeof rawThreshold?._value === \"number\" ? Number(rawThreshold._value) : 70;\n\t\t\tconst grownMask = growMaskIntoForeground(subject.mask, subject.width, subject.height, framePixels, threshold, op.featherRadius);\n\t\t\tsubject = {\n\t\t\t\t...subject,\n\t\t\t\tmask: grownMask\n\t\t\t};\n\t\t}\n\t\tconst maskTex = uploadComposite(sharedTexturePool, mode, subject, framePixels, targetWidth, targetHeight, frameIdx, nodeKeyStr);\n\t\tvisionBundle?.setStencilTexture(maskTex);\n\t\tconst outPass$1 = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"clear\");\n\t\tctx.renderer.drawTexture(outPass$1, maskTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight\n\t\t});\n\t\toutPass$1.end();\n\t\treturn;\n\t}\n\tif (mode === \"skeleton\") {\n\t\tif (!sharedSkeletonRenderer) sharedSkeletonRenderer = new PoseSkeletonRenderer(ctx.device);\n\t\tconst person = (visionBundle?.getPoseResult(frameIdx) ?? currentPoseRes)?.people[0];\n\t\tif (person && person.keypoints.length > 0) {\n\t\t\tconst skelTex = sharedSkeletonRenderer.renderToTexture(person.keypoints, {\n\t\t\t\twidth: targetWidth,\n\t\t\t\theight: targetHeight\n\t\t\t});\n\t\t\tconst skelPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\t\tr: 0,\n\t\t\t\tg: 0,\n\t\t\t\tb: 0,\n\t\t\t\ta: 0\n\t\t\t}, targetWidth, targetHeight, \"clear\");\n\t\t\tctx.renderer.drawTexture(skelPass, skelTex, {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: targetWidth,\n\t\t\t\theight: targetHeight\n\t\t\t});\n\t\t\tskelPass.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tif (mode === \"obb\") {\n\t\tconst outPass$1 = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"clear\");\n\t\tctx.renderer.drawTexture(outPass$1, childTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight\n\t\t});\n\t\tconst detections = visionBundle?.getObbResult(frameIdx).detections ?? [];\n\t\tconst obbColor = \"#f59e0b\";\n\t\tfor (const det of detections) {\n\t\t\tif (det.corners.length < 4) continue;\n\t\t\tconst path = det.corners.map((corner, i) => `${i === 0 ? \"M\" : \"L\"} ${corner[0]} ${corner[1]}`).join(\" \") + \" Z\";\n\t\t\ttry {\n\t\t\t\tctx.renderer.drawPath(outPass$1, path, obbColor, 2);\n\t\t\t} catch {\n\t\t\t\tconst b = det.boundingBox;\n\t\t\t\tctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: b.originX,\n\t\t\t\t\ty: b.originY,\n\t\t\t\t\twidth: b.width,\n\t\t\t\t\theight: b.height\n\t\t\t\t}, obbColor, 2);\n\t\t\t}\n\t\t}\n\t\toutPass$1.end();\n\t\treturn;\n\t}\n\tif (mode === \"boxes\" || mode === \"tracking\") {\n\t\tconst outPass$1 = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"clear\");\n\t\tctx.renderer.drawTexture(outPass$1, childTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: targetWidth,\n\t\t\theight: targetHeight\n\t\t});\n\t\tconst objRes = visionBundle?.getObjectResult(frameIdx);\n\t\tif (objRes && objRes.objects.length > 0) {\n\t\t\tconst boxColor = \"#38bdf8\";\n\t\t\tconst stroke = 2;\n\t\t\tfor (const obj of objRes.objects) {\n\t\t\t\tif (!obj.active) continue;\n\t\t\t\tconst b = obj.boundingBox;\n\t\t\t\tctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: b.originX,\n\t\t\t\t\ty: b.originY,\n\t\t\t\t\twidth: b.width,\n\t\t\t\t\theight: stroke\n\t\t\t\t}, boxColor);\n\t\t\t\tctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: b.originX,\n\t\t\t\t\ty: b.originY + b.height - stroke,\n\t\t\t\t\twidth: b.width,\n\t\t\t\t\theight: stroke\n\t\t\t\t}, boxColor);\n\t\t\t\tctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: b.originX,\n\t\t\t\t\ty: b.originY,\n\t\t\t\t\twidth: stroke,\n\t\t\t\t\theight: b.height\n\t\t\t\t}, boxColor);\n\t\t\t\tctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: b.originX + b.width - stroke,\n\t\t\t\t\ty: b.originY,\n\t\t\t\t\twidth: stroke,\n\t\t\t\t\theight: b.height\n\t\t\t\t}, boxColor);\n\t\t\t\tconst cornerLen = Math.min(16, b.width / 4, b.height / 4);\n\t\t\t\tctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: b.originX,\n\t\t\t\t\ty: b.originY,\n\t\t\t\t\twidth: cornerLen,\n\t\t\t\t\theight: stroke * 2\n\t\t\t\t}, \"#ffffff\");\n\t\t\t\tctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: b.originX,\n\t\t\t\t\ty: b.originY,\n\t\t\t\t\twidth: stroke * 2,\n\t\t\t\t\theight: cornerLen\n\t\t\t\t}, \"#ffffff\");\n\t\t\t\tif (mode === \"tracking\") ctx.renderer.drawRect(outPass$1, {\n\t\t\t\t\tx: obj.centerX - 3,\n\t\t\t\t\ty: obj.centerY - 3,\n\t\t\t\t\twidth: 6,\n\t\t\t\t\theight: 6\n\t\t\t\t}, \"#ef4444\", 3);\n\t\t\t}\n\t\t}\n\t\toutPass$1.end();\n\t\treturn;\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"clear\");\n\tctx.renderer.drawTexture(outPass, childTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t});\n\toutPass.end();\n};\n/**\n* Builds the RGBA output bytes for mask-family modes from pixels we already hold:\n* - mask: white silhouette (r=g=b=mask, a=255)\n* - matte: child pixels × subject mask (isolate)\n* - crop: matte, fitted to the subject bounding box\n*/\nfunction uploadComposite(pool, mode, subject, framePixels, width, height, frameIdx, nodeKeyStr = \"default\") {\n\tconst mask = subject.mask;\n\tconst out = new Uint8Array(width * height * 4);\n\tfor (let i = 0; i < mask.length; i++) {\n\t\tconst a = mask[i];\n\t\tconst px = i * 4;\n\t\tif (mode === \"mask\") {\n\t\t\tout[px] = a;\n\t\t\tout[px + 1] = a;\n\t\t\tout[px + 2] = a;\n\t\t\tout[px + 3] = 255;\n\t\t} else {\n\t\t\tconst alpha = framePixels[px + 3] * a >> 8;\n\t\t\tout[px] = framePixels[px] * alpha >> 8;\n\t\t\tout[px + 1] = framePixels[px + 1] * alpha >> 8;\n\t\t\tout[px + 2] = framePixels[px + 2] * alpha >> 8;\n\t\t\tout[px + 3] = alpha;\n\t\t}\n\t}\n\tconst key = `yolo_composite_${nodeKeyStr}_${mode}_${frameIdx}`;\n\tconst tex = pool.uploadMask(key, out, width, height);\n\tif (mode === \"crop\") {\n\t\tconst box = subjectBoundingBox(subject);\n\t\tif (box) {\n\t\t\tconst cropW = Math.max(1, Math.round(box.width));\n\t\t\tconst cropH = Math.max(1, Math.round(box.height));\n\t\t\tconst crop = new Uint8Array(width * height * 4);\n\t\t\tfor (let y = 0; y < height; y++) {\n\t\t\t\tconst srcY = Math.min(cropH - 1, Math.max(0, Math.round(y / height * cropH)));\n\t\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\t\tconst srcX = Math.min(cropW - 1, Math.max(Math.round(x / width * cropW)));\n\t\t\t\t\tconst srcIdx = (srcY * width + srcX) * 4;\n\t\t\t\t\tconst dstIdx = (y * width + x) * 4;\n\t\t\t\t\tcrop[dstIdx] = out[srcIdx];\n\t\t\t\t\tcrop[dstIdx + 1] = out[srcIdx + 1];\n\t\t\t\t\tcrop[dstIdx + 2] = out[srcIdx + 2];\n\t\t\t\t\tcrop[dstIdx + 3] = out[srcIdx + 3];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn pool.uploadMask(`yolo_crop_${frameIdx}`, crop, width, height);\n\t\t}\n\t}\n\treturn tex;\n}\nfunction subjectBoundingBox(subject) {\n\tconst { mask, width } = subject;\n\tlet minX = width;\n\tlet minY = Infinity;\n\tlet maxX = -1;\n\tlet maxY = -1;\n\tfor (let y = 0; y < subject.height; y++) for (let x = 0; x < width; x++) if (mask[y * width + x] > 0) {\n\t\tif (x < minX) minX = x;\n\t\tif (x > maxX) maxX = x;\n\t\tif (y < minY) minY = y;\n\t\tif (y > maxY) maxY = y;\n\t}\n\tif (maxX < minX || maxY < minY) return null;\n\treturn {\n\t\twidth: maxX - minX + 1,\n\t\theight: maxY - minY + 1\n\t};\n}\n/**\n* Legacy-compat: accepts a `MediaPipe` operation (from compositions targeting the old\n* node) and maps its flags onto the YOLO config — pose, object tracking, segmentation,\n* and passthrough/mask/skeleton/boxes/tracking modes all carry over.\n*/\nfunction normalizeOperation(raw) {\n\tif (raw.op === \"Yolo\") return raw;\n\tif (raw.op === \"MediaPipe\") {\n\t\tconst legacy = raw;\n\t\treturn {\n\t\t\t...raw,\n\t\t\top: \"Yolo\",\n\t\t\tenableDetection: legacy.enableObjectTracking === true || legacy.mode === \"boxes\" || legacy.mode === \"tracking\",\n\t\t\tenablePose: legacy.enablePoseLandmarks === true || legacy.mode === \"skeleton\",\n\t\t\tenableSegmentation: legacy.enableSegmentation === true || legacy.mode === \"mask\" || legacy.mode === \"matte\",\n\t\t\tconfidence: legacy.objectScoreThreshold ?? .25,\n\t\t\tiouThreshold: legacy.iouThreshold ?? .45,\n\t\t\tclasses: legacy.objectCategories ?? void 0,\n\t\t\tmodelsDir: legacy.modelsDir ?? void 0\n\t\t};\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: YoloWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-mupYaxMa.mjs.map","import { isSignal } from \"@gitframes/core\";\n\n/** Literal metadata for one prop, emitted into `generated/meta.ts`. */\nexport interface PropMeta {\n\treadonly min?: number;\n\treadonly max?: number;\n\treadonly enum?: readonly (string | number | boolean)[];\n\t/** Members of a nested object prop. */\n\treadonly props?: EffectMeta;\n}\n\nexport type EffectMeta = Readonly<Record<string, PropMeta>>;\n\nfunction env(name: string): string | undefined {\n\treturn typeof process !== \"undefined\" ? process.env?.[name] : undefined;\n}\n\n/** Throw instead of warn. Recommended for agent harnesses and CI. */\nfunction isStrict(): boolean {\n\tconst flag = env(\"GITFRAMES_STRICT_PROPS\");\n\treturn flag === \"1\" || flag === \"true\";\n}\n\nfunction checksEnabled(): boolean {\n\treturn isStrict() || env(\"NODE_ENV\") !== \"production\";\n}\n\nconst reported = new Set<string>();\n\nfunction report(message: string): void {\n\tif (isStrict()) throw new Error(message);\n\tif (reported.has(message)) return;\n\treported.add(message);\n\tconsole.warn(`[gitframes] ${message}`);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (Array.isArray(value) || isSignal(value)) return false;\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n\n/** Levenshtein distance, for \"did you mean\" suggestions on small key sets. */\nfunction distance(a: string, b: string): number {\n\tconst row = Array.from({ length: b.length + 1 }, (_, i) => i);\n\tfor (let i = 1; i <= a.length; i++) {\n\t\tlet prev = row[0];\n\t\trow[0] = i;\n\t\tfor (let j = 1; j <= b.length; j++) {\n\t\t\tconst current = row[j];\n\t\t\trow[j] = Math.min(\n\t\t\t\trow[j] + 1,\n\t\t\t\trow[j - 1] + 1,\n\t\t\t\tprev + (a[i - 1] === b[j - 1] ? 0 : 1),\n\t\t\t);\n\t\t\tprev = current;\n\t\t}\n\t}\n\treturn row[b.length];\n}\n\nfunction suggest(key: string, known: readonly string[]): string {\n\tlet best: string | undefined;\n\tlet bestScore = Number.POSITIVE_INFINITY;\n\tconst lower = key.toLowerCase();\n\tfor (const candidate of known) {\n\t\tconst candidateLower = candidate.toLowerCase();\n\t\tconst score =\n\t\t\tcandidateLower.includes(lower) || lower.includes(candidateLower)\n\t\t\t\t? 1\n\t\t\t\t: distance(lower, candidateLower);\n\t\tif (score < bestScore) {\n\t\t\tbestScore = score;\n\t\t\tbest = candidate;\n\t\t}\n\t}\n\tconst close = best && bestScore <= Math.max(2, Math.ceil(key.length / 2));\n\treturn close\n\t\t? ` Did you mean \"${best}\"?`\n\t\t: ` Known props: ${known.join(\", \")}.`;\n}\n\nfunction checkValue(path: string, value: unknown, meta: PropMeta): void {\n\tif (typeof value === \"number\") {\n\t\tconst { min, max } = meta;\n\t\tconst below = min !== undefined && value < min;\n\t\tconst above = max !== undefined && value > max;\n\t\tif (below || above || Number.isNaN(value)) {\n\t\t\tconst range =\n\t\t\t\tmin !== undefined && max !== undefined\n\t\t\t\t\t? `${min} to ${max}`\n\t\t\t\t\t: min !== undefined\n\t\t\t\t\t\t? `≥ ${min}`\n\t\t\t\t\t\t: `≤ ${max}`;\n\t\t\treport(\n\t\t\t\tNumber.isNaN(value)\n\t\t\t\t\t? `${path} is NaN`\n\t\t\t\t\t: `${path} = ${value} is outside ${range}`,\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\tif (\n\t\tmeta.enum &&\n\t\t(typeof value === \"string\" || typeof value === \"boolean\") &&\n\t\t!meta.enum.includes(value)\n\t) {\n\t\treport(\n\t\t\t`${path} = ${JSON.stringify(value)} is not one of ${meta.enum\n\t\t\t\t.map((v) => JSON.stringify(v))\n\t\t\t\t.join(\", \")}`,\n\t\t);\n\t}\n}\n\nfunction checkProps(\n\tpath: string,\n\tconfig: Record<string, unknown>,\n\tmeta: EffectMeta,\n): void {\n\tconst known = Object.keys(meta);\n\tfor (const [key, value] of Object.entries(config)) {\n\t\tif (value === undefined) continue;\n\t\tconst propMeta = meta[key];\n\t\tif (!propMeta) {\n\t\t\treport(`${path}: unknown prop \"${key}\".${suggest(key, known)}`);\n\t\t\tcontinue;\n\t\t}\n\t\t// Signals and frame functions are sampled per frame; only static values\n\t\t// can be checked here.\n\t\tif (isSignal(value) || typeof value === \"function\") continue;\n\t\tif (propMeta.props && isPlainObject(value)) {\n\t\t\tcheckProps(`${path}.${key}`, value, propMeta.props);\n\t\t} else {\n\t\t\tcheckValue(`${path}.${key}`, value, propMeta);\n\t\t}\n\t}\n}\n\nfunction cloneDefault<T>(value: T): T {\n\treturn typeof value === \"object\" && value !== null\n\t\t? structuredClone(value)\n\t\t: value;\n}\n\n/**\n * Builds the initial config of a generated effect class.\n *\n * - `undefined` entries in `config` keep the default instead of overwriting it.\n * - When both the default and the supplied value are plain objects, they are\n * merged one level deep, so `new ColorBalance({ shadows: { cyanRed: 10 } })`\n * keeps the other two channels at their defaults.\n * - Object defaults are cloned per instance.\n * - Outside production, unknown props and out-of-range static values are\n * reported: a `console.warn` once per message, or a thrown `Error` when\n * `GITFRAMES_STRICT_PROPS=1`. Unknown props are still passed through.\n */\nexport function withDefaults<T extends object>(\n\top: string,\n\tdefaults: Readonly<Partial<T>>,\n\tconfig: T,\n\tmeta: EffectMeta,\n): T {\n\tconst supplied = config as Record<string, unknown>;\n\tif (checksEnabled()) checkProps(op, supplied, meta);\n\n\tconst result: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(defaults)) {\n\t\tresult[key] = cloneDefault(value);\n\t}\n\tfor (const [key, value] of Object.entries(supplied)) {\n\t\tif (value === undefined) continue;\n\t\tconst base = result[key];\n\t\tresult[key] =\n\t\t\tisPlainObject(base) && isPlainObject(value)\n\t\t\t\t? {\n\t\t\t\t\t\t...base,\n\t\t\t\t\t\t...Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(value).filter(([, v]) => v !== undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t}\n\t\t\t\t: value;\n\t}\n\treturn result as T;\n}\n","// @generated by scripts/generate-effects.mts — do not edit.\n// Source of truth: nodes/*/package.json (`gitframes`) and nodes/*/src/shared/config.ts.\n// Regenerate with `pnpm run generate:effects`.\n\nimport type { EffectMeta } from \"../with-defaults.js\";\n\n/** Ranges and allowed values per effect prop, used by `withDefaults()` checks. */\nexport const effectMeta = {\n\tBlur: {\n\t\tblurType: {\n\t\t\tenum: [\n\t\t\t\t\"Gaussian\",\n\t\t\t\t\"Box\",\n\t\t\t\t\"Median\",\n\t\t\t\t\"Motion\",\n\t\t\t\t\"Bilateral\",\n\t\t\t\t\"Edge-preserving\",\n\t\t\t\t\"Radial\",\n\t\t\t\t\"Zoom\",\n\t\t\t],\n\t\t},\n\t\tstrength: {\n\t\t\tmin: 0,\n\t\t\tmax: 100,\n\t\t},\n\t\tangle: {\n\t\t\tmin: 0,\n\t\t\tmax: 360,\n\t\t},\n\t\tsigmaColor: {\n\t\t\tmin: 0.01,\n\t\t\tmax: 1,\n\t\t},\n\t\tcenterX: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tcenterY: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tpartialBlur: {},\n\t\tradius: {\n\t\t\tmin: 0.01,\n\t\t\tmax: 1,\n\t\t},\n\t\tradiusY: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tshape: {\n\t\t\tenum: [\"ellipse\", \"circle\", \"rect\"],\n\t\t},\n\t},\n\tColorBalance: {\n\t\tshadows: {\n\t\t\tprops: {\n\t\t\t\tcyanRed: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t\tmagentaGreen: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t\tyellowBlue: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tmidtones: {\n\t\t\tprops: {\n\t\t\t\tcyanRed: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t\tmagentaGreen: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t\tyellowBlue: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\thighlights: {\n\t\t\tprops: {\n\t\t\t\tcyanRed: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t\tmagentaGreen: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t\tyellowBlue: {\n\t\t\t\t\tmin: -100,\n\t\t\t\t\tmax: 100,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tpreserveLuminosity: {},\n\t},\n\tColorKey: {\n\t\tkeyColor: {},\n\t\tsimilarity: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tsmoothness: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tspillSuppression: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tcolorSpace: {\n\t\t\tenum: [\"YUV\", \"RGB\"],\n\t\t},\n\t\tspillSuppressionType: {\n\t\t\tenum: [\"Desaturate\", \"Neutralize\", \"None\"],\n\t\t},\n\t},\n\tVignette: {\n\t\tstrength: {\n\t\t\tmin: 0,\n\t\t\tmax: 100,\n\t\t},\n\t\tradius: {\n\t\t\tmin: 0.1,\n\t\t\tmax: 2,\n\t\t},\n\t\tsoftness: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\troundness: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tcenterX: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t\tcenterY: {\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t},\n\t},\n} as const satisfies Record<string, EffectMeta>;\n","// @generated by scripts/generate-effects.mts — do not edit.\n// Source of truth: nodes/*/package.json (`gitframes`) and nodes/*/src/shared/config.ts.\n// Regenerate with `pnpm run generate:effects`.\n\nimport { Effect } from \"@gitframes/core\";\nimport type { EffectProp } from \"../types.js\";\nimport { withDefaults } from \"../with-defaults.js\";\nimport { effectMeta } from \"./meta.js\";\n\nexport interface TonalShift {\n\t/**\n\t * Range -100 to 100.\n\t * @default 0\n\t */\n\tcyanRed: number;\n\t/**\n\t * Range -100 to 100.\n\t * @default 0\n\t */\n\tmagentaGreen: number;\n\t/**\n\t * Range -100 to 100.\n\t * @default 0\n\t */\n\tyellowBlue: number;\n}\n\nexport interface BlurBaseProps {\n\t/**\n\t * Blur Type\n\t * @default \"Gaussian\"\n\t */\n\tblurType?:\n\t\t| \"Gaussian\"\n\t\t| \"Box\"\n\t\t| \"Median\"\n\t\t| \"Motion\"\n\t\t| \"Bilateral\"\n\t\t| \"Edge-preserving\"\n\t\t| \"Radial\"\n\t\t| \"Zoom\";\n\t/**\n\t * The intensity of the blur. 0 = no blur. Can be modulated by a static number or a dynamic signal.\n\t * Range 0 to 100. Accepts a signal.\n\t * @default 5\n\t */\n\tstrength?: EffectProp<number>;\n\t/**\n\t * Direction of a Motion blur, in degrees.\n\t * Range 0 to 360. Accepts a signal.\n\t * @default 0\n\t */\n\tangle?: EffectProp<number>;\n\t/**\n\t * Sigma value for color space in Bilateral / Edge-preserving blurs. Can be modulated by a static number or a dynamic signal.\n\t * Range 0.01 to 1. Accepts a signal.\n\t * @default 0.1\n\t */\n\tsigmaColor?: EffectProp<number>;\n\t/**\n\t * The X coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.5\n\t */\n\tcenterX?: EffectProp<number>;\n\t/**\n\t * The Y coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.5\n\t */\n\tcenterY?: EffectProp<number>;\n\t/**\n\t * Blurs only a specific circular area around center point.\n\t * Accepts a signal.\n\t * @default false\n\t */\n\tpartialBlur?: EffectProp<boolean>;\n\t/**\n\t * Radius of the partial blur region (0.01 to 1.0). Can be modulated by a static number or a dynamic signal.\n\t * Range 0.01 to 1. Accepts a signal.\n\t * @default 0.3\n\t */\n\tradius?: EffectProp<number>;\n\t/**\n\t * Vertical radius of the partial blur region (0 to 1.0). 0 reuses the horizontal radius.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0\n\t */\n\tradiusY?: EffectProp<number>;\n\t/**\n\t * Shape of the partial blur region.\n\t * @default \"circle\"\n\t */\n\tshape?: \"ellipse\" | \"circle\" | \"rect\";\n}\n\nconst blurDefaults: BlurBaseProps = {\n\tblurType: \"Gaussian\",\n\tstrength: 5,\n\tangle: 0,\n\tsigmaColor: 0.1,\n\tcenterX: 0.5,\n\tcenterY: 0.5,\n\tpartialBlur: false,\n\tradius: 0.3,\n\tradiusY: 0,\n\tshape: \"circle\",\n};\n\n/** @internal Extended by `effects/custom/blur.ts`, which exports `Blur`. */\nexport class BlurBase extends Effect<BlurBaseProps> {\n\tpublic readonly op = \"Blur\";\n\n\tpublic declare blurType:\n\t\t| \"Gaussian\"\n\t\t| \"Box\"\n\t\t| \"Median\"\n\t\t| \"Motion\"\n\t\t| \"Bilateral\"\n\t\t| \"Edge-preserving\"\n\t\t| \"Radial\"\n\t\t| \"Zoom\";\n\tpublic declare strength: number;\n\tpublic declare angle: number;\n\tpublic declare sigmaColor: number;\n\tpublic declare centerX: number;\n\tpublic declare centerY: number;\n\tpublic declare partialBlur: boolean;\n\tpublic declare radius: number;\n\tpublic declare radiusY: number;\n\tpublic declare shape: \"ellipse\" | \"circle\" | \"rect\";\n\n\tconstructor(config: BlurBaseProps = {}) {\n\t\tsuper(withDefaults(\"Blur\", blurDefaults, config, effectMeta.Blur));\n\t}\n}\n\nexport interface ColorBalanceProps {\n\t/**\n\t * @default {\"cyanRed\":0,\"magentaGreen\":0,\"yellowBlue\":0}\n\t */\n\tshadows?: Partial<TonalShift>;\n\t/**\n\t * @default {\"cyanRed\":0,\"magentaGreen\":0,\"yellowBlue\":0}\n\t */\n\tmidtones?: Partial<TonalShift>;\n\t/**\n\t * @default {\"cyanRed\":0,\"magentaGreen\":0,\"yellowBlue\":0}\n\t */\n\thighlights?: Partial<TonalShift>;\n\t/**\n\t * @default true\n\t */\n\tpreserveLuminosity?: boolean;\n}\n\nconst colorBalanceDefaults: ColorBalanceProps = {\n\tshadows: { cyanRed: 0, magentaGreen: 0, yellowBlue: 0 },\n\tmidtones: { cyanRed: 0, magentaGreen: 0, yellowBlue: 0 },\n\thighlights: { cyanRed: 0, magentaGreen: 0, yellowBlue: 0 },\n\tpreserveLuminosity: true,\n};\n\nexport class ColorBalance extends Effect<ColorBalanceProps> {\n\tpublic readonly op = \"ColorBalance\";\n\n\tpublic declare shadows: Partial<TonalShift>;\n\tpublic declare midtones: Partial<TonalShift>;\n\tpublic declare highlights: Partial<TonalShift>;\n\tpublic declare preserveLuminosity: boolean;\n\n\tconstructor(config: ColorBalanceProps = {}) {\n\t\tsuper(\n\t\t\twithDefaults(\n\t\t\t\t\"ColorBalance\",\n\t\t\t\tcolorBalanceDefaults,\n\t\t\t\tconfig,\n\t\t\t\teffectMeta.ColorBalance,\n\t\t\t),\n\t\t);\n\t}\n}\n\nexport interface ColorKeyProps {\n\t/**\n\t * Key Color\n\t * @default \"#00ff00\"\n\t */\n\tkeyColor?: string;\n\t/**\n\t * How close the color must be to the Key Color to be removed.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.4\n\t */\n\tsimilarity?: EffectProp<number>;\n\t/**\n\t * The softness of the transparency edge.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.1\n\t */\n\tsmoothness?: EffectProp<number>;\n\t/**\n\t * Amount of key color spill to remove from foreground edges.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.2\n\t */\n\tspillSuppression?: EffectProp<number>;\n\t/**\n\t * Color space used to calculate similarity distance.\n\t * @default \"YUV\"\n\t */\n\tcolorSpace?: \"YUV\" | \"RGB\";\n\t/**\n\t * How key color spill is suppressed on foreground edges.\n\t * @default \"Desaturate\"\n\t */\n\tspillSuppressionType?: \"Desaturate\" | \"Neutralize\" | \"None\";\n}\n\nconst colorKeyDefaults: ColorKeyProps = {\n\tkeyColor: \"#00ff00\",\n\tsimilarity: 0.4,\n\tsmoothness: 0.1,\n\tspillSuppression: 0.2,\n\tcolorSpace: \"YUV\",\n\tspillSuppressionType: \"Desaturate\",\n};\n\nexport class ColorKey extends Effect<ColorKeyProps> {\n\tpublic readonly op = \"ColorKey\";\n\n\tpublic declare keyColor: string;\n\tpublic declare similarity: number;\n\tpublic declare smoothness: number;\n\tpublic declare spillSuppression: number;\n\tpublic declare colorSpace: \"YUV\" | \"RGB\";\n\tpublic declare spillSuppressionType: \"Desaturate\" | \"Neutralize\" | \"None\";\n\n\tconstructor(config: ColorKeyProps = {}) {\n\t\tsuper(\n\t\t\twithDefaults(\"ColorKey\", colorKeyDefaults, config, effectMeta.ColorKey),\n\t\t);\n\t}\n}\n\nexport interface VignetteProps {\n\t/**\n\t * The intensity of the vignette darkening effect. 0 = no vignette.\n\t * Range 0 to 100. Accepts a signal.\n\t * @default 50\n\t */\n\tstrength?: EffectProp<number>;\n\t/**\n\t * The extent/size of the vignette.\n\t * Range 0.1 to 2. Accepts a signal.\n\t * @default 1\n\t */\n\tradius?: EffectProp<number>;\n\t/**\n\t * The softness of the vignette transition edge.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.5\n\t */\n\tsoftness?: EffectProp<number>;\n\t/**\n\t * 0.0 matches the image aspect ratio, 1.0 is a perfect circle.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.5\n\t */\n\troundness?: EffectProp<number>;\n\t/**\n\t * The X coordinate of the vignette center.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.5\n\t */\n\tcenterX?: EffectProp<number>;\n\t/**\n\t * The Y coordinate of the vignette center.\n\t * Range 0 to 1. Accepts a signal.\n\t * @default 0.5\n\t */\n\tcenterY?: EffectProp<number>;\n}\n\nconst vignetteDefaults: VignetteProps = {\n\tstrength: 50,\n\tradius: 1,\n\tsoftness: 0.5,\n\troundness: 0.5,\n\tcenterX: 0.5,\n\tcenterY: 0.5,\n};\n\nexport class Vignette extends Effect<VignetteProps> {\n\tpublic readonly op = \"Vignette\";\n\n\tpublic declare strength: number;\n\tpublic declare radius: number;\n\tpublic declare softness: number;\n\tpublic declare roundness: number;\n\tpublic declare centerX: number;\n\tpublic declare centerY: number;\n\n\tconstructor(config: VignetteProps = {}) {\n\t\tsuper(\n\t\t\twithDefaults(\"Vignette\", vignetteDefaults, config, effectMeta.Vignette),\n\t\t);\n\t}\n}\n","import type { ObjectTrackSignals } from \"@gitframes/yolo\";\nimport { BlurBase, type BlurBaseProps } from \"../generated/classes.js\";\n\nexport interface BlurProps extends BlurBaseProps {\n\t/**\n\t * Follow a tracked object. Turns on `partialBlur` and derives the region\n\t * (`centerX`, `centerY`, `radius`, `radiusY`, `shape`) and `strength` from\n\t * the track. Any of those passed explicitly wins over the track.\n\t */\n\ttrack?: ObjectTrackSignals;\n}\n\n/** Props the track supplies when the caller does not. */\nfunction trackDefaults(track: ObjectTrackSignals): BlurBaseProps {\n\treturn {\n\t\tpartialBlur: true,\n\t\tcenterX: track.center.x,\n\t\tcenterY: track.center.y,\n\t\tradius: track.bounds.width.multiply(0.55),\n\t\tradiusY: track.bounds.height.multiply(0.55),\n\t\tshape: \"ellipse\",\n\t\t// Fades the blur out while the object is not being tracked.\n\t\tstrength: track.active.multiply(25),\n\t};\n}\n\n/**\n * Blur effect. Props, defaults and ranges are generated from `node-blur`'s\n * schema ({@link BlurBase}); this subclass only adds `track`.\n */\nexport class Blur extends BlurBase {\n\tconstructor(config: BlurProps = {}) {\n\t\tconst { track, ...rest } = config;\n\t\tsuper(track ? { ...trackDefaults(track), ...definedOnly(rest) } : rest);\n\t}\n}\n\nfunction definedOnly<T extends object>(value: T): T {\n\treturn Object.fromEntries(\n\t\tObject.entries(value).filter(([, v]) => v !== undefined),\n\t) as T;\n}\n","// @generated by scripts/generate-effects.mts — do not edit.\n// Source of truth: nodes/*/package.json (`gitframes`) and nodes/*/src/shared/config.ts.\n// Regenerate with `pnpm run generate:effects`.\n\nimport { Blur, type BlurProps } from \"../custom/blur.js\";\nimport {\n\tColorBalance,\n\ttype ColorBalanceProps,\n\tColorKey,\n\ttype ColorKeyProps,\n\tVignette,\n\ttype VignetteProps,\n} from \"./classes.js\";\n\n/** `Effect.<factory>(config)` helpers, one per generated effect class. */\nexport const effectFactories = {\n\tblur: (config?: BlurProps) => new Blur(config),\n\tcolorBalance: (config?: ColorBalanceProps) => new ColorBalance(config),\n\tcolorKey: (config?: ColorKeyProps) => new ColorKey(config),\n\tvignette: (config?: VignetteProps) => new Vignette(config),\n} as const;\n","import { Effect } from \"@gitframes/core\";\nimport type { CustomModelConfig } from \"@gitframes/yolo\";\nimport {\n\tAudioSignal,\n\ttype AudioSignalOptions,\n\ttype ExtractedAudioSignalsBundle,\n} from \"../signals/audio.js\";\nimport type { EffectProp } from \"./types.js\";\n\n// Vignette, Blur and ColorBalance are generated from their node packages\n// (./generated, written by scripts/generate-effects.mts). The classes below\n// are still hand-written and move there in later phases of spec/sync-node.md.\nexport * from \"./generated/index.js\";\nexport type { EffectProp } from \"./types.js\";\n\nexport interface LevelChannel {\n\tinBlack?: number;\n\tinWhite?: number;\n\toutBlack?: number;\n\toutWhite?: number;\n}\n\nexport interface LevelsProps {\n\tmaster?: LevelChannel;\n\tred?: LevelChannel;\n\tgreen?: LevelChannel;\n\tblue?: LevelChannel;\n}\n\nexport class Levels extends Effect<LevelsProps> {\n\tpublic readonly op = \"Levels\";\n\n\tpublic declare master: LevelChannel;\n\tpublic declare red: LevelChannel;\n\tpublic declare green: LevelChannel;\n\tpublic declare blue: LevelChannel;\n\n\tconstructor(config: LevelsProps = {}) {\n\t\tconst defaultChannel: LevelChannel = {\n\t\t\tinBlack: 0,\n\t\t\tinWhite: 1,\n\t\t\toutBlack: 0,\n\t\t\toutWhite: 1,\n\t\t};\n\t\tsuper({\n\t\t\tmaster: config.master ?? { ...defaultChannel },\n\t\t\tred: config.red ?? { ...defaultChannel },\n\t\t\tgreen: config.green ?? { ...defaultChannel },\n\t\t\tblue: config.blue ?? { ...defaultChannel },\n\t\t\t...config,\n\t\t});\n\t}\n}\n\nexport interface FilmGrainProps {\n\tstrength?: EffectProp<number>;\n\tsize?: EffectProp<number>;\n\tmonochrome?: boolean;\n\tanimated?: boolean;\n\tspeed?: EffectProp<number>;\n\tshadows?: EffectProp<number>;\n\tmidtones?: EffectProp<number>;\n\thighlights?: EffectProp<number>;\n}\n\nexport class FilmGrain extends Effect<FilmGrainProps> {\n\tpublic readonly op = \"FilmGrain\";\n\n\tpublic declare strength: number;\n\tpublic declare size: number;\n\tpublic declare monochrome: boolean;\n\tpublic declare animated: boolean;\n\tpublic declare speed: number;\n\tpublic declare shadows: number;\n\tpublic declare midtones: number;\n\tpublic declare highlights: number;\n\n\tconstructor(config: FilmGrainProps = {}) {\n\t\tsuper({\n\t\t\tstrength: config.strength ?? 15,\n\t\t\tsize: config.size ?? 1.5,\n\t\t\tmonochrome: config.monochrome ?? true,\n\t\t\tanimated: config.animated ?? true,\n\t\t\tspeed: config.speed ?? 50,\n\t\t\tshadows: config.shadows ?? 0.2,\n\t\t\tmidtones: config.midtones ?? 1.0,\n\t\t\thighlights: config.highlights ?? 0.2,\n\t\t\t...config,\n\t\t});\n\t}\n}\n\nexport class CustomEffect extends Effect<Record<string, unknown>> {\n\tpublic readonly op: string;\n\n\tconstructor(opName: string, config: Record<string, unknown> = {}) {\n\t\tsuper(config);\n\t\tthis.op = opName;\n\t}\n}\n\nexport interface AudioSignalExtractorProps {\n\textractionMode?:\n\t\t| \"rms_envelope\"\n\t\t| \"transient_beat\"\n\t\t| \"sub_bass\"\n\t\t| \"bass\"\n\t\t| \"mid\"\n\t\t| \"high\"\n\t\t| \"spectral_flux\";\n\tattackMs?: number;\n\treleaseMs?: number;\n\tsensitivity?: number;\n\tnoiseFloorDb?: number;\n\tdynamicRangeDb?: number;\n\tautoRange?: boolean;\n\tsmoothing?: number;\n\tcurve?: \"linear\" | \"exponential\" | \"logarithmic\" | \"square\" | \"smoothstep\";\n\tbeatThreshold?: number;\n\tbeatDecayMs?: number;\n\tpreviewMode?: \"waveform\" | \"envelope\" | \"beat_markers\" | \"spectrum\";\n\tnodeId?: string;\n}\n\nexport class AudioSignalExtractor extends Effect<AudioSignalExtractorProps> {\n\tpublic readonly op = \"AudioSignalExtractor\";\n\n\tpublic declare extractionMode: AudioSignalExtractorProps[\"extractionMode\"];\n\tpublic declare attackMs: number;\n\tpublic declare releaseMs: number;\n\tpublic declare sensitivity: number;\n\tpublic declare noiseFloorDb: number;\n\tpublic declare dynamicRangeDb: number;\n\tpublic declare autoRange: boolean;\n\tpublic declare smoothing: number;\n\tpublic declare curve: AudioSignalExtractorProps[\"curve\"];\n\tpublic declare beatThreshold: number;\n\tpublic declare beatDecayMs: number;\n\tpublic declare previewMode: AudioSignalExtractorProps[\"previewMode\"];\n\tpublic declare nodeId: string;\n\n\tconstructor(config: AudioSignalExtractorProps = {}) {\n\t\tsuper({\n\t\t\textractionMode: config.extractionMode ?? \"rms_envelope\",\n\t\t\tattackMs: config.attackMs ?? 10,\n\t\t\treleaseMs: config.releaseMs ?? 120,\n\t\t\tsensitivity: config.sensitivity ?? 1.0,\n\t\t\tnoiseFloorDb: config.noiseFloorDb ?? -48,\n\t\t\tdynamicRangeDb: config.dynamicRangeDb ?? 48,\n\t\t\tautoRange: config.autoRange ?? true,\n\t\t\tsmoothing: config.smoothing ?? 0.15,\n\t\t\tcurve: config.curve ?? \"linear\",\n\t\t\tbeatThreshold: config.beatThreshold ?? 0.08,\n\t\t\tbeatDecayMs: config.beatDecayMs ?? 80,\n\t\t\tpreviewMode: config.previewMode ?? \"envelope\",\n\t\t\tnodeId: config.nodeId ?? \"audio_extractor\",\n\t\t\t...config,\n\t\t});\n\t}\n\n\tpublic async extract(\n\t\tsource: string,\n\t\toptions: Partial<AudioSignalOptions> = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\treturn AudioSignal.extract(source, {\n\t\t\textractionMode: this.extractionMode,\n\t\t\tattackMs: this.attackMs,\n\t\t\treleaseMs: this.releaseMs,\n\t\t\tsensitivity: this.sensitivity,\n\t\t\tnoiseFloorDb: this.noiseFloorDb,\n\t\t\tdynamicRangeDb: this.dynamicRangeDb,\n\t\t\tsmoothing: this.smoothing,\n\t\t\tcurve: this.curve,\n\t\t\tbeatThreshold: this.beatThreshold,\n\t\t\tbeatDecayMs: this.beatDecayMs,\n\t\t\tpreviewMode: this.previewMode,\n\t\t\t...options,\n\t\t});\n\t}\n}\n\n// ─── Batch 1: Core Tonal, Color & Filter Effects ────────────────────────────\n\nexport interface CurvesChannelPoint {\n\tx: number;\n\ty: number;\n}\n\nexport interface CurvesProps {\n\tcurveType?: \"rgb\" | \"hue-vs-hue\" | \"hue-vs-sat\" | \"lum-vs-sat\" | \"sat-vs-sat\";\n\tmaster?: CurvesChannelPoint[];\n\tred?: CurvesChannelPoint[];\n\tgreen?: CurvesChannelPoint[];\n\tblue?: CurvesChannelPoint[];\n\thueVsHue?: CurvesChannelPoint[];\n\thueVsSat?: CurvesChannelPoint[];\n\tlumVsSat?: CurvesChannelPoint[];\n\tsatVsSat?: CurvesChannelPoint[];\n}\n\nexport class Curves extends Effect<CurvesProps> {\n\tpublic readonly op = \"Curves\";\n\n\tpublic declare curveType: CurvesProps[\"curveType\"];\n\tpublic declare master: CurvesChannelPoint[];\n\tpublic declare red: CurvesChannelPoint[];\n\tpublic declare green: CurvesChannelPoint[];\n\tpublic declare blue: CurvesChannelPoint[];\n\tpublic declare hueVsHue: CurvesChannelPoint[];\n\tpublic declare hueVsSat: CurvesChannelPoint[];\n\tpublic declare lumVsSat: CurvesChannelPoint[];\n\tpublic declare satVsSat: CurvesChannelPoint[];\n\n\tconstructor(config: CurvesProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tcurveType: config.curveType ?? \"rgb\",\n\t\t\tmaster: config.master ?? [\n\t\t\t\t{ x: 0, y: 0 },\n\t\t\t\t{ x: 1, y: 1 },\n\t\t\t],\n\t\t\tred: config.red ?? [\n\t\t\t\t{ x: 0, y: 0 },\n\t\t\t\t{ x: 1, y: 1 },\n\t\t\t],\n\t\t\tgreen: config.green ?? [\n\t\t\t\t{ x: 0, y: 0 },\n\t\t\t\t{ x: 1, y: 1 },\n\t\t\t],\n\t\t\tblue: config.blue ?? [\n\t\t\t\t{ x: 0, y: 0 },\n\t\t\t\t{ x: 1, y: 1 },\n\t\t\t],\n\t\t\thueVsHue: config.hueVsHue ?? [\n\t\t\t\t{ x: 0, y: 0.5 },\n\t\t\t\t{ x: 1, y: 0.5 },\n\t\t\t],\n\t\t\thueVsSat: config.hueVsSat ?? [\n\t\t\t\t{ x: 0, y: 1.0 },\n\t\t\t\t{ x: 1, y: 1.0 },\n\t\t\t],\n\t\t\tlumVsSat: config.lumVsSat ?? [\n\t\t\t\t{ x: 0, y: 1.0 },\n\t\t\t\t{ x: 1, y: 1.0 },\n\t\t\t],\n\t\t\tsatVsSat: config.satVsSat ?? [\n\t\t\t\t{ x: 0, y: 1.0 },\n\t\t\t\t{ x: 1, y: 1.0 },\n\t\t\t],\n\t\t});\n\t}\n}\n\nexport interface SelectiveColorAdjustment {\n\tcyan: number;\n\tmagenta: number;\n\tyellow: number;\n\tblack: number;\n}\n\nexport interface SelectiveColorProps {\n\tmethod?: \"Relative\" | \"Absolute\";\n\treds?: Partial<SelectiveColorAdjustment>;\n\tyellows?: Partial<SelectiveColorAdjustment>;\n\tgreens?: Partial<SelectiveColorAdjustment>;\n\tcyans?: Partial<SelectiveColorAdjustment>;\n\tblues?: Partial<SelectiveColorAdjustment>;\n\tmagentas?: Partial<SelectiveColorAdjustment>;\n\twhites?: Partial<SelectiveColorAdjustment>;\n\tneutrals?: Partial<SelectiveColorAdjustment>;\n\tblacks?: Partial<SelectiveColorAdjustment>;\n}\n\nexport class SelectiveColor extends Effect<SelectiveColorProps> {\n\tpublic readonly op = \"SelectiveColor\";\n\n\tpublic declare method: \"Relative\" | \"Absolute\";\n\tpublic declare reds: SelectiveColorAdjustment;\n\tpublic declare yellows: SelectiveColorAdjustment;\n\tpublic declare greens: SelectiveColorAdjustment;\n\tpublic declare cyans: SelectiveColorAdjustment;\n\tpublic declare blues: SelectiveColorAdjustment;\n\tpublic declare magentas: SelectiveColorAdjustment;\n\tpublic declare whites: SelectiveColorAdjustment;\n\tpublic declare neutrals: SelectiveColorAdjustment;\n\tpublic declare blacks: SelectiveColorAdjustment;\n\n\tconstructor(config: SelectiveColorProps = {}) {\n\t\tconst defaultAdj: SelectiveColorAdjustment = {\n\t\t\tcyan: 0,\n\t\t\tmagenta: 0,\n\t\t\tyellow: 0,\n\t\t\tblack: 0,\n\t\t};\n\t\tsuper({\n\t\t\t...config,\n\t\t\tmethod: config.method ?? \"Relative\",\n\t\t\treds: { ...defaultAdj, ...config.reds },\n\t\t\tyellows: { ...defaultAdj, ...config.yellows },\n\t\t\tgreens: { ...defaultAdj, ...config.greens },\n\t\t\tcyans: { ...defaultAdj, ...config.cyans },\n\t\t\tblues: { ...defaultAdj, ...config.blues },\n\t\t\tmagentas: { ...defaultAdj, ...config.magentas },\n\t\t\twhites: { ...defaultAdj, ...config.whites },\n\t\t\tneutrals: { ...defaultAdj, ...config.neutrals },\n\t\t\tblacks: { ...defaultAdj, ...config.blacks },\n\t\t});\n\t}\n}\n\nexport interface GradientMapStop {\n\tposition: number;\n\tcolor: string;\n}\n\nexport interface GradientMapProps {\n\tstops?: GradientMapStop[];\n\tsmooth?: boolean;\n\tdither?: boolean;\n\topacity?: EffectProp<number>;\n}\n\nexport class GradientMap extends Effect<GradientMapProps> {\n\tpublic readonly op = \"GradientMap\";\n\n\tpublic declare stops: GradientMapStop[];\n\tpublic declare smooth: boolean;\n\tpublic declare dither: boolean;\n\tpublic declare opacity: number;\n\n\tconstructor(config: GradientMapProps = {}) {\n\t\tconst defaultStops: GradientMapStop[] = [\n\t\t\t{ position: 0.0, color: \"#000000\" },\n\t\t\t{ position: 1.0, color: \"#ffffff\" },\n\t\t];\n\t\tsuper({\n\t\t\t...config,\n\t\t\tstops: config.stops ?? defaultStops,\n\t\t\tsmooth: config.smooth ?? true,\n\t\t\tdither: config.dither ?? true,\n\t\t\topacity: config.opacity ?? 1.0,\n\t\t});\n\t}\n}\n\nexport interface ShadowsHighlightsProps {\n\tshadowAmount?: EffectProp<number>;\n\tshadowTonalWidth?: EffectProp<number>;\n\tshadowRadius?: EffectProp<number>;\n\thighlightAmount?: EffectProp<number>;\n\thighlightTonalWidth?: EffectProp<number>;\n\thighlightRadius?: EffectProp<number>;\n\tcolorCorrection?: EffectProp<number>;\n\tmidtoneContrast?: EffectProp<number>;\n}\n\nexport class ShadowsHighlights extends Effect<ShadowsHighlightsProps> {\n\tpublic readonly op = \"ShadowsHighlights\";\n\n\tpublic declare shadowAmount: number;\n\tpublic declare shadowTonalWidth: number;\n\tpublic declare shadowRadius: number;\n\tpublic declare highlightAmount: number;\n\tpublic declare highlightTonalWidth: number;\n\tpublic declare highlightRadius: number;\n\tpublic declare colorCorrection: number;\n\tpublic declare midtoneContrast: number;\n\n\tconstructor(config: ShadowsHighlightsProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tshadowAmount: config.shadowAmount ?? 0,\n\t\t\tshadowTonalWidth: config.shadowTonalWidth ?? 50,\n\t\t\tshadowRadius: config.shadowRadius ?? 30,\n\t\t\thighlightAmount: config.highlightAmount ?? 0,\n\t\t\thighlightTonalWidth: config.highlightTonalWidth ?? 50,\n\t\t\thighlightRadius: config.highlightRadius ?? 30,\n\t\t\tcolorCorrection: config.colorCorrection ?? 0,\n\t\t\tmidtoneContrast: config.midtoneContrast ?? 0,\n\t\t});\n\t}\n}\n\nexport interface ApplyLUTProps {\n\tlutUrl?: string;\n\tintensity?: EffectProp<number>;\n}\n\nexport class ApplyLUT extends Effect<ApplyLUTProps> {\n\tpublic readonly op = \"ApplyLUT\";\n\n\tpublic declare lutUrl: string;\n\tpublic declare intensity: number;\n\n\tconstructor(config: ApplyLUTProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tlutUrl: config.lutUrl ?? \"\",\n\t\t\tintensity: config.intensity ?? 1.0,\n\t\t});\n\t}\n}\n\nexport interface UnsharpMaskProps {\n\tamount?: EffectProp<number>;\n\tradius?: EffectProp<number>;\n\tthreshold?: EffectProp<number>;\n}\n\nexport class UnsharpMask extends Effect<UnsharpMaskProps> {\n\tpublic readonly op = \"UnsharpMask\";\n\n\tpublic declare amount: number;\n\tpublic declare radius: number;\n\tpublic declare threshold: number;\n\n\tconstructor(config: UnsharpMaskProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tamount: config.amount ?? 100,\n\t\t\tradius: config.radius ?? 1.5,\n\t\t\tthreshold: config.threshold ?? 3,\n\t\t});\n\t}\n}\n\nexport interface HighPassProps {\n\tradius?: EffectProp<number>;\n\tcontrastBoost?: EffectProp<number>;\n\tmonochrome?: boolean;\n}\n\nexport class HighPass extends Effect<HighPassProps> {\n\tpublic readonly op = \"HighPass\";\n\n\tpublic declare radius: number;\n\tpublic declare contrastBoost: number;\n\tpublic declare monochrome: boolean;\n\n\tconstructor(config: HighPassProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tradius: config.radius ?? 3.0,\n\t\t\tcontrastBoost: config.contrastBoost ?? 1.0,\n\t\t\tmonochrome: config.monochrome ?? true,\n\t\t});\n\t}\n}\n\nexport type HalftoneDotShape = \"Circle\" | \"Diamond\" | \"Line\" | \"Square\";\nexport type HalftoneMode = \"Monochrome\" | \"CMYK\";\n\nexport interface HalftoneScreenProps {\n\tmode?: HalftoneMode;\n\tdotShape?: HalftoneDotShape;\n\tfrequency?: EffectProp<number>;\n\tangle?: EffectProp<number>;\n\tcontrast?: EffectProp<number>;\n\tdotColor?: string;\n\tpaperColor?: string;\n\tsmooth?: boolean;\n\tinvert?: boolean;\n\tcyanAngle?: EffectProp<number>;\n\tmagentaAngle?: EffectProp<number>;\n\tyellowAngle?: EffectProp<number>;\n\tblackAngle?: EffectProp<number>;\n\topacity?: EffectProp<number>;\n}\n\nexport class HalftoneScreen extends Effect<HalftoneScreenProps> {\n\tpublic readonly op = \"HalftoneScreen\";\n\n\tpublic declare mode: HalftoneMode;\n\tpublic declare dotShape: HalftoneDotShape;\n\tpublic declare frequency: number;\n\tpublic declare angle: number;\n\tpublic declare contrast: number;\n\tpublic declare dotColor: string;\n\tpublic declare paperColor: string;\n\tpublic declare smooth: boolean;\n\tpublic declare invert: boolean;\n\tpublic declare cyanAngle: number;\n\tpublic declare magentaAngle: number;\n\tpublic declare yellowAngle: number;\n\tpublic declare blackAngle: number;\n\tpublic declare opacity: number;\n\n\tconstructor(config: HalftoneScreenProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tmode: config.mode ?? \"Monochrome\",\n\t\t\tdotShape: config.dotShape ?? \"Circle\",\n\t\t\tfrequency: config.frequency ?? 30,\n\t\t\tangle: config.angle ?? 45,\n\t\t\tcontrast: config.contrast ?? 1.0,\n\t\t\tdotColor: config.dotColor ?? \"#000000\",\n\t\t\tpaperColor: config.paperColor ?? \"#ffffff\",\n\t\t\tsmooth: config.smooth ?? true,\n\t\t\tinvert: config.invert ?? false,\n\t\t\tcyanAngle: config.cyanAngle ?? 15,\n\t\t\tmagentaAngle: config.magentaAngle ?? 75,\n\t\t\tyellowAngle: config.yellowAngle ?? 0,\n\t\t\tblackAngle: config.blackAngle ?? 45,\n\t\t\topacity: config.opacity ?? 1.0,\n\t\t});\n\t}\n}\n\nexport type TileOffsetEdgeMode = \"wrap\" | \"clamp\" | \"transparent\" | \"mirror\";\n\nexport interface TileOffsetProps {\n\toffsetX?: EffectProp<number>;\n\toffsetY?: EffectProp<number>;\n\twrap?: boolean;\n\tedgeMode?: TileOffsetEdgeMode;\n}\n\nexport class TileOffset extends Effect<TileOffsetProps> {\n\tpublic readonly op = \"TileOffset\";\n\n\tpublic declare offsetX: number;\n\tpublic declare offsetY: number;\n\tpublic declare wrap: boolean;\n\tpublic declare edgeMode: TileOffsetEdgeMode;\n\n\tconstructor(config: TileOffsetProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\toffsetX: config.offsetX ?? 0,\n\t\t\toffsetY: config.offsetY ?? 0,\n\t\t\twrap: config.wrap ?? true,\n\t\t\tedgeMode: config.edgeMode ?? \"wrap\",\n\t\t});\n\t}\n}\n\nexport interface MotionBlurProps {\n\tshutterAngle?: EffectProp<number>;\n\tsamples?: EffectProp<number>;\n\tmaxVelocity?: EffectProp<number>;\n\tshutterCurve?: \"box\" | \"gaussian\" | \"triangle\";\n\tdepthAware?: boolean;\n}\n\nexport class MotionBlur extends Effect<MotionBlurProps> {\n\tpublic readonly op = \"MotionBlur\";\n\n\tpublic declare shutterAngle: number;\n\tpublic declare samples: number;\n\tpublic declare maxVelocity: number;\n\tpublic declare shutterCurve: \"box\" | \"gaussian\" | \"triangle\";\n\tpublic declare depthAware: boolean;\n\n\tconstructor(config: MotionBlurProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tshutterAngle: config.shutterAngle ?? 180,\n\t\t\tsamples: config.samples ?? 16,\n\t\t\tmaxVelocity: config.maxVelocity ?? 64,\n\t\t\tshutterCurve: config.shutterCurve ?? \"gaussian\",\n\t\t\tdepthAware: config.depthAware ?? true,\n\t\t});\n\t}\n}\n\nexport interface SSAOProps {\n\tradius?: EffectProp<number>;\n\tbias?: EffectProp<number>;\n\tintensity?: EffectProp<number>;\n\tkernelSamples?: EffectProp<number>;\n\tblurRadius?: EffectProp<number>;\n}\n\nexport class SSAO extends Effect<SSAOProps> {\n\tpublic readonly op = \"SSAO\";\n\n\tpublic declare radius: number;\n\tpublic declare bias: number;\n\tpublic declare intensity: number;\n\tpublic declare kernelSamples: number;\n\tpublic declare blurRadius: number;\n\n\tconstructor(config: SSAOProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tradius: config.radius ?? 45,\n\t\t\tbias: config.bias ?? 0.025,\n\t\t\tintensity: config.intensity ?? 1.5,\n\t\t\tkernelSamples: config.kernelSamples ?? 16,\n\t\t\tblurRadius: config.blurRadius ?? 4,\n\t\t});\n\t}\n}\n\nexport interface PBRGlassProps {\n\tior?: EffectProp<number>;\n\troughness?: EffectProp<number>;\n\ttransmission?: EffectProp<number>;\n\tdispersion?: EffectProp<number>;\n\tfresnelPower?: EffectProp<number>;\n\ttintColor?: EffectProp<string>;\n}\n\nexport class PBRGlass extends Effect<PBRGlassProps> {\n\tpublic readonly op = \"PBRGlass\";\n\n\tpublic declare ior: number;\n\tpublic declare roughness: number;\n\tpublic declare transmission: number;\n\tpublic declare dispersion: number;\n\tpublic declare fresnelPower: number;\n\tpublic declare tintColor: string;\n\n\tconstructor(config: PBRGlassProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tior: config.ior ?? 1.49,\n\t\t\troughness: config.roughness ?? 0.15,\n\t\t\ttransmission: config.transmission ?? 0.92,\n\t\t\tdispersion: config.dispersion ?? 0.015,\n\t\t\tfresnelPower: config.fresnelPower ?? 5.0,\n\t\t\ttintColor: config.tintColor ?? \"#ffffff\",\n\t\t});\n\t}\n}\n\nexport interface DepthOfFieldProps {\n\tfocusDistance?: EffectProp<number>;\n\tfocalLength?: EffectProp<number>;\n\taperture?: EffectProp<number>;\n\tmaxBlur?: EffectProp<number>;\n\tquality?: \"low\" | \"medium\" | \"high\" | \"ultra\";\n}\n\nexport class DepthOfField extends Effect<DepthOfFieldProps> {\n\tpublic readonly op = \"DepthOfField\";\n\n\tpublic declare focusDistance: number;\n\tpublic declare focalLength: number;\n\tpublic declare aperture: number;\n\tpublic declare maxBlur: number;\n\tpublic declare quality: string;\n\n\tconstructor(config: DepthOfFieldProps = {}) {\n\t\tsuper({\n\t\t\t...config,\n\t\t\tfocusDistance: config.focusDistance ?? 500,\n\t\t\tfocalLength: config.focalLength ?? 50,\n\t\t\taperture: config.aperture ?? 2.8,\n\t\t\tmaxBlur: config.maxBlur ?? 16,\n\t\t\tquality: config.quality ?? \"high\",\n\t\t});\n\t}\n}\n\nexport interface CropProps {\n\tcropType?: \"rect\" | \"path\";\n\tleftPercentage?: EffectProp<number>;\n\ttopPercentage?: EffectProp<number>;\n\twidthPercentage?: EffectProp<number>;\n\theightPercentage?: EffectProp<number>;\n\troundness?: EffectProp<number>;\n\tpathPoints?: { x: number; y: number }[];\n\tmode?: \"cropped\" | \"rest\";\n}\n\nexport class Crop extends Effect<CropProps> {\n\tpublic readonly op = \"Crop\";\n\n\tpublic declare cropType: \"rect\" | \"path\";\n\tpublic declare leftPercentage: number;\n\tpublic declare topPercentage: number;\n\tpublic declare widthPercentage: number;\n\tpublic declare heightPercentage: number;\n\tpublic declare roundness: number;\n\tpublic declare pathPoints?: { x: number; y: number }[];\n\tpublic declare mode?: \"cropped\" | \"rest\";\n\n\tconstructor(config: CropProps = {}) {\n\t\tsuper({\n\t\t\tcropType: config.cropType ?? \"rect\",\n\t\t\tleftPercentage: config.leftPercentage ?? 0,\n\t\t\ttopPercentage: config.topPercentage ?? 0,\n\t\t\twidthPercentage: config.widthPercentage ?? 100,\n\t\t\theightPercentage: config.heightPercentage ?? 100,\n\t\t\troundness: config.roundness ?? 0,\n\t\t\t...config,\n\t\t});\n\t}\n}\n\n/**\n * @deprecated The MediaPipe engine was removed (specs/yolov4plan.ts §Phase F).\n * Legacy option shape, mapped onto YOLO by the `MediaPipe` alias class below.\n */\nexport interface MediaPipeProps {\n\tenablePoseLandmarks?: boolean;\n\tenableFaceLandmarks?: boolean;\n\tenableFaceBlendshapes?: boolean;\n\tenableSegmentation?: boolean;\n\tmode?: \"passthrough\" | \"mask\" | \"matte\" | \"skeleton\";\n\tdelegate?: \"CPU\" | \"GPU\";\n\tmodelsDir?: string;\n\tvisionBundle?: unknown;\n}\n\nexport interface YoloProps {\n\tenableDetection?: boolean;\n\tenableSegmentation?: boolean;\n\tenablePose?: boolean;\n\tenableClassification?: boolean;\n\tenableObb?: boolean;\n\tenableWorld?: boolean;\n\tprompts?: readonly string[];\n\tcustomModel?: CustomModelConfig;\n\tclasses?: readonly string[];\n\tconfidence?: number;\n\tiouThreshold?: number;\n\tvariant?: \"n\" | \"s\" | \"m\" | \"l\" | \"x\";\n\timgsz?: number;\n\tmode?:\n\t\t| \"passthrough\"\n\t\t| \"mask\"\n\t\t| \"matte\"\n\t\t| \"crop\"\n\t\t| \"skeleton\"\n\t\t| \"boxes\"\n\t\t| \"tracking\"\n\t\t| \"obb\";\n\tdelegate?: \"CPU\" | \"GPU\";\n\tmodelsDir?: string;\n\tbaseUrl?: string;\n\tmaskThreshold?: number;\n\tfeatherRadius?: number;\n\t/** Grow the person mask into connected colourful/dark foreground (e.g. a dress). */\n\tkeyBackground?: boolean;\n\t/** Colour-distance threshold for the background key (lower → more growth). Default 70. */\n\tbackgroundKeyThreshold?: number;\n\tvisionBundle?: unknown;\n}\n\nexport class Yolo extends Effect<YoloProps> {\n\tpublic readonly op = \"Yolo\";\n\n\tpublic declare enableDetection?: boolean;\n\tpublic declare enableSegmentation?: boolean;\n\tpublic declare enablePose?: boolean;\n\tpublic declare enableClassification?: boolean;\n\tpublic declare enableObb?: boolean;\n\tpublic declare enableWorld?: boolean;\n\tpublic declare prompts?: readonly string[];\n\tpublic declare customModel?: CustomModelConfig;\n\tpublic declare classes?: readonly string[];\n\tpublic declare confidence?: number;\n\tpublic declare iouThreshold?: number;\n\tpublic declare variant?: \"n\" | \"s\" | \"m\" | \"l\" | \"x\";\n\tpublic declare imgsz?: number;\n\tpublic declare mode?: YoloProps[\"mode\"];\n\tpublic declare delegate?: \"CPU\" | \"GPU\";\n\tpublic declare modelsDir?: string;\n\tpublic declare baseUrl?: string;\n\tpublic declare maskThreshold?: number;\n\tpublic declare featherRadius?: number;\n\tpublic declare keyBackground?: boolean;\n\tpublic declare backgroundKeyThreshold?: number;\n\tpublic declare visionBundle?: unknown;\n\n\tconstructor(config: YoloProps = {}) {\n\t\tsuper({\n\t\t\tenableDetection: config.enableDetection !== false,\n\t\t\tenableSegmentation: config.enableSegmentation === true,\n\t\t\tenablePose: config.enablePose === true,\n\t\t\tenableClassification: config.enableClassification === true,\n\t\t\tenableObb: config.enableObb === true,\n\t\t\tconfidence: config.confidence ?? 0.25,\n\t\t\tiouThreshold: config.iouThreshold ?? 0.45,\n\t\t\tvariant: config.variant ?? \"n\",\n\t\t\timgsz: config.imgsz ?? 640,\n\t\t\tmode: config.mode ?? \"passthrough\",\n\t\t\tdelegate: config.delegate ?? \"CPU\",\n\t\t\t...config,\n\t\t});\n\t}\n}\n\n/**\n * @deprecated Use `Yolo`. Kept as a source-compatible alias that maps the legacy MediaPipe\n * option shape onto the YOLO engine (`op` is `\"Yolo\"`).\n */\nexport class MediaPipe extends Yolo {\n\tconstructor(config: MediaPipeProps = {}) {\n\t\tsuper({\n\t\t\tenableDetection: true,\n\t\t\tenablePose: config.enablePoseLandmarks !== false,\n\t\t\tenableSegmentation: config.enableSegmentation === true,\n\t\t\tmode:\n\t\t\t\tconfig.mode === \"skeleton\"\n\t\t\t\t\t? \"skeleton\"\n\t\t\t\t\t: (config.mode ?? \"passthrough\"),\n\t\t\t...(config.delegate !== undefined ? { delegate: config.delegate } : {}),\n\t\t\t...(config.modelsDir !== undefined\n\t\t\t\t? { modelsDir: config.modelsDir }\n\t\t\t\t: {}),\n\t\t\t...(config.visionBundle !== undefined\n\t\t\t\t? { visionBundle: config.visionBundle }\n\t\t\t\t: {}),\n\t\t});\n\t}\n}\n\nexport interface Relight3DProps {\n\tlightType?: \"Point\" | \"Spot\" | \"Directional\" | \"Rim\";\n\tintensity?: EffectProp<number>;\n\tlightPosX?: EffectProp<number>;\n\tlightPosY?: EffectProp<number>;\n\tlightPosZ?: EffectProp<number>;\n\tlightRadius?: EffectProp<number>;\n\tspotConeAngle?: EffectProp<number>;\n\tspecularRoughness?: EffectProp<number>;\n\tspecularStrength?: EffectProp<number>;\n\tmetallic?: EffectProp<number>;\n\tambientIntensity?: EffectProp<number>;\n\tvolumetricDensity?: EffectProp<number>;\n\tdepthScale?: EffectProp<number>;\n\tdepthInvert?: boolean;\n\tlightColor?: string;\n\tambientColor?: string;\n\tnormalMap?: unknown;\n}\n\nexport class Relight3D extends Effect<Relight3DProps> {\n\tpublic readonly op = \"Relight3D\";\n\n\tpublic declare lightType: Relight3DProps[\"lightType\"];\n\tpublic declare intensity: number;\n\tpublic declare lightPosX: number;\n\tpublic declare lightPosY: number;\n\tpublic declare lightPosZ: number;\n\tpublic declare lightRadius: number;\n\tpublic declare spotConeAngle: number;\n\tpublic declare specularRoughness: number;\n\tpublic declare specularStrength: number;\n\tpublic declare metallic: number;\n\tpublic declare ambientIntensity: number;\n\tpublic declare volumetricDensity: number;\n\tpublic declare depthScale: number;\n\tpublic declare depthInvert: boolean;\n\tpublic declare lightColor: string;\n\tpublic declare ambientColor: string;\n\tpublic declare normalMap: unknown;\n\n\tconstructor(config: Relight3DProps = {}) {\n\t\tsuper({\n\t\t\tlightType: config.lightType ?? \"Point\",\n\t\t\tintensity: config.intensity ?? 1.0,\n\t\t\tlightPosX: config.lightPosX ?? 0.5,\n\t\t\tlightPosY: config.lightPosY ?? 0.5,\n\t\t\tlightPosZ: config.lightPosZ ?? 0.3,\n\t\t\tlightRadius: config.lightRadius ?? 0.8,\n\t\t\tspotConeAngle: config.spotConeAngle ?? 45,\n\t\t\tspecularRoughness: config.specularRoughness ?? 0.35,\n\t\t\tspecularStrength: config.specularStrength ?? 0.7,\n\t\t\tmetallic: config.metallic ?? 0.0,\n\t\t\tambientIntensity: config.ambientIntensity ?? 0.4,\n\t\t\tvolumetricDensity: config.volumetricDensity ?? 0.2,\n\t\t\tdepthScale: config.depthScale ?? 1.0,\n\t\t\tdepthInvert: config.depthInvert ?? false,\n\t\t\tlightColor: config.lightColor ?? \"#ffffff\",\n\t\t\tambientColor: config.ambientColor ?? \"#ffffff\",\n\t\t\tnormalMap: config.normalMap,\n\t\t\t...config,\n\t\t});\n\t}\n}\n\nexport interface DeflickerProps {\n\tblendWeight?: EffectProp<number>;\n\tdisocclusionThreshold?: EffectProp<number>;\n\tmaxMotionPixels?: EffectProp<number>;\n\tscale?: number;\n\twindowSize?: number;\n}\n\nexport class TemporalDeflicker extends Effect<DeflickerProps> {\n\tpublic readonly op = \"TemporalDeflicker\";\n\n\tpublic declare blendWeight: number;\n\tpublic declare disocclusionThreshold: number;\n\tpublic declare maxMotionPixels: number;\n\tpublic declare scale: number;\n\tpublic declare windowSize: number;\n\n\tconstructor(config: DeflickerProps = {}) {\n\t\tsuper({\n\t\t\tblendWeight: config.blendWeight ?? 0.35,\n\t\t\tdisocclusionThreshold: config.disocclusionThreshold ?? 0.15,\n\t\t\tmaxMotionPixels: config.maxMotionPixels ?? 64.0,\n\t\t\tscale: config.scale ?? 0.5,\n\t\t\twindowSize: config.windowSize ?? 2,\n\t\t\t...config,\n\t\t});\n\t}\n}\n\nexport interface ModulateProps {\n\thue?: EffectProp<number>;\n\tbrightness?: EffectProp<number>;\n\tcontrast?: EffectProp<number>;\n\texposure?: EffectProp<number>;\n\tsaturation?: EffectProp<number>;\n\tsepia?: EffectProp<number>;\n}\n\nexport class Modulate extends Effect<ModulateProps> {\n\tpublic readonly op = \"Modulate\";\n\n\tpublic declare hue: number;\n\tpublic declare brightness: number;\n\tpublic declare contrast: number;\n\tpublic declare exposure: number;\n\tpublic declare saturation: number;\n\tpublic declare sepia: number;\n\n\tconstructor(config: ModulateProps = {}) {\n\t\tsuper({\n\t\t\thue: config.hue ?? 0,\n\t\t\tbrightness: config.brightness ?? 1.0,\n\t\t\tcontrast: config.contrast ?? 1.0,\n\t\t\texposure: config.exposure ?? 0.0,\n\t\t\tsaturation: config.saturation ?? 1.0,\n\t\t\tsepia: config.sepia ?? 0.0,\n\t\t\t...config,\n\t\t});\n\t}\n}\n"],"mappings":"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CA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF,GAAG,kBAAkB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE;EACF;EACA;EACA;EACA;EACA,CAAC;CACF;AACD,IAAI,+BAA+B,MAAM;CACxC;CACA;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO;GACP,MAAM;GACN,CAAC;AACF,OAAK,kBAAkB,OAAO,sBAAsB;GACnD,OAAO;GACP,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,YAAY;IACZ;GACD,CAAC;AACF,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,eAAe;GAC/C,OAAO;GACP,CAAC;EACF,MAAM,cAAc,KAAK,IAAI,KAAK,wBAAwB,SAAS,GAAG;AACtE,OAAK,gBAAgB,OAAO,aAAa;GACxC,MAAM;GACN,OAAO,eAAe,UAAU,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qB,SAAS;AACnC,OAAK,qBAAqB,SAAS;AACnC,OAAK,oBAAoB,SAAS;AAClC,OAAK,oBAAoB,SAAS;;;;;;;;AAWpC,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DzB,MAAM,2BAA2B;CAChC;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM;EACN,IAAI;EACJ,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;AACD,IAAI,8BAA8B,MAAM;CACvC;CACA;CACA;CACA,YAAY,QAAQ;AACnB,OAAK,SAAS;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OA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B,SAAS;EACR,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,SAAS;EACR,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,SAAS;EACR,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,SAAS;EACR,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,SAAS;EACR,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,gBAAgB;EACf,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,gBAAgB;EACf,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,gBAAgB;EACf,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,gBAAgB;EACf,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,eAAe;EACd,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,mBAAmB;EAClB,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD,mBAAmB;EAClB,KAAK;EACL,MAAM;EACN,SAAS;EACT,UAAU;EACV,KAAK;EACL,WAAW;EACX,IAAI;EACJ,OAAO;EACP;CACD;AACD,MAAM,4BAA4B;CACjC,SAAS,MAAM,MAAM,MAAM,YAAY,MAAM,MAAM,YAAY,MAAM,MAAM,YAAY,MAAM,MAAM,YAAY;CAC/G,UAAU,MAAM,MAAM,MAAM,gBAAgB,MAAM,MAAM,gBAAgB;CACxE,OAAO,MAAM,MAAM,MAAM,iBAAiB,MAAM,MAAM,iBAAiB,MAAM,MAAM,iBAAiB;CACpG,MAAM,MAAM,MAAM,MAAM,gBAAgB,MAAM,MAAM,gBAAgB,MAAM,MAAM,gBAAgB;CAChG,WAAW,MAAM,MAAM,MAAM,gBAAgB;CAC7C,QAAQ,MAAM,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,oBAAoB;CACxE;;AAED,MAAM,oBAAoB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;AAED,MAAM,oBAAoB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAID,SAAS,aAAa,MAAM,MAAM;CACjC,MAAM,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,QAAQ;CAC/C,MAAM,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,QAAQ;CAC/C,MAAM,KAAK,KAAK,IAAI,KAAK,UAAU,KAAK,OAAO,KAAK,UAAU,KAAK,MAAM;CACzE,MAAM,KAAK,KAAK,IAAI,KAAK,UAAU,KAAK,QAAQ,KAAK,UAAU,KAAK,OAAO;CAC3E,MAAM,YAAY,KAAK,IAAI,GAAG,KAAK,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK,GAAG;AAC7D,KAAI,aAAa,EAAG,QAAO;CAC3B,MAAM,YAAY,KAAK,QAAQ,KAAK,SAAS,KAAK,QAAQ,KAAK,SAAS;AACxE,QAAO,YAAY,IAAI,YAAY,YAAY;;AAEhD,IAAI,wBAAwB,MAAM;CACjC,eAAe;CACf,UAAU,EAAE;CACZ;CACA;CACA;CACA;CACA;CACA,YAAY,UAAU,EAAE,EAAE;AACzB,OAAK,gBAAgB,QAAQ,gBAAgB;AAC7C,OAAK,mBAAmB,QAAQ,mBAAmB;AACnD,OAAK,WAAW,QAAQ,WAAW;AACnC,OAAK,qBAAqB,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,QAAQ,qBAAqB,IAAI,CAAC;AACrF,OAAK,qBAAqB,QAAQ,sBAAsB;;;;;;;;;;CAUzD,OAAO,YAAY,QAAQ,MAAM,IAAI;EACpC,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM;AAC/B,OAAK,MAAM,SAAS,KAAK,SAAS;AACjC,SAAM;AACN,SAAM;AACN,OAAI,MAAM,kBAAkB,GAAG;IAC9B,MAAM,cAAc,MAAM,UAAU,MAAM,KAAK;IAC/C,MAAM,cAAc,MAAM,UAAU,MAAM,KAAK;AAC/C,UAAM,UAAU;AAChB,UAAM,UAAU;IAChB,MAAM,IAAI,MAAM,IAAI;IACpB,MAAM,IAAI,MAAM,IAAI;IACpB,MAAM,QAAQ,MAAM,IAAI;IACxB,MAAM,QAAQ,MAAM,IAAI;IACxB,MAAM,cAAc,MAAM,IAAI,cAAc,QAAQ,IAAI,MAAM,KAAK,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,MAAM;IAC5G,MAAM,cAAc,MAAM,IAAI,cAAc,QAAQ,IAAI,MAAM,KAAK,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,SAAS,MAAM;AAC7G,UAAM,MAAM;KACX,SAAS,cAAc,IAAI;KAC3B,SAAS,cAAc,IAAI;KAC3B,OAAO;KACP,QAAQ;KACR,aAAa,cAAc,QAAQ;KACnC,aAAa,cAAc,QAAQ;KACnC,iBAAiB;KACjB,kBAAkB;KAClB;AACD,UAAM,MAAM;AACZ,UAAM,MAAM;AACZ,UAAM,aAAa;;;EAGrB,MAAM,oCAAoC,IAAI,KAAK;EACnD,MAAM,gCAAgC,IAAI,KAAK;EAC/C,MAAM,mBAAmB,EAAE;AAC3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;GAC7C,MAAM,MAAM,KAAK,QAAQ;AACzB,QAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;IAC3C,MAAM,MAAM,WAAW;AACvB,QAAI,IAAI,aAAa,IAAI,SAAU;IACnC,MAAM,MAAM,aAAa,IAAI,KAAK,IAAI,YAAY;AAClD,QAAI,OAAO,KAAK,cAAe,kBAAiB,KAAK;KACpD,UAAU;KACV,QAAQ;KACR;KACA,CAAC;;;AAGJ,mBAAiB,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI;AAC9C,OAAK,MAAM,SAAS,kBAAkB;AACrC,OAAI,cAAc,IAAI,MAAM,SAAS,IAAI,kBAAkB,IAAI,MAAM,OAAO,CAAE;AAC9E,iBAAc,IAAI,MAAM,SAAS;AACjC,qBAAkB,IAAI,MAAM,OAAO;GACnC,MAAM,MAAM,KAAK,QAAQ,MAAM;GAC/B,MAAM,MAAM,WAAW,MAAM;GAC7B,MAAM,SAAS,IAAI;GACnB,MAAM,aAAa,OAAO,UAAU,OAAO,QAAQ;GACnD,MAAM,aAAa,OAAO,UAAU,OAAO,SAAS;GACpD,MAAM,UAAU,aAAa,IAAI,WAAW;GAC5C,MAAM,UAAU,aAAa,IAAI,WAAW;AAC5C,OAAI,KAAK,IAAI,KAAK,KAAK,SAAS;AAChC,OAAI,KAAK,IAAI,KAAK,KAAK,SAAS;GAChC,MAAM,QAAQ,KAAK;GACnB,MAAM,UAAU,IAAI,IAAI,SAAS,IAAI,SAAS,OAAO,QAAQ;GAC7D,MAAM,UAAU,IAAI,IAAI,UAAU,IAAI,SAAS,OAAO,SAAS;GAC/D,MAAM,gBAAgB,IAAI,WAAW,IAAI,SAAS,aAAa;GAC/D,MAAM,gBAAgB,IAAI,WAAW,IAAI,SAAS,aAAa;AAC/D,OAAI,UAAU;AACd,OAAI,UAAU;AACd,OAAI,QAAQ,IAAI;AAChB,OAAI,kBAAkB;AACtB,OAAI;AACJ,OAAI,aAAa;AACjB,OAAI,IAAI,QAAQ,KAAK,SAAU,KAAI,SAAS;AAC5C,OAAI,MAAM;IACT,SAAS,gBAAgB,UAAU;IACnC,SAAS,gBAAgB,UAAU;IACnC,OAAO;IACP,QAAQ;IACR,aAAa,OAAO;IACpB,aAAa,OAAO;IACpB,iBAAiB,OAAO;IACxB,kBAAkB,OAAO;IACzB;;AAEF,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC3C,OAAI,kBAAkB,IAAI,EAAE,CAAE;GAC9B,MAAM,MAAM,WAAW;GACvB,MAAM,SAAS,IAAI;GACnB,MAAM,UAAU,OAAO,UAAU,OAAO,QAAQ;GAChD,MAAM,UAAU,OAAO,UAAU,OAAO,SAAS;AACjD,QAAK,QAAQ,KAAK;IACjB,SAAS,KAAK;IACd,UAAU,IAAI;IACd,OAAO,IAAI;IACX,KAAK;IACL;IACA;IACA,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,MAAM;IACN,iBAAiB;IACjB,QAAQ,KAAK,YAAY;IACzB,YAAY;IACZ,CAAC;;AAEH,OAAK,UAAU,KAAK,QAAQ,QAAQ,MAAM,EAAE,mBAAmB,KAAK,iBAAiB;AACrF,SAAO,KAAK,QAAQ,QAAQ,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM;GACtD,MAAM,QAAQ,EAAE,IAAI;GACpB,MAAM,QAAQ,EAAE,IAAI;GACpB,MAAM,cAAc,EAAE,IAAI,cAAc,QAAQ;GAChD,MAAM,cAAc,EAAE,IAAI,cAAc,QAAQ;GAChD,MAAM,QAAQ,KAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAClD,UAAO;IACN,SAAS,EAAE;IACX,UAAU,EAAE;IACZ,OAAO,EAAE;IACT,aAAa,EAAE;IACf,SAAS,EAAE;IACX,SAAS,EAAE;IACX,mBAAmB;IACnB,mBAAmB;IACnB,UAAU;KACT,IAAI,EAAE;KACN,IAAI,EAAE;KACN;IACD;IACA,KAAK,EAAE;IACP,MAAM,EAAE;IACR,QAAQ,KAAK,qBAAqB,OAAO,EAAE,oBAAoB;IAC/D,YAAY,EAAE;IACd;IACA;;;;;;;;;CASH,cAAc,oBAAoB,aAAa,MAAM,IAAI;AACxD,OAAK,OAAO;EACZ,MAAM,KAAK,MAAM,IAAI,IAAI,MAAM;EAC/B,MAAM,+BAA+B,IAAI,KAAK;AAC9C,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACrC,MAAM,OAAO,mBAAmB,MAAM,EAAE;GACxC,MAAM,aAAa,KAAK,OAAO,MAAM,GAAG,IAAI;AAC5C,QAAK,MAAM,OAAO,YAAY;AAC7B,QAAI,CAAC,aAAa,IAAI,IAAI,QAAQ,CAAE,cAAa,IAAI,IAAI,SAAS;KACjE,UAAU,IAAI;KACd,cAAc,EAAE;KAChB,CAAC;AACF,QAAI,CAAC,IAAI,WAAY,cAAa,IAAI,IAAI,QAAQ,CAAC,aAAa,KAAK;KACpE,OAAO;KACP,KAAK,IAAI;KACT,OAAO,IAAI;KACX,CAAC;;;EAGJ,MAAM,mCAAmC,IAAI,KAAK;AAClD,OAAK,MAAM,CAAC,SAAS,SAAS,aAAa,SAAS,EAAE;GACrD,MAAM,MAAM,KAAK;AACjB,OAAI,IAAI,WAAW,EAAG;AACtB,OAAI,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;GACrC,MAAM,YAAY,IAAI,MAAM,YAAY,CAAC,KAAK,KAAK;AACnD,QAAK,MAAM,KAAK,IAAK,WAAU,EAAE,SAAS;IACzC,KAAK,EAAE;IACP,OAAO,EAAE;IACT;GACD,MAAM,WAAW,IAAI;AACrB,QAAK,IAAI,IAAI,GAAG,IAAI,SAAS,OAAO,IAAK,WAAU,KAAK;IACvD,KAAK,EAAE,GAAG,SAAS,KAAK;IACxB,OAAO,SAAS,QAAQ;IACxB;AACD,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,SAAS,GAAG,KAAK;IACxC,MAAM,WAAW,IAAI;IACrB,MAAM,SAAS,IAAI,IAAI;IACvB,MAAM,MAAM,OAAO,QAAQ,SAAS;AACpC,QAAI,OAAO,EAAG;AACd,SAAK,IAAI,IAAI,SAAS,QAAQ,GAAG,IAAI,OAAO,OAAO,KAAK;KACvD,MAAM,KAAK,IAAI,SAAS,SAAS;AACjC,eAAU,KAAK;MACd,KAAK;OACJ,SAAS,SAAS,IAAI,WAAW,OAAO,IAAI,UAAU,SAAS,IAAI,WAAW;OAC9E,SAAS,SAAS,IAAI,WAAW,OAAO,IAAI,UAAU,SAAS,IAAI,WAAW;OAC9E,OAAO,SAAS,IAAI,SAAS,OAAO,IAAI,QAAQ,SAAS,IAAI,SAAS;OACtE,QAAQ,SAAS,IAAI,UAAU,OAAO,IAAI,SAAS,SAAS,IAAI,UAAU;OAC1E,aAAa,SAAS,IAAI,eAAe,OAAO,IAAI,cAAc,SAAS,IAAI,eAAe;OAC9F,aAAa,SAAS,IAAI,eAAe,OAAO,IAAI,cAAc,SAAS,IAAI,eAAe;OAC9F,iBAAiB,SAAS,IAAI,mBAAmB,OAAO,IAAI,kBAAkB,SAAS,IAAI,mBAAmB;OAC9G,kBAAkB,SAAS,IAAI,oBAAoB,OAAO,IAAI,mBAAmB,SAAS,IAAI,oBAAoB;OAClH;MACD,OAAO,SAAS,SAAS,IAAI,KAAK,OAAO,QAAQ;MACjD;;;GAGH,MAAM,UAAU,IAAI,IAAI,SAAS;AACjC,QAAK,IAAI,IAAI,QAAQ,QAAQ,GAAG,IAAI,aAAa,IAAK,WAAU,KAAK;IACpE,KAAK,EAAE,GAAG,QAAQ,KAAK;IACvB,OAAO,QAAQ,QAAQ;IACvB;GACD,MAAM,iBAAiB,EAAE;GACzB,MAAM,SAAS;GACf,MAAM,UAAU;IACf;IACA;IACA;IACA;IACA;IACA;AACD,QAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;IACrC,IAAI,YAAY;IAChB,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,WAAW;IACf,IAAI,WAAW;IACf,IAAI,WAAW;IACf,IAAI,WAAW;IACf,IAAI,WAAW;AACf,SAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,KAAK;KACvC,MAAM,KAAK,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,cAAc,GAAG,IAAI,EAAE,CAAC;AAClE,SAAI,IAAI;MACP,MAAM,IAAI,QAAQ,IAAI;AACtB,mBAAa;AACb,cAAQ,GAAG,IAAI,UAAU;AACzB,cAAQ,GAAG,IAAI,UAAU;AACzB,cAAQ,GAAG,IAAI,QAAQ;AACvB,cAAQ,GAAG,IAAI,SAAS;AACxB,kBAAY,GAAG,IAAI,cAAc;AACjC,kBAAY,GAAG,IAAI,cAAc;AACjC,kBAAY,GAAG,IAAI,kBAAkB;AACrC,kBAAY,GAAG,IAAI,mBAAmB;AACtC,kBAAY,GAAG,QAAQ;;;IAGzB,MAAM,OAAO,YAAY,IAAI,IAAI,YAAY;AAC7C,mBAAe,KAAK;KACnB,KAAK;MACJ,SAAS,OAAO;MAChB,SAAS,OAAO;MAChB,OAAO,OAAO;MACd,QAAQ,OAAO;MACf,aAAa,WAAW;MACxB,aAAa,WAAW;MACxB,iBAAiB,WAAW;MAC5B,kBAAkB,WAAW;MAC7B;KACD,OAAO,WAAW;KAClB,CAAC;;AAEH,oBAAiB,IAAI,SAAS;IAC7B,UAAU,KAAK;IACf,QAAQ;IACR,CAAC;;EAEH,MAAM,SAAS,EAAE;AACjB,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACrC,MAAM,eAAe,EAAE;AACvB,QAAK,MAAM,CAAC,SAAS,SAAS,iBAAiB,SAAS,EAAE;IACzD,MAAM,UAAU,KAAK,OAAO;AAC5B,QAAI,CAAC,QAAS;IACd,MAAM,OAAO,KAAK,OAAO,KAAK,IAAI,GAAG,IAAI,EAAE,KAAK;IAChD,MAAM,OAAO,KAAK,OAAO,KAAK,IAAI,cAAc,GAAG,IAAI,EAAE,KAAK;IAC9D,MAAM,aAAa,QAAQ,IAAI,UAAU,QAAQ,IAAI,QAAQ;IAC7D,MAAM,aAAa,QAAQ,IAAI,UAAU,QAAQ,IAAI,SAAS;IAC9D,MAAM,cAAc,KAAK,IAAI,UAAU,KAAK,IAAI,QAAQ;IACxD,MAAM,cAAc,KAAK,IAAI,UAAU,KAAK,IAAI,SAAS;IACzD,MAAM,cAAc,KAAK,IAAI,UAAU,KAAK,IAAI,QAAQ;IACxD,MAAM,cAAc,KAAK,IAAI,UAAU,KAAK,IAAI,SAAS;IACzD,MAAM,YAAY,MAAM,KAAK,MAAM,cAAc,IAAI,KAAK,IAAI;IAC9D,MAAM,MAAM,cAAc,eAAe;IACzC,MAAM,MAAM,cAAc,eAAe;IACzC,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;IAC1C,MAAM,QAAQ,QAAQ,IAAI;IAC1B,MAAM,QAAQ,QAAQ,IAAI;AAC1B,iBAAa,KAAK;KACjB;KACA,UAAU,KAAK;KACf,OAAO,QAAQ;KACf,aAAa,QAAQ;KACrB,SAAS;KACT,SAAS;KACT,mBAAmB,QAAQ,IAAI,cAAc,QAAQ;KACrD,mBAAmB,QAAQ,IAAI,cAAc,QAAQ;KACrD,UAAU;MACT;MACA;MACA;KACD;KACA,KAAK,IAAI;KACT,MAAM;KACN,QAAQ;KACR,YAAY;KACZ,CAAC;;AAEH,UAAO,KAAK,aAAa;;AAE1B,SAAO;;;;;CAKR,QAAQ;AACP,OAAK,UAAU,EAAE;AACjB,OAAK,eAAe;;;AAMtB,MAAM,YAAY,OAAO,gBAAgB,eAAe,OAAO,YAAY,QAAQ,aAAa,YAAY,KAAK,GAAG,KAAK,KAAK;AAC9H,eAAe,gBAAgB,QAAQ,SAAS;CAC/C,MAAM,EAAE,WAAW;CACnB,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,QAAQ,QAAQ,SAAS,QAAQ,MAAM,SAAS,IAAI,QAAQ,QAAQ,CAAC,SAAS;CACpF,MAAM,UAAU,IAAI,IAAI,MAAM;CAC9B,MAAM,iBAAiB,QAAQ,aAAa,IAAI,IAAI,QAAQ,WAAW,KAAK,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG;CACtG,MAAM,eAAe,QAAQ,iBAAiB,QAAQ,QAAQ,IAAI,UAAU;CAC5E,MAAM,gBAAgB,QAAQ,IAAI,SAAS,GAAG,WAAW,QAAQ,IAAI,UAAU,GAAG,YAAY,QAAQ,IAAI,MAAM,GAAG,QAAQ;CAC3H,MAAM,qBAAqB,EAAE;CAC7B,MAAM,iBAAiB,EAAE;CACzB,MAAM,+BAA+B,IAAI,KAAK;CAC9C,IAAI,cAAc;CAClB,IAAI,aAAa;CACjB,MAAM,WAAW,aAAa,CAAC,kBAAkB,eAAe,IAAI,SAAS,aAAa,CAAC;CAC3F,MAAM,UAAU,OAAO,MAAM,OAAO;EACnC,MAAM,MAAM,OAAO,YAAY,KAAK;EACpC,MAAM,WAAW,OAAO,eAAe,IAAI,IAAI,KAAK;EACpD,MAAM,QAAQ,KAAK;EACnB,MAAM,SAAS,MAAM,IAAI;EACzB,MAAM,UAAU,KAAK,GAAG;AACxB,iBAAe;AACf,MAAI,CAAC,YAAY,CAAC,eAAe,KAAM,gBAAe,OAAO;GAC5D,OAAO,YAAY,KAAK;GACxB,IAAI;GACJ;AACD,SAAO;;CAER,MAAM,eAAe,YAAY;AAChC,OAAK,MAAM,KAAK,SAAS;AACxB,OAAI,CAAC,QAAQ,EAAE,SAAS,CAAE;GAC1B,MAAM,QAAQ,aAAa,IAAI,EAAE,SAAS,IAAI;IAC7C,KAAK;IACL,OAAO;IACP;AACD,SAAM,OAAO,EAAE;AACf,SAAM;AACN,gBAAa,IAAI,EAAE,UAAU,MAAM;;;AAGrC,YAAW,MAAM,SAAS,QAAQ;EACjC,IAAI,aAAa,EAAE;AACnB,MAAI,gBAAgB,kBAAkB,WAAW;GAChD,MAAM,MAAM,MAAM,QAAQ,iBAAiB,OAAO,QAAQ,MAAM,CAAC;AACjE,OAAI,aAAc,aAAY,IAAI,MAAM;AACxC,OAAI,kBAAkB,UAAW,cAAa,IAAI;;AAEnD,MAAI,kBAAkB,SAAU,cAAa,MAAM,QAAQ,gBAAgB,OAAO,OAAO,MAAM,CAAC;WACvF,kBAAkB,MAAO,eAAc,MAAM,QAAQ,aAAa,OAAO,UAAU,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO;GAC3H,UAAU,EAAE;GACZ,OAAO,EAAE;GACT,aAAa,EAAE;GACf,EAAE;AACH,MAAI,QAAQ,IAAI,OAAO,CAAE,OAAM,QAAQ,cAAc,OAAO,KAAK,MAAM,CAAC;AACxE,MAAI,QAAQ,IAAI,WAAW,CAAE,OAAM,QAAQ,kBAAkB,OAAO,SAAS,MAAM,CAAC;AACpF,qBAAmB,KAAK,iBAAiB,WAAW,QAAQ,MAAM,QAAQ,EAAE,SAAS,CAAC,GAAG,WAAW;AACpG;;CAED,MAAM,cAAc;CACpB,MAAM,kBAAkB,IAAI,sBAAsB;EACjD,cAAc,QAAQ,gBAAgB;EACtC,iBAAiB,QAAQ,mBAAmB;EAC5C,CAAC,CAAC,cAAc,oBAAoB,aAAa,IAAI;CACtD,MAAM,aAAa,QAAQ,cAAc,KAAK,IAAI,GAAG,KAAK,KAAK,cAAc,GAAG,CAAC;CACjF,MAAM,yBAAyB,IAAI,KAAK;CACxC,MAAM,qCAAqC,IAAI,KAAK;CACpD,MAAM,qCAAqC,IAAI,KAAK;CACpD,MAAM,gCAAgC,IAAI,KAAK;CAC/C,MAAM,eAAe,KAAK,KAAK,SAAS;EACvC,IAAI,QAAQ,IAAI,IAAI,IAAI;AACxB,MAAI,UAAU,KAAK,GAAG;AACrB,WAAQ,MAAM;AACd,OAAI,IAAI,KAAK,MAAM;;AAEpB,SAAO;;AAER,MAAK,IAAI,IAAI,GAAG,IAAI,aAAa,IAAK,MAAK,MAAM,OAAO,gBAAgB,MAAM,EAAE,EAAE;AACjF,MAAI,CAAC,QAAQ,IAAI,SAAS,CAAE;EAC5B,IAAI,MAAM,OAAO,IAAI,IAAI,QAAQ;AACjC,MAAI,CAAC,KAAK;AACT,SAAM;IACL,UAAU,IAAI;IACd,YAAY;IACZ,WAAW;IACX,UAAU;IACV,YAAY;IACZ,SAAS,EAAE;IACX;AACD,UAAO,IAAI,IAAI,SAAS,IAAI;;AAE7B,MAAI,YAAY;AAChB,MAAI,OAAO,SAAS,IAAI,MAAM,EAAE;AAC/B,OAAI,YAAY,IAAI;AACpB,OAAI;;AAEL,OAAK,IAAI,IAAI,cAAc,eAAe,EAAG,KAAI,QAAQ,KAAK;GAC7D,OAAO;GACP,GAAG,IAAI;GACP,GAAG,IAAI;GACP,CAAC;AACF,cAAY,oBAAoB,IAAI,gCAAgC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE;AACrF,qBAAmB,IAAI,IAAI,UAAU,KAAK,IAAI,mBAAmB,IAAI,IAAI,SAAS,IAAI,GAAG,IAAI,MAAM,CAAC;AACpG,cAAY,eAAe,IAAI,gCAAgC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,QAAQ;;CAE3F,MAAM,iBAAiB,MAAM,KAAK,OAAO,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,UAAU;EAC5E;EACA,UAAU,IAAI;EACd,QAAQ,CAAC,IAAI,YAAY,IAAI,UAAU;EACvC,cAAc,IAAI,aAAa,IAAI,IAAI,WAAW,IAAI,aAAa;EACnE,YAAY,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;EAC9C,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ;CACzC,MAAM,UAAU,EAAE;AAClB,MAAK,MAAM,CAAC,UAAU,aAAa,mBAAoB,SAAQ,YAAY;EAC1E,eAAe,SAAS;EACxB;EACA,eAAe,mBAAmB,IAAI,SAAS,IAAI;EACnD,QAAQ,cAAc,IAAI,SAAS,EAAE,QAAQ;EAC7C;CACD,MAAM,QAAQ,EAAE;AAChB,MAAK,MAAM,CAAC,UAAU,UAAU,aAAc,OAAM,YAAY,EAAE,cAAc,MAAM,QAAQ,IAAI,MAAM,MAAM,MAAM,QAAQ,GAAG;AAC/H,QAAO;EACN,QAAQ,QAAQ,UAAU;EAC1B;EACA;EACA,aAAa,MAAM,IAAI,cAAc,MAAM;EAC3C,OAAO,MAAM,KAAK,QAAQ;EAC1B;EACA;EACA,YAAY,eAAe;EAC3B;EACA,QAAQ;EACR;EACA;;;AAMF,SAAS,qBAAqB,QAAQ,IAAI;CACzC,MAAM,QAAQ,KAAK,IAAI,IAAI,OAAO,OAAO;CACzC,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IAAK,KAAI,OAAO,KAAK,IAAK,OAAM,OAAO;CAClE,IAAI,MAAM;CACV,MAAM,QAAQ,IAAI,aAAa,MAAM;AACrC,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;EAC/B,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,IAAI;AACnC,QAAM,KAAK;AACX,SAAO;;CAER,MAAM,MAAM,MAAM,IAAI,IAAI,MAAM;AAChC,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IAAK,OAAM,MAAM;CAC5C,MAAM,OAAO,EAAE;AACf,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,OAAO,EAAE,KAAK;EACnD,IAAI,OAAO;EACX,IAAI,YAAY;AAChB,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAK,KAAI,MAAM,KAAK,WAAW;AAChE,eAAY,MAAM;AAClB,UAAO;;AAER,MAAI,OAAO,EAAG;AACd,OAAK,KAAK;GACT,OAAO;GACP,OAAO;GACP,CAAC;AACF,QAAM,QAAQ;;AAEf,QAAO;EACN,MAAM,KAAK,IAAI,SAAS;EACxB,WAAW,KAAK,IAAI,SAAS;EAC7B;EACA;;AAWF,SAAS,WAAW,GAAG,GAAG;CACzB,MAAM,UAAU,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG;CACpC,MAAM,UAAU,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG;CACpC,MAAM,UAAU,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG;CACpC,MAAM,UAAU,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG;CACpC,MAAM,YAAY,KAAK,IAAI,GAAG,UAAU,QAAQ,GAAG,KAAK,IAAI,GAAG,UAAU,QAAQ;AACjF,KAAI,aAAa,EAAG,QAAO;CAC3B,MAAM,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;AAClF,QAAO,YAAY,IAAI,YAAY,YAAY;;;;;;AAMhD,SAAS,IAAI,OAAO,eAAe,KAAK;CACvC,MAAM,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;CAC3D,MAAM,OAAO,EAAE;AACf,MAAK,MAAM,aAAa,QAAQ;EAC/B,IAAI,aAAa;AACjB,OAAK,MAAM,KAAK,MAAM;AACrB,OAAI,EAAE,eAAe,UAAU,WAAY;AAC3C,OAAI,WAAW,GAAG,UAAU,GAAG,cAAc;AAC5C,iBAAa;AACb;;;AAGF,MAAI,CAAC,WAAY,MAAK,KAAK,UAAU;;AAEtC,QAAO;;AAKR,SAAS,gBAAgB,QAAQ,SAAS,IAAI,MAAM;CACnD,MAAM,aAAa,EAAE;CACrB,MAAM,cAAc,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,KAAK,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG;AACvF,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK;EACjC,IAAI,YAAY;EAChB,IAAI,YAAY;AAChB,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC5B,MAAM,QAAQ,QAAQ,IAAI,KAAK,UAAU;AACzC,OAAI,QAAQ,WAAW;AACtB,gBAAY;AACZ,gBAAY;;;AAGd,MAAI,YAAY,KAAK,WAAY;AACjC,MAAI,eAAe,CAAC,YAAY,KAAK,KAAK,WAAW,cAAc,IAAI,aAAa,CAAC,CAAE;EACvF,MAAM,KAAK,OAAO;EAClB,MAAM,KAAK,OAAO,UAAU;EAC5B,MAAM,IAAI,OAAO,IAAI,UAAU;EAC/B,MAAM,IAAI,OAAO,IAAI,UAAU;AAC/B,MAAI,KAAK,KAAK,KAAK,EAAG;EACtB,MAAM,QAAQ,IAAI;EAClB,MAAM,QAAQ,IAAI;AAClB,aAAW,KAAK;GACf,IAAI,KAAK;GACT,IAAI,KAAK;GACT,IAAI,KAAK;GACT,IAAI,KAAK;GACT,OAAO;GACP,YAAY;GACZ,aAAa;GACb,CAAC;;AAEH,QAAO,IAAI,YAAY,KAAK,aAAa;;;AAG1C,SAAS,iBAAiB,KAAK,MAAM;CACpC,MAAM,EAAE,OAAO,IAAI,OAAO,KAAK;CAC/B,MAAM,EAAE,aAAa,IAAI,cAAc,OAAO;CAC9C,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,MAAM,CAAC;CAC3D,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,MAAM,CAAC;CAC3D,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,MAAM,CAAC;CAC3D,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,MAAM,CAAC;CAC3D,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,GAAG;CAClC,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,GAAG;AACnC,QAAO;EACN,UAAU,KAAK,WAAW,IAAI,eAAe,SAAS,IAAI;EAC1D,OAAO,IAAI;EACX,aAAa;GACZ,SAAS;GACT,SAAS;GACT;GACA;GACA,aAAa,KAAK,IAAI,KAAK,KAAK;GAChC,aAAa,KAAK,IAAI,KAAK,KAAK;GAChC,iBAAiB,KAAK,IAAI,QAAQ,KAAK;GACvC,kBAAkB,KAAK,IAAI,SAAS,KAAK;GACzC;EACD;;;AAGF,SAAS,mBAAmB,QAAQ,SAAS,IAAI,MAAM;AACtD,QAAO,gBAAgB,QAAQ,SAAS,IAAI,KAAK,CAAC,KAAK,QAAQ,iBAAiB,KAAK,KAAK,CAAC;;;;;;;;;AAY5F,MAAM,2BAA2B;AACjC,SAAS,iBAAiB,MAAM,MAAM,OAAO;CAC5C,MAAM,QAAQ,KAAK,IAAI,QAAQ,MAAM,QAAQ,KAAK;CAClD,MAAM,aAAa,KAAK,MAAM,OAAO,MAAM;CAC3C,MAAM,cAAc,KAAK,MAAM,OAAO,MAAM;AAC5C,QAAO;EACN;EACA,KAAK,QAAQ,cAAc;EAC3B,KAAK,QAAQ,eAAe;EAC5B;EACA;EACA,MAAM;EACN;;;;;;;AAcF,SAAS,kBAAkB,OAAO,QAAQ,KAAK,KAAK;CACnD,MAAM,EAAE,OAAO,MAAM,QAAQ,SAAS;CACtC,MAAM,SAAS,iBAAiB,MAAM,MAAM,MAAM;CAClD,MAAM,EAAE,OAAO,IAAI,IAAI,YAAY,gBAAgB;CACnD,MAAM,gBAAgB,QAAQ;AAC9B,KAAI,CAAC,OAAO,IAAI,SAAS,IAAI,cAAe,OAAM,IAAI,aAAa,IAAI,cAAc;KAChF,KAAI,KAAK,GAAG,GAAG,IAAI,cAAc;CACtC,MAAM,MAAM,MAAM;CAClB,MAAM,MAAM,2BAA2B;CACvC,MAAM,KAAK,KAAK,KAAK,GAAG;CACxB,MAAM,KAAK,KAAK,KAAK,GAAG;CACxB,MAAM,KAAK,KAAK,MAAM,KAAK,WAAW,GAAG;CACzC,MAAM,KAAK,KAAK,MAAM,KAAK,YAAY,GAAG;CAC1C,MAAM,SAAS,IAAI,SAAS,GAAG,cAAc;CAC7C,MAAM,SAAS,IAAI,SAAS,eAAe,IAAI,cAAc;CAC7D,MAAM,SAAS,IAAI,SAAS,IAAI,eAAe,IAAI,cAAc;AACjE,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;EAC/B,MAAM,UAAU,IAAI;EACpB,MAAM,YAAY,IAAI,MAAM,IAAI;AAChC,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC/B,IAAI,IAAI;GACR,IAAI,IAAI;GACR,IAAI,IAAI;AACR,OAAI,CAAC,aAAa,KAAK,MAAM,KAAK,IAAI;IACrC,MAAM,MAAM,IAAI,MAAM;IACtB,MAAM,MAAM,IAAI,MAAM;IACtB,MAAM,MAAM,KAAK,MAAM,GAAG;IAC1B,MAAM,MAAM,KAAK,MAAM,GAAG;IAC1B,MAAM,KAAK,KAAK;IAChB,MAAM,KAAK,KAAK;IAChB,MAAM,MAAM,KAAK,IAAI,OAAO,GAAG,MAAM,EAAE;IACvC,MAAM,MAAM,KAAK,IAAI,OAAO,GAAG,MAAM,EAAE;IACvC,MAAM,OAAO,MAAM,OAAO,OAAO;IACjC,MAAM,OAAO,MAAM,OAAO,OAAO;IACjC,MAAM,OAAO,MAAM,OAAO,OAAO;IACjC,MAAM,OAAO,MAAM,OAAO,OAAO;IACjC,MAAM,OAAO,IAAI,OAAO,IAAI;IAC5B,MAAM,MAAM,MAAM,IAAI;IACtB,MAAM,OAAO,IAAI,MAAM;IACvB,MAAM,MAAM,KAAK;AACjB,SAAK,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,OAAO;AAC1E,SAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO;AAC1F,SAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO;;AAE3F,UAAO,UAAU,KAAK;AACtB,UAAO,UAAU,KAAK;AACtB,UAAO,UAAU,KAAK;;;AAGxB,QAAO;EACN,QAAQ;EACR;EACA;;;AAMF,SAAS,eAAe,IAAI,IAAI,GAAG,GAAG,OAAO,MAAM;CAClD,MAAM,EAAE,OAAO,IAAI,OAAO,KAAK;CAC/B,MAAM,MAAM,KAAK,IAAI,MAAM;CAC3B,MAAM,MAAM,KAAK,IAAI,MAAM;CAC3B,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,IAAI;CACf,MAAM,QAAQ;EACb,CAAC,CAAC,IAAI,CAAC,GAAG;EACV,CAAC,IAAI,CAAC,GAAG;EACT,CAAC,IAAI,GAAG;EACR,CAAC,CAAC,IAAI,GAAG;EACT;CACD,MAAM,UAAU,EAAE;CAClB,IAAI,OAAO;CACX,IAAI,OAAO;CACX,IAAI,OAAO;CACX,IAAI,OAAO;AACX,MAAK,MAAM,CAAC,IAAI,OAAO,OAAO;EAC7B,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK;EAChC,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK;EAChC,MAAM,MAAM,KAAK,MAAM;EACvB,MAAM,MAAM,KAAK,MAAM;AACvB,UAAQ,KAAK,CAAC,IAAI,GAAG,CAAC;AACtB,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,KAAK,KAAM,QAAO;;AAEvB,QAAO;EACN;EACA;EACA;EACA;EACA;EACA;;AAEF,SAAS,gBAAgB,QAAQ,SAAS,IAAI,MAAM;CACnD,MAAM,WAAW,KAAK,YAAY,IAAI;CACtC,MAAM,cAAc,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,KAAK,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG;CACvF,MAAM,aAAa,EAAE;AACrB,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK;EACjC,IAAI,YAAY;EAChB,IAAI,YAAY;AAChB,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC5B,MAAM,QAAQ,QAAQ,IAAI,KAAK,UAAU;AACzC,OAAI,QAAQ,WAAW;AACtB,gBAAY;AACZ,gBAAY;;;AAGd,MAAI,YAAY,KAAK,WAAY;AACjC,MAAI,eAAe,CAAC,YAAY,KAAK,KAAK,WAAW,cAAc,IAAI,aAAa,CAAC,CAAE;EACvF,MAAM,KAAK,OAAO;EAClB,MAAM,KAAK,OAAO,UAAU;EAC5B,MAAM,IAAI,OAAO,IAAI,UAAU;EAC/B,MAAM,IAAI,OAAO,IAAI,UAAU;AAC/B,MAAI,KAAK,KAAK,KAAK,EAAG;EACtB,MAAM,QAAQ,OAAO,WAAW,UAAU;AAC1C,MAAI,CAAC,OAAO,SAAS,MAAM,CAAE;AAC7B,aAAW,KAAK;GACf,IAAI,KAAK,IAAI;GACb,IAAI,KAAK,IAAI;GACb,IAAI,KAAK,IAAI;GACb,IAAI,KAAK,IAAI;GACb,OAAO;GACP,YAAY;GACZ,aAAa;GACb;GACA,CAAC;;CAEH,MAAM,OAAO,IAAI,YAAY,KAAK,aAAa;CAC/C,MAAM,aAAa,EAAE;AACrB,MAAK,MAAM,OAAO,MAAM;EACvB,MAAM,OAAO;EACb,MAAM,KAAK,OAAO,KAAK;EACvB,MAAM,KAAK,OAAO,UAAU,KAAK;EACjC,MAAM,IAAI,OAAO,IAAI,UAAU,KAAK;EACpC,MAAM,IAAI,OAAO,IAAI,UAAU,KAAK;EACpC,MAAM,EAAE,SAAS,MAAM,MAAM,MAAM,SAAS,eAAe,IAAI,IAAI,GAAG,GAAG,KAAK,OAAO,KAAK;EAC1F,MAAM,KAAK,KAAK;EAChB,MAAM,KAAK,KAAK;EAChB,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC;EAC/C,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC;EAC/C,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,QAAQ;EACvD,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,QAAQ;AACxD,aAAW,KAAK;GACf,UAAU,KAAK,WAAW,KAAK,eAAe,SAAS,KAAK;GAC5D,YAAY,KAAK;GACjB,OAAO,KAAK;GACZ,aAAa;IACZ;IACA;IACA;IACA;IACA,aAAa,KAAK,IAAI,UAAU,KAAK;IACrC,aAAa,KAAK,IAAI,UAAU,KAAK;IACrC,iBAAiB,KAAK,IAAI,QAAQ,KAAK;IACvC,kBAAkB,KAAK,IAAI,SAAS,KAAK;IACzC,OAAO,KAAK;IACZ;GACD;GACA,CAAC;;AAEH,QAAO,EAAE,YAAY;;AAKtB,SAAS,iBAAiB,QAAQ,SAAS,MAAM;CAChD,MAAM,EAAE,OAAO,IAAI,OAAO,KAAK;CAC/B,MAAM,EAAE,aAAa,IAAI,cAAc,OAAO;CAC9C,MAAM,SAAS,EAAE;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK;EACjC,MAAM,QAAQ,OAAO,IAAI,UAAU;AACnC,MAAI,QAAQ,KAAK,WAAY;EAC7B,MAAM,KAAK,OAAO;EAClB,MAAM,KAAK,OAAO,UAAU;EAC5B,MAAM,IAAI,OAAO,IAAI,UAAU;EAC/B,MAAM,IAAI,OAAO,IAAI,UAAU;AAC/B,MAAI,KAAK,KAAK,KAAK,EAAG;EACtB,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,CAAC;EAC/D,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,CAAC;EAC/D,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,CAAC;EAC/D,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,CAAC;EAC/D,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,GAAG;EACjC,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,GAAG;EACjC,MAAM,YAAY,EAAE;AACpB,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;GAC5B,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,KAAK,MAAM,MAAM,CAAC;GACtF,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU,KAAK,MAAM,MAAM,CAAC;GACtF,MAAM,MAAM,QAAQ,IAAI,IAAI,KAAK,UAAU;AAC3C,aAAU,KAAK;IACd,GAAG;IACH,GAAG;IACH,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACzC,CAAC;;AAEH,SAAO,KAAK;GACX;GACA,aAAa;IACZ,SAAS;IACT,SAAS;IACT,OAAO;IACP,QAAQ;IACR,aAAa,KAAK,IAAI,KAAK,KAAK;IAChC,aAAa,KAAK,IAAI,KAAK,KAAK;IAChC,iBAAiB,KAAK,IAAI,OAAO,KAAK;IACtC,kBAAkB,KAAK,IAAI,OAAO,KAAK;IACvC;GACD;GACA,CAAC;;AAEH,QAAO,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AACxC,QAAO,EAAE,QAAQ;;;;;;;;;;;;AAelB,SAAS,oBAAoB,QAAQ,OAAO,SAAS,IAAI,UAAU,MAAM;CACxE,MAAM,OAAO,gBAAgB,QAAQ,SAAS,IAAI,KAAK;CACvD,MAAM,aAAa,KAAK,KAAK,QAAQ,iBAAiB,KAAK,KAAK,CAAC;CACjE,MAAM,QAAQ,EAAE;CAChB,MAAM,EAAE,OAAO,IAAI,IAAI,SAAS,KAAK;CACrC,MAAM,EAAE,aAAa,IAAI,cAAc,OAAO;CAC9C,MAAM,gBAAgB,KAAK,iBAAiB;CAC5C,MAAM,UAAU,KAAK,kBAAkB,KAAK,IAAI,KAAK,gBAAgB;CACrE,MAAM,YAAY,KAAK,IAAI,iBAAiB,IAAI,eAAe;CAC/D,MAAM,OAAO,gBAAgB;CAC7B,MAAM,OAAO,gBAAgB;CAC7B,MAAM,gBAAgB,UAAU,IAAI,KAAK,IAAI,WAAW;AACxD,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACrC,MAAM,MAAM,KAAK;EACjB,MAAM,MAAM,WAAW;EACvB,MAAM,aAAa,IAAI,MAAM,UAAU,IAAI;EAC3C,MAAM,OAAO;EACb,MAAM,QAAQ;EACd,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,KAAK,MAAM,MAAM,GAAG,MAAM;EAClE,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,KAAK,MAAM,MAAM,GAAG,MAAM;EAClE,MAAM,MAAM,KAAK,IAAI,KAAK,GAAG,KAAK,MAAM,IAAI,KAAK,MAAM,MAAM,GAAG,MAAM;EACtE,MAAM,MAAM,KAAK,IAAI,KAAK,GAAG,KAAK,MAAM,IAAI,KAAK,MAAM,MAAM,GAAG,MAAM;AACtE,MAAI,MAAM,OAAO,MAAM,IAAK;EAC5B,MAAM,OAAO,IAAI,WAAW,KAAK,GAAG;EACpC,MAAM,MAAM,WAAW;EACvB,IAAI,OAAO;AACX,OAAK,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM;GACnC,MAAM,OAAO,KAAK,KAAK,SAAS;GAChC,MAAM,MAAM,KAAK,MAAM,IAAI;GAC3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAM,KAAK,IAAI,WAAW,GAAG,MAAM,EAAE;GAC3C,MAAM,UAAU,KAAK;AACrB,QAAK,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM;IACnC,MAAM,OAAO,KAAK,KAAK,SAAS;IAChC,MAAM,MAAM,KAAK,MAAM,IAAI;IAC3B,MAAM,KAAK,MAAM;IACjB,MAAM,MAAM,KAAK,IAAI,WAAW,GAAG,MAAM,EAAE;IAC3C,IAAI,MAAM;AACV,SAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;KAC5B,MAAM,QAAQ,OAAO,YAAY,IAAI;AACrC,SAAI,UAAU,EAAG;KACjB,MAAM,UAAU,IAAI,WAAW;KAC/B,MAAM,MAAM,MAAM,UAAU,MAAM,WAAW;KAC7C,MAAM,MAAM,MAAM,UAAU,MAAM,WAAW;KAC7C,MAAM,MAAM,MAAM,UAAU,MAAM,WAAW;KAC7C,MAAM,MAAM,MAAM,UAAU,MAAM,WAAW;KAC7C,MAAM,SAAS,OAAO,IAAI,OAAO,IAAI,MAAM,MAAM,MAAM,IAAI,MAAM,OAAO,IAAI,MAAM,KAAK,MAAM,KAAK;AAClG,YAAO,QAAQ;;AAEhB,QAAI,WAAW,GACd;SAAI,MAAM,WAAW;AACpB,WAAK,UAAU,MAAM;AACrB;;WAEK;KACN,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,IAAI;KACpE,IAAI,YAAY;AAChB,SAAI,SAAS,KAAM,aAAY;cACtB,QAAQ,KAAM,cAAa,QAAQ,QAAQ;KACpD,MAAM,WAAW,KAAK,MAAM,YAAY,IAAI;AAC5C,SAAI,WAAW,GAAG;AACjB,WAAK,UAAU,MAAM;AACrB,cAAQ;;;;;AAKZ,SAAO,KAAK,MAAM,KAAK;AACvB,MAAI,SAAS,EAAG;AAChB,QAAM,KAAK;GACV,UAAU,IAAI;GACd;GACA,OAAO;GACP,QAAQ;GACR;GACA,UAAU,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM;GAC3C,gBAAgB;GAChB,CAAC;;AAEH,QAAO;EACN;EACA;EACA;;;AAMF,MAAM,sBAAsB;CAC3B,MAAM;CACN,UAAU;CACV,WAAW;CACX,UAAU;CACV,WAAW;CACX,eAAe;CACf,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,aAAa;CACb,UAAU;CACV,WAAW;CACX,WAAW;CACX,YAAY;CACZ,YAAY;CACZ,aAAa;CACb;AACD,MAAM,2BAA2B;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;AAED,MAAM,oBAAoB;CACzB;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EACC,MAAM,oBAAoB;EAC1B,IAAI,oBAAoB;EACxB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;EA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"}