framefields 2.0.2 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -32
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-x28ZgQBP.mjs → audio-COkiXyDb.mjs} +3 -3
- package/dist/{audio-x28ZgQBP.mjs.map → audio-COkiXyDb.mjs.map} +1 -1
- package/dist/{audio-Dvwwz8xU.d.mts → audio-nmU-BWxI.d.mts} +3 -3
- package/dist/{audio-Dvwwz8xU.d.mts.map → audio-nmU-BWxI.d.mts.map} +1 -1
- package/dist/{dist-1iUYuPct.mjs → dist-55MP0aN4.mjs} +59 -16
- package/dist/dist-55MP0aN4.mjs.map +1 -0
- package/dist/{dist-gjHmorxL.mjs → dist-DgIKXWZ1.mjs} +75 -16
- package/dist/dist-DgIKXWZ1.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +23 -23
- package/dist/{effects-CHWORCYd.mjs → effects-m3FuatqZ.mjs} +2 -2
- package/dist/{effects-CHWORCYd.mjs.map → effects-m3FuatqZ.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +1 -1
- package/dist/{fonts-DrGTBJJk.mjs → fonts-C_AWIMdb.mjs} +13 -2
- package/dist/fonts-C_AWIMdb.mjs.map +1 -0
- package/dist/{index-DKFGNyMB.d.mts → index-Bx7JBFT6.d.mts} +9 -2
- package/dist/index-Bx7JBFT6.d.mts.map +1 -0
- package/dist/{index-B0BNPEoH.d.mts → index-C8rstr3Y.d.mts} +5 -5
- package/dist/index-C8rstr3Y.d.mts.map +1 -0
- package/dist/{index-D2wJqSl5.d.mts → index-CAGDH7l6.d.mts} +3 -3
- package/dist/{index-D2wJqSl5.d.mts.map → index-CAGDH7l6.d.mts.map} +1 -1
- package/dist/{index-DiSKzDGR.d.mts → index-CbzEM_o6.d.mts} +8 -1
- package/dist/index-CbzEM_o6.d.mts.map +1 -0
- package/dist/{index-BMVVmc4G.d.mts → index-DY3mLoPO.d.mts} +2 -2
- package/dist/{index-BMVVmc4G.d.mts.map → index-DY3mLoPO.d.mts.map} +1 -1
- package/dist/{index-D1ZsMpke.d.mts → index-i0xPY4Fe.d.mts} +3 -3
- package/dist/{index-D1ZsMpke.d.mts.map → index-i0xPY4Fe.d.mts.map} +1 -1
- package/dist/{index-D2jDC7O5.d.mts → index-ogL8Y-Ng.d.mts} +9 -1
- package/dist/index-ogL8Y-Ng.d.mts.map +1 -0
- package/dist/index.d.mts +88 -70
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +44 -39
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +3 -3
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-uQM210iy.mjs → preview-BM0Zzcn1.mjs} +74 -66
- package/dist/preview-BM0Zzcn1.mjs.map +1 -0
- package/dist/preview-engine/{chunk-HAXK42HG.mjs → chunk-2RMSCL6V.mjs} +1 -1
- package/dist/preview-engine/chunk-45JOFIHE.mjs +8 -0
- package/dist/preview-engine/{chunk-MT2DZQHO.mjs → chunk-4Q7JG6WJ.mjs} +1 -1
- package/dist/preview-engine/chunk-7S6ZFYLI.mjs +418 -0
- package/dist/preview-engine/chunk-KNZU3Z2F.mjs +3 -0
- package/dist/preview-engine/{chunk-SWD76532.mjs → chunk-PCB2VB5K.mjs} +2 -2
- package/dist/preview-engine/{chunk-GYG2IIBR.mjs → chunk-RJJRPL42.mjs} +1 -1
- package/dist/preview-engine/chunk-UC7CSW2A.mjs +1 -0
- package/dist/preview-engine/{chunk-4BEJJKEU.mjs → chunk-YK4XHUP4.mjs} +7 -7
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +84 -76
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/{renderers-YVN3EIOP.mjs → renderers-76MPTVZK.mjs} +1 -1
- package/dist/preview-engine/{renderers-R3XEYD5V.mjs → renderers-LFA5NW4V.mjs} +1 -1
- package/dist/{program-Dl510wmI.mjs → program-DGqyGGvj.mjs} +2 -2
- package/dist/{program-Dl510wmI.mjs.map → program-DGqyGGvj.mjs.map} +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer--fkO4O8d.mjs +3 -0
- package/dist/{renderer-D7EX8IjU.mjs → renderer-0gJC-sc8.mjs} +2 -2
- package/dist/{renderer-D7EX8IjU.mjs.map → renderer-0gJC-sc8.mjs.map} +1 -1
- package/dist/{renderer-7DOcIxFG.mjs → renderer-2r4EgfdZ.mjs} +2 -2
- package/dist/{renderer-7DOcIxFG.mjs.map → renderer-2r4EgfdZ.mjs.map} +1 -1
- package/dist/{renderer-COkcU3db.mjs → renderer-5OiVjQan.mjs} +4 -4
- package/dist/{renderer-COkcU3db.mjs.map → renderer-5OiVjQan.mjs.map} +1 -1
- package/dist/renderer-6x7CgHhJ.mjs +3 -0
- package/dist/renderer-B0RDWv1C.mjs +3 -0
- package/dist/{renderer-CMzEjdzi.mjs → renderer-B9l641o-.mjs} +2 -2
- package/dist/{renderer-CMzEjdzi.mjs.map → renderer-B9l641o-.mjs.map} +1 -1
- package/dist/renderer-BFOkGS0N.mjs +3 -0
- package/dist/{renderer-pxXf9dvk.mjs → renderer-BJiL-BQY.mjs} +2 -2
- package/dist/{renderer-pxXf9dvk.mjs.map → renderer-BJiL-BQY.mjs.map} +1 -1
- package/dist/{renderer-B1CvhW4p.mjs → renderer-BMrm2Zbz.mjs} +2 -2
- package/dist/{renderer-B1CvhW4p.mjs.map → renderer-BMrm2Zbz.mjs.map} +1 -1
- package/dist/{renderer-Cj-whdVr.mjs → renderer-BUHMkkLU.mjs} +2 -2
- package/dist/{renderer-Cj-whdVr.mjs.map → renderer-BUHMkkLU.mjs.map} +1 -1
- package/dist/{renderer-CB5aWAaf.mjs → renderer-BYsmLk63.mjs} +2 -2
- package/dist/{renderer-CB5aWAaf.mjs.map → renderer-BYsmLk63.mjs.map} +1 -1
- package/dist/renderer-BaoJiMJO.mjs +3 -0
- package/dist/{renderer-DbaQLI4z.mjs → renderer-BtkU0BT-.mjs} +2 -2
- package/dist/{renderer-DbaQLI4z.mjs.map → renderer-BtkU0BT-.mjs.map} +1 -1
- package/dist/{renderer-Dt6fzgX5.mjs → renderer-Bwsh5TUv.mjs} +2 -2
- package/dist/{renderer-Dt6fzgX5.mjs.map → renderer-Bwsh5TUv.mjs.map} +1 -1
- package/dist/{renderer-vCFTm0oe.mjs → renderer-C28Bab-M.mjs} +2 -2
- package/dist/{renderer-vCFTm0oe.mjs.map → renderer-C28Bab-M.mjs.map} +1 -1
- package/dist/{renderer-HFfcJlmR.mjs → renderer-C3L9SNRO.mjs} +2 -2
- package/dist/{renderer-HFfcJlmR.mjs.map → renderer-C3L9SNRO.mjs.map} +1 -1
- package/dist/renderer-C4O-L73n.mjs +3 -0
- package/dist/{renderer-CB7lH5K8.mjs → renderer-C9BKcHZb.mjs} +1 -1
- package/dist/renderer-CGVuhBbA.mjs +3 -0
- package/dist/renderer-CHKB-Or4.mjs +3 -0
- package/dist/renderer-CL9gPcfZ.mjs +3 -0
- package/dist/{renderer-BXMmISWG.mjs → renderer-CMM4DZ1i.mjs} +2 -2
- package/dist/{renderer-BXMmISWG.mjs.map → renderer-CMM4DZ1i.mjs.map} +1 -1
- package/dist/{renderer-C17wL9QX.mjs → renderer-COkFM1KL.mjs} +2 -2
- package/dist/{renderer-C17wL9QX.mjs.map → renderer-COkFM1KL.mjs.map} +1 -1
- package/dist/renderer-CSkFF-qe.mjs +3 -0
- package/dist/renderer-CU2c6zWc.mjs +3 -0
- package/dist/{renderer-CDOUAN7X.mjs → renderer-CXUohIJ9.mjs} +2 -2
- package/dist/{renderer-CDOUAN7X.mjs.map → renderer-CXUohIJ9.mjs.map} +1 -1
- package/dist/{renderer-ByDhfrPE.mjs → renderer-CeADvUU_.mjs} +2 -2
- package/dist/{renderer-ByDhfrPE.mjs.map → renderer-CeADvUU_.mjs.map} +1 -1
- package/dist/{renderer-CH8sdfYX.mjs → renderer-CgVdRbc-.mjs} +2 -2
- package/dist/{renderer-CH8sdfYX.mjs.map → renderer-CgVdRbc-.mjs.map} +1 -1
- package/dist/renderer-CiLiH6w_.mjs +3 -0
- package/dist/{renderer-Dp_FfvF-.mjs → renderer-CnRoblJF.mjs} +2 -2
- package/dist/{renderer-Dp_FfvF-.mjs.map → renderer-CnRoblJF.mjs.map} +1 -1
- package/dist/{renderer-BAQmR0Zo.mjs → renderer-CsQ7nY0z.mjs} +1 -1
- package/dist/{renderer-CclIvsLO.mjs → renderer-CwAjqb2o.mjs} +1 -1
- package/dist/{renderer-CszOjcRW.mjs → renderer-Cx5H41JR.mjs} +1 -1
- package/dist/{renderer-Fco4EmAu.mjs → renderer-D1Zs78PQ.mjs} +126 -105
- package/dist/{renderer-Fco4EmAu.mjs.map → renderer-D1Zs78PQ.mjs.map} +1 -1
- package/dist/{renderer-BQHbp-Sp.mjs → renderer-D1ib-wB3.mjs} +2 -2
- package/dist/{renderer-BQHbp-Sp.mjs.map → renderer-D1ib-wB3.mjs.map} +1 -1
- package/dist/{renderer-Tp6OXWNZ.mjs → renderer-D54yO_M_.mjs} +2 -2
- package/dist/{renderer-Tp6OXWNZ.mjs.map → renderer-D54yO_M_.mjs.map} +1 -1
- package/dist/{renderer-Cl1oUXMi.mjs → renderer-D5N2JO7g.mjs} +2 -2
- package/dist/{renderer-Cl1oUXMi.mjs.map → renderer-D5N2JO7g.mjs.map} +1 -1
- package/dist/{renderer-BsgIcBKH.mjs → renderer-DBp6A7tR.mjs} +2 -2
- package/dist/{renderer-BsgIcBKH.mjs.map → renderer-DBp6A7tR.mjs.map} +1 -1
- package/dist/{renderer-vvpdx1vk.mjs → renderer-DI2RcpKU.mjs} +2 -2
- package/dist/{renderer-vvpdx1vk.mjs.map → renderer-DI2RcpKU.mjs.map} +1 -1
- package/dist/renderer-DMaYsSM4.mjs +3 -0
- package/dist/renderer-DZ7t_l1d.mjs +3 -0
- package/dist/{renderer-Ryo2CEFD.mjs → renderer-D_QS6p1q.mjs} +2 -2
- package/dist/{renderer-Ryo2CEFD.mjs.map → renderer-D_QS6p1q.mjs.map} +1 -1
- package/dist/{renderer-DDp7_TUi.d.mts → renderer-DcPOsAVu.d.mts} +2 -2
- package/dist/{renderer-DDp7_TUi.d.mts.map → renderer-DcPOsAVu.d.mts.map} +1 -1
- package/dist/{renderer-B_NuVaIP.mjs → renderer-Dcd-Pkzd.mjs} +2 -2
- package/dist/{renderer-B_NuVaIP.mjs.map → renderer-Dcd-Pkzd.mjs.map} +1 -1
- package/dist/{renderer-WkVrkCVA.mjs → renderer-DjiUZ0Vs.mjs} +2 -2
- package/dist/{renderer-WkVrkCVA.mjs.map → renderer-DjiUZ0Vs.mjs.map} +1 -1
- package/dist/renderer-DkJEnKQu.mjs +3 -0
- package/dist/renderer-DlkrKqQj.mjs +3 -0
- package/dist/renderer-DxOQ5S8T.mjs +3 -0
- package/dist/renderer-Ibvw1tE_.mjs +3 -0
- package/dist/{renderer-CwQhzcUn.mjs → renderer-JjMO41Cv.mjs} +2 -2
- package/dist/{renderer-CwQhzcUn.mjs.map → renderer-JjMO41Cv.mjs.map} +1 -1
- package/dist/renderer-M0jeFo6S.mjs +4 -0
- package/dist/renderer-NhSzqWsQ.mjs +3 -0
- package/dist/renderer-OrhgkzVu.mjs +3 -0
- package/dist/{renderer-DxjVQV6f.mjs → renderer-Q7_DUcnu.mjs} +2 -2
- package/dist/{renderer-DxjVQV6f.mjs.map → renderer-Q7_DUcnu.mjs.map} +1 -1
- package/dist/{renderer-I-Sw3JBB.mjs → renderer-QfSB-cRU.mjs} +2 -2
- package/dist/{renderer-I-Sw3JBB.mjs.map → renderer-QfSB-cRU.mjs.map} +1 -1
- package/dist/{renderer-OWQmmg4Z.mjs → renderer-WXylxlu2.mjs} +2 -2
- package/dist/{renderer-OWQmmg4Z.mjs.map → renderer-WXylxlu2.mjs.map} +1 -1
- package/dist/renderer-WrFAaLxW.mjs +3 -0
- package/dist/renderer-bbOALT4F.mjs +3 -0
- package/dist/{renderer-BGXU6vcW.mjs → renderer-bebAt6Dz.mjs} +2 -2
- package/dist/{renderer-BGXU6vcW.mjs.map → renderer-bebAt6Dz.mjs.map} +1 -1
- package/dist/{renderer-B9-QSJcG.mjs → renderer-eC1gRPRo.mjs} +2 -2
- package/dist/{renderer-B9-QSJcG.mjs.map → renderer-eC1gRPRo.mjs.map} +1 -1
- package/dist/renderer-lXmyzdcx.mjs +3 -0
- package/dist/renderer-ospMsCzr.mjs +3 -0
- package/dist/{renderer-k2JL79kM.mjs → renderer-vUjNMbLq.mjs} +2 -2
- package/dist/{renderer-k2JL79kM.mjs.map → renderer-vUjNMbLq.mjs.map} +1 -1
- package/dist/renderer-xc9wkiC7.mjs +3 -0
- package/dist/{renderer-XcmYTd6P.mjs → renderer-z6Qb5Z-W.mjs} +143 -4
- package/dist/renderer-z6Qb5Z-W.mjs.map +1 -0
- package/dist/{renderers-BWg16W-V-BXG_cjhM.mjs → renderers-BWg16W-V-jhdCp6Vd.mjs} +2 -2
- package/dist/{renderers-BWg16W-V-BXG_cjhM.mjs.map → renderers-BWg16W-V-jhdCp6Vd.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +4 -4
- package/package.json +55 -55
- package/dist/dist-1iUYuPct.mjs.map +0 -1
- package/dist/dist-gjHmorxL.mjs.map +0 -1
- package/dist/fonts-DrGTBJJk.mjs.map +0 -1
- package/dist/index-B0BNPEoH.d.mts.map +0 -1
- package/dist/index-D2jDC7O5.d.mts.map +0 -1
- package/dist/index-DKFGNyMB.d.mts.map +0 -1
- package/dist/index-DiSKzDGR.d.mts.map +0 -1
- package/dist/preview-engine/chunk-47VT677S.mjs +0 -8
- package/dist/preview-engine/chunk-DPST2XLC.mjs +0 -418
- package/dist/preview-engine/chunk-DRLEOHN5.mjs +0 -1
- package/dist/preview-engine/chunk-SZ7YRPKO.mjs +0 -3
- package/dist/preview-uQM210iy.mjs.map +0 -1
- package/dist/renderer-3BNskNuJ.mjs +0 -3
- package/dist/renderer-9dHlMQGX.mjs +0 -3
- package/dist/renderer-BGvORwkQ.mjs +0 -3
- package/dist/renderer-BLikd6BK.mjs +0 -3
- package/dist/renderer-BSbTJBWc.mjs +0 -3
- package/dist/renderer-BU1rwNRT.mjs +0 -3
- package/dist/renderer-BZJm3m4f.mjs +0 -3
- package/dist/renderer-BqyAgNt3.mjs +0 -3
- package/dist/renderer-BryTM2g7.mjs +0 -3
- package/dist/renderer-CQCoggIa.mjs +0 -3
- package/dist/renderer-CV2m6k1V.mjs +0 -3
- package/dist/renderer-CYY-poLe.mjs +0 -3
- package/dist/renderer-C_Ki91kc.mjs +0 -3
- package/dist/renderer-CmApuKjS.mjs +0 -3
- package/dist/renderer-Cu074POw.mjs +0 -3
- package/dist/renderer-D4qLmox-.mjs +0 -3
- package/dist/renderer-D6cJ6MSq.mjs +0 -3
- package/dist/renderer-DQLGnEFc.mjs +0 -3
- package/dist/renderer-DY2SVYUW.mjs +0 -3
- package/dist/renderer-DoAY5JbB.mjs +0 -4
- package/dist/renderer-DuplLRbp.mjs +0 -3
- package/dist/renderer-DvfUbZ31.mjs +0 -3
- package/dist/renderer-Q_uUQipO.mjs +0 -3
- package/dist/renderer-UQFCgeNx.mjs +0 -3
- package/dist/renderer-XcmYTd6P.mjs.map +0 -1
- package/dist/renderer-eMsnzJg9.mjs +0 -3
- package/dist/renderer-pHiz78e0.mjs +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Dp_FfvF-.mjs","names":[],"sources":["../../../nodes/node-vignette/dist/renderers-BgSXYX3i.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst VIGNETTE_SHADER = `\nstruct VignetteUniforms {\n strength : f32,\n radius : f32,\n softness : f32,\n roundness : f32,\n\n centerX : f32,\n centerY : f32,\n hasStrengthSig : f32,\n hasRadiusSig : f32,\n\n hasSoftnessSig : f32,\n hasRoundnessSig: f32,\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : VignetteUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var softnessSigTex : texture_2d<f32>;\n@group(2) @binding(3) var roundnessSigTex : texture_2d<f32>;\n@group(2) @binding(4) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(5) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(6) var signalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n if (color.a < 1e-5) {\n return color;\n }\n\n // Resolve parameter overrides or dynamic signals\n var strength = u.strength;\n if (u.hasStrengthSig > 0.5) {\n strength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var softness = u.softness;\n if (u.hasSoftnessSig > 0.5) {\n softness = textureSampleLevel(softnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var roundness = u.roundness;\n if (u.hasRoundnessSig > 0.5) {\n roundness = textureSampleLevel(roundnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let center = vec2<f32>(centerX, centerY);\n let dimensions = vec2<f32>(textureDimensions(tex));\n let aspect = dimensions.x / dimensions.y;\n let uvOffset = in.uv - center;\n\n // Calculate aspect ratio corrected coordinate for circle\n let correctedOffset = vec2<f32>(\n uvOffset.x * mix(1.0, aspect, roundness),\n uvOffset.y\n );\n let dist = length(correctedOffset);\n\n // Calculate vignette edge falloff\n let edge0 = radius;\n let edge1 = max(0.0, radius - softness);\n let vignetteFactor = smoothstep(edge0, edge1, dist);\n\n // Blend based on strength\n let intensity = strength / 100.0;\n let finalVignette = mix(1.0, vignetteFactor, intensity);\n\n // Unpremultiply, apply vignette, and repremultiply\n let unpremult_rgb = color.rgb / color.a;\n let final_rgb = unpremult_rgb * finalVignette;\n\n return vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * color.a, color.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst vignetteUniformData = new Float32Array(12);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getVignetteResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `vignette_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst vignetteModule = device.createShaderModule({\n\t\t\tlabel: `vignette_${format}.wgsl`,\n\t\t\tcode: VIGNETTE_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `VignettePipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: vignetteModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: vignetteModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tvignettePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst VignetteWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Vignette\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"vignette_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView = void 0;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tlet rawVal = op[configKey];\n\t\t\tif (rawVal !== void 0 && rawVal !== null) {\n\t\t\t\tif (typeof rawVal === \"object\" && \"value\" in rawVal) {\n\t\t\t\t\tconst sig = rawVal;\n\t\t\t\t\tif (sig.gpuBinding?.textureView) {\n\t\t\t\t\t\tgpuTextureView = sig.gpuBinding.textureView;\n\t\t\t\t\t\thasStaticSig = true;\n\t\t\t\t\t}\n\t\t\t\t\trawVal = sig.value;\n\t\t\t\t} else if (typeof rawVal === \"function\") rawVal = rawVal(frame, fps);\n\t\t\t}\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 50, 0, 100);\n\tconst radiusRes = resolveBindable(\"radius\", 1, .1, 2);\n\tconst softnessRes = resolveBindable(\"softness\", .5, 0, 1);\n\tconst roundnessRes = resolveBindable(\"roundness\", .5, 0, 1);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst { vignettePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getVignetteResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.gpuTextureView) return res.gpuTextureView;\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst softnessView = getSignalView(softnessRes, \"softness_sig\");\n\tconst roundnessView = getSignalView(roundnessRes, \"roundness_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\tvignetteUniformData[0] = strengthRes.val;\n\tvignetteUniformData[1] = radiusRes.val;\n\tvignetteUniformData[2] = softnessRes.val;\n\tvignetteUniformData[3] = roundnessRes.val;\n\tvignetteUniformData[4] = centerXRes.val;\n\tvignetteUniformData[5] = centerYRes.val;\n\tvignetteUniformData[6] = strengthRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[7] = radiusRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[8] = softnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[9] = roundnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[10] = centerXRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[11] = centerYRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(vignetteUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst vignettePass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvignettePass.setPipeline(pipeline);\n\tvignettePass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tvignettePass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\tvignettePass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: strengthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: softnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: roundnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: centerXView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: centerYView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tvignettePass.draw(4);\n\tvignettePass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: VignetteWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BgSXYX3i.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CnRoblJF.mjs","names":[],"sources":["../../../nodes/node-vignette/dist/renderers-BgSXYX3i.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst VIGNETTE_SHADER = `\nstruct VignetteUniforms {\n strength : f32,\n radius : f32,\n softness : f32,\n roundness : f32,\n\n centerX : f32,\n centerY : f32,\n hasStrengthSig : f32,\n hasRadiusSig : f32,\n\n hasSoftnessSig : f32,\n hasRoundnessSig: f32,\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : VignetteUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var softnessSigTex : texture_2d<f32>;\n@group(2) @binding(3) var roundnessSigTex : texture_2d<f32>;\n@group(2) @binding(4) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(5) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(6) var signalSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n if (color.a < 1e-5) {\n return color;\n }\n\n // Resolve parameter overrides or dynamic signals\n var strength = u.strength;\n if (u.hasStrengthSig > 0.5) {\n strength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var softness = u.softness;\n if (u.hasSoftnessSig > 0.5) {\n softness = textureSampleLevel(softnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var roundness = u.roundness;\n if (u.hasRoundnessSig > 0.5) {\n roundness = textureSampleLevel(roundnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let center = vec2<f32>(centerX, centerY);\n let dimensions = vec2<f32>(textureDimensions(tex));\n let aspect = dimensions.x / dimensions.y;\n let uvOffset = in.uv - center;\n\n // Calculate aspect ratio corrected coordinate for circle\n let correctedOffset = vec2<f32>(\n uvOffset.x * mix(1.0, aspect, roundness),\n uvOffset.y\n );\n let dist = length(correctedOffset);\n\n // Calculate vignette edge falloff\n let edge0 = radius;\n let edge1 = max(0.0, radius - softness);\n let vignetteFactor = smoothstep(edge0, edge1, dist);\n\n // Blend based on strength\n let intensity = strength / 100.0;\n let finalVignette = mix(1.0, vignetteFactor, intensity);\n\n // Unpremultiply, apply vignette, and repremultiply\n let unpremult_rgb = color.rgb / color.a;\n let final_rgb = unpremult_rgb * finalVignette;\n\n return vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * color.a, color.a);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst vignetteUniformData = new Float32Array(12);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsingleTextureLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t}] }),\n\t\tsignalTextureLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getVignetteResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `vignette_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst vignetteModule = device.createShaderModule({\n\t\t\tlabel: `vignette_${format}.wgsl`,\n\t\t\tcode: VIGNETTE_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `VignettePipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: vignetteModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: vignetteModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tvignettePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst VignetteWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Vignette\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"vignette_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView = void 0;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tlet rawVal = op[configKey];\n\t\t\tif (rawVal !== void 0 && rawVal !== null) {\n\t\t\t\tif (typeof rawVal === \"object\" && \"value\" in rawVal) {\n\t\t\t\t\tconst sig = rawVal;\n\t\t\t\t\tif (sig.gpuBinding?.textureView) {\n\t\t\t\t\t\tgpuTextureView = sig.gpuBinding.textureView;\n\t\t\t\t\t\thasStaticSig = true;\n\t\t\t\t\t}\n\t\t\t\t\trawVal = sig.value;\n\t\t\t\t} else if (typeof rawVal === \"function\") rawVal = rawVal(frame, fps);\n\t\t\t}\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 50, 0, 100);\n\tconst radiusRes = resolveBindable(\"radius\", 1, .1, 2);\n\tconst softnessRes = resolveBindable(\"softness\", .5, 0, 1);\n\tconst roundnessRes = resolveBindable(\"roundness\", .5, 0, 1);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1);\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(width, height, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia\n\t}, tmpView, tmpTex, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\targs.pass.end();\n\tconst { vignettePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getVignetteResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst getSignalView = (res, suffix) => {\n\t\tif (res.gpuTextureView) return res.gpuTextureView;\n\t\tif (res.hasStaticSig && res.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, res.sd.nodeId ?? `${nodeId}_${suffix}`, elapsedSeconds, durationSeconds, res.sd, width, height, props.renderId, frame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst softnessView = getSignalView(softnessRes, \"softness_sig\");\n\tconst roundnessView = getSignalView(roundnessRes, \"roundness_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\tvignetteUniformData[0] = strengthRes.val;\n\tvignetteUniformData[1] = radiusRes.val;\n\tvignetteUniformData[2] = softnessRes.val;\n\tvignetteUniformData[3] = roundnessRes.val;\n\tvignetteUniformData[4] = centerXRes.val;\n\tvignetteUniformData[5] = centerYRes.val;\n\tvignetteUniformData[6] = strengthRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[7] = radiusRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[8] = softnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[9] = roundnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[10] = centerXRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[11] = centerYRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(vignetteUniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst vignettePass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: outTex.createView(),\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\tvignettePass.setPipeline(pipeline);\n\tvignettePass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tvignettePass.setBindGroup(1, ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler));\n\tvignettePass.setBindGroup(2, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: strengthView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: softnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: roundnessView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: centerXView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: centerYView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tvignettePass.draw(4);\n\tvignettePass.end();\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, outTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: targetWidth,\n\t\theight: targetHeight\n\t}, { opacity: op.opacity ?? 1 });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: VignetteWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BgSXYX3i.mjs.map"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as renderers_default, t as RefractionCaustics3DWebGPURenderer } from "./renderer-
|
|
1
|
+
import { n as renderers_default, t as RefractionCaustics3DWebGPURenderer } from "./renderer-Dcd-Pkzd.mjs";
|
|
2
2
|
|
|
3
3
|
export { RefractionCaustics3DWebGPURenderer, renderers_default as default };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, o as __toESM, t as __commonJSMin } from "./chunk-GMkBE123.mjs";
|
|
2
2
|
import { Bt as takeRenderDiagnostics, Ht as updateClockSignals, wt as getMediaType } from "./dist-Bx6J0VcM.mjs";
|
|
3
3
|
import { r as registerWebGPURenderer, t as audioRegistry } from "./renderer-CtVkU_GA.mjs";
|
|
4
|
-
import { B as inputStore, C as WebGPUAudioProcessor, F as ensureDevice, G as lutStore,
|
|
5
|
-
import { i as mixAudioTracks, r as drawCompositionTree, t as compositionStateStore, y as
|
|
4
|
+
import { B as inputStore, C as WebGPUAudioProcessor, F as ensureDevice, G as lutStore, R as getRenderer2D, T as clearAllVideoCache, d as NodeSurfaceProvider, et as shaderStore, q as mediaDecoderCache, rt as textureCache, y as SlugFontCache, z as initHeadlessWebGPU } from "./dist-DgIKXWZ1.mjs";
|
|
5
|
+
import { i as mixAudioTracks, r as drawCompositionTree, t as compositionStateStore, y as preloadCompositionFonts } from "./dist-55MP0aN4.mjs";
|
|
6
6
|
import { t as require_dist_cjs$20 } from "./dist-cjs-BUwe2XhR.mjs";
|
|
7
7
|
import { D as require_dist_cjs$21, O as dist_es_exports$1, _ as require_dist_cjs$33, a as require_dist_cjs$26, b as init_protocols, c as require_dist_cjs$37, d as require_dist_cjs$32, f as require_dist_cjs$23, g as require_dist_cjs$34, h as require_dist_cjs$35, i as require_dist_cjs$28, k as init_dist_es$1, l as require_dist_cjs$27, m as require_dist_cjs$22, n as require_dist_cjs$31, o as require_dist_cjs$29, p as require_dist_cjs$24, r as require_dist_cjs$30, s as require_dist_cjs$25, t as require_dist_cjs$38, u as require_dist_cjs$36, v as dist_es_exports, x as protocols_exports, y as init_dist_es } from "./dist-cjs-BKmGCgtm.mjs";
|
|
8
8
|
import { F as require_dist_cjs$42, I as require_dist_cjs$44, P as require_dist_cjs$39, R as require_dist_cjs$43, T as schema_exports, t as require_dist_cjs$41, v as init_tslib_es6, w as init_schema, y as tslib_es6_exports, z as require_dist_cjs$40 } from "./dist-cjs-DsMdld8l.mjs";
|
|
@@ -26,7 +26,7 @@ import * as webcodecs from "@napi-rs/webcodecs";
|
|
|
26
26
|
import { VideoFrame } from "@napi-rs/webcodecs";
|
|
27
27
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
28
28
|
import { registerMediabunnyServer } from "@mediabunny/server";
|
|
29
|
-
import {
|
|
29
|
+
import { exec, spawn } from "node:child_process";
|
|
30
30
|
import sharp from "sharp";
|
|
31
31
|
|
|
32
32
|
//#region ../../node_modules/.pnpm/@inversifyjs+common@1.5.2/node_modules/@inversifyjs/common/lib/esm/index.js
|
|
@@ -21593,7 +21593,7 @@ const envSchema = z$1.object({
|
|
|
21593
21593
|
* App version read from the monorepo root package.json.
|
|
21594
21594
|
* Used for version-aware render fingerprinting.
|
|
21595
21595
|
*/
|
|
21596
|
-
const APP_VERSION = "2.0.
|
|
21596
|
+
const APP_VERSION = "2.0.5";
|
|
21597
21597
|
let loggerContext = {
|
|
21598
21598
|
getStore: () => void 0,
|
|
21599
21599
|
run: (_store, callback, ...args) => callback(...args)
|
|
@@ -21749,52 +21749,16 @@ S3StorageService = __decorate([
|
|
|
21749
21749
|
], S3StorageService);
|
|
21750
21750
|
|
|
21751
21751
|
//#endregion
|
|
21752
|
-
//#region ../renderer/dist/bootstrap-mediabunny-
|
|
21752
|
+
//#region ../renderer/dist/bootstrap-mediabunny-DIMlnLDP.mjs
|
|
21753
21753
|
/**
|
|
21754
|
-
*
|
|
21755
|
-
*
|
|
21754
|
+
* Preloads only the fonts (and emoji) a VirtualMediaData tree's text uses, so
|
|
21755
|
+
* typography renders correctly on Node.js without loading its media. Shared
|
|
21756
|
+
* with the browser preview; emoji need a font set with
|
|
21757
|
+
* `FontManager.registerEmojiFont()`.
|
|
21756
21758
|
*/
|
|
21757
21759
|
async function preloadFonts(media, device = null) {
|
|
21758
21760
|
if (!media) return;
|
|
21759
|
-
|
|
21760
|
-
const op = media.operation;
|
|
21761
|
-
if (R2_CUSTOM_DOMAIN) SlugFontCache.emojiFontUrl = `https://${R2_CUSTOM_DOMAIN}/static/NotoColorEmoji.ttf`;
|
|
21762
|
-
if (!SlugFontCache.emojiFontPath) try {
|
|
21763
|
-
const isDev = import.meta.url.endsWith(".ts");
|
|
21764
|
-
const emojiLocalUrl = new URL(isDev ? "./assets/NotoColorEmoji.ttf" : "../src/assets/NotoColorEmoji.ttf", import.meta.url).href;
|
|
21765
|
-
let fontPath = emojiLocalUrl;
|
|
21766
|
-
if (emojiLocalUrl.startsWith("file://")) try {
|
|
21767
|
-
fontPath = new URL(emojiLocalUrl).pathname;
|
|
21768
|
-
} catch {
|
|
21769
|
-
fontPath = emojiLocalUrl.replace(/^file:\/\//, "");
|
|
21770
|
-
}
|
|
21771
|
-
SlugFontCache.emojiFontPath = fontPath;
|
|
21772
|
-
} catch {}
|
|
21773
|
-
if (op) {
|
|
21774
|
-
const opText = op;
|
|
21775
|
-
const isTextNode = opText.op === "text" || opText.kind === "text" || opText.op === "caption" || opText.kind === "caption" || typeof opText.text === "string";
|
|
21776
|
-
const fontFamily = opText.fontFamily || (isTextNode ? "Inter" : void 0);
|
|
21777
|
-
if (fontFamily) {
|
|
21778
|
-
const fontUrl = getHeadlessFontPath(fontFamily) ?? GetFontAssetUrl(fontFamily);
|
|
21779
|
-
promises.push(preloadFont(fontFamily, fontUrl).catch((err) => {
|
|
21780
|
-
rendererLogger.error(err, `[HeadlessMediaRenderer] Failed to preload font "${fontFamily}" from ${fontUrl}`);
|
|
21781
|
-
}));
|
|
21782
|
-
if (device) promises.push(SlugFontCache.preloadSlugFont(device, fontFamily, fontUrl).catch((err) => {
|
|
21783
|
-
rendererLogger.error(err, `[HeadlessMediaRenderer] Failed to preload Slug font "${fontFamily}" from ${fontUrl}`);
|
|
21784
|
-
}));
|
|
21785
|
-
}
|
|
21786
|
-
if (opText.op === "text" && opText.text && device) {
|
|
21787
|
-
const matches = opText.text.match(/\p{Extended_Pictographic}/gu);
|
|
21788
|
-
if (matches) {
|
|
21789
|
-
const fontSize = opText.fontSize ?? 48;
|
|
21790
|
-
for (const char of matches) promises.push(SlugFontCache.preloadEmoji(device, char, fontSize).catch((err) => {
|
|
21791
|
-
rendererLogger.error(err, `[HeadlessMediaRenderer] Failed to preload emoji texture for "${char}"`);
|
|
21792
|
-
}));
|
|
21793
|
-
}
|
|
21794
|
-
}
|
|
21795
|
-
}
|
|
21796
|
-
if (media.children && media.children.length > 0) for (const child of media.children) promises.push(preloadFonts(child, device));
|
|
21797
|
-
await Promise.all(promises);
|
|
21761
|
+
await preloadCompositionFonts(media, device, (err, what) => rendererLogger.error(err, `[HeadlessMediaRenderer] Failed to preload ${what}`));
|
|
21798
21762
|
}
|
|
21799
21763
|
/**
|
|
21800
21764
|
* Pipelined Asynchronous DMA Staging Ring for WebGPU.
|
|
@@ -22004,52 +21968,52 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22004
21968
|
{
|
|
22005
21969
|
packageName: "@framefields/node-lut",
|
|
22006
21970
|
ops: ["ApplyLUT"],
|
|
22007
|
-
load: () => import("./renderer-
|
|
21971
|
+
load: () => import("./renderer-DxOQ5S8T.mjs")
|
|
22008
21972
|
},
|
|
22009
21973
|
{
|
|
22010
21974
|
packageName: "@framefields/node-audio-compressor",
|
|
22011
21975
|
ops: ["AudioCompressor"],
|
|
22012
|
-
load: () => import("./renderer-
|
|
21976
|
+
load: () => import("./renderer-CGVuhBbA.mjs")
|
|
22013
21977
|
},
|
|
22014
21978
|
{
|
|
22015
21979
|
packageName: "@framefields/node-audio-delay",
|
|
22016
21980
|
ops: ["AudioDelay"],
|
|
22017
|
-
load: () => import("./renderer-
|
|
21981
|
+
load: () => import("./renderer-C4O-L73n.mjs")
|
|
22018
21982
|
},
|
|
22019
21983
|
{
|
|
22020
21984
|
packageName: "@framefields/node-audio-fade",
|
|
22021
21985
|
ops: ["AudioFade"],
|
|
22022
|
-
load: () => import("./renderer-
|
|
21986
|
+
load: () => import("./renderer-lXmyzdcx.mjs")
|
|
22023
21987
|
},
|
|
22024
21988
|
{
|
|
22025
21989
|
packageName: "@framefields/node-audio-noise-gate",
|
|
22026
21990
|
ops: ["AudioNoiseGate"],
|
|
22027
|
-
load: () => import("./renderer-
|
|
21991
|
+
load: () => import("./renderer-Ibvw1tE_.mjs")
|
|
22028
21992
|
},
|
|
22029
21993
|
{
|
|
22030
21994
|
packageName: "@framefields/node-audio-parametric-eq",
|
|
22031
21995
|
ops: ["AudioParametricEq"],
|
|
22032
|
-
load: () => import("./renderer-
|
|
21996
|
+
load: () => import("./renderer-DZ7t_l1d.mjs")
|
|
22033
21997
|
},
|
|
22034
21998
|
{
|
|
22035
21999
|
packageName: "@framefields/node-audio-reverb",
|
|
22036
22000
|
ops: ["AudioReverb"],
|
|
22037
|
-
load: () => import("./renderer
|
|
22001
|
+
load: () => import("./renderer--fkO4O8d.mjs")
|
|
22038
22002
|
},
|
|
22039
22003
|
{
|
|
22040
22004
|
packageName: "@framefields/node-audio-signal-extractor",
|
|
22041
22005
|
ops: ["AudioSignalExtractor"],
|
|
22042
|
-
load: () => import("./renderer-
|
|
22006
|
+
load: () => import("./renderer-M0jeFo6S.mjs")
|
|
22043
22007
|
},
|
|
22044
22008
|
{
|
|
22045
22009
|
packageName: "@framefields/node-blur",
|
|
22046
22010
|
ops: ["Blur"],
|
|
22047
|
-
load: () => import("./renderer-
|
|
22011
|
+
load: () => import("./renderer-BFOkGS0N.mjs")
|
|
22048
22012
|
},
|
|
22049
22013
|
{
|
|
22050
22014
|
packageName: "@framefields/node-camera-parallax-3d",
|
|
22051
22015
|
ops: ["CameraParallax3D"],
|
|
22052
|
-
load: () => import("./renderer-
|
|
22016
|
+
load: () => import("./renderer-BUHMkkLU.mjs")
|
|
22053
22017
|
},
|
|
22054
22018
|
{
|
|
22055
22019
|
packageName: "@framefields/node-canvas-generator",
|
|
@@ -22069,17 +22033,17 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22069
22033
|
{
|
|
22070
22034
|
packageName: "@framefields/node-color-balance",
|
|
22071
22035
|
ops: ["ColorBalance"],
|
|
22072
|
-
load: () => import("./renderer-
|
|
22036
|
+
load: () => import("./renderer-Cx5H41JR.mjs")
|
|
22073
22037
|
},
|
|
22074
22038
|
{
|
|
22075
22039
|
packageName: "@framefields/node-colorkey",
|
|
22076
22040
|
ops: ["ColorKey"],
|
|
22077
|
-
load: () => import("./renderer-
|
|
22041
|
+
load: () => import("./renderer-ospMsCzr.mjs")
|
|
22078
22042
|
},
|
|
22079
22043
|
{
|
|
22080
22044
|
packageName: "@framefields/node-compositor",
|
|
22081
22045
|
ops: ["Compositor"],
|
|
22082
|
-
load: () => import("./renderer-
|
|
22046
|
+
load: () => import("./renderer-5OiVjQan.mjs")
|
|
22083
22047
|
},
|
|
22084
22048
|
{
|
|
22085
22049
|
packageName: "@framefields/node-corner-pin",
|
|
@@ -22104,7 +22068,7 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22104
22068
|
{
|
|
22105
22069
|
packageName: "@framefields/node-displacement-map",
|
|
22106
22070
|
ops: ["DisplacementMap"],
|
|
22107
|
-
load: () => import("./renderer-
|
|
22071
|
+
load: () => import("./renderer-bbOALT4F.mjs")
|
|
22108
22072
|
},
|
|
22109
22073
|
{
|
|
22110
22074
|
packageName: "@framefields/node-extract-frame",
|
|
@@ -22114,12 +22078,12 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22114
22078
|
{
|
|
22115
22079
|
packageName: "@framefields/node-extract-lut",
|
|
22116
22080
|
ops: ["ExtractLUT"],
|
|
22117
|
-
load: () => import("./renderer-
|
|
22081
|
+
load: () => import("./renderer-C3L9SNRO.mjs")
|
|
22118
22082
|
},
|
|
22119
22083
|
{
|
|
22120
22084
|
packageName: "@framefields/node-film-grain",
|
|
22121
22085
|
ops: ["FilmGrain"],
|
|
22122
|
-
load: () => import("./renderer-
|
|
22086
|
+
load: () => import("./renderer-OrhgkzVu.mjs")
|
|
22123
22087
|
},
|
|
22124
22088
|
{
|
|
22125
22089
|
packageName: "@framefields/node-flip",
|
|
@@ -22129,17 +22093,17 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22129
22093
|
{
|
|
22130
22094
|
packageName: "@framefields/node-gradient-map",
|
|
22131
22095
|
ops: ["GradientMap"],
|
|
22132
|
-
load: () => import("./renderer-
|
|
22096
|
+
load: () => import("./renderer-C9BKcHZb.mjs")
|
|
22133
22097
|
},
|
|
22134
22098
|
{
|
|
22135
22099
|
packageName: "@framefields/node-halftone-screen",
|
|
22136
22100
|
ops: ["HalftoneScreen"],
|
|
22137
|
-
load: () => import("./renderer-
|
|
22101
|
+
load: () => import("./renderer-BaoJiMJO.mjs")
|
|
22138
22102
|
},
|
|
22139
22103
|
{
|
|
22140
22104
|
packageName: "@framefields/node-high-pass",
|
|
22141
22105
|
ops: ["HighPass"],
|
|
22142
|
-
load: () => import("./renderer-
|
|
22106
|
+
load: () => import("./renderer-CiLiH6w_.mjs")
|
|
22143
22107
|
},
|
|
22144
22108
|
{
|
|
22145
22109
|
packageName: "@framefields/node-kenburns",
|
|
@@ -22154,7 +22118,7 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22154
22118
|
{
|
|
22155
22119
|
packageName: "@framefields/node-levels",
|
|
22156
22120
|
ops: ["Levels"],
|
|
22157
|
-
load: () => import("./renderer-
|
|
22121
|
+
load: () => import("./renderer-CL9gPcfZ.mjs")
|
|
22158
22122
|
},
|
|
22159
22123
|
{
|
|
22160
22124
|
packageName: "@framefields/node-liquify",
|
|
@@ -22164,7 +22128,7 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22164
22128
|
{
|
|
22165
22129
|
packageName: "@framefields/node-mask-math",
|
|
22166
22130
|
ops: ["MaskMath"],
|
|
22167
|
-
load: () => import("./renderer-
|
|
22131
|
+
load: () => import("./renderer-NhSzqWsQ.mjs")
|
|
22168
22132
|
},
|
|
22169
22133
|
{
|
|
22170
22134
|
packageName: "@framefields/node-mesh-warp",
|
|
@@ -22174,37 +22138,37 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22174
22138
|
{
|
|
22175
22139
|
packageName: "@framefields/node-modulate",
|
|
22176
22140
|
ops: ["Modulate"],
|
|
22177
|
-
load: () => import("./renderer-
|
|
22141
|
+
load: () => import("./renderer-B0RDWv1C.mjs")
|
|
22178
22142
|
},
|
|
22179
22143
|
{
|
|
22180
22144
|
packageName: "@framefields/node-noise-generator",
|
|
22181
22145
|
ops: ["NoiseGenerator"],
|
|
22182
|
-
load: () => import("./renderer-
|
|
22146
|
+
load: () => import("./renderer-eC1gRPRo.mjs")
|
|
22183
22147
|
},
|
|
22184
22148
|
{
|
|
22185
22149
|
packageName: "@framefields/node-paint",
|
|
22186
22150
|
ops: ["Paint"],
|
|
22187
|
-
load: () => import("./renderer-
|
|
22151
|
+
load: () => import("./renderer-CHKB-Or4.mjs")
|
|
22188
22152
|
},
|
|
22189
22153
|
{
|
|
22190
22154
|
packageName: "@framefields/node-patch-heal",
|
|
22191
22155
|
ops: ["PatchHeal"],
|
|
22192
|
-
load: () => import("./renderer-
|
|
22156
|
+
load: () => import("./renderer-CsQ7nY0z.mjs")
|
|
22193
22157
|
},
|
|
22194
22158
|
{
|
|
22195
22159
|
packageName: "@framefields/node-refine-edge",
|
|
22196
22160
|
ops: ["RefineEdge"],
|
|
22197
|
-
load: () => import("./renderer-
|
|
22161
|
+
load: () => import("./renderer-DMaYsSM4.mjs")
|
|
22198
22162
|
},
|
|
22199
22163
|
{
|
|
22200
22164
|
packageName: "@framefields/node-refraction-caustics",
|
|
22201
22165
|
ops: ["RefractionCaustics3D"],
|
|
22202
|
-
load: () => import("./renderer-
|
|
22166
|
+
load: () => import("./renderer-CwAjqb2o.mjs")
|
|
22203
22167
|
},
|
|
22204
22168
|
{
|
|
22205
22169
|
packageName: "@framefields/node-relight-3d",
|
|
22206
22170
|
ops: ["Relight3D"],
|
|
22207
|
-
load: () => import("./renderer-
|
|
22171
|
+
load: () => import("./renderer-CSkFF-qe.mjs")
|
|
22208
22172
|
},
|
|
22209
22173
|
{
|
|
22210
22174
|
packageName: "@framefields/node-resizer-scaler",
|
|
@@ -22219,12 +22183,12 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22219
22183
|
{
|
|
22220
22184
|
packageName: "@framefields/node-shadows-highlights",
|
|
22221
22185
|
ops: ["ShadowsHighlights"],
|
|
22222
|
-
load: () => import("./renderer-
|
|
22186
|
+
load: () => import("./renderer-DkJEnKQu.mjs")
|
|
22223
22187
|
},
|
|
22224
22188
|
{
|
|
22225
22189
|
packageName: "@framefields/node-shape-generator",
|
|
22226
22190
|
ops: ["ShapeGenerator"],
|
|
22227
|
-
load: () => import("./renderer-
|
|
22191
|
+
load: () => import("./renderer-0gJC-sc8.mjs")
|
|
22228
22192
|
},
|
|
22229
22193
|
{
|
|
22230
22194
|
packageName: "@framefields/node-signal-gate",
|
|
@@ -22234,27 +22198,27 @@ const BUILTIN_NODE_RENDERERS = [
|
|
|
22234
22198
|
{
|
|
22235
22199
|
packageName: "@framefields/node-stereo-panning",
|
|
22236
22200
|
ops: ["StereoPanning"],
|
|
22237
|
-
load: () => import("./renderer-
|
|
22201
|
+
load: () => import("./renderer-DlkrKqQj.mjs")
|
|
22238
22202
|
},
|
|
22239
22203
|
{
|
|
22240
22204
|
packageName: "@framefields/node-tile-offset",
|
|
22241
22205
|
ops: ["TileOffset"],
|
|
22242
|
-
load: () => import("./renderer-
|
|
22206
|
+
load: () => import("./renderer-6x7CgHhJ.mjs")
|
|
22243
22207
|
},
|
|
22244
22208
|
{
|
|
22245
22209
|
packageName: "@framefields/node-unsharp-mask",
|
|
22246
22210
|
ops: ["UnsharpMask"],
|
|
22247
|
-
load: () => import("./renderer-
|
|
22211
|
+
load: () => import("./renderer-CU2c6zWc.mjs")
|
|
22248
22212
|
},
|
|
22249
22213
|
{
|
|
22250
22214
|
packageName: "@framefields/node-vignette",
|
|
22251
22215
|
ops: ["Vignette"],
|
|
22252
|
-
load: () => import("./renderer-
|
|
22216
|
+
load: () => import("./renderer-WrFAaLxW.mjs")
|
|
22253
22217
|
},
|
|
22254
22218
|
{
|
|
22255
22219
|
packageName: "@framefields/node-vision",
|
|
22256
22220
|
ops: ["Vision"],
|
|
22257
|
-
load: () => import("./renderer-
|
|
22221
|
+
load: () => import("./renderer-xc9wkiC7.mjs")
|
|
22258
22222
|
}
|
|
22259
22223
|
];
|
|
22260
22224
|
/**
|
|
@@ -22453,7 +22417,7 @@ const bootstrapMediabunny = () => {
|
|
|
22453
22417
|
};
|
|
22454
22418
|
|
|
22455
22419
|
//#endregion
|
|
22456
|
-
//#region ../renderer/dist/headless-webgpu-renderer-
|
|
22420
|
+
//#region ../renderer/dist/headless-webgpu-renderer-BSmCX3bP.mjs
|
|
22457
22421
|
const DEFAULTS = {
|
|
22458
22422
|
blackPixelThreshold: .1,
|
|
22459
22423
|
blackFrameRatio: .98,
|
|
@@ -23090,6 +23054,72 @@ function resolveQuality(quality) {
|
|
|
23090
23054
|
default: return QUALITY_VERY_HIGH;
|
|
23091
23055
|
}
|
|
23092
23056
|
}
|
|
23057
|
+
let cachedVramUsage = "N/A";
|
|
23058
|
+
let vramProbeInFlight = false;
|
|
23059
|
+
function refreshVramUsage() {
|
|
23060
|
+
if (vramProbeInFlight) return;
|
|
23061
|
+
vramProbeInFlight = true;
|
|
23062
|
+
exec("nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits", {
|
|
23063
|
+
encoding: "utf-8",
|
|
23064
|
+
timeout: 2e3
|
|
23065
|
+
}, (err, stdout) => {
|
|
23066
|
+
vramProbeInFlight = false;
|
|
23067
|
+
if (err || !stdout) return;
|
|
23068
|
+
const [used, total] = stdout.trim().split(",").map((s) => s.trim());
|
|
23069
|
+
if (used && total) cachedVramUsage = `${used}MB / ${total}MB`;
|
|
23070
|
+
});
|
|
23071
|
+
}
|
|
23072
|
+
function getVramUsage() {
|
|
23073
|
+
return cachedVramUsage;
|
|
23074
|
+
}
|
|
23075
|
+
const DEFAULT_RING_CAPACITY = 2;
|
|
23076
|
+
const MIN_RING_CAPACITY = 2;
|
|
23077
|
+
const MAX_RING_CAPACITY = 8;
|
|
23078
|
+
function resolveRingCapacity(explicit) {
|
|
23079
|
+
const fromEnv = Number(process.env.FRAMEFIELDS_RING_CAPACITY);
|
|
23080
|
+
const requested = explicit ?? (Number.isFinite(fromEnv) && fromEnv > 0 ? fromEnv : NaN);
|
|
23081
|
+
if (!Number.isFinite(requested) || requested <= 0) return DEFAULT_RING_CAPACITY;
|
|
23082
|
+
return Math.max(MIN_RING_CAPACITY, Math.min(MAX_RING_CAPACITY, Math.floor(requested)));
|
|
23083
|
+
}
|
|
23084
|
+
var NodeSurfacePool = class {
|
|
23085
|
+
idle = [];
|
|
23086
|
+
maxIdle = 2;
|
|
23087
|
+
acquire(device, width, height) {
|
|
23088
|
+
const index = this.idle.findIndex((entry) => entry.device === device && entry.surface.width === width && entry.surface.height === height);
|
|
23089
|
+
if (index >= 0) {
|
|
23090
|
+
const [entry] = this.idle.splice(index, 1);
|
|
23091
|
+
if (entry) return entry.surface;
|
|
23092
|
+
}
|
|
23093
|
+
for (let i$1 = this.idle.length - 1; i$1 >= 0; i$1--) {
|
|
23094
|
+
const entry = this.idle[i$1];
|
|
23095
|
+
if (entry && entry.device !== device) {
|
|
23096
|
+
this.idle.splice(i$1, 1);
|
|
23097
|
+
try {
|
|
23098
|
+
entry.surface.destroy();
|
|
23099
|
+
} catch {}
|
|
23100
|
+
}
|
|
23101
|
+
}
|
|
23102
|
+
return new NodeSurfaceProvider(device, width, height);
|
|
23103
|
+
}
|
|
23104
|
+
release(device, surface) {
|
|
23105
|
+
if (this.idle.length >= this.maxIdle) {
|
|
23106
|
+
try {
|
|
23107
|
+
surface.destroy();
|
|
23108
|
+
} catch {}
|
|
23109
|
+
return;
|
|
23110
|
+
}
|
|
23111
|
+
this.idle.push({
|
|
23112
|
+
device,
|
|
23113
|
+
surface
|
|
23114
|
+
});
|
|
23115
|
+
}
|
|
23116
|
+
destroy() {
|
|
23117
|
+
for (const entry of this.idle.splice(0)) try {
|
|
23118
|
+
entry.surface.destroy();
|
|
23119
|
+
} catch {}
|
|
23120
|
+
}
|
|
23121
|
+
};
|
|
23122
|
+
const nodeSurfacePool = new NodeSurfacePool();
|
|
23093
23123
|
function formatLutAsCube(lut) {
|
|
23094
23124
|
const lines = [
|
|
23095
23125
|
"# Created by Gatewai",
|
|
@@ -23152,7 +23182,7 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23152
23182
|
const device = await ensureDevice();
|
|
23153
23183
|
try {
|
|
23154
23184
|
await preloadFonts(virtualMedia, device);
|
|
23155
|
-
surface =
|
|
23185
|
+
surface = nodeSurfacePool.acquire(device, width, height);
|
|
23156
23186
|
renderer = getRenderer2D(device, surface.colorFormat);
|
|
23157
23187
|
const ctx = {
|
|
23158
23188
|
device,
|
|
@@ -23219,9 +23249,7 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23219
23249
|
try {
|
|
23220
23250
|
shaderStore.clear(renderId);
|
|
23221
23251
|
} catch {}
|
|
23222
|
-
|
|
23223
|
-
surface?.destroy();
|
|
23224
|
-
} catch {}
|
|
23252
|
+
if (surface) nodeSurfacePool.release(device, surface);
|
|
23225
23253
|
try {
|
|
23226
23254
|
textureCache.destroy();
|
|
23227
23255
|
} catch {}
|
|
@@ -23456,22 +23484,9 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23456
23484
|
const heapTotalMb = Math.round(mem.heapTotal / 1024 / 1024);
|
|
23457
23485
|
return `Process: ${Math.round(mem.rss / 1024 / 1024)}MB RSS (${heapUsedMb}MB/${heapTotalMb}MB Heap), System: ${Math.round(usedMem / 1024 / 1024)}MB/${Math.round(totalMem / 1024 / 1024)}MB`;
|
|
23458
23486
|
};
|
|
23459
|
-
const getVramUsage = () => {
|
|
23460
|
-
try {
|
|
23461
|
-
const [used, total] = execSync("nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits", {
|
|
23462
|
-
encoding: "utf-8",
|
|
23463
|
-
stdio: [
|
|
23464
|
-
"ignore",
|
|
23465
|
-
"pipe",
|
|
23466
|
-
"ignore"
|
|
23467
|
-
]
|
|
23468
|
-
}).trim().split(",").map((s) => s.trim());
|
|
23469
|
-
if (used && total) return `${used}MB / ${total}MB`;
|
|
23470
|
-
} catch {}
|
|
23471
|
-
return "N/A";
|
|
23472
|
-
};
|
|
23473
23487
|
let statsInterval;
|
|
23474
23488
|
if (process.env.NODE_ENV === "production") statsInterval = setInterval(() => {
|
|
23489
|
+
refreshVramUsage();
|
|
23475
23490
|
rendererLogger.info({
|
|
23476
23491
|
renderId,
|
|
23477
23492
|
cpu: getCpuUsage(),
|
|
@@ -23522,7 +23537,7 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23522
23537
|
height,
|
|
23523
23538
|
fps,
|
|
23524
23539
|
videoSource,
|
|
23525
|
-
ringCapacity:
|
|
23540
|
+
ringCapacity: resolveRingCapacity(options?.ringCapacity),
|
|
23526
23541
|
onFrame: inspector ? (rgba) => inspector.inspect(rgba, width, height) : void 0
|
|
23527
23542
|
});
|
|
23528
23543
|
const ctx = surface && renderer ? {
|
|
@@ -23530,7 +23545,8 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23530
23545
|
renderer,
|
|
23531
23546
|
surface
|
|
23532
23547
|
} : null;
|
|
23533
|
-
|
|
23548
|
+
const prePass = async (frame) => {
|
|
23549
|
+
if (!ctx || !renderer) return;
|
|
23534
23550
|
const preEncoder = device.createCommandEncoder();
|
|
23535
23551
|
const dummyTex = renderer.getTemporaryTexture(width, height);
|
|
23536
23552
|
const dummyView = dummyTex.createView();
|
|
@@ -23541,7 +23557,7 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23541
23557
|
a: 0
|
|
23542
23558
|
}, width, height, "clear").end();
|
|
23543
23559
|
await drawCompositionTree(ctx, preEncoder, dummyView, dummyTex, width, height, virtualMedia, {
|
|
23544
|
-
frame
|
|
23560
|
+
frame,
|
|
23545
23561
|
fps,
|
|
23546
23562
|
isHeadless: true,
|
|
23547
23563
|
renderId,
|
|
@@ -23552,7 +23568,8 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23552
23568
|
});
|
|
23553
23569
|
device.queue.submit([preEncoder.finish()]);
|
|
23554
23570
|
await lutStore.awaitAllPending(device);
|
|
23555
|
-
}
|
|
23571
|
+
};
|
|
23572
|
+
await prePass(0);
|
|
23556
23573
|
for (let i$1 = 0; i$1 < totalFrames; i$1++) {
|
|
23557
23574
|
if (i$1 % 10 === 0) rendererLogger.info({
|
|
23558
23575
|
renderId,
|
|
@@ -23560,6 +23577,10 @@ var HeadlessWebGPURenderer = class HeadlessWebGPURenderer$1 {
|
|
|
23560
23577
|
totalFrames
|
|
23561
23578
|
}, `[HeadlessWebGPURenderer] Rendering frame ${i$1}/${totalFrames}`);
|
|
23562
23579
|
if (ctx && surface && renderer && pipeline) {
|
|
23580
|
+
if (i$1 > 0 && (lutStore.hasPending(device) || SlugFontCache.hasPending())) {
|
|
23581
|
+
updateClockSignals(i$1, fps, durationMs);
|
|
23582
|
+
await prePass(i$1);
|
|
23583
|
+
}
|
|
23563
23584
|
compositionStateStore.setState(renderId, i$1, fps, true);
|
|
23564
23585
|
updateClockSignals(i$1, fps, durationMs);
|
|
23565
23586
|
const encoder = device.createCommandEncoder();
|
|
@@ -23865,4 +23886,4 @@ async function renderFrameGrid(target, options = {}) {
|
|
|
23865
23886
|
|
|
23866
23887
|
//#endregion
|
|
23867
23888
|
export { HeadlessWebGPURenderer as a, HeadlessMediaRenderer as i, renderFrameGrid as n, formatQaReport as o, resolveSamplePoints as r, renderSemaphore as s, computeGridLayout as t };
|
|
23868
|
-
//# sourceMappingURL=renderer-
|
|
23889
|
+
//# sourceMappingURL=renderer-D1Zs78PQ.mjs.map
|