@stream-io/video-filters-web 0.8.2 → 0.8.4

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 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/compatibility.ts","../../src/legacy/helpers/webglHelper.ts","../../src/legacy/webgl2/backgroundBlurStage.ts","../../src/legacy/webgl2/backgroundImageStage.ts","../../src/legacy/webgl2/jointBilateralFilterStage.ts","../../src/legacy/webgl2/resizingStage.ts","../../src/legacy/webgl2/softmaxStage.ts","../../src/legacy/webgl2/webgl2Pipeline.ts","../../src/legacy/segmentation.ts","../../src/legacy/createRenderer.ts","../src/legacy/tflite-simd.js","../../src/version.ts","../../src/legacy/tflite.ts","../../src/mediapipe.ts","../../src/types.ts","../../src/WebGLRenderer.ts","../../src/FallbackGenerator.ts","../../src/FallbackProcessor.ts","../../src/BaseVideoProcessor.ts","../../src/VirtualBackground.ts","../../src/FullScreenBlurRenderer.ts","../../src/FullScreenBlur.ts"],"sourcesContent":["import { simd } from 'wasm-feature-detect';\n\nexport type PlatformSupportFlags = {\n /**\n * Forces support for mobile devices, although performance isn't optimal.\n */\n forceMobileSupport?: boolean;\n\n /**\n * Forces support for Safari, although in cases where the tab is put in the background,\n * the FPS can drop significantly or freeze completely due to intensive timer throttling.\n */\n forceSafariSupport?: boolean;\n};\n\n/**\n * Checks if the current platform is a mobile device.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent\n */\nconst isMobile = () => /Mobi/i.test(navigator.userAgent);\n\n/**\n * Checks whether the current browser is Safari.\n */\nconst isSafari = () =>\n /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Runs a check to see if the current platform supports\n * the necessary APIs required for the video filters.\n */\nexport const isPlatformSupported = async ({\n forceMobileSupport = false,\n forceSafariSupport = false,\n}: PlatformSupportFlags = {}) =>\n typeof document !== 'undefined' &&\n typeof window !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n // we don't support mobile devices yet due to performance issues\n (forceMobileSupport || !isMobile()) &&\n // Safari has issues with timer throttling, causing low FPS when the tab goes to the background\n (forceSafariSupport || !isSafari()) &&\n typeof WebAssembly !== 'undefined' &&\n !!window.WebGL2RenderingContext && // WebGL2 is required for the video filters\n !!document.createElement('canvas').getContext('webgl2') &&\n (await simd()); // SIMD is required for the wasm module\n\n/**\n * Runs a check to see if the current platform supports\n * the necessary APIs required for the MediaPipe-based video filters.\n */\nexport const isMediaPipePlatformSupported = async ({\n forceMobileSupport = false,\n forceSafariSupport = false,\n}: PlatformSupportFlags = {}) =>\n typeof document !== 'undefined' &&\n typeof window !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n // we don't support mobile devices yet due to performance issues\n (forceMobileSupport || !isMobile()) &&\n // Safari has issues with timer throttling, causing low FPS when the tab goes to the background\n (forceSafariSupport || !isSafari()) &&\n typeof WebAssembly !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' && // OffscreenCanvas is required for efficient rendering\n !!window.WebGL2RenderingContext && // WebGL2 is required for the video filters\n !!new OffscreenCanvas(1, 1).getContext('webgl2') &&\n typeof VideoFrame !== 'undefined' && // VideoFrame API is required for frame processing\n typeof createImageBitmap !== 'undefined'; // createImageBitmap is required for background image processing\n","/**\n * Use it along with boyswan.glsl-literal VSCode extension\n * to get GLSL syntax highlighting.\n * https://marketplace.visualstudio.com/items?itemName=boyswan.glsl-literal\n *\n * On VSCode OSS, boyswan.glsl-literal requires slevesque.shader extension\n * to be installed as well.\n * https://marketplace.visualstudio.com/items?itemName=slevesque.shader\n */\nexport const glsl = String.raw;\n\nexport function createPipelineStageProgram(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n) {\n const program = createProgram(gl, vertexShader, fragmentShader);\n\n const positionAttributeLocation = gl.getAttribLocation(program, 'a_position');\n gl.enableVertexAttribArray(positionAttributeLocation);\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);\n\n const texCoordAttributeLocation = gl.getAttribLocation(program, 'a_texCoord');\n gl.enableVertexAttribArray(texCoordAttributeLocation);\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n gl.vertexAttribPointer(texCoordAttributeLocation, 2, gl.FLOAT, false, 0, 0);\n\n return program;\n}\n\nexport function createProgram(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader,\n) {\n const program = gl.createProgram()!;\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error(\n `Could not link WebGL program: ${gl.getProgramInfoLog(program)}`,\n );\n }\n return program;\n}\n\nexport function compileShader(\n gl: WebGL2RenderingContext,\n shaderType: number,\n shaderSource: string,\n) {\n const shader = gl.createShader(shaderType)!;\n gl.shaderSource(shader, shaderSource);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error(`Could not compile shader: ${gl.getShaderInfoLog(shader)}`);\n }\n return shader;\n}\n\nexport function createTexture(\n gl: WebGL2RenderingContext,\n internalformat: number,\n width: number,\n height: number,\n minFilter = gl.NEAREST,\n magFilter = gl.NEAREST,\n) {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);\n gl.texStorage2D(gl.TEXTURE_2D, 1, internalformat, width, height);\n return texture;\n}\n\nexport async function readPixelsAsync(\n gl: WebGL2RenderingContext,\n x: number,\n y: number,\n width: number,\n height: number,\n format: number,\n type: number,\n dest: ArrayBufferView,\n) {\n const buf = gl.createBuffer()!;\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\n gl.bufferData(gl.PIXEL_PACK_BUFFER, dest.byteLength, gl.STREAM_READ);\n gl.readPixels(x, y, width, height, format, type, 0);\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\n\n await getBufferSubDataAsync(gl, gl.PIXEL_PACK_BUFFER, buf, 0, dest);\n\n gl.deleteBuffer(buf);\n return dest;\n}\n\nasync function getBufferSubDataAsync(\n gl: WebGL2RenderingContext,\n target: number,\n buffer: WebGLBuffer,\n srcByteOffset: number,\n dstBuffer: ArrayBufferView,\n dstOffset?: number,\n length?: number,\n) {\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\n gl.flush();\n if (!sync) return;\n\n const res = await clientWaitAsync(gl, sync);\n gl.deleteSync(sync);\n\n if (res !== gl.WAIT_FAILED) {\n gl.bindBuffer(target, buffer);\n gl.getBufferSubData(target, srcByteOffset, dstBuffer, dstOffset, length);\n gl.bindBuffer(target, null);\n }\n}\n\nfunction clientWaitAsync(gl: WebGL2RenderingContext, sync: WebGLSync) {\n return new Promise<number>((resolve) => {\n function test() {\n const res = gl.clientWaitSync(sync, 0, 0);\n if (res === gl.WAIT_FAILED) {\n resolve(res);\n return;\n }\n if (res === gl.TIMEOUT_EXPIRED) {\n setTimeout(test);\n return;\n }\n resolve(res);\n }\n setTimeout(test);\n });\n}\n","import {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper';\nimport { BackgroundBlurLevel } from '../../types';\n\nexport type BackgroundBlurStage = {\n render(): void;\n updateCoverage(coverage: [number, number]): void;\n cleanUp(): void;\n};\n\nexport function buildBackgroundBlurStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n canvas: HTMLCanvasElement,\n blurLevel: BackgroundBlurLevel,\n): BackgroundBlurStage {\n const blurPass = buildBlurPass(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n canvas,\n blurLevel,\n );\n const blendPass = buildBlendPass(gl, positionBuffer, texCoordBuffer, canvas);\n\n function render() {\n blurPass.render();\n blendPass.render();\n }\n\n function updateCoverage(coverage: [number, number]) {\n blendPass.updateCoverage(coverage);\n }\n\n function cleanUp() {\n blendPass.cleanUp();\n blurPass.cleanUp();\n }\n\n return {\n render,\n updateCoverage,\n cleanUp,\n };\n}\n\nfunction buildBlurPass(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n canvas: HTMLCanvasElement,\n blurLevel: BackgroundBlurLevel,\n) {\n const sigma =\n typeof blurLevel === 'number'\n ? blurLevel\n : blurLevel === 'low'\n ? 2\n : blurLevel === 'medium'\n ? 4\n : 6;\n const windowSize = Math.max(1, Math.floor(sigma * 3));\n const offset = new Array<number>(windowSize).fill(0).map((v, index) => index);\n const variance = sigma ** 2;\n const weights = offset.map((x) => {\n const m = sigma * Math.sqrt(2 * Math.PI);\n const e = Math.exp(-(x ** 2) / (2 * variance));\n return e / m;\n });\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform vec2 u_texelSize;\n\n in vec2 v_texCoord;\n out vec4 outColor;\n\n const float offset[${windowSize}] = float[](${offset.map((i) => i.toFixed(10)).join(', ')});\n const float weight[${windowSize}] = float[](${weights.map((i) => i.toFixed(10)).join(', ')});\n\n void main() {\n vec4 centerColor = texture(u_inputFrame, v_texCoord);\n float personMask = texture(u_personMask, v_texCoord).a;\n\n vec4 frameColor = centerColor * weight[0] * (1.0 - personMask);\n\n for (int i = 1; i < ${windowSize}; i++) {\n vec2 offset = vec2(offset[i]) * u_texelSize;\n\n vec2 texCoord = v_texCoord + offset;\n frameColor += texture(u_inputFrame, texCoord)\n * weight[i]\n * (1.0 - texture(u_personMask, texCoord).a);\n\n texCoord = v_texCoord - offset;\n frameColor += texture(u_inputFrame, texCoord)\n * weight[i]\n * (1.0 - texture(u_personMask, texCoord).a);\n }\n outColor = vec4(frameColor.rgb + (1.0 - frameColor.a) * centerColor.rgb, 1.0);\n }\n `;\n\n const scale = 0.5;\n const outputWidth = canvas.width * scale;\n const outputHeight = canvas.height * scale;\n const texelWidth = 1 / outputWidth;\n const texelHeight = 1 / outputHeight;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask');\n const texelSizeLocation = gl.getUniformLocation(program, 'u_texelSize');\n const texture1 = createTexture(\n gl,\n gl.RGBA8,\n outputWidth,\n outputHeight,\n gl.NEAREST,\n // @ts-expect-error types are incomplete\n gl.LINEAR,\n );\n const texture2 = createTexture(\n gl,\n gl.RGBA8,\n outputWidth,\n outputHeight,\n gl.NEAREST,\n // @ts-expect-error types are incomplete\n gl.LINEAR,\n );\n\n const frameBuffer1 = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer1);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture1,\n 0,\n );\n\n const frameBuffer2 = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer2);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture2,\n 0,\n );\n\n gl.useProgram(program);\n gl.uniform1i(personMaskLocation, 1);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, personMaskTexture);\n\n for (let i = 0; i < 3; i++) {\n gl.uniform2f(texelSizeLocation, 0, texelHeight);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer1);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, texture1);\n gl.uniform1i(inputFrameLocation, 2);\n\n gl.uniform2f(texelSizeLocation, texelWidth, 0);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer2);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n gl.bindTexture(gl.TEXTURE_2D, texture2);\n }\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer2);\n gl.deleteFramebuffer(frameBuffer1);\n gl.deleteTexture(texture2);\n gl.deleteTexture(texture1);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return {\n render,\n cleanUp,\n };\n}\n\nfunction buildBlendPass(\n gl: WebGL2RenderingContext,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n canvas: HTMLCanvasElement,\n) {\n const vertexShaderSource = glsl`#version 300 es\n\n in vec2 a_position;\n in vec2 a_texCoord;\n\n out vec2 v_texCoord;\n\n void main() {\n // Flipping Y is required when rendering to canvas\n gl_Position = vec4(a_position * vec2(1.0, -1.0), 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `;\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform sampler2D u_blurredInputFrame;\n uniform vec2 u_coverage;\n\n in vec2 v_texCoord;\n\n out vec4 outColor;\n\n void main() {\n vec3 color = texture(u_inputFrame, v_texCoord).rgb;\n vec3 blurredColor = texture(u_blurredInputFrame, v_texCoord).rgb;\n float personMask = texture(u_personMask, v_texCoord).a;\n personMask = smoothstep(u_coverage.x, u_coverage.y, personMask);\n outColor = vec4(mix(blurredColor, color, personMask), 1.0);\n }\n `;\n\n const { width: outputWidth, height: outputHeight } = canvas;\n\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask');\n const blurredInputFrame = gl.getUniformLocation(\n program,\n 'u_blurredInputFrame',\n );\n const coverageLocation = gl.getUniformLocation(program, 'u_coverage');\n\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n gl.uniform1i(personMaskLocation, 1);\n gl.uniform1i(blurredInputFrame, 2);\n gl.uniform2f(coverageLocation, 0, 1);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function updateCoverage(coverage: [number, number]) {\n gl.useProgram(program);\n gl.uniform2f(coverageLocation, coverage[0], coverage[1]);\n }\n\n function cleanUp() {\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n gl.deleteShader(vertexShader);\n }\n\n return {\n render,\n updateCoverage,\n cleanUp,\n };\n}\n","import {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper';\n\nexport type BackgroundImageStage = {\n render(): void;\n updateCoverage(coverage: [number, number]): void;\n updateLightWrapping(lightWrapping: number): void;\n updateBlendMode(blendMode: 'screen' | 'linearDodge'): void;\n cleanUp(): void;\n};\n\nexport function buildBackgroundImageStage(\n gl: WebGL2RenderingContext,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n backgroundImage: HTMLImageElement | undefined,\n canvas: HTMLCanvasElement,\n): BackgroundImageStage {\n const vertexShaderSource = glsl`#version 300 es\n\n uniform vec2 u_backgroundScale;\n uniform vec2 u_backgroundOffset;\n\n in vec2 a_position;\n in vec2 a_texCoord;\n\n out vec2 v_texCoord;\n out vec2 v_backgroundCoord;\n\n void main() {\n // Flipping Y is required when rendering to canvas\n gl_Position = vec4(a_position * vec2(1.0, -1.0), 0.0, 1.0);\n v_texCoord = a_texCoord;\n v_backgroundCoord = a_texCoord * u_backgroundScale + u_backgroundOffset;\n }\n `;\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform sampler2D u_background;\n uniform vec2 u_coverage;\n uniform float u_lightWrapping;\n uniform float u_blendMode;\n\n in vec2 v_texCoord;\n in vec2 v_backgroundCoord;\n\n out vec4 outColor;\n\n vec3 screen(vec3 a, vec3 b) {\n return 1.0 - (1.0 - a) * (1.0 - b);\n }\n\n vec3 linearDodge(vec3 a, vec3 b) {\n return a + b;\n }\n\n void main() {\n vec3 frameColor = texture(u_inputFrame, v_texCoord).rgb;\n vec3 backgroundColor = texture(u_background, v_backgroundCoord).rgb;\n float personMask = texture(u_personMask, v_texCoord).a;\n float lightWrapMask = 1.0 - max(0.0, personMask - u_coverage.y) / (1.0 - u_coverage.y);\n vec3 lightWrap = u_lightWrapping * lightWrapMask * backgroundColor;\n\n frameColor = u_blendMode * linearDodge(frameColor, lightWrap)\n + (1.0 - u_blendMode) * screen(frameColor, lightWrap);\n personMask = smoothstep(u_coverage.x, u_coverage.y, personMask);\n outColor = vec4(frameColor * personMask + backgroundColor * (1.0 - personMask), 1.0);\n }\n `;\n\n const { width: outputWidth, height: outputHeight } = canvas;\n const outputRatio = outputWidth / outputHeight;\n\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const backgroundScaleLocation = gl.getUniformLocation(\n program,\n 'u_backgroundScale',\n );\n const backgroundOffsetLocation = gl.getUniformLocation(\n program,\n 'u_backgroundOffset',\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask');\n const backgroundLocation = gl.getUniformLocation(program, 'u_background');\n const coverageLocation = gl.getUniformLocation(program, 'u_coverage');\n const lightWrappingLocation = gl.getUniformLocation(\n program,\n 'u_lightWrapping',\n );\n const blendModeLocation = gl.getUniformLocation(program, 'u_blendMode');\n\n gl.useProgram(program);\n gl.uniform2f(backgroundScaleLocation, 1, 1);\n gl.uniform2f(backgroundOffsetLocation, 0, 0);\n gl.uniform1i(inputFrameLocation, 0);\n gl.uniform1i(personMaskLocation, 1);\n gl.uniform2f(coverageLocation, 0, 1);\n gl.uniform1f(lightWrappingLocation, 0);\n gl.uniform1f(blendModeLocation, 0);\n\n let backgroundTexture: WebGLTexture | null = null;\n // TODO Find a better to handle background being loaded\n if (backgroundImage?.complete) {\n updateBackgroundImage(backgroundImage);\n } else if (backgroundImage) {\n backgroundImage.onload = () => {\n updateBackgroundImage(backgroundImage);\n };\n }\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, personMaskTexture);\n if (backgroundTexture !== null) {\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, backgroundTexture);\n // TODO Handle correctly the background not loaded yet\n gl.uniform1i(backgroundLocation, 2);\n }\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function updateBackgroundImage(bgImage: HTMLImageElement) {\n backgroundTexture = createTexture(\n gl,\n gl.RGBA8,\n bgImage.naturalWidth,\n bgImage.naturalHeight,\n // @ts-expect-error types are incomplete\n gl.LINEAR,\n gl.LINEAR,\n );\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n bgImage.naturalWidth,\n bgImage.naturalHeight,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n bgImage,\n );\n\n let xOffset = 0;\n let yOffset = 0;\n let backgroundWidth = bgImage.naturalWidth;\n let backgroundHeight = bgImage.naturalHeight;\n const backgroundRatio = backgroundWidth / backgroundHeight;\n if (backgroundRatio < outputRatio) {\n backgroundHeight = backgroundWidth / outputRatio;\n yOffset = (bgImage.naturalHeight - backgroundHeight) / 2;\n } else {\n backgroundWidth = backgroundHeight * outputRatio;\n xOffset = (bgImage.naturalWidth - backgroundWidth) / 2;\n }\n\n const xScale = backgroundWidth / bgImage.naturalWidth;\n const yScale = backgroundHeight / bgImage.naturalHeight;\n xOffset /= bgImage.naturalWidth;\n yOffset /= bgImage.naturalHeight;\n\n gl.uniform2f(backgroundScaleLocation, xScale, yScale);\n gl.uniform2f(backgroundOffsetLocation, xOffset, yOffset);\n }\n\n function updateCoverage(coverage: [number, number]) {\n gl.useProgram(program);\n gl.uniform2f(coverageLocation, coverage[0], coverage[1]);\n }\n\n function updateLightWrapping(lightWrapping: number) {\n gl.useProgram(program);\n gl.uniform1f(lightWrappingLocation, lightWrapping);\n }\n\n function updateBlendMode(blendMode: 'screen' | 'linearDodge') {\n gl.useProgram(program);\n gl.uniform1f(blendModeLocation, blendMode === 'screen' ? 0 : 1);\n }\n\n function cleanUp() {\n gl.deleteTexture(backgroundTexture);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n gl.deleteShader(vertexShader);\n }\n\n return {\n render,\n updateCoverage,\n updateLightWrapping,\n updateBlendMode,\n cleanUp,\n };\n}\n","import {\n compileShader,\n createPipelineStageProgram,\n glsl,\n} from '../helpers/webglHelper';\nimport { SegmentationParams } from '../segmentation';\n\nexport function buildJointBilateralFilterStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n inputTexture: WebGLTexture,\n outputTexture: WebGLTexture,\n canvas: HTMLCanvasElement,\n segmentationConfig: SegmentationParams,\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_segmentationMask;\n uniform vec2 u_texelSize;\n uniform float u_step;\n uniform float u_radius;\n uniform float u_offset;\n uniform float u_sigmaTexel;\n uniform float u_sigmaColor;\n\n in vec2 v_texCoord;\n out vec4 outColor;\n\n float gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n }\n\n void main() {\n vec2 centerCoord = v_texCoord;\n vec3 centerColor = texture(u_inputFrame, centerCoord).rgb;\n float newVal = 0.0;\n\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n\n // Subsample kernel space.\n for (float i = -u_radius + u_offset; i <= u_radius; i += u_step) {\n for (float j = -u_radius + u_offset; j <= u_radius; j += u_step) {\n vec2 shift = vec2(j, i) * u_texelSize;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(u_inputFrame, coord).rgb;\n float outVal = texture(u_segmentationMask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), u_sigmaTexel);\n colorWeight = gaussian(distance(centerColor, frameColor), u_sigmaColor);\n totalWeight += spaceWeight * colorWeight;\n\n newVal += spaceWeight * colorWeight * outVal;\n }\n }\n newVal /= totalWeight;\n\n outColor = vec4(vec3(0.0), newVal);\n }\n `;\n\n const { width: segmentationWidth, height: segmentationHeight } =\n segmentationConfig;\n const { width: outputWidth, height: outputHeight } = canvas;\n const texelWidth = 1 / outputWidth;\n const texelHeight = 1 / outputHeight;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const segmentationMaskLocation = gl.getUniformLocation(\n program,\n 'u_segmentationMask',\n );\n const texelSizeLocation = gl.getUniformLocation(program, 'u_texelSize');\n const stepLocation = gl.getUniformLocation(program, 'u_step');\n const radiusLocation = gl.getUniformLocation(program, 'u_radius');\n const offsetLocation = gl.getUniformLocation(program, 'u_offset');\n const sigmaTexelLocation = gl.getUniformLocation(program, 'u_sigmaTexel');\n const sigmaColorLocation = gl.getUniformLocation(program, 'u_sigmaColor');\n\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0,\n );\n\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n gl.uniform1i(segmentationMaskLocation, 1);\n gl.uniform2f(texelSizeLocation, texelWidth, texelHeight);\n\n // Ensures default values are configured to prevent infinite\n // loop in fragment shader\n updateSigmaSpace(0);\n updateSigmaColor(0);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, inputTexture);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function updateSigmaSpace(sigmaSpace: number) {\n sigmaSpace *= Math.max(\n outputWidth / segmentationWidth,\n outputHeight / segmentationHeight,\n );\n\n const kSparsityFactor = 0.66; // Higher is sparser.\n const step = Math.max(1, Math.sqrt(sigmaSpace) * kSparsityFactor);\n const radius = sigmaSpace;\n const offset = step > 1 ? step * 0.5 : 0;\n const sigmaTexel = Math.max(texelWidth, texelHeight) * sigmaSpace;\n\n gl.useProgram(program);\n gl.uniform1f(stepLocation, step);\n gl.uniform1f(radiusLocation, radius);\n gl.uniform1f(offsetLocation, offset);\n gl.uniform1f(sigmaTexelLocation, sigmaTexel);\n }\n\n function updateSigmaColor(sigmaColor: number) {\n gl.useProgram(program);\n gl.uniform1f(sigmaColorLocation, sigmaColor);\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return { render, updateSigmaSpace, updateSigmaColor, cleanUp };\n}\n","import { TFLite } from '../tflite';\nimport {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n readPixelsAsync,\n} from '../helpers/webglHelper';\nimport { SegmentationParams } from '../segmentation';\n\nexport function buildResizingStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n tflite: TFLite,\n segmentationConfig: SegmentationParams,\n onError?: (error: any) => void,\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n uniform sampler2D u_inputFrame;\n in vec2 v_texCoord;\n out vec4 outColor;\n\n void main() {\n outColor = texture(u_inputFrame, v_texCoord);\n }\n `;\n\n // TFLite memory will be accessed as float32\n const tfliteInputMemoryOffset = tflite._getInputMemoryOffset() / 4;\n\n const { width: outputWidth, height: outputHeight } = segmentationConfig;\n const outputPixelCount = outputWidth * outputHeight;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const outputTexture = createTexture(gl, gl.RGBA8, outputWidth, outputHeight);\n\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0,\n );\n const outputPixels = new Uint8Array(outputPixelCount * 4);\n\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n // Downloads pixels asynchronously from GPU while rendering the current frame.\n // The pixels will be available in the next frame render which results\n // in offsets in the segmentation output but increases the frame rate.\n readPixelsAsync(\n gl,\n 0,\n 0,\n outputWidth,\n outputHeight,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n outputPixels,\n ).catch((error: any) => {\n onError?.(error);\n });\n\n for (let i = 0; i < outputPixelCount; i++) {\n const tfliteIndex = tfliteInputMemoryOffset + i * 3;\n const outputIndex = i * 4;\n tflite.HEAPF32[tfliteIndex] = outputPixels[outputIndex] / 255;\n tflite.HEAPF32[tfliteIndex + 1] = outputPixels[outputIndex + 1] / 255;\n tflite.HEAPF32[tfliteIndex + 2] = outputPixels[outputIndex + 2] / 255;\n }\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer);\n gl.deleteTexture(outputTexture);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return { render, cleanUp };\n}\n","import { TFLite } from '../tflite';\nimport {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper';\nimport { SegmentationParams } from '../segmentation';\n\nexport function buildSoftmaxStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n tflite: TFLite,\n outputTexture: WebGLTexture,\n segmentationConfig: SegmentationParams,\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputSegmentation;\n in vec2 v_texCoord;\n out vec4 outColor;\n\n void main() {\n vec2 segmentation = texture(u_inputSegmentation, v_texCoord).rg;\n float shift = max(segmentation.r, segmentation.g);\n float backgroundExp = exp(segmentation.r - shift);\n float personExp = exp(segmentation.g - shift);\n outColor = vec4(vec3(0.0), personExp / (backgroundExp + personExp));\n }\n `;\n\n // TFLite memory will be accessed as float32\n const tfliteOutputMemoryOffset = tflite._getOutputMemoryOffset() / 4;\n const { width: segmentationWidth, height: segmentationHeight } =\n segmentationConfig;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputLocation = gl.getUniformLocation(program, 'u_inputSegmentation');\n const inputTexture = createTexture(\n gl,\n gl.RG32F,\n segmentationWidth,\n segmentationHeight,\n );\n\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0,\n );\n\n gl.useProgram(program);\n gl.uniform1i(inputLocation, 1);\n\n function render() {\n gl.viewport(0, 0, segmentationWidth, segmentationHeight);\n gl.useProgram(program);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, inputTexture);\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n segmentationWidth,\n segmentationHeight,\n gl.RG,\n gl.FLOAT,\n tflite.HEAPF32,\n tfliteOutputMemoryOffset,\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer);\n gl.deleteTexture(inputTexture);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return { render, cleanUp };\n}\n","import { TFLite } from '../tflite';\nimport { compileShader, createTexture, glsl } from '../helpers/webglHelper';\nimport {\n BackgroundBlurStage,\n buildBackgroundBlurStage,\n} from './backgroundBlurStage';\nimport {\n BackgroundImageStage,\n buildBackgroundImageStage,\n} from './backgroundImageStage';\nimport { buildJointBilateralFilterStage } from './jointBilateralFilterStage';\nimport { buildResizingStage } from './resizingStage';\nimport { buildSoftmaxStage } from './softmaxStage';\nimport { SegmentationParams } from '../segmentation';\nimport type { BackgroundBlurLevel, BackgroundFilter } from '../../types';\n\nexport function buildWebGL2Pipeline(\n videoSource: HTMLVideoElement,\n backgroundImage: HTMLImageElement | undefined,\n blurLevel: BackgroundBlurLevel | undefined,\n backgroundFilter: BackgroundFilter,\n canvas: HTMLCanvasElement,\n tflite: TFLite,\n segmentationConfig: SegmentationParams,\n onError?: (error: any) => void,\n) {\n const gl = canvas.getContext('webgl2')!;\n if (!gl) throw new Error('WebGL2 is not supported');\n if (gl.isContextLost()) throw new Error('WebGL2 context was lost');\n\n const { width: frameWidth, height: frameHeight } = videoSource;\n const { width: segmentationWidth, height: segmentationHeight } =\n segmentationConfig;\n\n const vertexShaderSource = glsl`#version 300 es\n\n in vec2 a_position;\n in vec2 a_texCoord;\n out vec2 v_texCoord;\n\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `;\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n\n const vertexArray = gl.createVertexArray();\n gl.bindVertexArray(vertexArray);\n\n const positionBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0]),\n gl.STATIC_DRAW,\n );\n\n const texCoordBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0]),\n gl.STATIC_DRAW,\n );\n\n // We don't use texStorage2D here because texImage2D seems faster\n // to upload video texture than texSubImage2D even though the latter\n // is supposed to be the recommended way:\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#use_texstorage_to_create_textures\n const inputFrameTexture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, inputFrameTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n // TODO Rename segmentation and person mask to be more specific\n const segmentationTexture = createTexture(\n gl,\n gl.RGBA8,\n segmentationWidth,\n segmentationHeight,\n )!;\n const personMaskTexture = createTexture(\n gl,\n gl.RGBA8,\n frameWidth,\n frameHeight,\n )!;\n\n const resizingStage = buildResizingStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n tflite,\n segmentationConfig,\n onError,\n );\n const loadSegmentationStage = buildSoftmaxStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n tflite,\n segmentationTexture,\n segmentationConfig,\n );\n\n const jointBilateralFilterStage = buildJointBilateralFilterStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n segmentationTexture,\n personMaskTexture,\n canvas,\n segmentationConfig,\n );\n const backgroundStage =\n backgroundFilter === 'blur'\n ? buildBackgroundBlurStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n canvas,\n blurLevel || 'high',\n )\n : buildBackgroundImageStage(\n gl,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n backgroundImage,\n canvas,\n );\n\n function render() {\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, inputFrameTexture);\n\n // texImage2D seems faster than texSubImage2D to upload\n // video texture\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n videoSource,\n );\n\n gl.bindVertexArray(vertexArray);\n\n resizingStage.render();\n\n tflite._runInference();\n\n loadSegmentationStage.render();\n jointBilateralFilterStage.render();\n backgroundStage.render();\n }\n\n function updatePostProcessingConfig() {\n jointBilateralFilterStage.updateSigmaSpace(1);\n jointBilateralFilterStage.updateSigmaColor(0.1);\n\n if (backgroundFilter === 'image') {\n const backgroundImageStage = backgroundStage as BackgroundImageStage;\n backgroundImageStage.updateCoverage([0.5, 0.75]);\n backgroundImageStage.updateLightWrapping(0.3);\n backgroundImageStage.updateBlendMode('screen');\n } else if (backgroundFilter === 'blur') {\n const backgroundBlurStage = backgroundStage as BackgroundBlurStage;\n backgroundBlurStage.updateCoverage([0.5, 0.75]);\n } else {\n // TODO Handle no background in a separate pipeline path\n const backgroundImageStage = backgroundStage as BackgroundImageStage;\n backgroundImageStage.updateCoverage([0, 0.9999]);\n backgroundImageStage.updateLightWrapping(0);\n }\n }\n\n function cleanUp() {\n backgroundStage.cleanUp();\n jointBilateralFilterStage.cleanUp();\n loadSegmentationStage.cleanUp();\n resizingStage.cleanUp();\n\n gl.deleteTexture(personMaskTexture);\n gl.deleteTexture(segmentationTexture);\n gl.deleteTexture(inputFrameTexture);\n gl.deleteBuffer(texCoordBuffer);\n gl.deleteBuffer(positionBuffer);\n gl.deleteVertexArray(vertexArray);\n gl.deleteShader(vertexShader);\n }\n\n return { render, updatePostProcessingConfig, cleanUp };\n}\n","export type SegmentationParams = {\n width: number;\n height: number;\n};\n\nexport enum SegmentationLevel {\n LOW = 'low',\n HIGH = 'high',\n}\n\nexport const getSegmentationParams = (\n level: SegmentationLevel,\n): SegmentationParams => {\n if (level === SegmentationLevel.HIGH) {\n return { width: 256, height: 144 };\n }\n return { width: 160, height: 96 };\n};\n","import { WorkerTimer } from '@stream-io/worker-timer';\nimport { TFLite } from './tflite';\nimport { buildWebGL2Pipeline } from './webgl2/webgl2Pipeline';\nimport { getSegmentationParams, SegmentationLevel } from './segmentation';\nimport { BackgroundBlurLevel, BackgroundFilter } from '../types';\n\nexport type Renderer = {\n /**\n * Disposes of the renderer.\n */\n dispose: () => void;\n};\n\nexport function createRenderer(\n tflite: TFLite,\n videoSource: HTMLVideoElement,\n targetCanvas: HTMLCanvasElement,\n options: {\n backgroundFilter: BackgroundFilter;\n segmentationLevel?: SegmentationLevel;\n backgroundImage?: HTMLImageElement;\n backgroundBlurLevel?: BackgroundBlurLevel;\n fps?: number;\n },\n onError?: (error: any) => void,\n): Renderer {\n const {\n backgroundFilter,\n backgroundImage,\n backgroundBlurLevel,\n segmentationLevel = SegmentationLevel.HIGH,\n fps = 30,\n } = options;\n if (backgroundFilter === 'image' && !backgroundImage) {\n throw new Error(\n `backgroundImage element is required when backgroundFilter is image`,\n );\n }\n\n const pipeline = buildWebGL2Pipeline(\n videoSource,\n backgroundImage,\n backgroundBlurLevel,\n backgroundFilter,\n targetCanvas,\n tflite,\n getSegmentationParams(segmentationLevel),\n );\n\n const timers = new WorkerTimer({ useWorker: true });\n const id = timers.setInterval(\n () => {\n try {\n pipeline.render();\n\n if (backgroundFilter === 'image') {\n pipeline.updatePostProcessingConfig();\n }\n } catch (error) {\n onError?.(error);\n }\n },\n Math.floor(1000 / (fps <= 0 ? 30 : fps)),\n );\n\n return {\n dispose: () => {\n pipeline.cleanUp();\n timers.clearInterval(id);\n timers.destroy();\n },\n };\n}\n","export const createTFLiteSIMDModule = (__Module) => {\n __Module = __Module || {};\n\n var _scriptDir =\n typeof document !== 'undefined' && document.currentScript\n ? document.currentScript.src\n : undefined;\n\n var Module = typeof __Module != 'undefined' ? __Module : {};\n var readyPromiseResolve, readyPromiseReject;\n Module['ready'] = new Promise(function (resolve, reject) {\n readyPromiseResolve = resolve;\n readyPromiseReject = reject;\n });\n var moduleOverrides = Object.assign({}, Module);\n var arguments_ = [];\n var thisProgram = './this.program';\n var quit_ = (status, toThrow) => {\n throw toThrow;\n };\n var ENVIRONMENT_IS_WEB = true;\n var ENVIRONMENT_IS_WORKER = false;\n var scriptDirectory = '';\n\n function locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n }\n\n var read_, readAsync, readBinary, setWindowTitle;\n if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n if (ENVIRONMENT_IS_WORKER) {\n // eslint-disable-next-line no-restricted-globals\n scriptDirectory = self.location.href;\n } else if (typeof document != 'undefined' && document.currentScript) {\n scriptDirectory = document.currentScript.src;\n }\n if (_scriptDir) {\n scriptDirectory = _scriptDir;\n }\n if (scriptDirectory.indexOf('blob:') !== 0) {\n scriptDirectory = scriptDirectory.substr(\n 0,\n scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1,\n );\n } else {\n scriptDirectory = '';\n }\n {\n read_ = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.send(null);\n return xhr.responseText;\n };\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = (url, onload, onerror) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n onload(xhr.response);\n return;\n }\n onerror();\n };\n xhr.onerror = onerror;\n xhr.send(null);\n };\n }\n setWindowTitle = (title) => (document.title = title);\n } else {\n }\n var out = Module['print'] || console.log.bind(console);\n var err = Module['printErr'] || console.warn.bind(console);\n Object.assign(Module, moduleOverrides);\n moduleOverrides = null;\n if (Module['arguments']) arguments_ = Module['arguments'];\n if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n if (Module['quit']) quit_ = Module['quit'];\n var POINTER_SIZE = 4;\n var wasmBinary;\n if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\n var noExitRuntime = Module['noExitRuntime'] || true;\n if (typeof WebAssembly != 'object') {\n abort('no native wasm support detected');\n }\n var wasmMemory;\n var ABORT = false;\n var EXITSTATUS;\n\n function assert(condition, text) {\n if (!condition) {\n abort(text);\n }\n }\n\n var UTF8Decoder =\n typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined;\n\n function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {\n var endIdx = idx + maxBytesToRead;\n var endPtr = idx;\n while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = '';\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n }\n\n function UTF8ToString(ptr, maxBytesToRead) {\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n }\n\n function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.charCodeAt(i);\n if (u >= 55296 && u <= 57343) {\n var u1 = str.charCodeAt(++i);\n u = (65536 + ((u & 1023) << 10)) | (u1 & 1023);\n }\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++] = 192 | (u >> 6);\n heap[outIdx++] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++] = 224 | (u >> 12);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++] = 240 | (u >> 18);\n heap[outIdx++] = 128 | ((u >> 12) & 63);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n }\n }\n heap[outIdx] = 0;\n return outIdx - startIdx;\n }\n\n var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n\n function updateGlobalBufferAndViews(buf) {\n buffer = buf;\n Module['HEAP8'] = HEAP8 = new Int8Array(buf);\n Module['HEAP16'] = HEAP16 = new Int16Array(buf);\n Module['HEAP32'] = HEAP32 = new Int32Array(buf);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf);\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf);\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf);\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buf);\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buf);\n }\n\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216;\n var wasmTable;\n var __ATPRERUN__ = [];\n var __ATINIT__ = [];\n var __ATPOSTRUN__ = [];\n var runtimeInitialized = false;\n\n function keepRuntimeAlive() {\n return noExitRuntime;\n }\n\n function preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function')\n Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(__ATPRERUN__);\n }\n\n function initRuntime() {\n runtimeInitialized = true;\n callRuntimeCallbacks(__ATINIT__);\n }\n\n function postRun() {\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function')\n Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n callRuntimeCallbacks(__ATPOSTRUN__);\n }\n\n function addOnPreRun(cb) {\n __ATPRERUN__.unshift(cb);\n }\n\n function addOnInit(cb) {\n __ATINIT__.unshift(cb);\n }\n\n function addOnPostRun(cb) {\n __ATPOSTRUN__.unshift(cb);\n }\n\n var runDependencies = 0;\n var runDependencyWatcher = null;\n var dependenciesFulfilled = null;\n\n function addRunDependency(id) {\n runDependencies++;\n if (Module['monitorRunDependencies']) {\n Module['monitorRunDependencies'](runDependencies);\n }\n }\n\n function removeRunDependency(id) {\n runDependencies--;\n if (Module['monitorRunDependencies']) {\n Module['monitorRunDependencies'](runDependencies);\n }\n if (runDependencies == 0) {\n if (runDependencyWatcher !== null) {\n clearInterval(runDependencyWatcher);\n runDependencyWatcher = null;\n }\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n }\n\n function abort(what) {\n {\n if (Module['onAbort']) {\n Module['onAbort'](what);\n }\n }\n what = 'Aborted(' + what + ')';\n err(what);\n ABORT = true;\n EXITSTATUS = 1;\n what += '. Build with -sASSERTIONS for more info.';\n var e = new WebAssembly.RuntimeError(what);\n readyPromiseReject(e);\n throw e;\n }\n\n var dataURIPrefix = 'data:application/octet-stream;base64,';\n\n function isDataURI(filename) {\n return filename.startsWith(dataURIPrefix);\n }\n\n var wasmBinaryFile;\n wasmBinaryFile = 'tflite-simd.wasm';\n if (!isDataURI(wasmBinaryFile)) {\n wasmBinaryFile = locateFile(wasmBinaryFile);\n }\n\n function getBinary(file) {\n try {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n // eslint-disable-next-line @typescript-eslint/no-shadow\n } catch (err) {\n abort(err);\n }\n }\n\n function getBinaryPromise() {\n if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {\n if (typeof fetch == 'function') {\n return fetch(wasmBinaryFile, { credentials: 'same-origin' })\n .then(function (response) {\n if (!response['ok']) {\n throw (\n \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\"\n );\n }\n return response['arrayBuffer']();\n })\n .catch(function () {\n return getBinary(wasmBinaryFile);\n });\n }\n }\n return Promise.resolve().then(function () {\n return getBinary(wasmBinaryFile);\n });\n }\n\n function createWasm() {\n var info = {\n env: asmLibraryArg,\n wasi_snapshot_preview1: asmLibraryArg,\n };\n\n function receiveInstance(instance, module) {\n var exports = instance.exports;\n Module['asm'] = exports;\n wasmMemory = Module['asm']['memory'];\n updateGlobalBufferAndViews(wasmMemory.buffer);\n wasmTable = Module['asm']['__indirect_function_table'];\n addOnInit(Module['asm']['__wasm_call_ctors']);\n removeRunDependency('wasm-instantiate');\n }\n\n addRunDependency('wasm-instantiate');\n\n function receiveInstantiationResult(result) {\n receiveInstance(result['instance']);\n }\n\n function instantiateArrayBuffer(receiver) {\n return getBinaryPromise()\n .then(function (binary) {\n return WebAssembly.instantiate(binary, info);\n })\n .then(function (instance) {\n return instance;\n })\n .then(receiver, function (reason) {\n err('failed to asynchronously prepare wasm: ' + reason);\n abort(reason);\n });\n }\n\n function instantiateAsync() {\n if (\n !wasmBinary &&\n typeof WebAssembly.instantiateStreaming == 'function' &&\n !isDataURI(wasmBinaryFile) &&\n typeof fetch == 'function'\n ) {\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(\n function (response) {\n var result = WebAssembly.instantiateStreaming(response, info);\n return result.then(receiveInstantiationResult, function (reason) {\n err('wasm streaming compile failed: ' + reason);\n err('falling back to ArrayBuffer instantiation');\n return instantiateArrayBuffer(receiveInstantiationResult);\n });\n },\n );\n } else {\n return instantiateArrayBuffer(receiveInstantiationResult);\n }\n }\n\n if (Module['instantiateWasm']) {\n try {\n var exports = Module['instantiateWasm'](info, receiveInstance);\n return exports;\n } catch (e) {\n err('Module.instantiateWasm callback failed with error: ' + e);\n readyPromiseReject(e);\n }\n }\n instantiateAsync().catch(readyPromiseReject);\n return {};\n }\n\n var tempDouble;\n var tempI64;\n\n function ExitStatus(status) {\n this.name = 'ExitStatus';\n this.message = 'Program terminated with exit(' + status + ')';\n this.status = status;\n }\n\n function callRuntimeCallbacks(callbacks) {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n }\n\n function demangle(func) {\n return func;\n }\n\n function demangleAll(text) {\n var regex = /\\b_Z[\\w\\d_]+/g;\n return text.replace(regex, function (x) {\n var y = demangle(x);\n return x === y ? x : y + ' [' + x + ']';\n });\n }\n\n function jsStackTrace() {\n var error = new Error();\n if (!error.stack) {\n try {\n throw new Error();\n } catch (e) {\n error = e;\n }\n if (!error.stack) {\n return '(no stack trace available)';\n }\n }\n return error.stack.toString();\n }\n\n function __dlinit(main_dso_handle) {}\n\n var dlopenMissingError =\n 'To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking';\n\n function __dlopen_js(filename, flag) {\n abort(dlopenMissingError);\n }\n\n function __dlsym_js(handle, symbol) {\n abort(dlopenMissingError);\n }\n\n var nowIsMonotonic = true;\n\n function __emscripten_get_now_is_monotonic() {\n return nowIsMonotonic;\n }\n\n var SYSCALLS = {\n varargs: undefined,\n get: function () {\n SYSCALLS.varargs += 4;\n var ret = HEAP32[(SYSCALLS.varargs - 4) >> 2];\n return ret;\n },\n getStr: function (ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n };\n\n function __mmap_js(len, prot, flags, fd, off, allocated) {\n return -52;\n }\n\n function __munmap_js(addr, len, prot, flags, fd, offset) {}\n\n function _abort() {\n abort('');\n }\n\n function _emscripten_date_now() {\n return Date.now();\n }\n\n function getHeapMax() {\n return 2147483648;\n }\n\n function _emscripten_get_heap_max() {\n return getHeapMax();\n }\n\n var _emscripten_get_now;\n _emscripten_get_now = () => performance.now();\n\n function _emscripten_memcpy_big(dest, src, num) {\n HEAPU8.copyWithin(dest, src, src + num);\n }\n\n function emscripten_realloc_buffer(size) {\n try {\n wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16);\n updateGlobalBufferAndViews(wasmMemory.buffer);\n return 1;\n } catch (e) {}\n }\n\n function _emscripten_resize_heap(requestedSize) {\n var oldSize = HEAPU8.length;\n requestedSize = requestedSize >>> 0;\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n let alignUp = (x, multiple) => x + ((multiple - (x % multiple)) % multiple);\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(\n overGrownHeapSize,\n requestedSize + 100663296,\n );\n var newSize = Math.min(\n maxHeapSize,\n alignUp(Math.max(requestedSize, overGrownHeapSize), 65536),\n );\n var replacement = emscripten_realloc_buffer(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n }\n\n var ENV = {};\n\n function getExecutableName() {\n return thisProgram || './this.program';\n }\n\n function getEnvStrings() {\n if (!getEnvStrings.strings) {\n var lang =\n (\n (typeof navigator == 'object' &&\n navigator.languages &&\n navigator.languages[0]) ||\n 'C'\n ).replace('-', '_') + '.UTF-8';\n var env = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG: lang,\n _: getExecutableName(),\n };\n for (var x in ENV) {\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(x + '=' + env[x]);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function writeAsciiToMemory(str, buffer, dontAddNull) {\n for (var i = 0; i < str.length; ++i) {\n HEAP8[buffer++ >> 0] = str.charCodeAt(i);\n }\n if (!dontAddNull) HEAP8[buffer >> 0] = 0;\n }\n\n function _environ_get(__environ, environ_buf) {\n var bufSize = 0;\n getEnvStrings().forEach(function (string, i) {\n var ptr = environ_buf + bufSize;\n HEAPU32[(__environ + i * 4) >> 2] = ptr;\n writeAsciiToMemory(string, ptr);\n bufSize += string.length + 1;\n });\n return 0;\n }\n\n function _environ_sizes_get(penviron_count, penviron_buf_size) {\n var strings = getEnvStrings();\n HEAPU32[penviron_count >> 2] = strings.length;\n var bufSize = 0;\n strings.forEach(function (string) {\n bufSize += string.length + 1;\n });\n HEAPU32[penviron_buf_size >> 2] = bufSize;\n return 0;\n }\n\n function _proc_exit(code) {\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n if (Module['onExit']) Module['onExit'](code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n }\n\n function exitJS(status, implicit) {\n EXITSTATUS = status;\n _proc_exit(status);\n }\n\n var _exit = exitJS;\n\n function _fd_close(fd) {\n return 52;\n }\n\n function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {\n return 70;\n }\n\n var printCharBuffers = [null, [], []];\n\n function printChar(stream, curr) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n var buffer = printCharBuffers[stream];\n if (curr === 0 || curr === 10) {\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\n buffer.length = 0;\n } else {\n buffer.push(curr);\n }\n }\n\n function _fd_write(fd, iov, iovcnt, pnum) {\n var num = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[iov >> 2];\n var len = HEAPU32[(iov + 4) >> 2];\n iov += 8;\n for (var j = 0; j < len; j++) {\n printChar(fd, HEAPU8[ptr + j]);\n }\n num += len;\n }\n HEAPU32[pnum >> 2] = num;\n return 0;\n }\n\n function getRandomDevice() {\n if (\n typeof crypto == 'object' &&\n typeof crypto['getRandomValues'] == 'function'\n ) {\n var randomBuffer = new Uint8Array(1);\n return () => {\n crypto.getRandomValues(randomBuffer);\n return randomBuffer[0];\n };\n } else return () => abort('randomDevice');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _getentropy(buffer, size) {\n if (!_getentropy.randomDevice) {\n _getentropy.randomDevice = getRandomDevice();\n }\n for (var i = 0; i < size; i++) {\n HEAP8[(buffer + i) >> 0] = _getentropy.randomDevice();\n }\n return 0;\n }\n\n var asmLibraryArg = {\n _dlinit: __dlinit,\n _dlopen_js: __dlopen_js,\n _dlsym_js: __dlsym_js,\n _emscripten_get_now_is_monotonic: __emscripten_get_now_is_monotonic,\n _mmap_js: __mmap_js,\n _munmap_js: __munmap_js,\n abort: _abort,\n emscripten_date_now: _emscripten_date_now,\n emscripten_get_heap_max: _emscripten_get_heap_max,\n emscripten_get_now: _emscripten_get_now,\n emscripten_memcpy_big: _emscripten_memcpy_big,\n emscripten_resize_heap: _emscripten_resize_heap,\n environ_get: _environ_get,\n environ_sizes_get: _environ_sizes_get,\n exit: _exit,\n fd_close: _fd_close,\n fd_seek: _fd_seek,\n fd_write: _fd_write,\n getentropy: _getentropy,\n };\n var asm = createWasm();\n var ___wasm_call_ctors = (Module['___wasm_call_ctors'] = function () {\n return (___wasm_call_ctors = Module['___wasm_call_ctors'] =\n Module['asm']['__wasm_call_ctors']).apply(null, arguments);\n });\n var _getModelBufferMemoryOffset = (Module['_getModelBufferMemoryOffset'] =\n function () {\n return (_getModelBufferMemoryOffset = Module[\n '_getModelBufferMemoryOffset'\n ] =\n Module['asm']['getModelBufferMemoryOffset']).apply(null, arguments);\n });\n var _getInputMemoryOffset = (Module['_getInputMemoryOffset'] = function () {\n return (_getInputMemoryOffset = Module['_getInputMemoryOffset'] =\n Module['asm']['getInputMemoryOffset']).apply(null, arguments);\n });\n var _getInputHeight = (Module['_getInputHeight'] = function () {\n return (_getInputHeight = Module['_getInputHeight'] =\n Module['asm']['getInputHeight']).apply(null, arguments);\n });\n var _getInputWidth = (Module['_getInputWidth'] = function () {\n return (_getInputWidth = Module['_getInputWidth'] =\n Module['asm']['getInputWidth']).apply(null, arguments);\n });\n var _getInputChannelCount = (Module['_getInputChannelCount'] = function () {\n return (_getInputChannelCount = Module['_getInputChannelCount'] =\n Module['asm']['getInputChannelCount']).apply(null, arguments);\n });\n var _getOutputMemoryOffset = (Module['_getOutputMemoryOffset'] = function () {\n return (_getOutputMemoryOffset = Module['_getOutputMemoryOffset'] =\n Module['asm']['getOutputMemoryOffset']).apply(null, arguments);\n });\n var _getOutputHeight = (Module['_getOutputHeight'] = function () {\n return (_getOutputHeight = Module['_getOutputHeight'] =\n Module['asm']['getOutputHeight']).apply(null, arguments);\n });\n var _getOutputWidth = (Module['_getOutputWidth'] = function () {\n return (_getOutputWidth = Module['_getOutputWidth'] =\n Module['asm']['getOutputWidth']).apply(null, arguments);\n });\n var _getOutputChannelCount = (Module['_getOutputChannelCount'] = function () {\n return (_getOutputChannelCount = Module['_getOutputChannelCount'] =\n Module['asm']['getOutputChannelCount']).apply(null, arguments);\n });\n var _loadModel = (Module['_loadModel'] = function () {\n return (_loadModel = Module['_loadModel'] =\n Module['asm']['loadModel']).apply(null, arguments);\n });\n var _runInference = (Module['_runInference'] = function () {\n return (_runInference = Module['_runInference'] =\n Module['asm']['runInference']).apply(null, arguments);\n });\n var _malloc = (Module['_malloc'] = function () {\n return (_malloc = Module['_malloc'] = Module['asm']['malloc']).apply(\n null,\n arguments,\n );\n });\n var ___errno_location = (Module['___errno_location'] = function () {\n return (___errno_location = Module['___errno_location'] =\n Module['asm']['__errno_location']).apply(null, arguments);\n });\n var ___dl_seterr = (Module['___dl_seterr'] = function () {\n return (___dl_seterr = Module['___dl_seterr'] =\n Module['asm']['__dl_seterr']).apply(null, arguments);\n });\n var stackSave = (Module['stackSave'] = function () {\n return (stackSave = Module['stackSave'] = Module['asm']['stackSave']).apply(\n null,\n arguments,\n );\n });\n var stackRestore = (Module['stackRestore'] = function () {\n return (stackRestore = Module['stackRestore'] =\n Module['asm']['stackRestore']).apply(null, arguments);\n });\n var stackAlloc = (Module['stackAlloc'] = function () {\n return (stackAlloc = Module['stackAlloc'] =\n Module['asm']['stackAlloc']).apply(null, arguments);\n });\n var dynCall_jjj = (Module['dynCall_jjj'] = function () {\n return (dynCall_jjj = Module['dynCall_jjj'] =\n Module['asm']['dynCall_jjj']).apply(null, arguments);\n });\n var dynCall_jiii = (Module['dynCall_jiii'] = function () {\n return (dynCall_jiii = Module['dynCall_jiii'] =\n Module['asm']['dynCall_jiii']).apply(null, arguments);\n });\n var dynCall_iiiijj = (Module['dynCall_iiiijj'] = function () {\n return (dynCall_iiiijj = Module['dynCall_iiiijj'] =\n Module['asm']['dynCall_iiiijj']).apply(null, arguments);\n });\n var dynCall_viijj = (Module['dynCall_viijj'] = function () {\n return (dynCall_viijj = Module['dynCall_viijj'] =\n Module['asm']['dynCall_viijj']).apply(null, arguments);\n });\n var dynCall_viiijjj = (Module['dynCall_viiijjj'] = function () {\n return (dynCall_viiijjj = Module['dynCall_viiijjj'] =\n Module['asm']['dynCall_viiijjj']).apply(null, arguments);\n });\n var dynCall_iijjiiii = (Module['dynCall_iijjiiii'] = function () {\n return (dynCall_iijjiiii = Module['dynCall_iijjiiii'] =\n Module['asm']['dynCall_iijjiiii']).apply(null, arguments);\n });\n var dynCall_jiji = (Module['dynCall_jiji'] = function () {\n return (dynCall_jiji = Module['dynCall_jiji'] =\n Module['asm']['dynCall_jiji']).apply(null, arguments);\n });\n var calledRun;\n dependenciesFulfilled = function runCaller() {\n if (!calledRun) run();\n if (!calledRun) dependenciesFulfilled = runCaller;\n };\n\n function run(args) {\n args = args || arguments_;\n if (runDependencies > 0) {\n return;\n }\n preRun();\n if (runDependencies > 0) {\n return;\n }\n\n function doRun() {\n if (calledRun) return;\n calledRun = true;\n Module['calledRun'] = true;\n if (ABORT) return;\n initRuntime();\n readyPromiseResolve(Module);\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\n postRun();\n }\n\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(function () {\n setTimeout(function () {\n Module['setStatus']('');\n }, 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n }\n\n if (Module['preInit']) {\n if (typeof Module['preInit'] == 'function')\n Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].pop()();\n }\n }\n run();\n\n return __Module.ready;\n};\n","export const version = process.env.PKG_VERSION || '0.0.0-development';\nexport const packageName =\n process.env.PKG_NAME || '@stream-io/video-filters-web';\n","// @ts-expect-error - module is not declared\nimport { createTFLiteSIMDModule } from './tflite-simd.js';\nimport { packageName, version } from '../version';\n\n// This is a WebAssembly module compiled from the TensorFlow Lite C++ library.\nconst createTFLite = createTFLiteSIMDModule as (opts?: any) => Promise<TFLite>;\n\nexport interface TFLite extends EmscriptenModule {\n _getModelBufferMemoryOffset(): number;\n _getInputMemoryOffset(): number;\n _getInputHeight(): number;\n _getInputWidth(): number;\n _getInputChannelCount(): number;\n _getOutputMemoryOffset(): number;\n _getOutputHeight(): number;\n _getOutputWidth(): number;\n _getOutputChannelCount(): number;\n _loadModel(bufferSize: number): number;\n _runInference(): number;\n}\n\nexport const loadTFLite = async (\n options: {\n basePath?: string;\n tfFilePath?: string;\n modelFilePath?: string;\n } = {},\n) => {\n const {\n basePath = `https://unpkg.com/${packageName}@${version}/tf`,\n tfFilePath = `${basePath}/tflite/tflite-simd.wasm`,\n modelFilePath = `${basePath}/models/segm_full_v679.tflite`,\n } = options;\n\n const [tfLite, model] = await Promise.all([\n createTFLite({ locateFile: () => tfFilePath }),\n fetchModel(modelFilePath),\n ]);\n\n const modelBufferOffset = tfLite._getModelBufferMemoryOffset();\n tfLite.HEAPU8.set(new Uint8Array(model), modelBufferOffset);\n tfLite._loadModel(model.byteLength);\n\n return tfLite;\n};\n\nlet lastModelFilePath = '';\nlet modelFileCache: ArrayBuffer | undefined;\nconst fetchModel = async (modelFilePath: string) => {\n const model =\n modelFilePath === lastModelFilePath && modelFileCache\n ? modelFileCache\n : await fetch(modelFilePath).then((r) => r.arrayBuffer());\n\n // Cache the model file for future use.\n modelFileCache = model;\n lastModelFilePath = modelFilePath;\n return model;\n};\n","import { packageName, version } from './version';\n\nlet lastModelFilePath = '';\nlet modelFileCache: ArrayBuffer | undefined;\nexport const loadMediaPipe = async (\n options: {\n basePath?: string;\n modelPath?: string;\n } = {},\n): Promise<ArrayBuffer> => {\n const {\n basePath = `https://unpkg.com/${packageName}@${version}/mediapipe`,\n modelPath = `${basePath}/models/selfie_segmenter_landscape.tflite`,\n } = options;\n\n const model =\n modelPath === lastModelFilePath && modelFileCache\n ? modelFileCache\n : await fetch(modelPath).then((r) => r.arrayBuffer());\n\n modelFileCache = model;\n lastModelFilePath = modelPath;\n\n return model;\n};\n","export type BackgroundSource = {\n type: string;\n media?: ImageBitmap | ReadableStream;\n url: string;\n video?: HTMLVideoElement;\n track?: MediaStreamTrack;\n};\nexport type BackgroundFilter = 'blur' | 'image';\nexport type BackgroundBlurLevel = 'low' | 'medium' | 'high' | number;\n\n/**\n * Options for controlling the segmentation mask smoothing.\n * These values are passed to the WebGL shader that blends\n * consecutive segmentation masks over time.\n */\nexport interface SegmentationOptions {\n /**\n * Controls how fast the mask adapts to new segmentation results.\n * Higher values make the mask react faster but may cause flickering.\n * Lower values produce smoother transitions but increase latency.\n * Value should be between 0 and 1.\n * @default 0.8\n */\n smoothingFactor?: number;\n\n /**\n * Lower edge of the smoothstep function applied to the confidence mask.\n * Confidence values below this are mapped to 0 (background).\n * Value should be between 0 and 1, and less than smoothstepMax.\n * @default 0.6\n */\n smoothstepMin?: number;\n\n /**\n * Upper edge of the smoothstep function applied to the confidence mask.\n * Confidence values above this are mapped to 1 (foreground).\n * Value should be between 0 and 1, and greater than smoothstepMin.\n * @default 0.9\n */\n smoothstepMax?: number;\n}\n\nexport interface SegmenterOptions {\n backgroundSource?: BackgroundSource | null;\n bgBlur: number;\n bgBlurRadius: number;\n isSelfieMode: boolean;\n segmentationOptions?: SegmentationOptions;\n}\n/**\n * Static configuration for the processor, defining which background\n * effect should be applied and how it should behave.\n */\nexport interface BackgroundOptions {\n basePath?: string;\n modelPath?: string;\n backgroundFilter?: BackgroundFilter;\n backgroundBlurLevel?: BackgroundBlurLevel;\n backgroundImage?: string | undefined;\n segmentationOptions?: SegmentationOptions;\n}\n\n/**\n * Performance statistics for video processing.\n */\nexport interface PerformanceStats {\n delay: number;\n fps: number;\n timestamp: number;\n}\n\n/**\n * Runtime hooks for handling lifecycle or error events.\n */\nexport interface VideoTrackProcessorHooks {\n onError?: (error: unknown) => void;\n onStats?: (stats: PerformanceStats) => void;\n}\n\n/**\n * Maps blur level to blur strength values.\n */\nexport const BACKGROUND_BLUR_MAP: Record<'low' | 'medium' | 'high', number> = {\n low: 3,\n medium: 5,\n high: 7,\n};\n","import { BackgroundSource } from './types';\n\ntype ImageInfo = {\n type: 'image';\n texture: WebGLTexture;\n width: number;\n height: number;\n url: string;\n};\n\ntype VideoInfo = {\n type: 'video';\n texture: WebGLTexture;\n url: string;\n media: ReadableStream;\n canvas: OffscreenCanvas;\n};\n\ntype ColorInfo = {\n type: 'color';\n texture: WebGLTexture;\n color: readonly [number, number, number, number];\n};\n\ntype BackgroundRenderInfo = ImageInfo | VideoInfo | ColorInfo;\n\nexport class WebGLRenderer {\n readonly canvas: OffscreenCanvas;\n readonly gl: WebGL2RenderingContext;\n\n readonly stateUpdateProgram: WebGLProgram;\n readonly maskRefineProgram: WebGLProgram;\n readonly blurProgram: WebGLProgram;\n readonly blendProgram: WebGLProgram;\n\n readonly stateUpdateLocations: {\n position: number;\n texCoord: number;\n categoryTexture: WebGLUniformLocation | null;\n confidenceTexture: WebGLUniformLocation | null;\n prevStateTexture: WebGLUniformLocation | null;\n smoothingFactor: WebGLUniformLocation | null;\n smoothstepMin: WebGLUniformLocation | null;\n smoothstepMax: WebGLUniformLocation | null;\n selfieModel: WebGLUniformLocation | null;\n };\n readonly maskRefineLocations: {\n position: number;\n texCoord: number;\n maskTexture: WebGLUniformLocation | null;\n frameTexture: WebGLUniformLocation | null;\n texelSize: WebGLUniformLocation | null;\n sigmaSpatial: WebGLUniformLocation | null;\n sigmaRange: WebGLUniformLocation | null;\n };\n readonly blurLocations: {\n position: number;\n texCoord: number;\n image: WebGLUniformLocation | null;\n texelSize: WebGLUniformLocation | null;\n sigma: WebGLUniformLocation | null;\n radiusScale: WebGLUniformLocation | null;\n personMask: WebGLUniformLocation | null;\n direction: WebGLUniformLocation | null;\n };\n readonly blendLocations: {\n position: number;\n texCoord: number;\n frameTexture: WebGLUniformLocation | null;\n currentStateTexture: WebGLUniformLocation | null;\n backgroundTexture: WebGLUniformLocation | null;\n bgImageDimensions: WebGLUniformLocation | null;\n canvasDimensions: WebGLUniformLocation | null;\n borderSmooth: WebGLUniformLocation | null;\n bgBlur: WebGLUniformLocation | null;\n bgBlurRadius: WebGLUniformLocation | null;\n enabled: WebGLUniformLocation | null;\n };\n readonly positionBuffer: WebGLBuffer | null;\n readonly texCoordBuffer: WebGLBuffer | null;\n readonly storedStateTextures: (WebGLTexture | null)[];\n readonly fbo: WebGLFramebuffer | null;\n readonly refineFbo: WebGLFramebuffer | null;\n readonly refinedMaskTexture: WebGLTexture | null;\n readonly frameTexture: WebGLTexture | null;\n readonly blurTexture1: WebGLTexture | null;\n readonly blurTexture2: WebGLTexture | null;\n readonly blurFbo1: WebGLFramebuffer | null;\n readonly blurFbo2: WebGLFramebuffer | null;\n\n private running = false;\n private static readonly DEFAULT_BG_COLOR: readonly [\n number,\n number,\n number,\n number,\n ] = [33, 150, 243, 255];\n private currentStateIndex = 0;\n private backgroundRenderInfo: BackgroundRenderInfo | null = null;\n private activeBackgroundSourceIdentifier: string | null = null;\n\n constructor(canvas: OffscreenCanvas) {\n this.canvas = canvas;\n const gl = this.canvas.getContext('webgl2', {\n alpha: false,\n antialias: false,\n desynchronized: true,\n });\n if (!gl) throw new Error('WebGL2 not supported');\n this.gl = gl;\n\n const stateUpdateVertexShaderSource = `attribute vec2 a_position; attribute vec2 a_texCoord; varying vec2 v_texCoord; void main() { gl_Position = vec4(a_position, 0.0, 1.0); v_texCoord = a_texCoord; }`;\n const stateUpdateFragmentShaderSource = `\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_categoryTexture;\n uniform sampler2D u_confidenceTexture;\n uniform sampler2D u_prevStateTexture;\n uniform float u_smoothingFactor;\n uniform float u_smoothstepMin;\n uniform float u_smoothstepMax;\n uniform int u_selfieModel;\n\n void main() {\n vec2 prevCoord = vec2(v_texCoord.x, 1.0 - v_texCoord.y);\n float categoryValue = texture2D(u_categoryTexture, v_texCoord).r;\n float confidenceValue = texture2D(u_confidenceTexture, v_texCoord).r;\n\n if (u_selfieModel == 1) {\n categoryValue = 1.0 - categoryValue;\n confidenceValue = 1.0 - confidenceValue;\n }\n\n if (categoryValue > 0.0) {\n categoryValue = 1.0;\n confidenceValue = 1.0 - confidenceValue;\n }\n\n float nonLinearConfidence = smoothstep(u_smoothstepMin, u_smoothstepMax, confidenceValue);\n float prevCategoryValue = texture2D(u_prevStateTexture, prevCoord).r;\n float alpha = u_smoothingFactor * nonLinearConfidence;\n float newCategoryValue = alpha * categoryValue + (1.0 - alpha) * prevCategoryValue;\n\n gl_FragColor = vec4(newCategoryValue, 0.0, 0.0, 0.0);\n }\n `;\n this.stateUpdateProgram = this.createAndLinkProgram(\n stateUpdateVertexShaderSource,\n stateUpdateFragmentShaderSource,\n );\n this.stateUpdateLocations = {\n position: gl.getAttribLocation(this.stateUpdateProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.stateUpdateProgram, 'a_texCoord'),\n categoryTexture: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_categoryTexture',\n ),\n confidenceTexture: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_confidenceTexture',\n ),\n prevStateTexture: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_prevStateTexture',\n ),\n smoothingFactor: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_smoothingFactor',\n ),\n smoothstepMin: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_smoothstepMin',\n ),\n smoothstepMax: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_smoothstepMax',\n ),\n selfieModel: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_selfieModel',\n ),\n };\n\n const maskRefineVertexShaderSource = stateUpdateVertexShaderSource;\n const maskRefineFragmentShaderSource = `\n precision mediump float;\n varying vec2 v_texCoord;\n\n uniform sampler2D u_maskTexture;\n uniform sampler2D u_frameTexture;\n uniform vec2 u_texelSize;\n uniform float u_sigmaSpatial;\n uniform float u_sigmaRange;\n\n void main() {\n vec2 flippedCoord = v_texCoord;\n vec3 centerPixelColor = texture2D(u_frameTexture, v_texCoord).rgb;\n float totalWeight = 0.0;\n float weightedMaskSum = 0.0;\n\n for (int offsetX = -2; offsetX <= 2; offsetX++) {\n for (int offsetY = -2; offsetY <= 2; offsetY++) {\n vec2 shift = vec2(float(offsetX), float(offsetY)) * u_texelSize;\n vec2 frameCoord = v_texCoord + shift;\n vec2 maskCoord = flippedCoord + shift;\n\n vec3 neighborPixelColor = texture2D(u_frameTexture, frameCoord).rgb;\n float neighborMaskValue = texture2D(u_maskTexture, maskCoord).r;\n\n float spatialWeight = exp(-dot(shift, shift) / (2.0 * u_sigmaSpatial * u_sigmaSpatial));\n vec3 colorDifference = neighborPixelColor - centerPixelColor;\n float rangeWeight = exp(-(dot(colorDifference, colorDifference)) / (2.0 * u_sigmaRange * u_sigmaRange));\n\n float combinedWeight = spatialWeight * rangeWeight;\n weightedMaskSum += neighborMaskValue * combinedWeight;\n totalWeight += combinedWeight;\n }\n }\n\n float refinedMaskValue = weightedMaskSum / max(totalWeight, 1e-6);\n gl_FragColor = vec4(refinedMaskValue, refinedMaskValue, refinedMaskValue, 1.0);\n }\n `;\n\n this.maskRefineProgram = this.createAndLinkProgram(\n maskRefineVertexShaderSource,\n maskRefineFragmentShaderSource,\n );\n this.maskRefineLocations = {\n position: gl.getAttribLocation(this.maskRefineProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.maskRefineProgram, 'a_texCoord'),\n maskTexture: gl.getUniformLocation(\n this.maskRefineProgram,\n 'u_maskTexture',\n ),\n frameTexture: gl.getUniformLocation(\n this.maskRefineProgram,\n 'u_frameTexture',\n ),\n texelSize: gl.getUniformLocation(this.maskRefineProgram, 'u_texelSize'),\n sigmaSpatial: gl.getUniformLocation(\n this.maskRefineProgram,\n 'u_sigmaSpatial',\n ),\n sigmaRange: gl.getUniformLocation(this.maskRefineProgram, 'u_sigmaRange'),\n };\n\n const blurVertexShaderSource = stateUpdateVertexShaderSource;\n const blurFragmentShaderSource = `\n precision highp float;\n varying vec2 v_texCoord;\n\n uniform sampler2D u_image;\n uniform sampler2D u_personMask;\n uniform vec2 u_texelSize;\n uniform float u_sigma;\n uniform float u_radiusScale;\n uniform vec2 u_direction;\n\n const int KERNEL_RADIUS = 10;\n\n float gauss(float x, float s) {\n return exp(-(x * x) / (2.0 * s * s));\n }\n\n void main() {\n vec2 maskCoord = u_direction.y > 0.5 ? vec2(v_texCoord.x, 1.0 - v_texCoord.y) : v_texCoord;\n float mCenter = texture2D(u_personMask, maskCoord).r;\n float wCenter = gauss(0.0, u_sigma);\n vec4 accum = texture2D(u_image, v_texCoord) * wCenter * (1.0 - mCenter);\n float weightSum = wCenter * (1.0 - mCenter);\n\n for (int i = 1; i <= KERNEL_RADIUS; i++) {\n float f = float(i);\n float offset = f * u_radiusScale;\n float w = gauss(offset, u_sigma);\n vec2 texOffset = u_direction * offset * u_texelSize;\n\n vec2 uvPlus = v_texCoord + texOffset;\n vec2 maskCoordPlus = u_direction.y > 0.5 ? vec2(uvPlus.x, 1.0 - uvPlus.y) : uvPlus;\n float mPlus = texture2D(u_personMask, maskCoordPlus).r;\n accum += texture2D(u_image, uvPlus) * w * (1.0 - mPlus);\n weightSum += w * (1.0 - mPlus);\n\n vec2 uvMinus = v_texCoord - texOffset;\n vec2 maskCoordMinus = u_direction.y > 0.5 ? vec2(uvMinus.x, 1.0 - uvMinus.y) : uvMinus;\n float mMinus = texture2D(u_personMask, maskCoordMinus).r;\n accum += texture2D(u_image, uvMinus) * w * (1.0 - mMinus);\n weightSum += w * (1.0 - mMinus);\n }\n\n vec4 blurred = accum / max(weightSum, 1e-6);\n gl_FragColor = blurred;\n }\n `;\n\n this.blurProgram = this.createAndLinkProgram(\n blurVertexShaderSource,\n blurFragmentShaderSource,\n );\n this.blurLocations = {\n position: gl.getAttribLocation(this.blurProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.blurProgram, 'a_texCoord'),\n image: gl.getUniformLocation(this.blurProgram, 'u_image'),\n personMask: gl.getUniformLocation(this.blurProgram, 'u_personMask'),\n texelSize: gl.getUniformLocation(this.blurProgram, 'u_texelSize'),\n sigma: gl.getUniformLocation(this.blurProgram, 'u_sigma'),\n radiusScale: gl.getUniformLocation(this.blurProgram, 'u_radiusScale'),\n direction: gl.getUniformLocation(this.blurProgram, 'u_direction'),\n };\n\n const blendVertexShaderSource = stateUpdateVertexShaderSource;\n const blendFragmentShaderSource = `\n precision mediump float;\n varying vec2 v_texCoord;\n\n uniform sampler2D u_frameTexture;\n uniform sampler2D u_currentStateTexture;\n uniform sampler2D u_backgroundTexture;\n uniform vec2 u_bgImageDimensions;\n uniform vec2 u_canvasDimensions;\n uniform float u_borderSmooth;\n uniform float u_bgBlur;\n uniform float u_bgBlurRadius;\n uniform int u_enabled;\n\n vec4 getMixedFragColor(vec2 bgTexCoord, vec2 categoryCoord, vec2 offset) {\n vec4 backgroundColor = texture2D(u_backgroundTexture, bgTexCoord + offset);\n vec4 frameColor = texture2D(u_frameTexture, v_texCoord + offset);\n float categoryValue = texture2D(u_currentStateTexture, categoryCoord + offset).r;\n return mix(backgroundColor, frameColor, categoryValue);\n }\n\n void main() {\n if (u_enabled == 0) {\n gl_FragColor = texture2D(u_frameTexture, v_texCoord);\n return;\n }\n\n vec2 categoryCoord = v_texCoord;\n float categoryValue = texture2D(u_currentStateTexture, categoryCoord).r;\n\n float canvasAspect = u_canvasDimensions.x / u_canvasDimensions.y;\n float bgAspect = u_bgImageDimensions.x / u_bgImageDimensions.y;\n\n vec2 bgTexCoord = v_texCoord;\n float scaleX = 1.0;\n float scaleY = 1.0;\n float offsetX = 0.0;\n float offsetY = 0.0;\n\n if (canvasAspect < bgAspect) {\n scaleY = 1.0;\n scaleX = bgAspect / canvasAspect;\n offsetX = (1.0 - scaleX) / 2.0;\n } else {\n scaleX = 1.0;\n scaleY = canvasAspect / bgAspect;\n offsetY = (1.0 - scaleY) / 2.0;\n }\n\n bgTexCoord = vec2((v_texCoord.x - offsetX) / scaleX, (v_texCoord.y - offsetY) / scaleY);\n gl_FragColor = getMixedFragColor(bgTexCoord, categoryCoord, vec2(0.0, 0.0));\n }`;\n\n this.blendProgram = this.createAndLinkProgram(\n blendVertexShaderSource,\n blendFragmentShaderSource,\n );\n this.blendLocations = {\n position: gl.getAttribLocation(this.blendProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.blendProgram, 'a_texCoord'),\n frameTexture: gl.getUniformLocation(this.blendProgram, 'u_frameTexture'),\n currentStateTexture: gl.getUniformLocation(\n this.blendProgram,\n 'u_currentStateTexture',\n ),\n backgroundTexture: gl.getUniformLocation(\n this.blendProgram,\n 'u_backgroundTexture',\n ),\n bgImageDimensions: gl.getUniformLocation(\n this.blendProgram,\n 'u_bgImageDimensions',\n ),\n canvasDimensions: gl.getUniformLocation(\n this.blendProgram,\n 'u_canvasDimensions',\n ),\n borderSmooth: gl.getUniformLocation(this.blendProgram, 'u_borderSmooth'),\n bgBlur: gl.getUniformLocation(this.blendProgram, 'u_bgBlur'),\n bgBlurRadius: gl.getUniformLocation(this.blendProgram, 'u_bgBlurRadius'),\n enabled: gl.getUniformLocation(this.blendProgram, 'u_enabled'),\n };\n\n this.positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n gl.STATIC_DRAW,\n );\n\n this.texCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0]),\n gl.STATIC_DRAW,\n );\n\n this.storedStateTextures = Array.from({ length: 2 }, () => {\n const tex = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, tex);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n 1,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n new Uint8Array([0, 0, 0, 255]),\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n return tex;\n });\n gl.bindTexture(gl.TEXTURE_2D, null);\n\n this.fbo = gl.createFramebuffer();\n this.refineFbo = gl.createFramebuffer();\n\n const refinedTex = gl.createTexture();\n this.frameTexture = gl.createTexture();\n if (!refinedTex) throw new Error('Failed to create refined mask texture');\n gl.bindTexture(gl.TEXTURE_2D, refinedTex);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n 1,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.bindTexture(gl.TEXTURE_2D, null);\n this.refinedMaskTexture = refinedTex;\n\n const mkColorTex = () => {\n const t = gl.createTexture();\n if (!t) throw new Error('Failed to create blur texture');\n gl.bindTexture(gl.TEXTURE_2D, t);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n 1,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.bindTexture(gl.TEXTURE_2D, null);\n return t;\n };\n this.blurTexture1 = mkColorTex();\n this.blurTexture2 = mkColorTex();\n\n const mkFbo = (tex: WebGLTexture | null) => {\n const fb = gl.createFramebuffer();\n if (!fb || !tex) throw new Error('Failed to create blur FBO');\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n tex,\n 0,\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return fb;\n };\n this.blurFbo1 = mkFbo(this.blurTexture1);\n this.blurFbo2 = mkFbo(this.blurTexture2);\n\n this.running = true;\n }\n\n private createAndLinkProgram(\n vsSource: string,\n fsSource: string,\n ): WebGLProgram {\n const vs = this.createShader(this.gl.VERTEX_SHADER, vsSource);\n const fs = this.createShader(this.gl.FRAGMENT_SHADER, fsSource);\n const prog = this.gl.createProgram();\n if (!prog) throw new Error('Failed to create program');\n this.gl.attachShader(prog, vs);\n this.gl.attachShader(prog, fs);\n this.gl.linkProgram(prog);\n if (!this.gl.getProgramParameter(prog, this.gl.LINK_STATUS)) {\n console.error('Program link error:', this.gl.getProgramInfoLog(prog));\n this.gl.deleteProgram(prog);\n throw new Error('Link fail');\n }\n this.gl.detachShader(prog, vs);\n this.gl.detachShader(prog, fs);\n this.gl.deleteShader(vs);\n this.gl.deleteShader(fs);\n return prog;\n }\n\n private createShader(type: number, source: string): WebGLShader {\n const shader = this.gl.createShader(type);\n if (!shader) throw new Error(`Failed to create shader type: ${type}`);\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n console.error('Shader compile error:', this.gl.getShaderInfoLog(shader));\n this.gl.deleteShader(shader);\n throw new Error('Failed to compile shader');\n }\n return shader;\n }\n\n private createColorTexture(\n r: number,\n g: number,\n b: number,\n a: number,\n ): {\n texture: WebGLTexture;\n color: readonly [number, number, number, number];\n } {\n const texture = this.gl.createTexture();\n if (!texture) throw new Error('Failed to create texture for color');\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n const pixel = new Uint8Array([r, g, b, a]);\n this.gl.texImage2D(\n this.gl.TEXTURE_2D,\n 0,\n this.gl.RGBA,\n 1,\n 1,\n 0,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n pixel,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_S,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_T,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MIN_FILTER,\n this.gl.NEAREST,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MAG_FILTER,\n this.gl.NEAREST,\n );\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n return { texture, color: [r, g, b, a] as const };\n }\n\n private updateBackgroundIfNeeded(newSource?: BackgroundSource | null) {\n const gl = this.gl;\n let newIdentifier: string;\n\n if (!newSource) {\n const [r, g, b, a] = WebGLRenderer.DEFAULT_BG_COLOR;\n newIdentifier = `color(${r},${g},${b},${a})`;\n } else {\n newIdentifier = newSource.url;\n }\n\n if (\n newIdentifier === this.activeBackgroundSourceIdentifier &&\n this.backgroundRenderInfo\n ) {\n return;\n }\n\n if (this.backgroundRenderInfo) {\n gl.deleteTexture(this.backgroundRenderInfo.texture);\n this.backgroundRenderInfo = null;\n }\n this.activeBackgroundSourceIdentifier = newIdentifier;\n\n if (!newSource) {\n const [r, g, b, a] = WebGLRenderer.DEFAULT_BG_COLOR;\n const colorTexData = this.createColorTexture(r, g, b, a);\n this.backgroundRenderInfo = {\n type: 'color',\n texture: colorTexData.texture,\n color: colorTexData.color,\n };\n this.activeBackgroundSourceIdentifier = `color(${r},${g},${b},${a})`;\n } else {\n if (newSource.type === 'image') {\n const { media, url } = newSource as { media: ImageBitmap; url: string };\n const texture = this.gl.createTexture();\n if (!texture) {\n throw new Error('Failed to create texture object for image.');\n }\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n this.gl.texImage2D(\n this.gl.TEXTURE_2D,\n 0,\n this.gl.RGBA,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n media,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_S,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_T,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MIN_FILTER,\n this.gl.LINEAR,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MAG_FILTER,\n this.gl.LINEAR,\n );\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n\n this.backgroundRenderInfo = {\n type: 'image',\n texture,\n width: media.width,\n height: media.height,\n url,\n };\n } else if (newSource.type === 'video') {\n const { media, url } = newSource as {\n media: ReadableStream;\n url: string;\n };\n\n const canvas = new OffscreenCanvas(1, 1);\n const ctx = canvas.getContext('2d');\n const writer = new WritableStream({\n write(videoFrame: VideoFrame) {\n canvas.width = videoFrame.codedWidth;\n canvas.height = videoFrame.codedHeight;\n ctx?.drawImage(videoFrame, 0, 0);\n videoFrame.close();\n },\n close() {\n console.log('[virtual-background] video background close');\n },\n });\n media.pipeTo(writer).catch((err) => {\n console.error('media.pipeTo(writer) error', err);\n });\n\n const texture = this.gl.createTexture();\n if (!texture) throw new Error('Failed to create texture for video');\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n this.gl.texImage2D(\n this.gl.TEXTURE_2D,\n 0,\n this.gl.RGBA,\n 1,\n 1,\n 0,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n null,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_S,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_T,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MIN_FILTER,\n this.gl.LINEAR,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MAG_FILTER,\n this.gl.LINEAR,\n );\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n\n this.backgroundRenderInfo = {\n type: 'video',\n texture,\n url,\n media,\n canvas,\n };\n }\n }\n\n if (!this.backgroundRenderInfo) {\n console.error(\n 'Critical: backgroundRenderInfo is null after processing new source. Setting default color.',\n );\n const [r, g, b, a] = WebGLRenderer.DEFAULT_BG_COLOR;\n const colorTexData = this.createColorTexture(r, g, b, a);\n this.backgroundRenderInfo = {\n type: 'color',\n texture: colorTexData.texture,\n color: colorTexData.color,\n };\n this.activeBackgroundSourceIdentifier = `color(${r},${g},${b},${a})`;\n }\n }\n\n public render(\n videoFrame: VideoFrame,\n options: {\n backgroundSource?: BackgroundSource | null;\n bgBlur: number;\n bgBlurRadius: number;\n isSelfieMode: boolean;\n segmentationOptions?: {\n smoothingFactor?: number;\n smoothstepMin?: number;\n smoothstepMax?: number;\n };\n },\n categoryTexture?: WebGLTexture,\n confidenceTexture?: WebGLTexture,\n ) {\n if (!this.running) return;\n const {\n gl,\n fbo,\n frameTexture,\n storedStateTextures,\n stateUpdateProgram,\n stateUpdateLocations,\n refineFbo,\n refinedMaskTexture,\n maskRefineProgram,\n maskRefineLocations,\n blendProgram,\n blendLocations,\n blurFbo1,\n blurFbo2,\n blurTexture1,\n blurTexture2,\n } = this;\n\n const { displayWidth: width, displayHeight: height } = videoFrame;\n if (this.canvas.width !== width || this.canvas.height !== height) {\n this.canvas.width = width;\n this.canvas.height = height;\n }\n\n if (!categoryTexture || !confidenceTexture) {\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.useProgram(blendProgram);\n\n const frame = gl.createTexture();\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, frame);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n videoFrame,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.uniform1i(blendLocations.frameTexture, 0);\n gl.uniform1i(blendLocations.enabled, 0);\n\n gl.enableVertexAttribArray(blendLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(blendLocations.position, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(blendLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(blendLocations.texCoord, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.deleteTexture(frame);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n\n return;\n }\n\n const readStateIndex = this.currentStateIndex;\n const writeStateIndex = (this.currentStateIndex + 1) % 2;\n const prevStateTexture = storedStateTextures[readStateIndex];\n const newStateTexture = storedStateTextures[writeStateIndex];\n\n this.updateBackgroundIfNeeded(options.backgroundSource);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n newStateTexture,\n 0,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, newStateTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.viewport(0, 0, width, height);\n gl.useProgram(stateUpdateProgram);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, categoryTexture);\n gl.uniform1i(stateUpdateLocations.categoryTexture, 0);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, confidenceTexture);\n gl.uniform1i(stateUpdateLocations.confidenceTexture, 1);\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, prevStateTexture);\n gl.uniform1i(stateUpdateLocations.prevStateTexture, 2);\n\n gl.uniform1f(\n stateUpdateLocations.smoothingFactor,\n options.segmentationOptions?.smoothingFactor ?? 0.8,\n );\n gl.uniform1f(\n stateUpdateLocations.smoothstepMin,\n options.segmentationOptions?.smoothstepMin ?? 0.6,\n );\n gl.uniform1f(\n stateUpdateLocations.smoothstepMax,\n options.segmentationOptions?.smoothstepMax ?? 0.9,\n );\n\n gl.uniform1i(\n stateUpdateLocations.selfieModel,\n options.isSelfieMode ? 1 : 0,\n );\n\n gl.enableVertexAttribArray(stateUpdateLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(\n stateUpdateLocations.position,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(stateUpdateLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(\n stateUpdateLocations.texCoord,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, refineFbo);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n refinedMaskTexture,\n 0,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, refinedMaskTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.viewport(0, 0, width, height);\n gl.useProgram(maskRefineProgram);\n\n gl.enableVertexAttribArray(maskRefineLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(\n maskRefineLocations.position,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(maskRefineLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(\n maskRefineLocations.texCoord,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, newStateTexture);\n gl.uniform1i(maskRefineLocations.maskTexture, 0);\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, frameTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n videoFrame,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.uniform1i(maskRefineLocations.frameTexture, 1);\n\n gl.uniform2f(maskRefineLocations.texelSize, 1.0 / width, 1.0 / height);\n gl.uniform1f(maskRefineLocations.sigmaSpatial, 2.0);\n gl.uniform1f(maskRefineLocations.sigmaRange, 0.1);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.disableVertexAttribArray(maskRefineLocations.position);\n gl.disableVertexAttribArray(maskRefineLocations.texCoord);\n\n let backgroundTexToUse: WebGLTexture | null;\n let bgWToSend = width;\n let bgHToSend = height;\n\n if (options.bgBlur > 0 && options.bgBlurRadius > 0) {\n const downscale = 0.5;\n const blurW = Math.floor(width * downscale);\n const blurH = Math.floor(height * downscale);\n\n gl.bindTexture(gl.TEXTURE_2D, blurTexture1);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n blurW,\n blurH,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.bindTexture(gl.TEXTURE_2D, blurTexture2);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n blurW,\n blurH,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n const KERNEL_RADIUS = 10.0;\n const radiusScale = Math.max(0.0, options.bgBlurRadius) / KERNEL_RADIUS;\n\n gl.useProgram(this.blurProgram);\n\n gl.enableVertexAttribArray(this.blurLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(\n this.blurLocations.position,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(this.blurLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(\n this.blurLocations.texCoord,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, refinedMaskTexture);\n gl.uniform1i(this.blurLocations.personMask, 1);\n gl.uniform1f(this.blurLocations.sigma, options.bgBlur * 0.7);\n gl.uniform1f(this.blurLocations.radiusScale, radiusScale);\n\n const blurPasses = [\n {\n direction: [1.0, 0.0],\n input: frameTexture,\n output: blurFbo1,\n texelSize: [1.0 / width, 1.0 / height],\n },\n {\n direction: [0.0, 1.0],\n input: blurTexture1,\n output: blurFbo2,\n texelSize: [1.0 / blurW, 1.0 / blurH],\n },\n {\n direction: [1.0, 0.0],\n input: blurTexture2,\n output: blurFbo1,\n texelSize: [1.0 / blurW, 1.0 / blurH],\n },\n {\n direction: [0.0, 1.0],\n input: blurTexture1,\n output: blurFbo2,\n texelSize: [1.0 / blurW, 1.0 / blurH],\n },\n ];\n\n for (const pass of blurPasses) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, pass.output);\n gl.viewport(0, 0, blurW, blurH);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, pass.input);\n gl.uniform1i(this.blurLocations.image, 0);\n gl.uniform2f(\n this.blurLocations.texelSize,\n pass.texelSize[0],\n pass.texelSize[1],\n );\n gl.uniform2f(\n this.blurLocations.direction,\n pass.direction[0],\n pass.direction[1],\n );\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n backgroundTexToUse = blurTexture2!;\n bgWToSend = blurW;\n bgHToSend = blurH;\n } else if (options.backgroundSource && this.backgroundRenderInfo) {\n backgroundTexToUse = this.backgroundRenderInfo.texture;\n if (this.backgroundRenderInfo.type === 'video') {\n const { canvas } = this.backgroundRenderInfo;\n bgWToSend = canvas.width || width;\n bgHToSend = canvas.height || height;\n } else if (this.backgroundRenderInfo.type === 'image') {\n bgWToSend = this.backgroundRenderInfo.width;\n bgHToSend = this.backgroundRenderInfo.height;\n } else {\n bgWToSend = width;\n bgHToSend = height;\n }\n } else {\n backgroundTexToUse = this.backgroundRenderInfo?.texture ?? null;\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.useProgram(blendProgram);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, frameTexture);\n gl.uniform1i(blendLocations.frameTexture, 0);\n gl.uniform1f(blendLocations.borderSmooth, 0);\n gl.uniform1f(blendLocations.bgBlur, options.bgBlur);\n gl.uniform1f(blendLocations.bgBlurRadius, options.bgBlurRadius);\n gl.uniform1i(blendLocations.enabled, 1);\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, refinedMaskTexture);\n gl.uniform1i(blendLocations.currentStateTexture, 1);\n\n if (backgroundTexToUse) {\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, backgroundTexToUse);\n\n gl.uniform1i(blendLocations.backgroundTexture, 2);\n gl.uniform2f(blendLocations.bgImageDimensions, bgWToSend, bgHToSend);\n gl.uniform2f(blendLocations.canvasDimensions, width, height);\n } else {\n gl.uniform2f(blendLocations.bgImageDimensions, width, height);\n gl.uniform2f(blendLocations.canvasDimensions, width, height);\n }\n\n gl.enableVertexAttribArray(blendLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(blendLocations.position, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(blendLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(blendLocations.texCoord, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n for (let i = 0; i < 3; ++i) {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, null);\n }\n\n this.currentStateIndex = writeStateIndex;\n }\n\n public close() {\n if (!this.running) return;\n this.running = false;\n\n const { gl, fbo, refineFbo, refinedMaskTexture, blurFbo1, blurFbo2 } = this;\n\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n if (fbo) gl.deleteFramebuffer(fbo);\n if (refineFbo) gl.deleteFramebuffer(refineFbo);\n if (blurFbo1) gl.deleteFramebuffer(blurFbo1);\n if (blurFbo2) gl.deleteFramebuffer(blurFbo2);\n\n gl.deleteProgram(this.stateUpdateProgram);\n gl.deleteProgram(this.maskRefineProgram);\n gl.deleteProgram(this.blurProgram);\n gl.deleteProgram(this.blendProgram);\n\n if (this.positionBuffer) gl.deleteBuffer(this.positionBuffer);\n if (this.texCoordBuffer) gl.deleteBuffer(this.texCoordBuffer);\n\n if (refinedMaskTexture) gl.deleteTexture(refinedMaskTexture);\n if (this.blurTexture1) gl.deleteTexture(this.blurTexture1);\n if (this.blurTexture2) gl.deleteTexture(this.blurTexture2);\n this.storedStateTextures.forEach((t) => t && gl.deleteTexture(t));\n this.storedStateTextures.splice(0, this.storedStateTextures.length);\n if (this.backgroundRenderInfo?.texture) {\n gl.deleteTexture(this.backgroundRenderInfo.texture);\n this.backgroundRenderInfo = null;\n }\n this.activeBackgroundSourceIdentifier = null;\n }\n}\n","/**\n * Type representing a video track generator that can be either the native\n * MediaStreamTrackGenerator or the fallback implementation.\n */\nexport interface MediaStreamTrackGenerator<T> extends MediaStreamTrack {\n writable: WritableStream<T>;\n}\n\n/**\n * Configuration options for creating a track generator.\n */\nexport interface TrackGeneratorOptions {\n readonly kind: 'video';\n readonly signalTarget?: MediaStreamTrack;\n}\n\n/**\n * Fallback video processor for browsers that do not support MediaStreamTrackGenerator.\n *\n * Produces a video MediaStreamTrack sourced from a canvas and exposes\n * a WritableStream<VideoFrame> on track.writable for writing frames.\n */\nclass FallbackGenerator {\n constructor({ kind, signalTarget }: TrackGeneratorOptions) {\n if (kind !== 'video') {\n throw new Error('Only video tracks are supported');\n }\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d', { desynchronized: true });\n if (!ctx) {\n throw new Error('Failed to get 2D context from canvas');\n }\n\n const mediaStream = canvas.captureStream();\n const track =\n mediaStream.getVideoTracks()[0] as MediaStreamTrackGenerator<VideoFrame>;\n\n const height = signalTarget?.getSettings().height;\n const width = signalTarget?.getSettings().width;\n if (height && width) {\n canvas.height = height;\n canvas.width = width;\n }\n\n if (!track) {\n throw new Error('Failed to create canvas track');\n }\n\n if (signalTarget) {\n signalTarget.addEventListener('ended', () => {\n track.stop();\n });\n }\n\n track.writable = new WritableStream({\n write: (frame: VideoFrame) => {\n if (\n canvas.width !== frame.displayWidth ||\n canvas.height !== frame.displayHeight\n ) {\n canvas.width = frame.displayWidth;\n canvas.height = frame.displayHeight;\n }\n\n ctx.drawImage(frame, 0, 0, canvas.width, canvas.height);\n frame.close();\n },\n abort: () => {\n track.stop();\n },\n close: () => {\n track.stop();\n },\n });\n\n return track as MediaStreamTrackGenerator<VideoFrame>;\n }\n}\n\ntype VideoTrackGeneratorConstructor = new (\n options: TrackGeneratorOptions,\n) => MediaStreamTrackGenerator<VideoFrame>;\n\nconst TrackGenerator: VideoTrackGeneratorConstructor =\n typeof MediaStreamTrackGenerator !== 'undefined'\n ? (MediaStreamTrackGenerator as unknown as VideoTrackGeneratorConstructor)\n : (FallbackGenerator as unknown as VideoTrackGeneratorConstructor);\n\nexport { TrackGenerator };\n","import { WorkerTimer } from '@stream-io/worker-timer';\n\n/**\n * Representing a video track processor that can be either the native\n * MediaStreamTrackProcessor or the fallback implementation.\n */\nexport interface MediaStreamTrackProcessor<T> {\n readonly readable: ReadableStream<T>;\n}\n\n/**\n * Configuration options for creating a track processor.\n */\nexport interface TrackProcessorOptions {\n readonly track: MediaStreamTrack;\n}\n\n/**\n * Fallback implementation for browsers without MediaStreamTrackGenerator.\n *\n * Produces a video MediaStreamTrack sourced from a canvas and exposes a\n * WritableStream<VideoFrame> on track.writable. Written frames are drawn\n * into the canvas and update the underlying track automatically.\n */\nclass FallbackProcessor implements MediaStreamTrackProcessor<VideoFrame> {\n readonly readable: ReadableStream<VideoFrame>;\n\n readonly workerTimer: WorkerTimer;\n readonly video: HTMLVideoElement;\n\n constructor({ track }: TrackProcessorOptions) {\n if (!track) throw new Error('MediaStreamTrack is required');\n if (track.kind !== 'video') {\n throw new Error('MediaStreamTrack must be video');\n }\n let running = true;\n\n this.video = document.createElement('video');\n\n this.video.muted = true;\n this.video.playsInline = true;\n this.video.srcObject = new MediaStream([track]);\n\n const canvas = new OffscreenCanvas(1, 1);\n const ctx = canvas.getContext('2d');\n\n if (!ctx) throw new Error('Failed to get 2D context from OffscreenCanvas');\n\n let timestamp = 0;\n const frameRate = track.getSettings().frameRate || 30;\n let frameDuration = 1000 / frameRate;\n\n this.workerTimer = new WorkerTimer({ useWorker: true });\n this.readable = new ReadableStream({\n start: async () => {\n await Promise.all([\n this.video.play(),\n new Promise((r) =>\n this.video.addEventListener('loadeddata', r, { once: true }),\n ),\n ]);\n frameDuration = 1000 / (track.getSettings().frameRate || 30);\n timestamp = performance.now();\n },\n pull: async (controller) => {\n if (!running) {\n controller.close();\n this.close();\n return;\n }\n const delta = performance.now() - timestamp;\n if (delta <= frameDuration) {\n await new Promise((r: (value?: unknown) => void) =>\n this.workerTimer.setTimeout(r, frameDuration - delta),\n );\n }\n timestamp = performance.now();\n\n if (\n canvas.width !== this.video.videoWidth ||\n canvas.height !== this.video.videoHeight\n ) {\n canvas.width = this.video.videoWidth;\n canvas.height = this.video.videoHeight;\n }\n\n ctx.drawImage(this.video, 0, 0);\n\n try {\n const frame = new VideoFrame(canvas, {\n timestamp: Math.round(this.video.currentTime * 1000000),\n });\n\n controller.enqueue(frame);\n } catch (err) {\n running = false;\n controller.error(err);\n this.close();\n }\n },\n cancel: () => {\n running = false;\n this.close();\n },\n });\n }\n\n public close = () => {\n this.video.pause();\n this.video.srcObject = null;\n this.video.src = '';\n\n this.workerTimer.destroy();\n };\n}\n\nconst TrackProcessor =\n typeof MediaStreamTrackProcessor !== 'undefined'\n ? MediaStreamTrackProcessor\n : FallbackProcessor;\n\nexport { TrackProcessor };\n","import { VideoTrackProcessorHooks } from './types';\nimport { TrackGenerator, MediaStreamTrackGenerator } from './FallbackGenerator';\nimport { MediaStreamTrackProcessor, TrackProcessor } from './FallbackProcessor';\n\n/**\n * Base class for real-time video filters.\n *\n * It sets up the full pipeline that reads frames from the input track,\n * processes them, and outputs a new track with your effect applied. Subclasses\n * only need to implement `initialize` (run once before processing starts) and\n * `transform` (called for every frame).\n *\n * Everything else—canvas setup, performance tracking, error handling, and\n * clean shutdown is handled for you. Calling `start()` returns a processed\n * `MediaStreamTrack` ready to use.\n */\nexport abstract class BaseVideoProcessor {\n protected readonly processor: MediaStreamTrackProcessor<VideoFrame>;\n protected readonly generator: MediaStreamTrackGenerator<VideoFrame>;\n\n protected readonly hooks: VideoTrackProcessorHooks;\n\n protected readonly abortController = new AbortController();\n protected canvas!: OffscreenCanvas;\n\n private frames = 0;\n private delayTotal = 0;\n private lastStatsTime = 0;\n\n /**\n * Constructs a new instance.\n */\n protected constructor(\n protected readonly track: MediaStreamVideoTrack,\n hooks: VideoTrackProcessorHooks = {},\n ) {\n this.processor = new TrackProcessor({ track });\n this.generator = new TrackGenerator({\n kind: 'video',\n signalTarget: track,\n });\n this.hooks = hooks;\n }\n\n public async start(): Promise<MediaStreamTrack> {\n const { readable } = this.processor;\n const { writable } = this.generator;\n\n const { width = 1280, height = 720 } = this.track.getSettings();\n this.canvas = new OffscreenCanvas(width, height);\n\n await this.initialize();\n\n const transformStream = new TransformStream<VideoFrame, VideoFrame>({\n transform: async (frame, controller) => {\n try {\n if (this.abortController.signal.aborted) return frame.close();\n\n if (\n this.canvas.width !== frame.displayWidth ||\n this.canvas.height !== frame.displayHeight\n ) {\n this.canvas.width = frame.displayWidth;\n this.canvas.height = frame.displayHeight;\n }\n\n const processed = await this.transform(frame);\n\n controller.enqueue(processed);\n } catch (e) {\n this.hooks.onError?.(e);\n } finally {\n frame.close();\n }\n },\n flush: () => this.onFlush(),\n });\n\n readable\n .pipeThrough(transformStream, { signal: this.abortController.signal })\n .pipeTo(writable, { signal: this.abortController.signal })\n .catch((e) => {\n if (e.name !== 'AbortError' && e.name !== 'InvalidStateError') {\n console.error(`[${this.processorName}] Error processing track:`, e);\n this.hooks.onError?.(e);\n }\n });\n\n return this.generator;\n }\n\n public stop(): void {\n this.abortController.abort();\n this.generator.stop();\n this.onStop();\n }\n\n protected updateStats(delay: number): void {\n this.frames++;\n this.delayTotal += delay;\n\n const now = performance.now();\n if (this.lastStatsTime === 0) {\n this.lastStatsTime = now;\n return;\n }\n\n if (now - this.lastStatsTime >= 1000) {\n const avgDelay = Math.round((this.delayTotal / this.frames) * 100) / 100;\n const fps = Math.round((1000 * this.frames) / (now - this.lastStatsTime));\n\n this.hooks.onStats?.({ delay: avgDelay, fps, timestamp: now });\n\n this.frames = 0;\n this.delayTotal = 0;\n this.lastStatsTime = now;\n }\n }\n\n protected abstract initialize(): Promise<void>;\n protected abstract transform(frame: VideoFrame): Promise<VideoFrame>;\n\n protected onFlush(): void {}\n protected onStop(): void {}\n\n protected get processorName(): string {\n return 'base-processor';\n }\n}\n","import {\n BACKGROUND_BLUR_MAP,\n BackgroundOptions,\n SegmenterOptions,\n VideoTrackProcessorHooks,\n} from './types';\nimport { FilesetResolver, ImageSegmenter } from '@mediapipe/tasks-vision';\nimport { WebGLRenderer } from './WebGLRenderer';\nimport { packageName, version } from './version';\nimport { BaseVideoProcessor } from './BaseVideoProcessor';\n\n/**\n * Wraps a video MediaStreamTrack in a real-time processing pipeline.\n * Incoming frames are processed through a transformer and re-emitted\n * on a new MediaStreamVideoTrack for downstream consumption.\n */\nexport class VirtualBackground extends BaseVideoProcessor {\n private segmenter: ImageSegmenter | null = null;\n private isSegmenterReady = false;\n private webGlRenderer!: WebGLRenderer;\n\n private opts!: SegmenterOptions;\n\n private latestCategoryMask: WebGLTexture | undefined = undefined;\n private latestConfidenceMask: WebGLTexture | undefined = undefined;\n private lastFrameTime = -1;\n\n constructor(\n track: MediaStreamVideoTrack,\n private readonly options: BackgroundOptions = {},\n hooks: VideoTrackProcessorHooks = {},\n ) {\n super(track, hooks);\n }\n\n protected async initialize(): Promise<void> {\n this.webGlRenderer = new WebGLRenderer(this.canvas);\n\n await this.initializeSegmenter();\n }\n\n private async initializeSegmenter() {\n try {\n this.opts = await this.initializeSegmenterOptions();\n\n const basePath =\n this.options.basePath ||\n `https://unpkg.com/${packageName}@${version}/mediapipe`;\n\n const model =\n this.options.modelPath ||\n `${basePath}/models/selfie_segmenter_landscape.tflite`;\n\n const fileset = await FilesetResolver.forVisionTasks(`${basePath}/wasm`);\n\n this.segmenter = await ImageSegmenter.createFromOptions(fileset, {\n baseOptions: { modelAssetPath: model, delegate: 'GPU' },\n runningMode: 'VIDEO',\n outputCategoryMask: true,\n outputConfidenceMasks: true,\n canvas: this.canvas,\n });\n\n this.isSegmenterReady = true;\n } catch (error) {\n this.isSegmenterReady = false;\n this.hooks.onError?.(error);\n throw error;\n }\n }\n\n protected async transform(frame: VideoFrame): Promise<VideoFrame> {\n const currentTime = frame.timestamp;\n const hasNewFrame = currentTime - this.lastFrameTime > 1_000;\n this.lastFrameTime = currentTime;\n\n if (hasNewFrame && this.isSegmenterReady && this.segmenter) {\n const start = performance.now();\n\n await this.runSegmentation(frame);\n\n this.webGlRenderer.render(\n frame,\n this.opts,\n this.latestCategoryMask,\n this.latestConfidenceMask,\n );\n\n this.updateStats(performance.now() - start);\n }\n\n return new VideoFrame(this.canvas, { timestamp: frame.timestamp });\n }\n\n private async runSegmentation(frame: VideoFrame): Promise<void> {\n if (!this.segmenter) return;\n\n return new Promise<void>((resolve) => {\n const timestamp = Math.floor(performance.now());\n this.segmenter!.segmentForVideo(frame, timestamp, (result) => {\n try {\n this.latestCategoryMask = result.categoryMask?.getAsWebGLTexture();\n this.latestConfidenceMask =\n result.confidenceMasks?.[0]?.getAsWebGLTexture();\n } catch (err) {\n console.error('[virtual-background] segmentation error:', err);\n this.hooks.onError?.(err);\n } finally {\n result.close();\n resolve();\n }\n });\n });\n }\n\n private async initializeSegmenterOptions(): Promise<SegmenterOptions> {\n const isSelfieMode = this.options.modelPath\n ? this.options.modelPath.includes('selfie_segmenter')\n : true;\n\n if (this.options.backgroundFilter === 'image') {\n const source = await this.loadBackground(this.options.backgroundImage);\n return {\n backgroundSource: source,\n bgBlur: 0,\n bgBlurRadius: 0,\n isSelfieMode,\n segmentationOptions: this.options.segmentationOptions,\n };\n }\n\n const blurLevel = this.options.backgroundBlurLevel;\n const strength =\n typeof blurLevel === 'string'\n ? BACKGROUND_BLUR_MAP[blurLevel]\n : Math.round(blurLevel ?? 5);\n\n return {\n backgroundSource: undefined,\n bgBlur: Math.min(strength * 1.5, 20),\n bgBlurRadius: Math.min(strength, 10),\n isSelfieMode,\n segmentationOptions: this.options.segmentationOptions,\n };\n }\n\n private async loadBackground(url?: string) {\n if (!url) return null;\n const result = await fetch(url, { signal: this.abortController.signal });\n if (!result.ok) {\n throw new Error(\n `[virtual-background] Failed to load background image: ${result.status} ${result.statusText}`,\n );\n }\n\n return {\n type: 'image',\n media: await createImageBitmap(await result.blob()),\n url,\n };\n }\n\n protected onFlush(): void {\n this.destroySegmenter();\n }\n\n protected onStop(): void {\n this.webGlRenderer?.close();\n this.destroySegmenter();\n }\n\n private destroySegmenter() {\n this.segmenter?.close();\n this.segmenter = null;\n this.isSegmenterReady = false;\n }\n\n protected get processorName() {\n return 'background-processor';\n }\n}\n","/**\n * Simple WebGL renderer for full-screen Gaussian blur.\n * Uses a two-pass separable Gaussian blur (horizontal then vertical).\n * Optimized for moderation use cases by blurring at reduced resolution (15% scale)\n * and upscaling back to full resolution for output.\n */\nexport class FullScreenBlurRenderer {\n readonly canvas: OffscreenCanvas;\n readonly gl: WebGL2RenderingContext;\n\n readonly blurProgramHandle: WebGLProgram;\n readonly blurLocations: {\n positionLocation: number;\n texCoordLocation: number;\n imageLocation: WebGLUniformLocation | null;\n texelSizeLocation: WebGLUniformLocation | null;\n directionLocation: WebGLUniformLocation | null;\n weightsLocation: WebGLUniformLocation | null;\n };\n\n readonly passthroughProgramHandle: WebGLProgram;\n readonly passthroughLocations: {\n positionLocation: number;\n texCoordLocation: number;\n imageLocation: WebGLUniformLocation | null;\n };\n\n readonly positionBuffer: WebGLBuffer | null;\n readonly texCoordBuffer: WebGLBuffer | null;\n\n readonly pingTexture: WebGLTexture | null;\n readonly pongTexture: WebGLTexture | null;\n readonly pingFbo: WebGLFramebuffer | null;\n readonly pongFbo: WebGLFramebuffer | null;\n\n private inputTexture: WebGLTexture | null = null;\n private isRunning = false;\n\n private targetWidth = 0;\n private targetHeight = 0;\n\n private weightCache = new Map<number, Float32Array>();\n\n constructor(canvas: OffscreenCanvas) {\n this.canvas = canvas;\n\n const gl = canvas.getContext('webgl2', {\n alpha: false,\n antialias: false,\n desynchronized: true,\n });\n\n if (!gl) throw new Error('WebGL2 not supported');\n this.gl = gl;\n\n const vertexShaderSource = `#version 300 es\n precision highp float;\n in vec2 a_position;\n in vec2 a_texCoord;\n out vec2 v_texCoord;\n void main() {\n v_texCoord = a_texCoord;\n gl_Position = vec4(a_position, 0.0, 1.0);\n }\n `;\n\n const fragmentShaderSource = `#version 300 es\n precision highp float;\n in vec2 v_texCoord;\n out vec4 outColor;\n uniform sampler2D u_image;\n uniform vec2 u_texelSize;\n uniform vec2 u_direction;\n uniform float u_weights[25];\n void main() {\n vec4 color = vec4(0.0);\n for (int i = -12; i <= 12; i++) {\n float w = u_weights[i + 12];\n if (w == 0.0) continue;\n vec2 offset = float(i) * u_direction * u_texelSize;\n color += w * texture(u_image, v_texCoord + offset);\n }\n outColor = color;\n }\n `;\n\n this.blurProgramHandle = this.createAndLinkProgram(\n vertexShaderSource,\n fragmentShaderSource,\n );\n\n const passthroughFragmentShaderSource = `#version 300 es\n precision highp float;\n in vec2 v_texCoord;\n out vec4 outColor;\n uniform sampler2D u_image;\n void main() {\n outColor = texture(u_image, v_texCoord);\n }\n `;\n\n this.passthroughProgramHandle = this.createAndLinkProgram(\n vertexShaderSource,\n passthroughFragmentShaderSource,\n );\n\n const blurProgram = this.blurProgramHandle;\n const passthroughProgram = this.passthroughProgramHandle;\n\n this.blurLocations = {\n positionLocation: gl.getAttribLocation(blurProgram, 'a_position'),\n texCoordLocation: gl.getAttribLocation(blurProgram, 'a_texCoord'),\n imageLocation: gl.getUniformLocation(blurProgram, 'u_image'),\n texelSizeLocation: gl.getUniformLocation(blurProgram, 'u_texelSize'),\n directionLocation: gl.getUniformLocation(blurProgram, 'u_direction'),\n weightsLocation: gl.getUniformLocation(blurProgram, 'u_weights'),\n };\n\n this.passthroughLocations = {\n positionLocation: gl.getAttribLocation(passthroughProgram, 'a_position'),\n texCoordLocation: gl.getAttribLocation(passthroughProgram, 'a_texCoord'),\n imageLocation: gl.getUniformLocation(passthroughProgram, 'u_image'),\n };\n\n this.positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n gl.STATIC_DRAW,\n );\n\n this.texCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0]),\n gl.STATIC_DRAW,\n );\n\n const createTexture2D = () => {\n const tex = gl.createTexture();\n if (!tex) throw new Error('Failed to create texture');\n gl.bindTexture(gl.TEXTURE_2D, tex);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.bindTexture(gl.TEXTURE_2D, null);\n return tex;\n };\n\n const createFramebufferForTexture = (tex: WebGLTexture) => {\n const fb = gl.createFramebuffer();\n if (!fb) throw new Error('Failed to create framebuffer');\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n tex,\n 0,\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return fb;\n };\n\n this.pingTexture = createTexture2D();\n this.pongTexture = createTexture2D();\n this.pingFbo = createFramebufferForTexture(this.pingTexture);\n this.pongFbo = createFramebufferForTexture(this.pongTexture);\n\n this.inputTexture = createTexture2D();\n\n gl.useProgram(blurProgram);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.enableVertexAttribArray(this.blurLocations.positionLocation);\n gl.vertexAttribPointer(\n this.blurLocations.positionLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.enableVertexAttribArray(this.blurLocations.texCoordLocation);\n gl.vertexAttribPointer(\n this.blurLocations.texCoordLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n if (this.blurLocations.imageLocation) {\n gl.uniform1i(this.blurLocations.imageLocation, 0);\n }\n\n this.isRunning = true;\n }\n\n private createAndLinkProgram(\n vsSource: string,\n fsSource: string,\n ): WebGLProgram {\n const gl = this.gl;\n const vs = this.createShader(gl.VERTEX_SHADER, vsSource);\n const fs = this.createShader(gl.FRAGMENT_SHADER, fsSource);\n\n const prog = gl.createProgram();\n if (!prog) throw new Error('Failed to create program');\n gl.attachShader(prog, vs);\n gl.attachShader(prog, fs);\n gl.linkProgram(prog);\n\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\n throw new Error('Shader link failed: ' + gl.getProgramInfoLog(prog));\n }\n\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n return prog;\n }\n\n private createShader(type: number, source: string): WebGLShader {\n const gl = this.gl;\n const shader = gl.createShader(type);\n if (!shader) throw new Error('Failed to create shader');\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error('Shader compile failed: ' + gl.getShaderInfoLog(shader));\n }\n return shader;\n }\n\n private getGaussianWeights(radius: number): Float32Array {\n const r = Math.max(0, Math.min(radius | 0, 12));\n\n const cached = this.weightCache.get(r);\n if (cached) return cached;\n\n const weights = new Float32Array(25);\n\n if (r === 0) {\n weights[12] = 1.0;\n this.weightCache.set(r, weights);\n return weights;\n }\n\n const sigma = r * 0.6;\n let sum = 0;\n\n for (let i = -r; i <= r; i++) {\n const w = Math.exp(-(i * i) / (2 * sigma * sigma));\n weights[i + 12] = w;\n sum += w;\n }\n\n for (let i = -r; i <= r; i++) {\n weights[i + 12] /= sum;\n }\n\n this.weightCache.set(r, weights);\n return weights;\n }\n\n public render(frame: VideoFrame, radius: number): void {\n if (!this.isRunning) return;\n\n const gl = this.gl;\n\n const width = frame.displayWidth;\n const height = frame.displayHeight;\n\n if (!width || !height) return;\n\n if (this.canvas.width !== width || this.canvas.height !== height) {\n this.canvas.width = width;\n this.canvas.height = height;\n }\n\n const scale = 0.15;\n const scaledWidth = Math.max(1, Math.floor(width * scale));\n const scaledHeight = Math.max(1, Math.floor(height * scale));\n\n if (\n scaledWidth !== this.targetWidth ||\n scaledHeight !== this.targetHeight\n ) {\n this.targetWidth = scaledWidth;\n this.targetHeight = scaledHeight;\n\n gl.bindTexture(gl.TEXTURE_2D, this.pingTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n scaledWidth,\n scaledHeight,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, this.pongTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n scaledWidth,\n scaledHeight,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, null);\n }\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.inputTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, frame);\n\n gl.useProgram(this.blurProgramHandle);\n\n if (this.blurLocations.texelSizeLocation) {\n gl.uniform2f(\n this.blurLocations.texelSizeLocation,\n 1.0 / scaledWidth,\n 1.0 / scaledHeight,\n );\n }\n\n const weights = this.getGaussianWeights(radius);\n if (this.blurLocations.weightsLocation) {\n gl.uniform1fv(this.blurLocations.weightsLocation, weights);\n }\n\n gl.viewport(0, 0, scaledWidth, scaledHeight);\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.pingFbo);\n gl.bindTexture(gl.TEXTURE_2D, this.inputTexture);\n if (this.blurLocations.directionLocation) {\n gl.uniform2f(this.blurLocations.directionLocation, 1.0, 0.0);\n }\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.pongFbo);\n gl.bindTexture(gl.TEXTURE_2D, this.pingTexture);\n if (this.blurLocations.directionLocation) {\n gl.uniform2f(this.blurLocations.directionLocation, 0.0, 1.0);\n }\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n gl.viewport(0, 0, width, height);\n gl.useProgram(this.passthroughProgramHandle);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.enableVertexAttribArray(this.passthroughLocations.positionLocation);\n gl.vertexAttribPointer(\n this.passthroughLocations.positionLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.enableVertexAttribArray(this.passthroughLocations.texCoordLocation);\n gl.vertexAttribPointer(\n this.passthroughLocations.texCoordLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, this.pongTexture);\n if (this.passthroughLocations.imageLocation) {\n gl.uniform1i(this.passthroughLocations.imageLocation, 0);\n }\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n public close(): void {\n if (!this.isRunning) return;\n this.isRunning = false;\n const gl = this.gl;\n\n if (this.pingFbo) gl.deleteFramebuffer(this.pingFbo);\n if (this.pongFbo) gl.deleteFramebuffer(this.pongFbo);\n if (this.pingTexture) gl.deleteTexture(this.pingTexture);\n if (this.pongTexture) gl.deleteTexture(this.pongTexture);\n if (this.inputTexture) gl.deleteTexture(this.inputTexture);\n if (this.positionBuffer) gl.deleteBuffer(this.positionBuffer);\n if (this.texCoordBuffer) gl.deleteBuffer(this.texCoordBuffer);\n\n gl.deleteProgram(this.blurProgramHandle);\n gl.deleteProgram(this.passthroughProgramHandle);\n }\n}\n","import { VideoTrackProcessorHooks } from './types';\nimport { BaseVideoProcessor } from './BaseVideoProcessor';\nimport { FullScreenBlurRenderer } from './FullScreenBlurRenderer';\n\nexport interface FullScreenBlurOptions {\n blurRadius?: number;\n}\n\n/**\n * A video filter that applies a full-screen blur to each frame.\n *\n * It uses a WebGL renderer to blur the incoming camera track and outputs\n * a new track with the effect applied. Setup and frame handling are managed\n * by the base processor.\n */\nexport class FullScreenBlur extends BaseVideoProcessor {\n private blurRenderer!: FullScreenBlurRenderer;\n private readonly blurRadius: number;\n\n /**\n * Creates a new full-screen blur processor for the given video track.\n *\n * @param track - The input camera track to blur.\n * @param options - Optional settings such as the blur radius.\n * @param hooks - Optional callbacks for stats and error reporting.\n */\n constructor(\n track: MediaStreamVideoTrack,\n options: FullScreenBlurOptions = {},\n hooks: VideoTrackProcessorHooks = {},\n ) {\n super(track, hooks);\n this.blurRadius = options.blurRadius ?? 6;\n }\n\n protected async initialize(): Promise<void> {\n this.blurRenderer = new FullScreenBlurRenderer(this.canvas);\n }\n\n protected async transform(frame: VideoFrame): Promise<VideoFrame> {\n this.blurRenderer.render(frame, this.blurRadius);\n return new VideoFrame(this.canvas, { timestamp: frame.timestamp });\n }\n\n protected onStop(): void {\n this.blurRenderer?.close();\n }\n\n protected get processorName(): string {\n return 'fullscreen-blur';\n }\n}\n"],"names":["simd","SegmentationLevel","WorkerTimer","lastModelFilePath","modelFileCache","FilesetResolver","ImageSegmenter"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/compatibility.ts","../../src/legacy/helpers/webglHelper.ts","../../src/legacy/webgl2/backgroundBlurStage.ts","../../src/legacy/webgl2/backgroundImageStage.ts","../../src/legacy/webgl2/jointBilateralFilterStage.ts","../../src/legacy/webgl2/resizingStage.ts","../../src/legacy/webgl2/softmaxStage.ts","../../src/legacy/webgl2/webgl2Pipeline.ts","../../src/legacy/segmentation.ts","../../src/legacy/createRenderer.ts","../src/legacy/tflite-simd.js","../../src/version.ts","../../src/legacy/tflite.ts","../../src/mediapipe.ts","../../src/types.ts","../../src/FallbackGenerator.ts","../../src/FallbackProcessor.ts","../../src/BaseVideoProcessor.ts","../../src/WebGLRenderer.ts","../../src/VirtualBackground.ts","../../src/FullScreenBlurRenderer.ts","../../src/FullScreenBlur.ts"],"sourcesContent":["import { simd } from 'wasm-feature-detect';\n\nexport type PlatformSupportFlags = {\n /**\n * Forces support for mobile devices, although performance isn't optimal.\n */\n forceMobileSupport?: boolean;\n\n /**\n * Forces support for Safari, although in cases where the tab is put in the background,\n * the FPS can drop significantly or freeze completely due to intensive timer throttling.\n */\n forceSafariSupport?: boolean;\n};\n\n/**\n * Checks if the current platform is a mobile device.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent\n */\nconst isMobile = () => /Mobi/i.test(navigator.userAgent);\n\n/**\n * Checks whether the current browser is Safari.\n */\nconst isSafari = () =>\n /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Runs a check to see if the current platform supports\n * the necessary APIs required for the video filters.\n */\nexport const isPlatformSupported = async ({\n forceMobileSupport = false,\n forceSafariSupport = false,\n}: PlatformSupportFlags = {}) =>\n typeof document !== 'undefined' &&\n typeof window !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n // we don't support mobile devices yet due to performance issues\n (forceMobileSupport || !isMobile()) &&\n // Safari has issues with timer throttling, causing low FPS when the tab goes to the background\n (forceSafariSupport || !isSafari()) &&\n typeof WebAssembly !== 'undefined' &&\n !!window.WebGL2RenderingContext && // WebGL2 is required for the video filters\n !!document.createElement('canvas').getContext('webgl2') &&\n (await simd()); // SIMD is required for the wasm module\n\n/**\n * Runs a check to see if the current platform supports\n * the necessary APIs required for the MediaPipe-based video filters.\n */\nexport const isMediaPipePlatformSupported = async ({\n forceMobileSupport = false,\n forceSafariSupport = false,\n}: PlatformSupportFlags = {}) =>\n typeof document !== 'undefined' &&\n typeof window !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n // we don't support mobile devices yet due to performance issues\n (forceMobileSupport || !isMobile()) &&\n // Safari has issues with timer throttling, causing low FPS when the tab goes to the background\n (forceSafariSupport || !isSafari()) &&\n typeof WebAssembly !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' && // OffscreenCanvas is required for efficient rendering\n !!window.WebGL2RenderingContext && // WebGL2 is required for the video filters\n !!new OffscreenCanvas(1, 1).getContext('webgl2') &&\n typeof VideoFrame !== 'undefined' && // VideoFrame API is required for frame processing\n typeof createImageBitmap !== 'undefined'; // createImageBitmap is required for background image processing\n","/**\n * Use it along with boyswan.glsl-literal VSCode extension\n * to get GLSL syntax highlighting.\n * https://marketplace.visualstudio.com/items?itemName=boyswan.glsl-literal\n *\n * On VSCode OSS, boyswan.glsl-literal requires slevesque.shader extension\n * to be installed as well.\n * https://marketplace.visualstudio.com/items?itemName=slevesque.shader\n */\nexport const glsl = String.raw;\n\nexport function createPipelineStageProgram(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n) {\n const program = createProgram(gl, vertexShader, fragmentShader);\n\n const positionAttributeLocation = gl.getAttribLocation(program, 'a_position');\n gl.enableVertexAttribArray(positionAttributeLocation);\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);\n\n const texCoordAttributeLocation = gl.getAttribLocation(program, 'a_texCoord');\n gl.enableVertexAttribArray(texCoordAttributeLocation);\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n gl.vertexAttribPointer(texCoordAttributeLocation, 2, gl.FLOAT, false, 0, 0);\n\n return program;\n}\n\nexport function createProgram(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader,\n) {\n const program = gl.createProgram()!;\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error(\n `Could not link WebGL program: ${gl.getProgramInfoLog(program)}`,\n );\n }\n return program;\n}\n\nexport function compileShader(\n gl: WebGL2RenderingContext,\n shaderType: number,\n shaderSource: string,\n) {\n const shader = gl.createShader(shaderType)!;\n gl.shaderSource(shader, shaderSource);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error(`Could not compile shader: ${gl.getShaderInfoLog(shader)}`);\n }\n return shader;\n}\n\nexport function createTexture(\n gl: WebGL2RenderingContext,\n internalformat: number,\n width: number,\n height: number,\n minFilter = gl.NEAREST,\n magFilter = gl.NEAREST,\n) {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);\n gl.texStorage2D(gl.TEXTURE_2D, 1, internalformat, width, height);\n return texture;\n}\n\nexport async function readPixelsAsync(\n gl: WebGL2RenderingContext,\n x: number,\n y: number,\n width: number,\n height: number,\n format: number,\n type: number,\n dest: ArrayBufferView,\n) {\n const buf = gl.createBuffer()!;\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\n gl.bufferData(gl.PIXEL_PACK_BUFFER, dest.byteLength, gl.STREAM_READ);\n gl.readPixels(x, y, width, height, format, type, 0);\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\n\n await getBufferSubDataAsync(gl, gl.PIXEL_PACK_BUFFER, buf, 0, dest);\n\n gl.deleteBuffer(buf);\n return dest;\n}\n\nasync function getBufferSubDataAsync(\n gl: WebGL2RenderingContext,\n target: number,\n buffer: WebGLBuffer,\n srcByteOffset: number,\n dstBuffer: ArrayBufferView,\n dstOffset?: number,\n length?: number,\n) {\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\n gl.flush();\n if (!sync) return;\n\n const res = await clientWaitAsync(gl, sync);\n gl.deleteSync(sync);\n\n if (res !== gl.WAIT_FAILED) {\n gl.bindBuffer(target, buffer);\n gl.getBufferSubData(target, srcByteOffset, dstBuffer, dstOffset, length);\n gl.bindBuffer(target, null);\n }\n}\n\nfunction clientWaitAsync(gl: WebGL2RenderingContext, sync: WebGLSync) {\n return new Promise<number>((resolve) => {\n function test() {\n const res = gl.clientWaitSync(sync, 0, 0);\n if (res === gl.WAIT_FAILED) {\n resolve(res);\n return;\n }\n if (res === gl.TIMEOUT_EXPIRED) {\n setTimeout(test);\n return;\n }\n resolve(res);\n }\n setTimeout(test);\n });\n}\n","import {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper';\nimport { BackgroundBlurLevel } from '../../types';\n\nexport type BackgroundBlurStage = {\n render(): void;\n updateCoverage(coverage: [number, number]): void;\n cleanUp(): void;\n};\n\nexport function buildBackgroundBlurStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n canvas: HTMLCanvasElement,\n blurLevel: BackgroundBlurLevel,\n): BackgroundBlurStage {\n const blurPass = buildBlurPass(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n canvas,\n blurLevel,\n );\n const blendPass = buildBlendPass(gl, positionBuffer, texCoordBuffer, canvas);\n\n function render() {\n blurPass.render();\n blendPass.render();\n }\n\n function updateCoverage(coverage: [number, number]) {\n blendPass.updateCoverage(coverage);\n }\n\n function cleanUp() {\n blendPass.cleanUp();\n blurPass.cleanUp();\n }\n\n return {\n render,\n updateCoverage,\n cleanUp,\n };\n}\n\nfunction buildBlurPass(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n canvas: HTMLCanvasElement,\n blurLevel: BackgroundBlurLevel,\n) {\n const sigma =\n typeof blurLevel === 'number'\n ? blurLevel\n : blurLevel === 'low'\n ? 2\n : blurLevel === 'medium'\n ? 4\n : 6;\n const windowSize = Math.max(1, Math.floor(sigma * 3));\n const offset = new Array<number>(windowSize).fill(0).map((v, index) => index);\n const variance = sigma ** 2;\n const weights = offset.map((x) => {\n const m = sigma * Math.sqrt(2 * Math.PI);\n const e = Math.exp(-(x ** 2) / (2 * variance));\n return e / m;\n });\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform vec2 u_texelSize;\n\n in vec2 v_texCoord;\n out vec4 outColor;\n\n const float offset[${windowSize}] = float[](${offset.map((i) => i.toFixed(10)).join(', ')});\n const float weight[${windowSize}] = float[](${weights.map((i) => i.toFixed(10)).join(', ')});\n\n void main() {\n vec4 centerColor = texture(u_inputFrame, v_texCoord);\n float personMask = texture(u_personMask, v_texCoord).a;\n\n vec4 frameColor = centerColor * weight[0] * (1.0 - personMask);\n\n for (int i = 1; i < ${windowSize}; i++) {\n vec2 offset = vec2(offset[i]) * u_texelSize;\n\n vec2 texCoord = v_texCoord + offset;\n frameColor += texture(u_inputFrame, texCoord)\n * weight[i]\n * (1.0 - texture(u_personMask, texCoord).a);\n\n texCoord = v_texCoord - offset;\n frameColor += texture(u_inputFrame, texCoord)\n * weight[i]\n * (1.0 - texture(u_personMask, texCoord).a);\n }\n outColor = vec4(frameColor.rgb + (1.0 - frameColor.a) * centerColor.rgb, 1.0);\n }\n `;\n\n const scale = 0.5;\n const outputWidth = canvas.width * scale;\n const outputHeight = canvas.height * scale;\n const texelWidth = 1 / outputWidth;\n const texelHeight = 1 / outputHeight;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask');\n const texelSizeLocation = gl.getUniformLocation(program, 'u_texelSize');\n const texture1 = createTexture(\n gl,\n gl.RGBA8,\n outputWidth,\n outputHeight,\n gl.NEAREST,\n // @ts-expect-error types are incomplete\n gl.LINEAR,\n );\n const texture2 = createTexture(\n gl,\n gl.RGBA8,\n outputWidth,\n outputHeight,\n gl.NEAREST,\n // @ts-expect-error types are incomplete\n gl.LINEAR,\n );\n\n const frameBuffer1 = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer1);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture1,\n 0,\n );\n\n const frameBuffer2 = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer2);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture2,\n 0,\n );\n\n gl.useProgram(program);\n gl.uniform1i(personMaskLocation, 1);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, personMaskTexture);\n\n for (let i = 0; i < 3; i++) {\n gl.uniform2f(texelSizeLocation, 0, texelHeight);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer1);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, texture1);\n gl.uniform1i(inputFrameLocation, 2);\n\n gl.uniform2f(texelSizeLocation, texelWidth, 0);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer2);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n gl.bindTexture(gl.TEXTURE_2D, texture2);\n }\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer2);\n gl.deleteFramebuffer(frameBuffer1);\n gl.deleteTexture(texture2);\n gl.deleteTexture(texture1);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return {\n render,\n cleanUp,\n };\n}\n\nfunction buildBlendPass(\n gl: WebGL2RenderingContext,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n canvas: HTMLCanvasElement,\n) {\n const vertexShaderSource = glsl`#version 300 es\n\n in vec2 a_position;\n in vec2 a_texCoord;\n\n out vec2 v_texCoord;\n\n void main() {\n // Flipping Y is required when rendering to canvas\n gl_Position = vec4(a_position * vec2(1.0, -1.0), 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `;\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform sampler2D u_blurredInputFrame;\n uniform vec2 u_coverage;\n\n in vec2 v_texCoord;\n\n out vec4 outColor;\n\n void main() {\n vec3 color = texture(u_inputFrame, v_texCoord).rgb;\n vec3 blurredColor = texture(u_blurredInputFrame, v_texCoord).rgb;\n float personMask = texture(u_personMask, v_texCoord).a;\n personMask = smoothstep(u_coverage.x, u_coverage.y, personMask);\n outColor = vec4(mix(blurredColor, color, personMask), 1.0);\n }\n `;\n\n const { width: outputWidth, height: outputHeight } = canvas;\n\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask');\n const blurredInputFrame = gl.getUniformLocation(\n program,\n 'u_blurredInputFrame',\n );\n const coverageLocation = gl.getUniformLocation(program, 'u_coverage');\n\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n gl.uniform1i(personMaskLocation, 1);\n gl.uniform1i(blurredInputFrame, 2);\n gl.uniform2f(coverageLocation, 0, 1);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function updateCoverage(coverage: [number, number]) {\n gl.useProgram(program);\n gl.uniform2f(coverageLocation, coverage[0], coverage[1]);\n }\n\n function cleanUp() {\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n gl.deleteShader(vertexShader);\n }\n\n return {\n render,\n updateCoverage,\n cleanUp,\n };\n}\n","import {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper';\n\nexport type BackgroundImageStage = {\n render(): void;\n updateCoverage(coverage: [number, number]): void;\n updateLightWrapping(lightWrapping: number): void;\n updateBlendMode(blendMode: 'screen' | 'linearDodge'): void;\n cleanUp(): void;\n};\n\nexport function buildBackgroundImageStage(\n gl: WebGL2RenderingContext,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n backgroundImage: HTMLImageElement | undefined,\n canvas: HTMLCanvasElement,\n): BackgroundImageStage {\n const vertexShaderSource = glsl`#version 300 es\n\n uniform vec2 u_backgroundScale;\n uniform vec2 u_backgroundOffset;\n\n in vec2 a_position;\n in vec2 a_texCoord;\n\n out vec2 v_texCoord;\n out vec2 v_backgroundCoord;\n\n void main() {\n // Flipping Y is required when rendering to canvas\n gl_Position = vec4(a_position * vec2(1.0, -1.0), 0.0, 1.0);\n v_texCoord = a_texCoord;\n v_backgroundCoord = a_texCoord * u_backgroundScale + u_backgroundOffset;\n }\n `;\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform sampler2D u_background;\n uniform vec2 u_coverage;\n uniform float u_lightWrapping;\n uniform float u_blendMode;\n\n in vec2 v_texCoord;\n in vec2 v_backgroundCoord;\n\n out vec4 outColor;\n\n vec3 screen(vec3 a, vec3 b) {\n return 1.0 - (1.0 - a) * (1.0 - b);\n }\n\n vec3 linearDodge(vec3 a, vec3 b) {\n return a + b;\n }\n\n void main() {\n vec3 frameColor = texture(u_inputFrame, v_texCoord).rgb;\n vec3 backgroundColor = texture(u_background, v_backgroundCoord).rgb;\n float personMask = texture(u_personMask, v_texCoord).a;\n float lightWrapMask = 1.0 - max(0.0, personMask - u_coverage.y) / (1.0 - u_coverage.y);\n vec3 lightWrap = u_lightWrapping * lightWrapMask * backgroundColor;\n\n frameColor = u_blendMode * linearDodge(frameColor, lightWrap)\n + (1.0 - u_blendMode) * screen(frameColor, lightWrap);\n personMask = smoothstep(u_coverage.x, u_coverage.y, personMask);\n outColor = vec4(frameColor * personMask + backgroundColor * (1.0 - personMask), 1.0);\n }\n `;\n\n const { width: outputWidth, height: outputHeight } = canvas;\n const outputRatio = outputWidth / outputHeight;\n\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const backgroundScaleLocation = gl.getUniformLocation(\n program,\n 'u_backgroundScale',\n );\n const backgroundOffsetLocation = gl.getUniformLocation(\n program,\n 'u_backgroundOffset',\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask');\n const backgroundLocation = gl.getUniformLocation(program, 'u_background');\n const coverageLocation = gl.getUniformLocation(program, 'u_coverage');\n const lightWrappingLocation = gl.getUniformLocation(\n program,\n 'u_lightWrapping',\n );\n const blendModeLocation = gl.getUniformLocation(program, 'u_blendMode');\n\n gl.useProgram(program);\n gl.uniform2f(backgroundScaleLocation, 1, 1);\n gl.uniform2f(backgroundOffsetLocation, 0, 0);\n gl.uniform1i(inputFrameLocation, 0);\n gl.uniform1i(personMaskLocation, 1);\n gl.uniform2f(coverageLocation, 0, 1);\n gl.uniform1f(lightWrappingLocation, 0);\n gl.uniform1f(blendModeLocation, 0);\n\n let backgroundTexture: WebGLTexture | null = null;\n // TODO Find a better to handle background being loaded\n if (backgroundImage?.complete) {\n updateBackgroundImage(backgroundImage);\n } else if (backgroundImage) {\n backgroundImage.onload = () => {\n updateBackgroundImage(backgroundImage);\n };\n }\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, personMaskTexture);\n if (backgroundTexture !== null) {\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, backgroundTexture);\n // TODO Handle correctly the background not loaded yet\n gl.uniform1i(backgroundLocation, 2);\n }\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function updateBackgroundImage(bgImage: HTMLImageElement) {\n backgroundTexture = createTexture(\n gl,\n gl.RGBA8,\n bgImage.naturalWidth,\n bgImage.naturalHeight,\n // @ts-expect-error types are incomplete\n gl.LINEAR,\n gl.LINEAR,\n );\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n bgImage.naturalWidth,\n bgImage.naturalHeight,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n bgImage,\n );\n\n let xOffset = 0;\n let yOffset = 0;\n let backgroundWidth = bgImage.naturalWidth;\n let backgroundHeight = bgImage.naturalHeight;\n const backgroundRatio = backgroundWidth / backgroundHeight;\n if (backgroundRatio < outputRatio) {\n backgroundHeight = backgroundWidth / outputRatio;\n yOffset = (bgImage.naturalHeight - backgroundHeight) / 2;\n } else {\n backgroundWidth = backgroundHeight * outputRatio;\n xOffset = (bgImage.naturalWidth - backgroundWidth) / 2;\n }\n\n const xScale = backgroundWidth / bgImage.naturalWidth;\n const yScale = backgroundHeight / bgImage.naturalHeight;\n xOffset /= bgImage.naturalWidth;\n yOffset /= bgImage.naturalHeight;\n\n gl.uniform2f(backgroundScaleLocation, xScale, yScale);\n gl.uniform2f(backgroundOffsetLocation, xOffset, yOffset);\n }\n\n function updateCoverage(coverage: [number, number]) {\n gl.useProgram(program);\n gl.uniform2f(coverageLocation, coverage[0], coverage[1]);\n }\n\n function updateLightWrapping(lightWrapping: number) {\n gl.useProgram(program);\n gl.uniform1f(lightWrappingLocation, lightWrapping);\n }\n\n function updateBlendMode(blendMode: 'screen' | 'linearDodge') {\n gl.useProgram(program);\n gl.uniform1f(blendModeLocation, blendMode === 'screen' ? 0 : 1);\n }\n\n function cleanUp() {\n gl.deleteTexture(backgroundTexture);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n gl.deleteShader(vertexShader);\n }\n\n return {\n render,\n updateCoverage,\n updateLightWrapping,\n updateBlendMode,\n cleanUp,\n };\n}\n","import {\n compileShader,\n createPipelineStageProgram,\n glsl,\n} from '../helpers/webglHelper';\nimport { SegmentationParams } from '../segmentation';\n\nexport function buildJointBilateralFilterStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n inputTexture: WebGLTexture,\n outputTexture: WebGLTexture,\n canvas: HTMLCanvasElement,\n segmentationConfig: SegmentationParams,\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_segmentationMask;\n uniform vec2 u_texelSize;\n uniform float u_step;\n uniform float u_radius;\n uniform float u_offset;\n uniform float u_sigmaTexel;\n uniform float u_sigmaColor;\n\n in vec2 v_texCoord;\n out vec4 outColor;\n\n float gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n }\n\n void main() {\n vec2 centerCoord = v_texCoord;\n vec3 centerColor = texture(u_inputFrame, centerCoord).rgb;\n float newVal = 0.0;\n\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n\n // Subsample kernel space.\n for (float i = -u_radius + u_offset; i <= u_radius; i += u_step) {\n for (float j = -u_radius + u_offset; j <= u_radius; j += u_step) {\n vec2 shift = vec2(j, i) * u_texelSize;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(u_inputFrame, coord).rgb;\n float outVal = texture(u_segmentationMask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), u_sigmaTexel);\n colorWeight = gaussian(distance(centerColor, frameColor), u_sigmaColor);\n totalWeight += spaceWeight * colorWeight;\n\n newVal += spaceWeight * colorWeight * outVal;\n }\n }\n newVal /= totalWeight;\n\n outColor = vec4(vec3(0.0), newVal);\n }\n `;\n\n const { width: segmentationWidth, height: segmentationHeight } =\n segmentationConfig;\n const { width: outputWidth, height: outputHeight } = canvas;\n const texelWidth = 1 / outputWidth;\n const texelHeight = 1 / outputHeight;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const segmentationMaskLocation = gl.getUniformLocation(\n program,\n 'u_segmentationMask',\n );\n const texelSizeLocation = gl.getUniformLocation(program, 'u_texelSize');\n const stepLocation = gl.getUniformLocation(program, 'u_step');\n const radiusLocation = gl.getUniformLocation(program, 'u_radius');\n const offsetLocation = gl.getUniformLocation(program, 'u_offset');\n const sigmaTexelLocation = gl.getUniformLocation(program, 'u_sigmaTexel');\n const sigmaColorLocation = gl.getUniformLocation(program, 'u_sigmaColor');\n\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0,\n );\n\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n gl.uniform1i(segmentationMaskLocation, 1);\n gl.uniform2f(texelSizeLocation, texelWidth, texelHeight);\n\n // Ensures default values are configured to prevent infinite\n // loop in fragment shader\n updateSigmaSpace(0);\n updateSigmaColor(0);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, inputTexture);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function updateSigmaSpace(sigmaSpace: number) {\n sigmaSpace *= Math.max(\n outputWidth / segmentationWidth,\n outputHeight / segmentationHeight,\n );\n\n const kSparsityFactor = 0.66; // Higher is sparser.\n const step = Math.max(1, Math.sqrt(sigmaSpace) * kSparsityFactor);\n const radius = sigmaSpace;\n const offset = step > 1 ? step * 0.5 : 0;\n const sigmaTexel = Math.max(texelWidth, texelHeight) * sigmaSpace;\n\n gl.useProgram(program);\n gl.uniform1f(stepLocation, step);\n gl.uniform1f(radiusLocation, radius);\n gl.uniform1f(offsetLocation, offset);\n gl.uniform1f(sigmaTexelLocation, sigmaTexel);\n }\n\n function updateSigmaColor(sigmaColor: number) {\n gl.useProgram(program);\n gl.uniform1f(sigmaColorLocation, sigmaColor);\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return { render, updateSigmaSpace, updateSigmaColor, cleanUp };\n}\n","import { TFLite } from '../tflite';\nimport {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n readPixelsAsync,\n} from '../helpers/webglHelper';\nimport { SegmentationParams } from '../segmentation';\n\nexport function buildResizingStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n tflite: TFLite,\n segmentationConfig: SegmentationParams,\n onError?: (error: any) => void,\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n uniform sampler2D u_inputFrame;\n in vec2 v_texCoord;\n out vec4 outColor;\n\n void main() {\n outColor = texture(u_inputFrame, v_texCoord);\n }\n `;\n\n // TFLite memory will be accessed as float32\n const tfliteInputMemoryOffset = tflite._getInputMemoryOffset() / 4;\n\n const { width: outputWidth, height: outputHeight } = segmentationConfig;\n const outputPixelCount = outputWidth * outputHeight;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame');\n const outputTexture = createTexture(gl, gl.RGBA8, outputWidth, outputHeight);\n\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0,\n );\n const outputPixels = new Uint8Array(outputPixelCount * 4);\n\n gl.useProgram(program);\n gl.uniform1i(inputFrameLocation, 0);\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight);\n gl.useProgram(program);\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n // Downloads pixels asynchronously from GPU while rendering the current frame.\n // The pixels will be available in the next frame render which results\n // in offsets in the segmentation output but increases the frame rate.\n readPixelsAsync(\n gl,\n 0,\n 0,\n outputWidth,\n outputHeight,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n outputPixels,\n ).catch((error: any) => {\n onError?.(error);\n });\n\n for (let i = 0; i < outputPixelCount; i++) {\n const tfliteIndex = tfliteInputMemoryOffset + i * 3;\n const outputIndex = i * 4;\n tflite.HEAPF32[tfliteIndex] = outputPixels[outputIndex] / 255;\n tflite.HEAPF32[tfliteIndex + 1] = outputPixels[outputIndex + 1] / 255;\n tflite.HEAPF32[tfliteIndex + 2] = outputPixels[outputIndex + 2] / 255;\n }\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer);\n gl.deleteTexture(outputTexture);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return { render, cleanUp };\n}\n","import { TFLite } from '../tflite';\nimport {\n compileShader,\n createPipelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper';\nimport { SegmentationParams } from '../segmentation';\n\nexport function buildSoftmaxStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n tflite: TFLite,\n outputTexture: WebGLTexture,\n segmentationConfig: SegmentationParams,\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputSegmentation;\n in vec2 v_texCoord;\n out vec4 outColor;\n\n void main() {\n vec2 segmentation = texture(u_inputSegmentation, v_texCoord).rg;\n float shift = max(segmentation.r, segmentation.g);\n float backgroundExp = exp(segmentation.r - shift);\n float personExp = exp(segmentation.g - shift);\n outColor = vec4(vec3(0.0), personExp / (backgroundExp + personExp));\n }\n `;\n\n // TFLite memory will be accessed as float32\n const tfliteOutputMemoryOffset = tflite._getOutputMemoryOffset() / 4;\n const { width: segmentationWidth, height: segmentationHeight } =\n segmentationConfig;\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource,\n );\n const program = createPipelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer,\n );\n const inputLocation = gl.getUniformLocation(program, 'u_inputSegmentation');\n const inputTexture = createTexture(\n gl,\n gl.RG32F,\n segmentationWidth,\n segmentationHeight,\n );\n\n const frameBuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0,\n );\n\n gl.useProgram(program);\n gl.uniform1i(inputLocation, 1);\n\n function render() {\n gl.viewport(0, 0, segmentationWidth, segmentationHeight);\n gl.useProgram(program);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, inputTexture);\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n segmentationWidth,\n segmentationHeight,\n gl.RG,\n gl.FLOAT,\n tflite.HEAPF32,\n tfliteOutputMemoryOffset,\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer);\n gl.deleteTexture(inputTexture);\n gl.deleteProgram(program);\n gl.deleteShader(fragmentShader);\n }\n\n return { render, cleanUp };\n}\n","import { TFLite } from '../tflite';\nimport { compileShader, createTexture, glsl } from '../helpers/webglHelper';\nimport {\n BackgroundBlurStage,\n buildBackgroundBlurStage,\n} from './backgroundBlurStage';\nimport {\n BackgroundImageStage,\n buildBackgroundImageStage,\n} from './backgroundImageStage';\nimport { buildJointBilateralFilterStage } from './jointBilateralFilterStage';\nimport { buildResizingStage } from './resizingStage';\nimport { buildSoftmaxStage } from './softmaxStage';\nimport { SegmentationParams } from '../segmentation';\nimport type { BackgroundBlurLevel, BackgroundFilter } from '../../types';\n\nexport function buildWebGL2Pipeline(\n videoSource: HTMLVideoElement,\n backgroundImage: HTMLImageElement | undefined,\n blurLevel: BackgroundBlurLevel | undefined,\n backgroundFilter: BackgroundFilter,\n canvas: HTMLCanvasElement,\n tflite: TFLite,\n segmentationConfig: SegmentationParams,\n onError?: (error: any) => void,\n) {\n const gl = canvas.getContext('webgl2')!;\n if (!gl) throw new Error('WebGL2 is not supported');\n if (gl.isContextLost()) throw new Error('WebGL2 context was lost');\n\n const { width: frameWidth, height: frameHeight } = videoSource;\n const { width: segmentationWidth, height: segmentationHeight } =\n segmentationConfig;\n\n const vertexShaderSource = glsl`#version 300 es\n\n in vec2 a_position;\n in vec2 a_texCoord;\n out vec2 v_texCoord;\n\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `;\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n\n const vertexArray = gl.createVertexArray();\n gl.bindVertexArray(vertexArray);\n\n const positionBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0]),\n gl.STATIC_DRAW,\n );\n\n const texCoordBuffer = gl.createBuffer()!;\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0]),\n gl.STATIC_DRAW,\n );\n\n // We don't use texStorage2D here because texImage2D seems faster\n // to upload video texture than texSubImage2D even though the latter\n // is supposed to be the recommended way:\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#use_texstorage_to_create_textures\n const inputFrameTexture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, inputFrameTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n // TODO Rename segmentation and person mask to be more specific\n const segmentationTexture = createTexture(\n gl,\n gl.RGBA8,\n segmentationWidth,\n segmentationHeight,\n )!;\n const personMaskTexture = createTexture(\n gl,\n gl.RGBA8,\n frameWidth,\n frameHeight,\n )!;\n\n const resizingStage = buildResizingStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n tflite,\n segmentationConfig,\n onError,\n );\n const loadSegmentationStage = buildSoftmaxStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n tflite,\n segmentationTexture,\n segmentationConfig,\n );\n\n const jointBilateralFilterStage = buildJointBilateralFilterStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n segmentationTexture,\n personMaskTexture,\n canvas,\n segmentationConfig,\n );\n const backgroundStage =\n backgroundFilter === 'blur'\n ? buildBackgroundBlurStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n canvas,\n blurLevel || 'high',\n )\n : buildBackgroundImageStage(\n gl,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n backgroundImage,\n canvas,\n );\n\n function render() {\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, inputFrameTexture);\n\n // texImage2D seems faster than texSubImage2D to upload\n // video texture\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n videoSource,\n );\n\n gl.bindVertexArray(vertexArray);\n\n resizingStage.render();\n\n tflite._runInference();\n\n loadSegmentationStage.render();\n jointBilateralFilterStage.render();\n backgroundStage.render();\n }\n\n function updatePostProcessingConfig() {\n jointBilateralFilterStage.updateSigmaSpace(1);\n jointBilateralFilterStage.updateSigmaColor(0.1);\n\n if (backgroundFilter === 'image') {\n const backgroundImageStage = backgroundStage as BackgroundImageStage;\n backgroundImageStage.updateCoverage([0.5, 0.75]);\n backgroundImageStage.updateLightWrapping(0.3);\n backgroundImageStage.updateBlendMode('screen');\n } else if (backgroundFilter === 'blur') {\n const backgroundBlurStage = backgroundStage as BackgroundBlurStage;\n backgroundBlurStage.updateCoverage([0.5, 0.75]);\n } else {\n // TODO Handle no background in a separate pipeline path\n const backgroundImageStage = backgroundStage as BackgroundImageStage;\n backgroundImageStage.updateCoverage([0, 0.9999]);\n backgroundImageStage.updateLightWrapping(0);\n }\n }\n\n function cleanUp() {\n backgroundStage.cleanUp();\n jointBilateralFilterStage.cleanUp();\n loadSegmentationStage.cleanUp();\n resizingStage.cleanUp();\n\n gl.deleteTexture(personMaskTexture);\n gl.deleteTexture(segmentationTexture);\n gl.deleteTexture(inputFrameTexture);\n gl.deleteBuffer(texCoordBuffer);\n gl.deleteBuffer(positionBuffer);\n gl.deleteVertexArray(vertexArray);\n gl.deleteShader(vertexShader);\n }\n\n return { render, updatePostProcessingConfig, cleanUp };\n}\n","export type SegmentationParams = {\n width: number;\n height: number;\n};\n\nexport enum SegmentationLevel {\n LOW = 'low',\n HIGH = 'high',\n}\n\nexport const getSegmentationParams = (\n level: SegmentationLevel,\n): SegmentationParams => {\n if (level === SegmentationLevel.HIGH) {\n return { width: 256, height: 144 };\n }\n return { width: 160, height: 96 };\n};\n","import { WorkerTimer } from '@stream-io/worker-timer';\nimport { TFLite } from './tflite';\nimport { buildWebGL2Pipeline } from './webgl2/webgl2Pipeline';\nimport { getSegmentationParams, SegmentationLevel } from './segmentation';\nimport { BackgroundBlurLevel, BackgroundFilter } from '../types';\n\nexport type Renderer = {\n /**\n * Disposes of the renderer.\n */\n dispose: () => void;\n};\n\nexport function createRenderer(\n tflite: TFLite,\n videoSource: HTMLVideoElement,\n targetCanvas: HTMLCanvasElement,\n options: {\n backgroundFilter: BackgroundFilter;\n segmentationLevel?: SegmentationLevel;\n backgroundImage?: HTMLImageElement;\n backgroundBlurLevel?: BackgroundBlurLevel;\n fps?: number;\n },\n onError?: (error: any) => void,\n): Renderer {\n const {\n backgroundFilter,\n backgroundImage,\n backgroundBlurLevel,\n segmentationLevel = SegmentationLevel.HIGH,\n fps = 30,\n } = options;\n if (backgroundFilter === 'image' && !backgroundImage) {\n throw new Error(\n `backgroundImage element is required when backgroundFilter is image`,\n );\n }\n\n const pipeline = buildWebGL2Pipeline(\n videoSource,\n backgroundImage,\n backgroundBlurLevel,\n backgroundFilter,\n targetCanvas,\n tflite,\n getSegmentationParams(segmentationLevel),\n );\n\n const timers = new WorkerTimer({ useWorker: true });\n const id = timers.setInterval(\n () => {\n try {\n pipeline.render();\n\n if (backgroundFilter === 'image') {\n pipeline.updatePostProcessingConfig();\n }\n } catch (error) {\n onError?.(error);\n }\n },\n Math.floor(1000 / (fps <= 0 ? 30 : fps)),\n );\n\n return {\n dispose: () => {\n pipeline.cleanUp();\n timers.clearInterval(id);\n timers.destroy();\n },\n };\n}\n","export const createTFLiteSIMDModule = (__Module) => {\n __Module = __Module || {};\n\n var _scriptDir =\n typeof document !== 'undefined' && document.currentScript\n ? document.currentScript.src\n : undefined;\n\n var Module = typeof __Module != 'undefined' ? __Module : {};\n var readyPromiseResolve, readyPromiseReject;\n Module['ready'] = new Promise(function (resolve, reject) {\n readyPromiseResolve = resolve;\n readyPromiseReject = reject;\n });\n var moduleOverrides = Object.assign({}, Module);\n var arguments_ = [];\n var thisProgram = './this.program';\n var quit_ = (status, toThrow) => {\n throw toThrow;\n };\n var ENVIRONMENT_IS_WEB = true;\n var ENVIRONMENT_IS_WORKER = false;\n var scriptDirectory = '';\n\n function locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n }\n\n var read_, readAsync, readBinary, setWindowTitle;\n if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n if (ENVIRONMENT_IS_WORKER) {\n // eslint-disable-next-line no-restricted-globals\n scriptDirectory = self.location.href;\n } else if (typeof document != 'undefined' && document.currentScript) {\n scriptDirectory = document.currentScript.src;\n }\n if (_scriptDir) {\n scriptDirectory = _scriptDir;\n }\n if (scriptDirectory.indexOf('blob:') !== 0) {\n scriptDirectory = scriptDirectory.substr(\n 0,\n scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1,\n );\n } else {\n scriptDirectory = '';\n }\n {\n read_ = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.send(null);\n return xhr.responseText;\n };\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = (url, onload, onerror) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n onload(xhr.response);\n return;\n }\n onerror();\n };\n xhr.onerror = onerror;\n xhr.send(null);\n };\n }\n setWindowTitle = (title) => (document.title = title);\n } else {\n }\n var out = Module['print'] || console.log.bind(console);\n var err = Module['printErr'] || console.warn.bind(console);\n Object.assign(Module, moduleOverrides);\n moduleOverrides = null;\n if (Module['arguments']) arguments_ = Module['arguments'];\n if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n if (Module['quit']) quit_ = Module['quit'];\n var POINTER_SIZE = 4;\n var wasmBinary;\n if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\n var noExitRuntime = Module['noExitRuntime'] || true;\n if (typeof WebAssembly != 'object') {\n abort('no native wasm support detected');\n }\n var wasmMemory;\n var ABORT = false;\n var EXITSTATUS;\n\n function assert(condition, text) {\n if (!condition) {\n abort(text);\n }\n }\n\n var UTF8Decoder =\n typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined;\n\n function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {\n var endIdx = idx + maxBytesToRead;\n var endPtr = idx;\n while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = '';\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n }\n\n function UTF8ToString(ptr, maxBytesToRead) {\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n }\n\n function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.charCodeAt(i);\n if (u >= 55296 && u <= 57343) {\n var u1 = str.charCodeAt(++i);\n u = (65536 + ((u & 1023) << 10)) | (u1 & 1023);\n }\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++] = 192 | (u >> 6);\n heap[outIdx++] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++] = 224 | (u >> 12);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++] = 240 | (u >> 18);\n heap[outIdx++] = 128 | ((u >> 12) & 63);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n }\n }\n heap[outIdx] = 0;\n return outIdx - startIdx;\n }\n\n var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n\n function updateGlobalBufferAndViews(buf) {\n buffer = buf;\n Module['HEAP8'] = HEAP8 = new Int8Array(buf);\n Module['HEAP16'] = HEAP16 = new Int16Array(buf);\n Module['HEAP32'] = HEAP32 = new Int32Array(buf);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf);\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf);\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf);\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buf);\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buf);\n }\n\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216;\n var wasmTable;\n var __ATPRERUN__ = [];\n var __ATINIT__ = [];\n var __ATPOSTRUN__ = [];\n var runtimeInitialized = false;\n\n function keepRuntimeAlive() {\n return noExitRuntime;\n }\n\n function preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function')\n Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(__ATPRERUN__);\n }\n\n function initRuntime() {\n runtimeInitialized = true;\n callRuntimeCallbacks(__ATINIT__);\n }\n\n function postRun() {\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function')\n Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n callRuntimeCallbacks(__ATPOSTRUN__);\n }\n\n function addOnPreRun(cb) {\n __ATPRERUN__.unshift(cb);\n }\n\n function addOnInit(cb) {\n __ATINIT__.unshift(cb);\n }\n\n function addOnPostRun(cb) {\n __ATPOSTRUN__.unshift(cb);\n }\n\n var runDependencies = 0;\n var runDependencyWatcher = null;\n var dependenciesFulfilled = null;\n\n function addRunDependency(id) {\n runDependencies++;\n if (Module['monitorRunDependencies']) {\n Module['monitorRunDependencies'](runDependencies);\n }\n }\n\n function removeRunDependency(id) {\n runDependencies--;\n if (Module['monitorRunDependencies']) {\n Module['monitorRunDependencies'](runDependencies);\n }\n if (runDependencies == 0) {\n if (runDependencyWatcher !== null) {\n clearInterval(runDependencyWatcher);\n runDependencyWatcher = null;\n }\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n }\n\n function abort(what) {\n {\n if (Module['onAbort']) {\n Module['onAbort'](what);\n }\n }\n what = 'Aborted(' + what + ')';\n err(what);\n ABORT = true;\n EXITSTATUS = 1;\n what += '. Build with -sASSERTIONS for more info.';\n var e = new WebAssembly.RuntimeError(what);\n readyPromiseReject(e);\n throw e;\n }\n\n var dataURIPrefix = 'data:application/octet-stream;base64,';\n\n function isDataURI(filename) {\n return filename.startsWith(dataURIPrefix);\n }\n\n var wasmBinaryFile;\n wasmBinaryFile = 'tflite-simd.wasm';\n if (!isDataURI(wasmBinaryFile)) {\n wasmBinaryFile = locateFile(wasmBinaryFile);\n }\n\n function getBinary(file) {\n try {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n // eslint-disable-next-line @typescript-eslint/no-shadow\n } catch (err) {\n abort(err);\n }\n }\n\n function getBinaryPromise() {\n if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {\n if (typeof fetch == 'function') {\n return fetch(wasmBinaryFile, { credentials: 'same-origin' })\n .then(function (response) {\n if (!response['ok']) {\n throw (\n \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\"\n );\n }\n return response['arrayBuffer']();\n })\n .catch(function () {\n return getBinary(wasmBinaryFile);\n });\n }\n }\n return Promise.resolve().then(function () {\n return getBinary(wasmBinaryFile);\n });\n }\n\n function createWasm() {\n var info = {\n env: asmLibraryArg,\n wasi_snapshot_preview1: asmLibraryArg,\n };\n\n function receiveInstance(instance, module) {\n var exports = instance.exports;\n Module['asm'] = exports;\n wasmMemory = Module['asm']['memory'];\n updateGlobalBufferAndViews(wasmMemory.buffer);\n wasmTable = Module['asm']['__indirect_function_table'];\n addOnInit(Module['asm']['__wasm_call_ctors']);\n removeRunDependency('wasm-instantiate');\n }\n\n addRunDependency('wasm-instantiate');\n\n function receiveInstantiationResult(result) {\n receiveInstance(result['instance']);\n }\n\n function instantiateArrayBuffer(receiver) {\n return getBinaryPromise()\n .then(function (binary) {\n return WebAssembly.instantiate(binary, info);\n })\n .then(function (instance) {\n return instance;\n })\n .then(receiver, function (reason) {\n err('failed to asynchronously prepare wasm: ' + reason);\n abort(reason);\n });\n }\n\n function instantiateAsync() {\n if (\n !wasmBinary &&\n typeof WebAssembly.instantiateStreaming == 'function' &&\n !isDataURI(wasmBinaryFile) &&\n typeof fetch == 'function'\n ) {\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(\n function (response) {\n var result = WebAssembly.instantiateStreaming(response, info);\n return result.then(receiveInstantiationResult, function (reason) {\n err('wasm streaming compile failed: ' + reason);\n err('falling back to ArrayBuffer instantiation');\n return instantiateArrayBuffer(receiveInstantiationResult);\n });\n },\n );\n } else {\n return instantiateArrayBuffer(receiveInstantiationResult);\n }\n }\n\n if (Module['instantiateWasm']) {\n try {\n var exports = Module['instantiateWasm'](info, receiveInstance);\n return exports;\n } catch (e) {\n err('Module.instantiateWasm callback failed with error: ' + e);\n readyPromiseReject(e);\n }\n }\n instantiateAsync().catch(readyPromiseReject);\n return {};\n }\n\n var tempDouble;\n var tempI64;\n\n function ExitStatus(status) {\n this.name = 'ExitStatus';\n this.message = 'Program terminated with exit(' + status + ')';\n this.status = status;\n }\n\n function callRuntimeCallbacks(callbacks) {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n }\n\n function demangle(func) {\n return func;\n }\n\n function demangleAll(text) {\n var regex = /\\b_Z[\\w\\d_]+/g;\n return text.replace(regex, function (x) {\n var y = demangle(x);\n return x === y ? x : y + ' [' + x + ']';\n });\n }\n\n function jsStackTrace() {\n var error = new Error();\n if (!error.stack) {\n try {\n throw new Error();\n } catch (e) {\n error = e;\n }\n if (!error.stack) {\n return '(no stack trace available)';\n }\n }\n return error.stack.toString();\n }\n\n function __dlinit(main_dso_handle) {}\n\n var dlopenMissingError =\n 'To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking';\n\n function __dlopen_js(filename, flag) {\n abort(dlopenMissingError);\n }\n\n function __dlsym_js(handle, symbol) {\n abort(dlopenMissingError);\n }\n\n var nowIsMonotonic = true;\n\n function __emscripten_get_now_is_monotonic() {\n return nowIsMonotonic;\n }\n\n var SYSCALLS = {\n varargs: undefined,\n get: function () {\n SYSCALLS.varargs += 4;\n var ret = HEAP32[(SYSCALLS.varargs - 4) >> 2];\n return ret;\n },\n getStr: function (ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n };\n\n function __mmap_js(len, prot, flags, fd, off, allocated) {\n return -52;\n }\n\n function __munmap_js(addr, len, prot, flags, fd, offset) {}\n\n function _abort() {\n abort('');\n }\n\n function _emscripten_date_now() {\n return Date.now();\n }\n\n function getHeapMax() {\n return 2147483648;\n }\n\n function _emscripten_get_heap_max() {\n return getHeapMax();\n }\n\n var _emscripten_get_now;\n _emscripten_get_now = () => performance.now();\n\n function _emscripten_memcpy_big(dest, src, num) {\n HEAPU8.copyWithin(dest, src, src + num);\n }\n\n function emscripten_realloc_buffer(size) {\n try {\n wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16);\n updateGlobalBufferAndViews(wasmMemory.buffer);\n return 1;\n } catch (e) {}\n }\n\n function _emscripten_resize_heap(requestedSize) {\n var oldSize = HEAPU8.length;\n requestedSize = requestedSize >>> 0;\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n let alignUp = (x, multiple) => x + ((multiple - (x % multiple)) % multiple);\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(\n overGrownHeapSize,\n requestedSize + 100663296,\n );\n var newSize = Math.min(\n maxHeapSize,\n alignUp(Math.max(requestedSize, overGrownHeapSize), 65536),\n );\n var replacement = emscripten_realloc_buffer(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n }\n\n var ENV = {};\n\n function getExecutableName() {\n return thisProgram || './this.program';\n }\n\n function getEnvStrings() {\n if (!getEnvStrings.strings) {\n var lang =\n (\n (typeof navigator == 'object' &&\n navigator.languages &&\n navigator.languages[0]) ||\n 'C'\n ).replace('-', '_') + '.UTF-8';\n var env = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG: lang,\n _: getExecutableName(),\n };\n for (var x in ENV) {\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(x + '=' + env[x]);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function writeAsciiToMemory(str, buffer, dontAddNull) {\n for (var i = 0; i < str.length; ++i) {\n HEAP8[buffer++ >> 0] = str.charCodeAt(i);\n }\n if (!dontAddNull) HEAP8[buffer >> 0] = 0;\n }\n\n function _environ_get(__environ, environ_buf) {\n var bufSize = 0;\n getEnvStrings().forEach(function (string, i) {\n var ptr = environ_buf + bufSize;\n HEAPU32[(__environ + i * 4) >> 2] = ptr;\n writeAsciiToMemory(string, ptr);\n bufSize += string.length + 1;\n });\n return 0;\n }\n\n function _environ_sizes_get(penviron_count, penviron_buf_size) {\n var strings = getEnvStrings();\n HEAPU32[penviron_count >> 2] = strings.length;\n var bufSize = 0;\n strings.forEach(function (string) {\n bufSize += string.length + 1;\n });\n HEAPU32[penviron_buf_size >> 2] = bufSize;\n return 0;\n }\n\n function _proc_exit(code) {\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n if (Module['onExit']) Module['onExit'](code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n }\n\n function exitJS(status, implicit) {\n EXITSTATUS = status;\n _proc_exit(status);\n }\n\n var _exit = exitJS;\n\n function _fd_close(fd) {\n return 52;\n }\n\n function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {\n return 70;\n }\n\n var printCharBuffers = [null, [], []];\n\n function printChar(stream, curr) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n var buffer = printCharBuffers[stream];\n if (curr === 0 || curr === 10) {\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\n buffer.length = 0;\n } else {\n buffer.push(curr);\n }\n }\n\n function _fd_write(fd, iov, iovcnt, pnum) {\n var num = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[iov >> 2];\n var len = HEAPU32[(iov + 4) >> 2];\n iov += 8;\n for (var j = 0; j < len; j++) {\n printChar(fd, HEAPU8[ptr + j]);\n }\n num += len;\n }\n HEAPU32[pnum >> 2] = num;\n return 0;\n }\n\n function getRandomDevice() {\n if (\n typeof crypto == 'object' &&\n typeof crypto['getRandomValues'] == 'function'\n ) {\n var randomBuffer = new Uint8Array(1);\n return () => {\n crypto.getRandomValues(randomBuffer);\n return randomBuffer[0];\n };\n } else return () => abort('randomDevice');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _getentropy(buffer, size) {\n if (!_getentropy.randomDevice) {\n _getentropy.randomDevice = getRandomDevice();\n }\n for (var i = 0; i < size; i++) {\n HEAP8[(buffer + i) >> 0] = _getentropy.randomDevice();\n }\n return 0;\n }\n\n var asmLibraryArg = {\n _dlinit: __dlinit,\n _dlopen_js: __dlopen_js,\n _dlsym_js: __dlsym_js,\n _emscripten_get_now_is_monotonic: __emscripten_get_now_is_monotonic,\n _mmap_js: __mmap_js,\n _munmap_js: __munmap_js,\n abort: _abort,\n emscripten_date_now: _emscripten_date_now,\n emscripten_get_heap_max: _emscripten_get_heap_max,\n emscripten_get_now: _emscripten_get_now,\n emscripten_memcpy_big: _emscripten_memcpy_big,\n emscripten_resize_heap: _emscripten_resize_heap,\n environ_get: _environ_get,\n environ_sizes_get: _environ_sizes_get,\n exit: _exit,\n fd_close: _fd_close,\n fd_seek: _fd_seek,\n fd_write: _fd_write,\n getentropy: _getentropy,\n };\n var asm = createWasm();\n var ___wasm_call_ctors = (Module['___wasm_call_ctors'] = function () {\n return (___wasm_call_ctors = Module['___wasm_call_ctors'] =\n Module['asm']['__wasm_call_ctors']).apply(null, arguments);\n });\n var _getModelBufferMemoryOffset = (Module['_getModelBufferMemoryOffset'] =\n function () {\n return (_getModelBufferMemoryOffset = Module[\n '_getModelBufferMemoryOffset'\n ] =\n Module['asm']['getModelBufferMemoryOffset']).apply(null, arguments);\n });\n var _getInputMemoryOffset = (Module['_getInputMemoryOffset'] = function () {\n return (_getInputMemoryOffset = Module['_getInputMemoryOffset'] =\n Module['asm']['getInputMemoryOffset']).apply(null, arguments);\n });\n var _getInputHeight = (Module['_getInputHeight'] = function () {\n return (_getInputHeight = Module['_getInputHeight'] =\n Module['asm']['getInputHeight']).apply(null, arguments);\n });\n var _getInputWidth = (Module['_getInputWidth'] = function () {\n return (_getInputWidth = Module['_getInputWidth'] =\n Module['asm']['getInputWidth']).apply(null, arguments);\n });\n var _getInputChannelCount = (Module['_getInputChannelCount'] = function () {\n return (_getInputChannelCount = Module['_getInputChannelCount'] =\n Module['asm']['getInputChannelCount']).apply(null, arguments);\n });\n var _getOutputMemoryOffset = (Module['_getOutputMemoryOffset'] = function () {\n return (_getOutputMemoryOffset = Module['_getOutputMemoryOffset'] =\n Module['asm']['getOutputMemoryOffset']).apply(null, arguments);\n });\n var _getOutputHeight = (Module['_getOutputHeight'] = function () {\n return (_getOutputHeight = Module['_getOutputHeight'] =\n Module['asm']['getOutputHeight']).apply(null, arguments);\n });\n var _getOutputWidth = (Module['_getOutputWidth'] = function () {\n return (_getOutputWidth = Module['_getOutputWidth'] =\n Module['asm']['getOutputWidth']).apply(null, arguments);\n });\n var _getOutputChannelCount = (Module['_getOutputChannelCount'] = function () {\n return (_getOutputChannelCount = Module['_getOutputChannelCount'] =\n Module['asm']['getOutputChannelCount']).apply(null, arguments);\n });\n var _loadModel = (Module['_loadModel'] = function () {\n return (_loadModel = Module['_loadModel'] =\n Module['asm']['loadModel']).apply(null, arguments);\n });\n var _runInference = (Module['_runInference'] = function () {\n return (_runInference = Module['_runInference'] =\n Module['asm']['runInference']).apply(null, arguments);\n });\n var _malloc = (Module['_malloc'] = function () {\n return (_malloc = Module['_malloc'] = Module['asm']['malloc']).apply(\n null,\n arguments,\n );\n });\n var ___errno_location = (Module['___errno_location'] = function () {\n return (___errno_location = Module['___errno_location'] =\n Module['asm']['__errno_location']).apply(null, arguments);\n });\n var ___dl_seterr = (Module['___dl_seterr'] = function () {\n return (___dl_seterr = Module['___dl_seterr'] =\n Module['asm']['__dl_seterr']).apply(null, arguments);\n });\n var stackSave = (Module['stackSave'] = function () {\n return (stackSave = Module['stackSave'] = Module['asm']['stackSave']).apply(\n null,\n arguments,\n );\n });\n var stackRestore = (Module['stackRestore'] = function () {\n return (stackRestore = Module['stackRestore'] =\n Module['asm']['stackRestore']).apply(null, arguments);\n });\n var stackAlloc = (Module['stackAlloc'] = function () {\n return (stackAlloc = Module['stackAlloc'] =\n Module['asm']['stackAlloc']).apply(null, arguments);\n });\n var dynCall_jjj = (Module['dynCall_jjj'] = function () {\n return (dynCall_jjj = Module['dynCall_jjj'] =\n Module['asm']['dynCall_jjj']).apply(null, arguments);\n });\n var dynCall_jiii = (Module['dynCall_jiii'] = function () {\n return (dynCall_jiii = Module['dynCall_jiii'] =\n Module['asm']['dynCall_jiii']).apply(null, arguments);\n });\n var dynCall_iiiijj = (Module['dynCall_iiiijj'] = function () {\n return (dynCall_iiiijj = Module['dynCall_iiiijj'] =\n Module['asm']['dynCall_iiiijj']).apply(null, arguments);\n });\n var dynCall_viijj = (Module['dynCall_viijj'] = function () {\n return (dynCall_viijj = Module['dynCall_viijj'] =\n Module['asm']['dynCall_viijj']).apply(null, arguments);\n });\n var dynCall_viiijjj = (Module['dynCall_viiijjj'] = function () {\n return (dynCall_viiijjj = Module['dynCall_viiijjj'] =\n Module['asm']['dynCall_viiijjj']).apply(null, arguments);\n });\n var dynCall_iijjiiii = (Module['dynCall_iijjiiii'] = function () {\n return (dynCall_iijjiiii = Module['dynCall_iijjiiii'] =\n Module['asm']['dynCall_iijjiiii']).apply(null, arguments);\n });\n var dynCall_jiji = (Module['dynCall_jiji'] = function () {\n return (dynCall_jiji = Module['dynCall_jiji'] =\n Module['asm']['dynCall_jiji']).apply(null, arguments);\n });\n var calledRun;\n dependenciesFulfilled = function runCaller() {\n if (!calledRun) run();\n if (!calledRun) dependenciesFulfilled = runCaller;\n };\n\n function run(args) {\n args = args || arguments_;\n if (runDependencies > 0) {\n return;\n }\n preRun();\n if (runDependencies > 0) {\n return;\n }\n\n function doRun() {\n if (calledRun) return;\n calledRun = true;\n Module['calledRun'] = true;\n if (ABORT) return;\n initRuntime();\n readyPromiseResolve(Module);\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\n postRun();\n }\n\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(function () {\n setTimeout(function () {\n Module['setStatus']('');\n }, 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n }\n\n if (Module['preInit']) {\n if (typeof Module['preInit'] == 'function')\n Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].pop()();\n }\n }\n run();\n\n return __Module.ready;\n};\n","export const version = process.env.PKG_VERSION || '0.0.0-development';\nexport const packageName =\n process.env.PKG_NAME || '@stream-io/video-filters-web';\n","// @ts-expect-error - module is not declared\nimport { createTFLiteSIMDModule } from './tflite-simd.js';\nimport { packageName, version } from '../version';\n\n// This is a WebAssembly module compiled from the TensorFlow Lite C++ library.\nconst createTFLite = createTFLiteSIMDModule as (opts?: any) => Promise<TFLite>;\n\nexport interface TFLite extends EmscriptenModule {\n _getModelBufferMemoryOffset(): number;\n _getInputMemoryOffset(): number;\n _getInputHeight(): number;\n _getInputWidth(): number;\n _getInputChannelCount(): number;\n _getOutputMemoryOffset(): number;\n _getOutputHeight(): number;\n _getOutputWidth(): number;\n _getOutputChannelCount(): number;\n _loadModel(bufferSize: number): number;\n _runInference(): number;\n}\n\nexport const loadTFLite = async (\n options: {\n basePath?: string;\n tfFilePath?: string;\n modelFilePath?: string;\n } = {},\n) => {\n const {\n basePath = `https://unpkg.com/${packageName}@${version}/tf`,\n tfFilePath = `${basePath}/tflite/tflite-simd.wasm`,\n modelFilePath = `${basePath}/models/segm_full_v679.tflite`,\n } = options;\n\n const [tfLite, model] = await Promise.all([\n createTFLite({ locateFile: () => tfFilePath }),\n fetchModel(modelFilePath),\n ]);\n\n const modelBufferOffset = tfLite._getModelBufferMemoryOffset();\n tfLite.HEAPU8.set(new Uint8Array(model), modelBufferOffset);\n tfLite._loadModel(model.byteLength);\n\n return tfLite;\n};\n\nlet lastModelFilePath = '';\nlet modelFileCache: ArrayBuffer | undefined;\nconst fetchModel = async (modelFilePath: string) => {\n const model =\n modelFilePath === lastModelFilePath && modelFileCache\n ? modelFileCache\n : await fetch(modelFilePath).then((r) => r.arrayBuffer());\n\n // Cache the model file for future use.\n modelFileCache = model;\n lastModelFilePath = modelFilePath;\n return model;\n};\n","import { packageName, version } from './version';\n\nlet lastModelFilePath = '';\nlet modelFileCache: ArrayBuffer | undefined;\nexport const loadMediaPipe = async (\n options: {\n basePath?: string;\n modelPath?: string;\n } = {},\n): Promise<ArrayBuffer> => {\n const {\n basePath = `https://unpkg.com/${packageName}@${version}/mediapipe`,\n modelPath = `${basePath}/models/selfie_segmenter_landscape.tflite`,\n } = options;\n\n const model =\n modelPath === lastModelFilePath && modelFileCache\n ? modelFileCache\n : await fetch(modelPath).then((r) => r.arrayBuffer());\n\n modelFileCache = model;\n lastModelFilePath = modelPath;\n\n return model;\n};\n","export type BackgroundSource = {\n type: string;\n media?: ImageBitmap | ReadableStream;\n url: string;\n video?: HTMLVideoElement;\n track?: MediaStreamTrack;\n};\nexport type BackgroundFilter = 'blur' | 'image';\nexport type BackgroundBlurLevel = 'low' | 'medium' | 'high' | number;\n\n/**\n * Options for controlling the segmentation mask smoothing.\n * These values are passed to the WebGL shader that blends\n * consecutive segmentation masks over time.\n */\nexport interface SegmentationOptions {\n /**\n * Controls how fast the mask adapts to new segmentation results.\n * Higher values make the mask react faster but may cause flickering.\n * Lower values produce smoother transitions but increase latency.\n * Value should be between 0 and 1.\n * @default 0.8\n */\n smoothingFactor?: number;\n\n /**\n * Lower edge of the smoothstep function applied to the confidence mask.\n * Confidence values below this are mapped to 0 (background).\n * Value should be between 0 and 1, and less than smoothstepMax.\n * @default 0.6\n */\n smoothstepMin?: number;\n\n /**\n * Upper edge of the smoothstep function applied to the confidence mask.\n * Confidence values above this are mapped to 1 (foreground).\n * Value should be between 0 and 1, and greater than smoothstepMin.\n * @default 0.9\n */\n smoothstepMax?: number;\n}\n\nexport interface SegmenterOptions {\n backgroundSource?: BackgroundSource | null;\n bgBlur: number;\n bgBlurRadius: number;\n isSelfieMode: boolean;\n segmentationOptions?: SegmentationOptions;\n}\n/**\n * Static configuration for the processor, defining which background\n * effect should be applied and how it should behave.\n */\nexport interface BackgroundOptions {\n basePath?: string;\n modelPath?: string;\n backgroundFilter?: BackgroundFilter;\n backgroundBlurLevel?: BackgroundBlurLevel;\n backgroundImage?: string | undefined;\n segmentationOptions?: SegmentationOptions;\n}\n\n/**\n * Performance statistics for video processing.\n */\nexport interface PerformanceStats {\n delay: number;\n fps: number;\n timestamp: number;\n}\n\n/**\n * Runtime hooks for handling lifecycle or error events.\n */\nexport interface VideoTrackProcessorHooks {\n onError?: (error: unknown) => void;\n onStats?: (stats: PerformanceStats) => void;\n}\n\n/**\n * Maps blur level to blur strength values.\n */\nexport const BACKGROUND_BLUR_MAP: Record<'low' | 'medium' | 'high', number> = {\n low: 3,\n medium: 5,\n high: 7,\n};\n","/**\n * Type representing a video track generator that can be either the native\n * MediaStreamTrackGenerator or the fallback implementation.\n */\nexport interface MediaStreamTrackGenerator<T> extends MediaStreamTrack {\n writable: WritableStream<T>;\n}\n\n/**\n * Configuration options for creating a track generator.\n */\nexport interface TrackGeneratorOptions {\n readonly kind: 'video';\n readonly signalTarget?: MediaStreamTrack;\n}\n\n/**\n * Fallback video processor for browsers that do not support MediaStreamTrackGenerator.\n *\n * Produces a video MediaStreamTrack sourced from a canvas and exposes\n * a WritableStream<VideoFrame> on track.writable for writing frames.\n */\nclass FallbackGenerator {\n constructor({ kind, signalTarget }: TrackGeneratorOptions) {\n if (kind !== 'video') {\n throw new Error('Only video tracks are supported');\n }\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d', { desynchronized: true });\n if (!ctx) {\n throw new Error('Failed to get 2D context from canvas');\n }\n\n const mediaStream = canvas.captureStream();\n const track =\n mediaStream.getVideoTracks()[0] as MediaStreamTrackGenerator<VideoFrame>;\n\n const height = signalTarget?.getSettings().height;\n const width = signalTarget?.getSettings().width;\n if (height && width) {\n canvas.height = height;\n canvas.width = width;\n }\n\n if (!track) {\n throw new Error('Failed to create canvas track');\n }\n\n if (signalTarget) {\n signalTarget.addEventListener('ended', () => {\n track.stop();\n });\n }\n\n track.writable = new WritableStream({\n write: (frame: VideoFrame) => {\n if (\n canvas.width !== frame.displayWidth ||\n canvas.height !== frame.displayHeight\n ) {\n canvas.width = frame.displayWidth;\n canvas.height = frame.displayHeight;\n }\n\n ctx.drawImage(frame, 0, 0, canvas.width, canvas.height);\n frame.close();\n },\n abort: () => {\n track.stop();\n },\n close: () => {\n track.stop();\n },\n });\n\n return track as MediaStreamTrackGenerator<VideoFrame>;\n }\n}\n\ntype VideoTrackGeneratorConstructor = new (\n options: TrackGeneratorOptions,\n) => MediaStreamTrackGenerator<VideoFrame>;\n\nconst TrackGenerator: VideoTrackGeneratorConstructor =\n typeof MediaStreamTrackGenerator !== 'undefined'\n ? (MediaStreamTrackGenerator as unknown as VideoTrackGeneratorConstructor)\n : (FallbackGenerator as unknown as VideoTrackGeneratorConstructor);\n\nexport { TrackGenerator };\n","import { WorkerTimer } from '@stream-io/worker-timer';\n\n/**\n * Representing a video track processor that can be either the native\n * MediaStreamTrackProcessor or the fallback implementation.\n */\nexport interface MediaStreamTrackProcessor<T> {\n readonly readable: ReadableStream<T>;\n}\n\n/**\n * Configuration options for creating a track processor.\n */\nexport interface TrackProcessorOptions {\n readonly track: MediaStreamTrack;\n}\n\n/**\n * Fallback implementation for browsers without MediaStreamTrackGenerator.\n *\n * Produces a video MediaStreamTrack sourced from a canvas and exposes a\n * WritableStream<VideoFrame> on track.writable. Written frames are drawn\n * into the canvas and update the underlying track automatically.\n */\nclass FallbackProcessor implements MediaStreamTrackProcessor<VideoFrame> {\n readonly readable: ReadableStream<VideoFrame>;\n\n readonly workerTimer: WorkerTimer;\n readonly video: HTMLVideoElement;\n\n constructor({ track }: TrackProcessorOptions) {\n if (!track) throw new Error('MediaStreamTrack is required');\n if (track.kind !== 'video') {\n throw new Error('MediaStreamTrack must be video');\n }\n let running = true;\n\n this.video = document.createElement('video');\n\n this.video.muted = true;\n this.video.playsInline = true;\n this.video.srcObject = new MediaStream([track]);\n\n const canvas = new OffscreenCanvas(1, 1);\n const ctx = canvas.getContext('2d');\n\n if (!ctx) throw new Error('Failed to get 2D context from OffscreenCanvas');\n\n let timestamp = 0;\n const frameRate = track.getSettings().frameRate || 30;\n let frameDuration = 1000 / frameRate;\n\n this.workerTimer = new WorkerTimer({ useWorker: true });\n this.readable = new ReadableStream({\n start: async () => {\n await Promise.all([\n this.video.play(),\n new Promise((r) =>\n this.video.addEventListener('loadeddata', r, { once: true }),\n ),\n ]);\n frameDuration = 1000 / (track.getSettings().frameRate || 30);\n timestamp = performance.now();\n },\n pull: async (controller) => {\n if (!running) {\n controller.close();\n this.close();\n return;\n }\n const delta = performance.now() - timestamp;\n if (delta <= frameDuration) {\n await new Promise((r: (value?: unknown) => void) =>\n this.workerTimer.setTimeout(r, frameDuration - delta),\n );\n }\n timestamp = performance.now();\n\n if (\n canvas.width !== this.video.videoWidth ||\n canvas.height !== this.video.videoHeight\n ) {\n canvas.width = this.video.videoWidth;\n canvas.height = this.video.videoHeight;\n }\n\n ctx.drawImage(this.video, 0, 0);\n\n try {\n const frame = new VideoFrame(canvas, {\n timestamp: Math.round(this.video.currentTime * 1000000),\n });\n\n controller.enqueue(frame);\n } catch (err) {\n running = false;\n controller.error(err);\n this.close();\n }\n },\n cancel: () => {\n running = false;\n this.close();\n },\n });\n }\n\n public close = () => {\n this.video.pause();\n this.video.srcObject = null;\n this.video.src = '';\n\n this.workerTimer.destroy();\n };\n}\n\nconst TrackProcessor =\n typeof MediaStreamTrackProcessor !== 'undefined'\n ? MediaStreamTrackProcessor\n : FallbackProcessor;\n\nexport { TrackProcessor };\n","import { VideoTrackProcessorHooks } from './types';\nimport { TrackGenerator, MediaStreamTrackGenerator } from './FallbackGenerator';\nimport { MediaStreamTrackProcessor, TrackProcessor } from './FallbackProcessor';\n\n/**\n * Base class for real-time video filters.\n *\n * It sets up the full pipeline that reads frames from the input track,\n * processes them, and outputs a new track with your effect applied. Subclasses\n * only need to implement `initialize` (run once before processing starts) and\n * `transform` (called for every frame).\n *\n * Everything else—canvas setup, performance tracking, error handling, and\n * clean shutdown is handled for you. Calling `start()` returns a processed\n * `MediaStreamTrack` ready to use.\n */\nexport abstract class BaseVideoProcessor {\n protected readonly processor: MediaStreamTrackProcessor<VideoFrame>;\n protected readonly generator: MediaStreamTrackGenerator<VideoFrame>;\n\n protected readonly hooks: VideoTrackProcessorHooks;\n\n protected readonly abortController = new AbortController();\n protected canvas!: OffscreenCanvas;\n\n private frames = 0;\n private delayTotal = 0;\n private lastStatsTime = 0;\n\n /**\n * Constructs a new instance.\n */\n protected constructor(\n protected readonly track: MediaStreamVideoTrack,\n hooks: VideoTrackProcessorHooks = {},\n ) {\n this.processor = new TrackProcessor({ track });\n this.generator = new TrackGenerator({\n kind: 'video',\n signalTarget: track,\n });\n this.hooks = hooks;\n }\n\n public async start(): Promise<MediaStreamTrack> {\n const { readable } = this.processor;\n const { writable } = this.generator;\n\n const { width = 1280, height = 720 } = this.track.getSettings();\n this.canvas = new OffscreenCanvas(width, height);\n\n await this.initialize();\n\n const transformStream = new TransformStream<VideoFrame, VideoFrame>({\n transform: async (frame, controller) => {\n try {\n if (this.abortController.signal.aborted) return frame.close();\n\n if (\n this.canvas.width !== frame.displayWidth ||\n this.canvas.height !== frame.displayHeight\n ) {\n this.canvas.width = frame.displayWidth;\n this.canvas.height = frame.displayHeight;\n }\n\n const processed = await this.transform(frame);\n\n controller.enqueue(processed);\n } catch (e) {\n this.hooks.onError?.(e);\n } finally {\n frame.close();\n }\n },\n flush: () => this.onFlush(),\n });\n\n readable\n .pipeThrough(transformStream, { signal: this.abortController.signal })\n .pipeTo(writable, { signal: this.abortController.signal })\n .catch((e) => {\n if (e.name !== 'AbortError' && e.name !== 'InvalidStateError') {\n console.error(`[${this.processorName}] Error processing track:`, e);\n this.hooks.onError?.(e);\n }\n });\n\n return this.generator;\n }\n\n public stop(): void {\n this.abortController.abort();\n this.generator.stop();\n this.onStop();\n }\n\n protected updateStats(delay: number): void {\n this.frames++;\n this.delayTotal += delay;\n\n const now = performance.now();\n if (this.lastStatsTime === 0) {\n this.lastStatsTime = now;\n return;\n }\n\n if (now - this.lastStatsTime >= 1000) {\n const avgDelay = Math.round((this.delayTotal / this.frames) * 100) / 100;\n const fps = Math.round((1000 * this.frames) / (now - this.lastStatsTime));\n\n this.hooks.onStats?.({ delay: avgDelay, fps, timestamp: now });\n\n this.frames = 0;\n this.delayTotal = 0;\n this.lastStatsTime = now;\n }\n }\n\n protected abstract initialize(): Promise<void>;\n protected abstract transform(frame: VideoFrame): Promise<VideoFrame>;\n\n protected onFlush(): void {}\n protected onStop(): void {}\n\n protected get processorName(): string {\n return 'base-processor';\n }\n}\n","import { BackgroundSource } from './types';\n\ntype ImageInfo = {\n type: 'image';\n texture: WebGLTexture;\n width: number;\n height: number;\n url: string;\n};\n\ntype VideoInfo = {\n type: 'video';\n texture: WebGLTexture;\n url: string;\n media: ReadableStream;\n canvas: OffscreenCanvas;\n};\n\ntype ColorInfo = {\n type: 'color';\n texture: WebGLTexture;\n color: readonly [number, number, number, number];\n};\n\ntype BackgroundRenderInfo = ImageInfo | VideoInfo | ColorInfo;\n\nexport class WebGLRenderer {\n readonly canvas: OffscreenCanvas;\n readonly gl: WebGL2RenderingContext;\n\n readonly stateUpdateProgram: WebGLProgram;\n readonly maskRefineProgram: WebGLProgram;\n readonly blurProgram: WebGLProgram;\n readonly blendProgram: WebGLProgram;\n\n readonly stateUpdateLocations: {\n position: number;\n texCoord: number;\n categoryTexture: WebGLUniformLocation | null;\n confidenceTexture: WebGLUniformLocation | null;\n prevStateTexture: WebGLUniformLocation | null;\n smoothingFactor: WebGLUniformLocation | null;\n smoothstepMin: WebGLUniformLocation | null;\n smoothstepMax: WebGLUniformLocation | null;\n selfieModel: WebGLUniformLocation | null;\n };\n readonly maskRefineLocations: {\n position: number;\n texCoord: number;\n maskTexture: WebGLUniformLocation | null;\n frameTexture: WebGLUniformLocation | null;\n texelSize: WebGLUniformLocation | null;\n sigmaSpatial: WebGLUniformLocation | null;\n sigmaRange: WebGLUniformLocation | null;\n };\n readonly blurLocations: {\n position: number;\n texCoord: number;\n image: WebGLUniformLocation | null;\n texelSize: WebGLUniformLocation | null;\n sigma: WebGLUniformLocation | null;\n radiusScale: WebGLUniformLocation | null;\n personMask: WebGLUniformLocation | null;\n direction: WebGLUniformLocation | null;\n };\n readonly blendLocations: {\n position: number;\n texCoord: number;\n frameTexture: WebGLUniformLocation | null;\n currentStateTexture: WebGLUniformLocation | null;\n backgroundTexture: WebGLUniformLocation | null;\n bgImageDimensions: WebGLUniformLocation | null;\n canvasDimensions: WebGLUniformLocation | null;\n borderSmooth: WebGLUniformLocation | null;\n bgBlur: WebGLUniformLocation | null;\n bgBlurRadius: WebGLUniformLocation | null;\n enabled: WebGLUniformLocation | null;\n };\n readonly positionBuffer: WebGLBuffer | null;\n readonly texCoordBuffer: WebGLBuffer | null;\n readonly storedStateTextures: (WebGLTexture | null)[];\n readonly fbo: WebGLFramebuffer | null;\n readonly refineFbo: WebGLFramebuffer | null;\n readonly refinedMaskTexture: WebGLTexture | null;\n readonly frameTexture: WebGLTexture | null;\n readonly blurTexture1: WebGLTexture | null;\n readonly blurTexture2: WebGLTexture | null;\n readonly blurFbo1: WebGLFramebuffer | null;\n readonly blurFbo2: WebGLFramebuffer | null;\n\n private running = false;\n private static readonly DEFAULT_BG_COLOR: readonly [\n number,\n number,\n number,\n number,\n ] = [33, 150, 243, 255];\n private currentStateIndex = 0;\n private backgroundRenderInfo: BackgroundRenderInfo | null = null;\n private activeBackgroundSourceIdentifier: string | null = null;\n\n constructor(canvas: OffscreenCanvas) {\n this.canvas = canvas;\n const gl = this.canvas.getContext('webgl2', {\n alpha: false,\n antialias: false,\n desynchronized: true,\n });\n if (!gl) throw new Error('WebGL2 not supported');\n this.gl = gl;\n\n const stateUpdateVertexShaderSource = `attribute vec2 a_position; attribute vec2 a_texCoord; varying vec2 v_texCoord; void main() { gl_Position = vec4(a_position, 0.0, 1.0); v_texCoord = a_texCoord; }`;\n const stateUpdateFragmentShaderSource = `\n precision mediump float;\n varying vec2 v_texCoord;\n uniform sampler2D u_categoryTexture;\n uniform sampler2D u_confidenceTexture;\n uniform sampler2D u_prevStateTexture;\n uniform float u_smoothingFactor;\n uniform float u_smoothstepMin;\n uniform float u_smoothstepMax;\n uniform int u_selfieModel;\n\n void main() {\n vec2 prevCoord = vec2(v_texCoord.x, 1.0 - v_texCoord.y);\n float categoryValue = texture2D(u_categoryTexture, v_texCoord).r;\n float confidenceValue = texture2D(u_confidenceTexture, v_texCoord).r;\n\n if (u_selfieModel == 1) {\n categoryValue = 1.0 - categoryValue;\n confidenceValue = 1.0 - confidenceValue;\n }\n\n if (categoryValue > 0.0) {\n categoryValue = 1.0;\n confidenceValue = 1.0 - confidenceValue;\n }\n\n float nonLinearConfidence = smoothstep(u_smoothstepMin, u_smoothstepMax, confidenceValue);\n float prevCategoryValue = texture2D(u_prevStateTexture, prevCoord).r;\n float alpha = u_smoothingFactor * nonLinearConfidence;\n float newCategoryValue = alpha * categoryValue + (1.0 - alpha) * prevCategoryValue;\n\n gl_FragColor = vec4(newCategoryValue, 0.0, 0.0, 0.0);\n }\n `;\n this.stateUpdateProgram = this.createAndLinkProgram(\n stateUpdateVertexShaderSource,\n stateUpdateFragmentShaderSource,\n );\n this.stateUpdateLocations = {\n position: gl.getAttribLocation(this.stateUpdateProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.stateUpdateProgram, 'a_texCoord'),\n categoryTexture: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_categoryTexture',\n ),\n confidenceTexture: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_confidenceTexture',\n ),\n prevStateTexture: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_prevStateTexture',\n ),\n smoothingFactor: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_smoothingFactor',\n ),\n smoothstepMin: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_smoothstepMin',\n ),\n smoothstepMax: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_smoothstepMax',\n ),\n selfieModel: gl.getUniformLocation(\n this.stateUpdateProgram,\n 'u_selfieModel',\n ),\n };\n\n const maskRefineVertexShaderSource = stateUpdateVertexShaderSource;\n const maskRefineFragmentShaderSource = `\n precision mediump float;\n varying vec2 v_texCoord;\n\n uniform sampler2D u_maskTexture;\n uniform sampler2D u_frameTexture;\n uniform vec2 u_texelSize;\n uniform float u_sigmaSpatial;\n uniform float u_sigmaRange;\n\n void main() {\n vec2 flippedCoord = v_texCoord;\n vec3 centerPixelColor = texture2D(u_frameTexture, v_texCoord).rgb;\n float totalWeight = 0.0;\n float weightedMaskSum = 0.0;\n\n for (int offsetX = -2; offsetX <= 2; offsetX++) {\n for (int offsetY = -2; offsetY <= 2; offsetY++) {\n vec2 shift = vec2(float(offsetX), float(offsetY)) * u_texelSize;\n vec2 frameCoord = v_texCoord + shift;\n vec2 maskCoord = flippedCoord + shift;\n\n vec3 neighborPixelColor = texture2D(u_frameTexture, frameCoord).rgb;\n float neighborMaskValue = texture2D(u_maskTexture, maskCoord).r;\n\n float spatialWeight = exp(-dot(shift, shift) / (2.0 * u_sigmaSpatial * u_sigmaSpatial));\n vec3 colorDifference = neighborPixelColor - centerPixelColor;\n float rangeWeight = exp(-(dot(colorDifference, colorDifference)) / (2.0 * u_sigmaRange * u_sigmaRange));\n\n float combinedWeight = spatialWeight * rangeWeight;\n weightedMaskSum += neighborMaskValue * combinedWeight;\n totalWeight += combinedWeight;\n }\n }\n\n float refinedMaskValue = weightedMaskSum / max(totalWeight, 1e-6);\n gl_FragColor = vec4(refinedMaskValue, refinedMaskValue, refinedMaskValue, 1.0);\n }\n `;\n\n this.maskRefineProgram = this.createAndLinkProgram(\n maskRefineVertexShaderSource,\n maskRefineFragmentShaderSource,\n );\n this.maskRefineLocations = {\n position: gl.getAttribLocation(this.maskRefineProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.maskRefineProgram, 'a_texCoord'),\n maskTexture: gl.getUniformLocation(\n this.maskRefineProgram,\n 'u_maskTexture',\n ),\n frameTexture: gl.getUniformLocation(\n this.maskRefineProgram,\n 'u_frameTexture',\n ),\n texelSize: gl.getUniformLocation(this.maskRefineProgram, 'u_texelSize'),\n sigmaSpatial: gl.getUniformLocation(\n this.maskRefineProgram,\n 'u_sigmaSpatial',\n ),\n sigmaRange: gl.getUniformLocation(this.maskRefineProgram, 'u_sigmaRange'),\n };\n\n const blurVertexShaderSource = stateUpdateVertexShaderSource;\n const blurFragmentShaderSource = `\n precision highp float;\n varying vec2 v_texCoord;\n\n uniform sampler2D u_image;\n uniform sampler2D u_personMask;\n uniform vec2 u_texelSize;\n uniform float u_sigma;\n uniform float u_radiusScale;\n uniform vec2 u_direction;\n\n const int KERNEL_RADIUS = 10;\n\n float gauss(float x, float s) {\n return exp(-(x * x) / (2.0 * s * s));\n }\n\n void main() {\n vec2 maskCoord = u_direction.y > 0.5 ? vec2(v_texCoord.x, 1.0 - v_texCoord.y) : v_texCoord;\n float mCenter = texture2D(u_personMask, maskCoord).r;\n float wCenter = gauss(0.0, u_sigma);\n vec4 accum = texture2D(u_image, v_texCoord) * wCenter * (1.0 - mCenter);\n float weightSum = wCenter * (1.0 - mCenter);\n\n for (int i = 1; i <= KERNEL_RADIUS; i++) {\n float f = float(i);\n float offset = f * u_radiusScale;\n float w = gauss(offset, u_sigma);\n vec2 texOffset = u_direction * offset * u_texelSize;\n\n vec2 uvPlus = v_texCoord + texOffset;\n vec2 maskCoordPlus = u_direction.y > 0.5 ? vec2(uvPlus.x, 1.0 - uvPlus.y) : uvPlus;\n float mPlus = texture2D(u_personMask, maskCoordPlus).r;\n accum += texture2D(u_image, uvPlus) * w * (1.0 - mPlus);\n weightSum += w * (1.0 - mPlus);\n\n vec2 uvMinus = v_texCoord - texOffset;\n vec2 maskCoordMinus = u_direction.y > 0.5 ? vec2(uvMinus.x, 1.0 - uvMinus.y) : uvMinus;\n float mMinus = texture2D(u_personMask, maskCoordMinus).r;\n accum += texture2D(u_image, uvMinus) * w * (1.0 - mMinus);\n weightSum += w * (1.0 - mMinus);\n }\n\n vec4 blurred = accum / max(weightSum, 1e-6);\n gl_FragColor = blurred;\n }\n `;\n\n this.blurProgram = this.createAndLinkProgram(\n blurVertexShaderSource,\n blurFragmentShaderSource,\n );\n this.blurLocations = {\n position: gl.getAttribLocation(this.blurProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.blurProgram, 'a_texCoord'),\n image: gl.getUniformLocation(this.blurProgram, 'u_image'),\n personMask: gl.getUniformLocation(this.blurProgram, 'u_personMask'),\n texelSize: gl.getUniformLocation(this.blurProgram, 'u_texelSize'),\n sigma: gl.getUniformLocation(this.blurProgram, 'u_sigma'),\n radiusScale: gl.getUniformLocation(this.blurProgram, 'u_radiusScale'),\n direction: gl.getUniformLocation(this.blurProgram, 'u_direction'),\n };\n\n const blendVertexShaderSource = stateUpdateVertexShaderSource;\n const blendFragmentShaderSource = `\n precision mediump float;\n varying vec2 v_texCoord;\n\n uniform sampler2D u_frameTexture;\n uniform sampler2D u_currentStateTexture;\n uniform sampler2D u_backgroundTexture;\n uniform vec2 u_bgImageDimensions;\n uniform vec2 u_canvasDimensions;\n uniform float u_borderSmooth;\n uniform float u_bgBlur;\n uniform float u_bgBlurRadius;\n uniform int u_enabled;\n\n vec4 getMixedFragColor(vec2 bgTexCoord, vec2 categoryCoord, vec2 offset) {\n vec4 backgroundColor = texture2D(u_backgroundTexture, bgTexCoord + offset);\n vec4 frameColor = texture2D(u_frameTexture, v_texCoord + offset);\n float categoryValue = texture2D(u_currentStateTexture, categoryCoord + offset).r;\n return mix(backgroundColor, frameColor, categoryValue);\n }\n\n void main() {\n if (u_enabled == 0) {\n gl_FragColor = texture2D(u_frameTexture, v_texCoord);\n return;\n }\n\n vec2 categoryCoord = v_texCoord;\n float categoryValue = texture2D(u_currentStateTexture, categoryCoord).r;\n\n float canvasAspect = u_canvasDimensions.x / u_canvasDimensions.y;\n float bgAspect = u_bgImageDimensions.x / u_bgImageDimensions.y;\n\n vec2 bgTexCoord = v_texCoord;\n float scaleX = 1.0;\n float scaleY = 1.0;\n float offsetX = 0.0;\n float offsetY = 0.0;\n\n if (canvasAspect < bgAspect) {\n scaleY = 1.0;\n scaleX = bgAspect / canvasAspect;\n offsetX = (1.0 - scaleX) / 2.0;\n } else {\n scaleX = 1.0;\n scaleY = canvasAspect / bgAspect;\n offsetY = (1.0 - scaleY) / 2.0;\n }\n\n bgTexCoord = vec2((v_texCoord.x - offsetX) / scaleX, (v_texCoord.y - offsetY) / scaleY);\n gl_FragColor = getMixedFragColor(bgTexCoord, categoryCoord, vec2(0.0, 0.0));\n }`;\n\n this.blendProgram = this.createAndLinkProgram(\n blendVertexShaderSource,\n blendFragmentShaderSource,\n );\n this.blendLocations = {\n position: gl.getAttribLocation(this.blendProgram, 'a_position'),\n texCoord: gl.getAttribLocation(this.blendProgram, 'a_texCoord'),\n frameTexture: gl.getUniformLocation(this.blendProgram, 'u_frameTexture'),\n currentStateTexture: gl.getUniformLocation(\n this.blendProgram,\n 'u_currentStateTexture',\n ),\n backgroundTexture: gl.getUniformLocation(\n this.blendProgram,\n 'u_backgroundTexture',\n ),\n bgImageDimensions: gl.getUniformLocation(\n this.blendProgram,\n 'u_bgImageDimensions',\n ),\n canvasDimensions: gl.getUniformLocation(\n this.blendProgram,\n 'u_canvasDimensions',\n ),\n borderSmooth: gl.getUniformLocation(this.blendProgram, 'u_borderSmooth'),\n bgBlur: gl.getUniformLocation(this.blendProgram, 'u_bgBlur'),\n bgBlurRadius: gl.getUniformLocation(this.blendProgram, 'u_bgBlurRadius'),\n enabled: gl.getUniformLocation(this.blendProgram, 'u_enabled'),\n };\n\n this.positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n gl.STATIC_DRAW,\n );\n\n this.texCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0]),\n gl.STATIC_DRAW,\n );\n\n this.storedStateTextures = Array.from({ length: 2 }, () => {\n const tex = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, tex);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n 1,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n new Uint8Array([0, 0, 0, 255]),\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n return tex;\n });\n gl.bindTexture(gl.TEXTURE_2D, null);\n\n this.fbo = gl.createFramebuffer();\n this.refineFbo = gl.createFramebuffer();\n\n const refinedTex = gl.createTexture();\n this.frameTexture = gl.createTexture();\n if (!refinedTex) throw new Error('Failed to create refined mask texture');\n gl.bindTexture(gl.TEXTURE_2D, refinedTex);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n 1,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.bindTexture(gl.TEXTURE_2D, null);\n this.refinedMaskTexture = refinedTex;\n\n const mkColorTex = () => {\n const t = gl.createTexture();\n if (!t) throw new Error('Failed to create blur texture');\n gl.bindTexture(gl.TEXTURE_2D, t);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n 1,\n 1,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.bindTexture(gl.TEXTURE_2D, null);\n return t;\n };\n this.blurTexture1 = mkColorTex();\n this.blurTexture2 = mkColorTex();\n\n const mkFbo = (tex: WebGLTexture | null) => {\n const fb = gl.createFramebuffer();\n if (!fb || !tex) throw new Error('Failed to create blur FBO');\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n tex,\n 0,\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return fb;\n };\n this.blurFbo1 = mkFbo(this.blurTexture1);\n this.blurFbo2 = mkFbo(this.blurTexture2);\n\n this.running = true;\n }\n\n private createAndLinkProgram(\n vsSource: string,\n fsSource: string,\n ): WebGLProgram {\n const vs = this.createShader(this.gl.VERTEX_SHADER, vsSource);\n const fs = this.createShader(this.gl.FRAGMENT_SHADER, fsSource);\n const prog = this.gl.createProgram();\n if (!prog) throw new Error('Failed to create program');\n this.gl.attachShader(prog, vs);\n this.gl.attachShader(prog, fs);\n this.gl.linkProgram(prog);\n if (!this.gl.getProgramParameter(prog, this.gl.LINK_STATUS)) {\n console.error('Program link error:', this.gl.getProgramInfoLog(prog));\n this.gl.deleteProgram(prog);\n throw new Error('Link fail');\n }\n this.gl.detachShader(prog, vs);\n this.gl.detachShader(prog, fs);\n this.gl.deleteShader(vs);\n this.gl.deleteShader(fs);\n return prog;\n }\n\n private createShader(type: number, source: string): WebGLShader {\n const shader = this.gl.createShader(type);\n if (!shader) throw new Error(`Failed to create shader type: ${type}`);\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n console.error('Shader compile error:', this.gl.getShaderInfoLog(shader));\n this.gl.deleteShader(shader);\n throw new Error('Failed to compile shader');\n }\n return shader;\n }\n\n private createColorTexture(\n r: number,\n g: number,\n b: number,\n a: number,\n ): {\n texture: WebGLTexture;\n color: readonly [number, number, number, number];\n } {\n const texture = this.gl.createTexture();\n if (!texture) throw new Error('Failed to create texture for color');\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n const pixel = new Uint8Array([r, g, b, a]);\n this.gl.texImage2D(\n this.gl.TEXTURE_2D,\n 0,\n this.gl.RGBA,\n 1,\n 1,\n 0,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n pixel,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_S,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_T,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MIN_FILTER,\n this.gl.NEAREST,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MAG_FILTER,\n this.gl.NEAREST,\n );\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n return { texture, color: [r, g, b, a] as const };\n }\n\n private updateBackgroundIfNeeded(newSource?: BackgroundSource | null) {\n const gl = this.gl;\n let newIdentifier: string;\n\n if (!newSource) {\n const [r, g, b, a] = WebGLRenderer.DEFAULT_BG_COLOR;\n newIdentifier = `color(${r},${g},${b},${a})`;\n } else {\n newIdentifier = newSource.url;\n }\n\n if (\n newIdentifier === this.activeBackgroundSourceIdentifier &&\n this.backgroundRenderInfo\n ) {\n return;\n }\n\n if (this.backgroundRenderInfo) {\n gl.deleteTexture(this.backgroundRenderInfo.texture);\n this.backgroundRenderInfo = null;\n }\n this.activeBackgroundSourceIdentifier = newIdentifier;\n\n if (!newSource) {\n const [r, g, b, a] = WebGLRenderer.DEFAULT_BG_COLOR;\n const colorTexData = this.createColorTexture(r, g, b, a);\n this.backgroundRenderInfo = {\n type: 'color',\n texture: colorTexData.texture,\n color: colorTexData.color,\n };\n this.activeBackgroundSourceIdentifier = `color(${r},${g},${b},${a})`;\n } else {\n if (newSource.type === 'image') {\n const { media, url } = newSource as { media: ImageBitmap; url: string };\n const texture = this.gl.createTexture();\n if (!texture) {\n throw new Error('Failed to create texture object for image.');\n }\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n this.gl.texImage2D(\n this.gl.TEXTURE_2D,\n 0,\n this.gl.RGBA,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n media,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_S,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_T,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MIN_FILTER,\n this.gl.LINEAR,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MAG_FILTER,\n this.gl.LINEAR,\n );\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n\n this.backgroundRenderInfo = {\n type: 'image',\n texture,\n width: media.width,\n height: media.height,\n url,\n };\n } else if (newSource.type === 'video') {\n const { media, url } = newSource as {\n media: ReadableStream;\n url: string;\n };\n\n const canvas = new OffscreenCanvas(1, 1);\n const ctx = canvas.getContext('2d');\n const writer = new WritableStream({\n write(videoFrame: VideoFrame) {\n canvas.width = videoFrame.codedWidth;\n canvas.height = videoFrame.codedHeight;\n ctx?.drawImage(videoFrame, 0, 0);\n videoFrame.close();\n },\n close() {\n console.log('[virtual-background] video background close');\n },\n });\n media.pipeTo(writer).catch((err) => {\n console.error('media.pipeTo(writer) error', err);\n });\n\n const texture = this.gl.createTexture();\n if (!texture) throw new Error('Failed to create texture for video');\n this.gl.bindTexture(this.gl.TEXTURE_2D, texture);\n this.gl.texImage2D(\n this.gl.TEXTURE_2D,\n 0,\n this.gl.RGBA,\n 1,\n 1,\n 0,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n null,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_S,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_T,\n this.gl.CLAMP_TO_EDGE,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MIN_FILTER,\n this.gl.LINEAR,\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_MAG_FILTER,\n this.gl.LINEAR,\n );\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n\n this.backgroundRenderInfo = {\n type: 'video',\n texture,\n url,\n media,\n canvas,\n };\n }\n }\n\n if (!this.backgroundRenderInfo) {\n console.error(\n 'Critical: backgroundRenderInfo is null after processing new source. Setting default color.',\n );\n const [r, g, b, a] = WebGLRenderer.DEFAULT_BG_COLOR;\n const colorTexData = this.createColorTexture(r, g, b, a);\n this.backgroundRenderInfo = {\n type: 'color',\n texture: colorTexData.texture,\n color: colorTexData.color,\n };\n this.activeBackgroundSourceIdentifier = `color(${r},${g},${b},${a})`;\n }\n }\n\n public render(\n videoFrame: VideoFrame,\n options: {\n backgroundSource?: BackgroundSource | null;\n bgBlur: number;\n bgBlurRadius: number;\n isSelfieMode: boolean;\n segmentationOptions?: {\n smoothingFactor?: number;\n smoothstepMin?: number;\n smoothstepMax?: number;\n };\n },\n categoryTexture?: WebGLTexture,\n confidenceTexture?: WebGLTexture,\n ) {\n if (!this.running) return;\n const {\n gl,\n fbo,\n frameTexture,\n storedStateTextures,\n stateUpdateProgram,\n stateUpdateLocations,\n refineFbo,\n refinedMaskTexture,\n maskRefineProgram,\n maskRefineLocations,\n blendProgram,\n blendLocations,\n blurFbo1,\n blurFbo2,\n blurTexture1,\n blurTexture2,\n } = this;\n\n const { displayWidth: width, displayHeight: height } = videoFrame;\n if (this.canvas.width !== width || this.canvas.height !== height) {\n this.canvas.width = width;\n this.canvas.height = height;\n }\n\n if (!categoryTexture || !confidenceTexture) {\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.useProgram(blendProgram);\n\n const frame = gl.createTexture();\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, frame);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n videoFrame,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.uniform1i(blendLocations.frameTexture, 0);\n gl.uniform1i(blendLocations.enabled, 0);\n\n gl.enableVertexAttribArray(blendLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(blendLocations.position, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(blendLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(blendLocations.texCoord, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.deleteTexture(frame);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n\n return;\n }\n\n const readStateIndex = this.currentStateIndex;\n const writeStateIndex = (this.currentStateIndex + 1) % 2;\n const prevStateTexture = storedStateTextures[readStateIndex];\n const newStateTexture = storedStateTextures[writeStateIndex];\n\n this.updateBackgroundIfNeeded(options.backgroundSource);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n newStateTexture,\n 0,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, newStateTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.viewport(0, 0, width, height);\n gl.useProgram(stateUpdateProgram);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, categoryTexture);\n gl.uniform1i(stateUpdateLocations.categoryTexture, 0);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, confidenceTexture);\n gl.uniform1i(stateUpdateLocations.confidenceTexture, 1);\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, prevStateTexture);\n gl.uniform1i(stateUpdateLocations.prevStateTexture, 2);\n\n gl.uniform1f(\n stateUpdateLocations.smoothingFactor,\n options.segmentationOptions?.smoothingFactor ?? 0.8,\n );\n gl.uniform1f(\n stateUpdateLocations.smoothstepMin,\n options.segmentationOptions?.smoothstepMin ?? 0.6,\n );\n gl.uniform1f(\n stateUpdateLocations.smoothstepMax,\n options.segmentationOptions?.smoothstepMax ?? 0.9,\n );\n\n gl.uniform1i(\n stateUpdateLocations.selfieModel,\n options.isSelfieMode ? 1 : 0,\n );\n\n gl.enableVertexAttribArray(stateUpdateLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(\n stateUpdateLocations.position,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(stateUpdateLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(\n stateUpdateLocations.texCoord,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, refineFbo);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n refinedMaskTexture,\n 0,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, refinedMaskTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.viewport(0, 0, width, height);\n gl.useProgram(maskRefineProgram);\n\n gl.enableVertexAttribArray(maskRefineLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(\n maskRefineLocations.position,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(maskRefineLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(\n maskRefineLocations.texCoord,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, newStateTexture);\n gl.uniform1i(maskRefineLocations.maskTexture, 0);\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, frameTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n videoFrame,\n );\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.uniform1i(maskRefineLocations.frameTexture, 1);\n\n gl.uniform2f(maskRefineLocations.texelSize, 1.0 / width, 1.0 / height);\n gl.uniform1f(maskRefineLocations.sigmaSpatial, 2.0);\n gl.uniform1f(maskRefineLocations.sigmaRange, 0.1);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.disableVertexAttribArray(maskRefineLocations.position);\n gl.disableVertexAttribArray(maskRefineLocations.texCoord);\n\n let backgroundTexToUse: WebGLTexture | null;\n let bgWToSend = width;\n let bgHToSend = height;\n\n if (options.bgBlur > 0 && options.bgBlurRadius > 0) {\n const downscale = 0.5;\n const blurW = Math.floor(width * downscale);\n const blurH = Math.floor(height * downscale);\n\n gl.bindTexture(gl.TEXTURE_2D, blurTexture1);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n blurW,\n blurH,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n gl.bindTexture(gl.TEXTURE_2D, blurTexture2);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n blurW,\n blurH,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n const KERNEL_RADIUS = 10.0;\n const radiusScale = Math.max(0.0, options.bgBlurRadius) / KERNEL_RADIUS;\n\n gl.useProgram(this.blurProgram);\n\n gl.enableVertexAttribArray(this.blurLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(\n this.blurLocations.position,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n gl.enableVertexAttribArray(this.blurLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(\n this.blurLocations.texCoord,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, refinedMaskTexture);\n gl.uniform1i(this.blurLocations.personMask, 1);\n gl.uniform1f(this.blurLocations.sigma, options.bgBlur * 0.7);\n gl.uniform1f(this.blurLocations.radiusScale, radiusScale);\n\n const blurPasses = [\n {\n direction: [1.0, 0.0],\n input: frameTexture,\n output: blurFbo1,\n texelSize: [1.0 / width, 1.0 / height],\n },\n {\n direction: [0.0, 1.0],\n input: blurTexture1,\n output: blurFbo2,\n texelSize: [1.0 / blurW, 1.0 / blurH],\n },\n {\n direction: [1.0, 0.0],\n input: blurTexture2,\n output: blurFbo1,\n texelSize: [1.0 / blurW, 1.0 / blurH],\n },\n {\n direction: [0.0, 1.0],\n input: blurTexture1,\n output: blurFbo2,\n texelSize: [1.0 / blurW, 1.0 / blurH],\n },\n ];\n\n for (const pass of blurPasses) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, pass.output);\n gl.viewport(0, 0, blurW, blurH);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, pass.input);\n gl.uniform1i(this.blurLocations.image, 0);\n gl.uniform2f(\n this.blurLocations.texelSize,\n pass.texelSize[0],\n pass.texelSize[1],\n );\n gl.uniform2f(\n this.blurLocations.direction,\n pass.direction[0],\n pass.direction[1],\n );\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n backgroundTexToUse = blurTexture2!;\n bgWToSend = blurW;\n bgHToSend = blurH;\n } else if (options.backgroundSource && this.backgroundRenderInfo) {\n backgroundTexToUse = this.backgroundRenderInfo.texture;\n if (this.backgroundRenderInfo.type === 'video') {\n const { canvas } = this.backgroundRenderInfo;\n bgWToSend = canvas.width || width;\n bgHToSend = canvas.height || height;\n } else if (this.backgroundRenderInfo.type === 'image') {\n bgWToSend = this.backgroundRenderInfo.width;\n bgHToSend = this.backgroundRenderInfo.height;\n } else {\n bgWToSend = width;\n bgHToSend = height;\n }\n } else {\n backgroundTexToUse = this.backgroundRenderInfo?.texture ?? null;\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n gl.useProgram(blendProgram);\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, frameTexture);\n gl.uniform1i(blendLocations.frameTexture, 0);\n gl.uniform1f(blendLocations.borderSmooth, 0);\n gl.uniform1f(blendLocations.bgBlur, options.bgBlur);\n gl.uniform1f(blendLocations.bgBlurRadius, options.bgBlurRadius);\n gl.uniform1i(blendLocations.enabled, 1);\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, refinedMaskTexture);\n gl.uniform1i(blendLocations.currentStateTexture, 1);\n\n if (backgroundTexToUse) {\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, backgroundTexToUse);\n\n gl.uniform1i(blendLocations.backgroundTexture, 2);\n gl.uniform2f(blendLocations.bgImageDimensions, bgWToSend, bgHToSend);\n gl.uniform2f(blendLocations.canvasDimensions, width, height);\n } else {\n gl.uniform2f(blendLocations.bgImageDimensions, width, height);\n gl.uniform2f(blendLocations.canvasDimensions, width, height);\n }\n\n gl.enableVertexAttribArray(blendLocations.position);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.vertexAttribPointer(blendLocations.position, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(blendLocations.texCoord);\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.vertexAttribPointer(blendLocations.texCoord, 2, gl.FLOAT, false, 0, 0);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n for (let i = 0; i < 3; ++i) {\n gl.activeTexture(gl.TEXTURE0 + i);\n gl.bindTexture(gl.TEXTURE_2D, null);\n }\n\n this.currentStateIndex = writeStateIndex;\n }\n\n public close() {\n if (!this.running) return;\n this.running = false;\n\n const { gl, fbo, refineFbo, refinedMaskTexture, blurFbo1, blurFbo2 } = this;\n\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n if (fbo) gl.deleteFramebuffer(fbo);\n if (refineFbo) gl.deleteFramebuffer(refineFbo);\n if (blurFbo1) gl.deleteFramebuffer(blurFbo1);\n if (blurFbo2) gl.deleteFramebuffer(blurFbo2);\n\n gl.deleteProgram(this.stateUpdateProgram);\n gl.deleteProgram(this.maskRefineProgram);\n gl.deleteProgram(this.blurProgram);\n gl.deleteProgram(this.blendProgram);\n\n if (this.positionBuffer) gl.deleteBuffer(this.positionBuffer);\n if (this.texCoordBuffer) gl.deleteBuffer(this.texCoordBuffer);\n\n if (refinedMaskTexture) gl.deleteTexture(refinedMaskTexture);\n if (this.blurTexture1) gl.deleteTexture(this.blurTexture1);\n if (this.blurTexture2) gl.deleteTexture(this.blurTexture2);\n this.storedStateTextures.forEach((t) => t && gl.deleteTexture(t));\n this.storedStateTextures.splice(0, this.storedStateTextures.length);\n if (this.backgroundRenderInfo?.texture) {\n gl.deleteTexture(this.backgroundRenderInfo.texture);\n this.backgroundRenderInfo = null;\n }\n this.activeBackgroundSourceIdentifier = null;\n }\n}\n","import {\n BACKGROUND_BLUR_MAP,\n BackgroundOptions,\n SegmenterOptions,\n VideoTrackProcessorHooks,\n} from './types';\nimport { FilesetResolver, ImageSegmenter } from '@mediapipe/tasks-vision';\nimport { WebGLRenderer } from './WebGLRenderer';\nimport { packageName, version } from './version';\nimport { BaseVideoProcessor } from './BaseVideoProcessor';\n\n/**\n * Wraps a video MediaStreamTrack in a real-time processing pipeline.\n * Incoming frames are processed through a transformer and re-emitted\n * on a new MediaStreamVideoTrack for downstream consumption.\n */\nexport class VirtualBackground extends BaseVideoProcessor {\n private segmenter: ImageSegmenter | null = null;\n private isSegmenterReady = false;\n private webGlRenderer!: WebGLRenderer;\n\n private opts!: SegmenterOptions;\n\n private latestCategoryMask: WebGLTexture | undefined = undefined;\n private latestConfidenceMask: WebGLTexture | undefined = undefined;\n private lastFrameTime = -1;\n\n constructor(\n track: MediaStreamVideoTrack,\n private readonly options: BackgroundOptions = {},\n hooks: VideoTrackProcessorHooks = {},\n ) {\n super(track, hooks);\n }\n\n protected async initialize(): Promise<void> {\n this.webGlRenderer = new WebGLRenderer(this.canvas);\n\n await this.initializeSegmenter();\n }\n\n private async initializeSegmenter() {\n try {\n this.opts = await this.initializeSegmenterOptions();\n\n const basePath =\n this.options.basePath ||\n `https://unpkg.com/${packageName}@${version}/mediapipe`;\n\n const model =\n this.options.modelPath ||\n `${basePath}/models/selfie_segmenter_landscape.tflite`;\n\n const fileset = await FilesetResolver.forVisionTasks(`${basePath}/wasm`);\n\n this.segmenter = await ImageSegmenter.createFromOptions(fileset, {\n baseOptions: { modelAssetPath: model, delegate: 'GPU' },\n runningMode: 'VIDEO',\n outputCategoryMask: true,\n outputConfidenceMasks: true,\n canvas: this.canvas,\n });\n\n this.isSegmenterReady = true;\n } catch (error) {\n this.isSegmenterReady = false;\n this.hooks.onError?.(error);\n throw error;\n }\n }\n\n protected async transform(frame: VideoFrame): Promise<VideoFrame> {\n const currentTime = frame.timestamp;\n const hasNewFrame = currentTime - this.lastFrameTime > 1_000;\n this.lastFrameTime = currentTime;\n\n if (hasNewFrame && this.isSegmenterReady && this.segmenter) {\n const start = performance.now();\n\n await this.runSegmentation(frame);\n\n this.webGlRenderer.render(\n frame,\n this.opts,\n this.latestCategoryMask,\n this.latestConfidenceMask,\n );\n\n this.updateStats(performance.now() - start);\n }\n\n return new VideoFrame(this.canvas, { timestamp: frame.timestamp });\n }\n\n private async runSegmentation(frame: VideoFrame): Promise<void> {\n if (!this.segmenter) return;\n\n return new Promise<void>((resolve) => {\n const timestamp = Math.floor(performance.now());\n this.segmenter!.segmentForVideo(frame, timestamp, (result) => {\n try {\n this.latestCategoryMask = result.categoryMask?.getAsWebGLTexture();\n this.latestConfidenceMask =\n result.confidenceMasks?.[0]?.getAsWebGLTexture();\n } catch (err) {\n console.error('[virtual-background] segmentation error:', err);\n this.hooks.onError?.(err);\n } finally {\n result.close();\n resolve();\n }\n });\n });\n }\n\n private async initializeSegmenterOptions(): Promise<SegmenterOptions> {\n const isSelfieMode = this.options.modelPath\n ? this.options.modelPath.includes('selfie_segmenter')\n : true;\n\n if (this.options.backgroundFilter === 'image') {\n const source = await this.loadBackground(this.options.backgroundImage);\n return {\n backgroundSource: source,\n bgBlur: 0,\n bgBlurRadius: 0,\n isSelfieMode,\n segmentationOptions: this.options.segmentationOptions,\n };\n }\n\n const blurLevel = this.options.backgroundBlurLevel;\n const strength =\n typeof blurLevel === 'string'\n ? BACKGROUND_BLUR_MAP[blurLevel]\n : Math.round(blurLevel ?? 5);\n\n return {\n backgroundSource: undefined,\n bgBlur: Math.min(strength * 1.5, 20),\n bgBlurRadius: Math.min(strength, 10),\n isSelfieMode,\n segmentationOptions: this.options.segmentationOptions,\n };\n }\n\n private async loadBackground(url?: string) {\n if (!url) return null;\n const result = await fetch(url, { signal: this.abortController.signal });\n if (!result.ok) {\n throw new Error(\n `[virtual-background] Failed to load background image: ${result.status} ${result.statusText}`,\n );\n }\n\n return {\n type: 'image',\n media: await createImageBitmap(await result.blob()),\n url,\n };\n }\n\n protected onFlush(): void {\n this.destroySegmenter();\n }\n\n protected onStop(): void {\n this.webGlRenderer?.close();\n this.destroySegmenter();\n }\n\n private destroySegmenter() {\n this.segmenter?.close();\n this.segmenter = null;\n this.isSegmenterReady = false;\n }\n\n protected get processorName() {\n return 'background-processor';\n }\n}\n","/**\n * Simple WebGL renderer for full-screen Gaussian blur.\n * Uses a two-pass separable Gaussian blur (horizontal then vertical).\n * Optimized for moderation use cases by blurring at reduced resolution (15% scale)\n * and upscaling back to full resolution for output.\n */\nexport class FullScreenBlurRenderer {\n readonly canvas: OffscreenCanvas;\n readonly gl: WebGL2RenderingContext;\n\n readonly blurProgramHandle: WebGLProgram;\n readonly blurLocations: {\n positionLocation: number;\n texCoordLocation: number;\n imageLocation: WebGLUniformLocation | null;\n texelSizeLocation: WebGLUniformLocation | null;\n directionLocation: WebGLUniformLocation | null;\n weightsLocation: WebGLUniformLocation | null;\n };\n\n readonly passthroughProgramHandle: WebGLProgram;\n readonly passthroughLocations: {\n positionLocation: number;\n texCoordLocation: number;\n imageLocation: WebGLUniformLocation | null;\n };\n\n readonly positionBuffer: WebGLBuffer | null;\n readonly texCoordBuffer: WebGLBuffer | null;\n\n readonly pingTexture: WebGLTexture | null;\n readonly pongTexture: WebGLTexture | null;\n readonly pingFbo: WebGLFramebuffer | null;\n readonly pongFbo: WebGLFramebuffer | null;\n\n private inputTexture: WebGLTexture | null = null;\n private isRunning = false;\n\n private targetWidth = 0;\n private targetHeight = 0;\n\n private weightCache = new Map<number, Float32Array>();\n\n constructor(canvas: OffscreenCanvas) {\n this.canvas = canvas;\n\n const gl = canvas.getContext('webgl2', {\n alpha: false,\n antialias: false,\n desynchronized: true,\n });\n\n if (!gl) throw new Error('WebGL2 not supported');\n this.gl = gl;\n\n const vertexShaderSource = `#version 300 es\n precision highp float;\n in vec2 a_position;\n in vec2 a_texCoord;\n out vec2 v_texCoord;\n void main() {\n v_texCoord = a_texCoord;\n gl_Position = vec4(a_position, 0.0, 1.0);\n }\n `;\n\n const fragmentShaderSource = `#version 300 es\n precision highp float;\n in vec2 v_texCoord;\n out vec4 outColor;\n uniform sampler2D u_image;\n uniform vec2 u_texelSize;\n uniform vec2 u_direction;\n uniform float u_weights[25];\n void main() {\n vec4 color = vec4(0.0);\n for (int i = -12; i <= 12; i++) {\n float w = u_weights[i + 12];\n if (w == 0.0) continue;\n vec2 offset = float(i) * u_direction * u_texelSize;\n color += w * texture(u_image, v_texCoord + offset);\n }\n outColor = color;\n }\n `;\n\n this.blurProgramHandle = this.createAndLinkProgram(\n vertexShaderSource,\n fragmentShaderSource,\n );\n\n const passthroughFragmentShaderSource = `#version 300 es\n precision highp float;\n in vec2 v_texCoord;\n out vec4 outColor;\n uniform sampler2D u_image;\n void main() {\n outColor = texture(u_image, v_texCoord);\n }\n `;\n\n this.passthroughProgramHandle = this.createAndLinkProgram(\n vertexShaderSource,\n passthroughFragmentShaderSource,\n );\n\n const blurProgram = this.blurProgramHandle;\n const passthroughProgram = this.passthroughProgramHandle;\n\n this.blurLocations = {\n positionLocation: gl.getAttribLocation(blurProgram, 'a_position'),\n texCoordLocation: gl.getAttribLocation(blurProgram, 'a_texCoord'),\n imageLocation: gl.getUniformLocation(blurProgram, 'u_image'),\n texelSizeLocation: gl.getUniformLocation(blurProgram, 'u_texelSize'),\n directionLocation: gl.getUniformLocation(blurProgram, 'u_direction'),\n weightsLocation: gl.getUniformLocation(blurProgram, 'u_weights'),\n };\n\n this.passthroughLocations = {\n positionLocation: gl.getAttribLocation(passthroughProgram, 'a_position'),\n texCoordLocation: gl.getAttribLocation(passthroughProgram, 'a_texCoord'),\n imageLocation: gl.getUniformLocation(passthroughProgram, 'u_image'),\n };\n\n this.positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n gl.STATIC_DRAW,\n );\n\n this.texCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0]),\n gl.STATIC_DRAW,\n );\n\n const createTexture2D = () => {\n const tex = gl.createTexture();\n if (!tex) throw new Error('Failed to create texture');\n gl.bindTexture(gl.TEXTURE_2D, tex);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.bindTexture(gl.TEXTURE_2D, null);\n return tex;\n };\n\n const createFramebufferForTexture = (tex: WebGLTexture) => {\n const fb = gl.createFramebuffer();\n if (!fb) throw new Error('Failed to create framebuffer');\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n tex,\n 0,\n );\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return fb;\n };\n\n this.pingTexture = createTexture2D();\n this.pongTexture = createTexture2D();\n this.pingFbo = createFramebufferForTexture(this.pingTexture);\n this.pongFbo = createFramebufferForTexture(this.pongTexture);\n\n this.inputTexture = createTexture2D();\n\n gl.useProgram(blurProgram);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.enableVertexAttribArray(this.blurLocations.positionLocation);\n gl.vertexAttribPointer(\n this.blurLocations.positionLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.enableVertexAttribArray(this.blurLocations.texCoordLocation);\n gl.vertexAttribPointer(\n this.blurLocations.texCoordLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n if (this.blurLocations.imageLocation) {\n gl.uniform1i(this.blurLocations.imageLocation, 0);\n }\n\n this.isRunning = true;\n }\n\n private createAndLinkProgram(\n vsSource: string,\n fsSource: string,\n ): WebGLProgram {\n const gl = this.gl;\n const vs = this.createShader(gl.VERTEX_SHADER, vsSource);\n const fs = this.createShader(gl.FRAGMENT_SHADER, fsSource);\n\n const prog = gl.createProgram();\n if (!prog) throw new Error('Failed to create program');\n gl.attachShader(prog, vs);\n gl.attachShader(prog, fs);\n gl.linkProgram(prog);\n\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {\n throw new Error('Shader link failed: ' + gl.getProgramInfoLog(prog));\n }\n\n gl.deleteShader(vs);\n gl.deleteShader(fs);\n return prog;\n }\n\n private createShader(type: number, source: string): WebGLShader {\n const gl = this.gl;\n const shader = gl.createShader(type);\n if (!shader) throw new Error('Failed to create shader');\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error('Shader compile failed: ' + gl.getShaderInfoLog(shader));\n }\n return shader;\n }\n\n private getGaussianWeights(radius: number): Float32Array {\n const r = Math.max(0, Math.min(radius | 0, 12));\n\n const cached = this.weightCache.get(r);\n if (cached) return cached;\n\n const weights = new Float32Array(25);\n\n if (r === 0) {\n weights[12] = 1.0;\n this.weightCache.set(r, weights);\n return weights;\n }\n\n const sigma = r * 0.6;\n let sum = 0;\n\n for (let i = -r; i <= r; i++) {\n const w = Math.exp(-(i * i) / (2 * sigma * sigma));\n weights[i + 12] = w;\n sum += w;\n }\n\n for (let i = -r; i <= r; i++) {\n weights[i + 12] /= sum;\n }\n\n this.weightCache.set(r, weights);\n return weights;\n }\n\n public render(frame: VideoFrame, radius: number): void {\n if (!this.isRunning) return;\n\n const gl = this.gl;\n\n const width = frame.displayWidth;\n const height = frame.displayHeight;\n\n if (!width || !height) return;\n\n if (this.canvas.width !== width || this.canvas.height !== height) {\n this.canvas.width = width;\n this.canvas.height = height;\n }\n\n const scale = 0.15;\n const scaledWidth = Math.max(1, Math.floor(width * scale));\n const scaledHeight = Math.max(1, Math.floor(height * scale));\n\n if (\n scaledWidth !== this.targetWidth ||\n scaledHeight !== this.targetHeight\n ) {\n this.targetWidth = scaledWidth;\n this.targetHeight = scaledHeight;\n\n gl.bindTexture(gl.TEXTURE_2D, this.pingTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n scaledWidth,\n scaledHeight,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, this.pongTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n scaledWidth,\n scaledHeight,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, null);\n }\n\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.inputTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, frame);\n\n gl.useProgram(this.blurProgramHandle);\n\n if (this.blurLocations.texelSizeLocation) {\n gl.uniform2f(\n this.blurLocations.texelSizeLocation,\n 1.0 / scaledWidth,\n 1.0 / scaledHeight,\n );\n }\n\n const weights = this.getGaussianWeights(radius);\n if (this.blurLocations.weightsLocation) {\n gl.uniform1fv(this.blurLocations.weightsLocation, weights);\n }\n\n gl.viewport(0, 0, scaledWidth, scaledHeight);\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.pingFbo);\n gl.bindTexture(gl.TEXTURE_2D, this.inputTexture);\n if (this.blurLocations.directionLocation) {\n gl.uniform2f(this.blurLocations.directionLocation, 1.0, 0.0);\n }\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this.pongFbo);\n gl.bindTexture(gl.TEXTURE_2D, this.pingTexture);\n if (this.blurLocations.directionLocation) {\n gl.uniform2f(this.blurLocations.directionLocation, 0.0, 1.0);\n }\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n gl.viewport(0, 0, width, height);\n gl.useProgram(this.passthroughProgramHandle);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n gl.enableVertexAttribArray(this.passthroughLocations.positionLocation);\n gl.vertexAttribPointer(\n this.passthroughLocations.positionLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);\n gl.enableVertexAttribArray(this.passthroughLocations.texCoordLocation);\n gl.vertexAttribPointer(\n this.passthroughLocations.texCoordLocation,\n 2,\n gl.FLOAT,\n false,\n 0,\n 0,\n );\n\n gl.bindTexture(gl.TEXTURE_2D, this.pongTexture);\n if (this.passthroughLocations.imageLocation) {\n gl.uniform1i(this.passthroughLocations.imageLocation, 0);\n }\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n public close(): void {\n if (!this.isRunning) return;\n this.isRunning = false;\n const gl = this.gl;\n\n if (this.pingFbo) gl.deleteFramebuffer(this.pingFbo);\n if (this.pongFbo) gl.deleteFramebuffer(this.pongFbo);\n if (this.pingTexture) gl.deleteTexture(this.pingTexture);\n if (this.pongTexture) gl.deleteTexture(this.pongTexture);\n if (this.inputTexture) gl.deleteTexture(this.inputTexture);\n if (this.positionBuffer) gl.deleteBuffer(this.positionBuffer);\n if (this.texCoordBuffer) gl.deleteBuffer(this.texCoordBuffer);\n\n gl.deleteProgram(this.blurProgramHandle);\n gl.deleteProgram(this.passthroughProgramHandle);\n }\n}\n","import { VideoTrackProcessorHooks } from './types';\nimport { BaseVideoProcessor } from './BaseVideoProcessor';\nimport { FullScreenBlurRenderer } from './FullScreenBlurRenderer';\n\nexport interface FullScreenBlurOptions {\n blurRadius?: number;\n}\n\n/**\n * A video filter that applies a full-screen blur to each frame.\n *\n * It uses a WebGL renderer to blur the incoming camera track and outputs\n * a new track with the effect applied. Setup and frame handling are managed\n * by the base processor.\n */\nexport class FullScreenBlur extends BaseVideoProcessor {\n private blurRenderer!: FullScreenBlurRenderer;\n private readonly blurRadius: number;\n\n /**\n * Creates a new full-screen blur processor for the given video track.\n *\n * @param track - The input camera track to blur.\n * @param options - Optional settings such as the blur radius.\n * @param hooks - Optional callbacks for stats and error reporting.\n */\n constructor(\n track: MediaStreamVideoTrack,\n options: FullScreenBlurOptions = {},\n hooks: VideoTrackProcessorHooks = {},\n ) {\n super(track, hooks);\n this.blurRadius = options.blurRadius ?? 6;\n }\n\n protected async initialize(): Promise<void> {\n this.blurRenderer = new FullScreenBlurRenderer(this.canvas);\n }\n\n protected async transform(frame: VideoFrame): Promise<VideoFrame> {\n this.blurRenderer.render(frame, this.blurRadius);\n return new VideoFrame(this.canvas, { timestamp: frame.timestamp });\n }\n\n protected onStop(): void {\n this.blurRenderer?.close();\n }\n\n protected get processorName(): string {\n return 'fullscreen-blur';\n }\n}\n"],"names":["simd","SegmentationLevel","WorkerTimer","lastModelFilePath","modelFileCache","FilesetResolver","ImageSegmenter"],"mappings":"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"}