{"Document":{"ObjectName":"Scenario::ScenarioDocumentModel","id":1,"BaseScenario":{"ObjectName":"Scenario::BaseScenario","id":0,"Constraint":{"ObjectName":"Scenario::IntervalModel","id":0,"Metadata":{"ScriptingName":"analog-effects","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio In","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio Out","Exposed":"audio out","Address":"audio:/out/main","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[{"uuid":"971739ae-14a3-4283-b0a0-96dbd367ce66","ObjectName":"avnd_expsmooth","id":17,"Metadata":{"ScriptingName":"Exp Smoothing","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-664.6649806846519,-117.54803148485985],"Size":[141.0,55.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"769dd38a-bfb3-4dc6-b52a-b6abb7afe2a3","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Input","Exposed":"input"},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Alpha","Exposed":"alpha","Value":{"Float":0.14638745784759521},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.00009999999747378752,"Max":1.0}}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Output","Exposed":"output"}]},{"uuid":"1e17e479-3513-44c8-a8a7-017be9f6ac8a","ObjectName":"LFO","id":16,"Metadata":{"ScriptingName":"LFO","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-985.3880714509891,-119.69863936802835],"Size":[279.0,98.5],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"5554eb67-bcc8-45ab-8ec2-37a3f191aa64","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Freq.","Exposed":"freq.","Value":{"Float":1.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.009999999776482582,"Max":100.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Ampl.","Exposed":"ampl.","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Offset","Exposed":"offset","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":-1.0,"Max":1.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Jitter","Exposed":"jitter","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"Phase","Exposed":"phase","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-1.0,"Max":1.0}}},{"uuid":"8b1d76c4-3838-4ac0-9b9c-c12bc5db8e8a","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"Waveform","Exposed":"waveform","Value":{"String":"SampleAndHold"},"Init":{"String":"Sin"},"Domain":{"String":{"Values":["Sin","Triangle","Saw","Square","SampleAndHold","Noise1","Noise2","Noise3"]}},"Values":["Sin","Triangle","Saw","Square","SampleAndHold","Noise1","Noise2","Noise3"],"Pixmaps":[":/icons/wave_sin_off.png",":/icons/wave_sin_on.png",":/icons/wave_triangle_off.png",":/icons/wave_triangle_on.png",":/icons/wave_saw_off.png",":/icons/wave_saw_on.png",":/icons/wave_square_off.png",":/icons/wave_square_on.png",":/icons/wave_sample_and_hold_off.png",":/icons/wave_sample_and_hold_on.png",":/icons/wave_noise1_off.png",":/icons/wave_noise1_on.png",":/icons/wave_noise2_off.png",":/icons/wave_noise2_on.png",":/icons/wave_noise3_off.png",":/icons/wave_noise3_on.png"]},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"Quantification","Exposed":"quantification","Value":{"Float":0.25},"Init":{"Float":0.25},"Domain":{"Float":{"Values":[0.0,1.0,0.5,0.25,0.125,0.0625,0.03125,0.015625,0.75,0.375,0.1875,0.09375,0.046875]}},"Values":[["None",{"Float":0.0}],["Whole",{"Float":1.0}],["Half",{"Float":0.5}],["4th",{"Float":0.25}],["8th",{"Float":0.125}],["16th",{"Float":0.0625}],["32th",{"Float":0.03125}],["64th",{"Float":0.015625}],["Dotted Half",{"Float":0.75}],["Dotted 4th",{"Float":0.375}],["Dotted 8th",{"Float":0.1875}],["Dotted 16th",{"Float":0.09375}],["Dotted 32th",{"Float":0.046875}]],"FolderPort":"","FileExtensions":""}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Out","Exposed":"out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":15,"Metadata":{"ScriptingName":"Film Grain.2","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[756.8178010361198,-309.47127818787465],"Size":[157.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Photographic film grain. Organic noise weighted by luminance (more visible in midtones, less in deep shadows and bright highlights, like real film). Configurable size, intensity, and color/mono balance.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        {\n            \"NAME\": \"intensity\",\n            \"LABEL\": \"Intensity\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.05,\n            \"MIN\": 0.0,\n            \"MAX\": 0.3\n        },\n        {\n            \"NAME\": \"size\",\n            \"LABEL\": \"Grain Size\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 1.5,\n            \"MIN\": 0.5,\n            \"MAX\": 4.0\n        },\n        {\n            \"NAME\": \"color_amount\",\n            \"LABEL\": \"Color Grain\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.3,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        },\n        {\n            \"NAME\": \"midtone_bias\",\n            \"LABEL\": \"Midtone Bias\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.5,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        }\n    ]\n}*/\n\nconst vec3 luma = vec3(0.2126, 0.7152, 0.0722);\n\n// Hash-based pseudo-random (repeatable per pixel per frame)\nfloat hash12(vec2 p) {\n    vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n    p3 += dot(p3, p3.yzx + 33.33);\n    return fract((p3.x + p3.y) * p3.z);\n}\n\nfloat hash13(vec3 p) {\n    p = fract(p * 0.1031);\n    p += dot(p, p.zyx + 31.32);\n    return fract((p.x + p.y) * p.z);\n}\n\n// Approximate Gaussian from uniform hash (Box-Muller simplified)\nfloat gaussianNoise(vec2 uv, float seed) {\n    float u1 = max(hash13(vec3(uv, seed)), 1e-6);\n    float u2 = hash13(vec3(uv, seed + 17.37));\n    return sqrt(-2.0 * log(u1)) * cos(6.2831853 * u2);\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    vec4 orig = IMG_NORM_PIXEL(inputImage, uv);\n    vec3 c = orig.rgb;\n\n    // Grain coordinate (quantized for size control)\n    vec2 grainUV = floor(gl_FragCoord.xy / size) * size;\n    float t = TIME * 60.0; // animate grain per frame\n\n    // Luminance noise (monochrome grain)\n    float monoGrain = gaussianNoise(grainUV, t);\n\n    // Color noise (per-channel, shifted seeds)\n    vec3 colorGrain = vec3(\n        gaussianNoise(grainUV, t + 1.0),\n        gaussianNoise(grainUV, t + 2.0),\n        gaussianNoise(grainUV, t + 3.0)\n    );\n\n    // Blend mono and color grain\n    vec3 grain = mix(vec3(monoGrain), colorGrain, color_amount);\n\n    // Luminance-weighted response: more grain in midtones\n    // f(L) = L * (1-L) * 4 peaks at L=0.5\n    float L = dot(luma, c);\n    float weight = mix(1.0, 4.0 * L * (1.0 - clamp(L, 0.0, 1.0)), midtone_bias);\n\n    c += grain * intensity * weight;\n\n    gl_FragColor = vec4(c, orig.a);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Film Grain.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"intensity","Exposed":"intensity","Value":{"Float":0.05000000074505806},"Init":{"Float":0.05000000074505806},"Domain":{"Float":{"Min":0.0,"Max":0.30000001192092896}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"size","Exposed":"size","Value":{"Float":1.5},"Init":{"Float":1.5},"Domain":{"Float":{"Min":0.5,"Max":4.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"color_amount","Exposed":"color_amount","Value":{"Float":0.30000001192092896},"Init":{"Float":0.30000001192092896},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"midtone_bias","Exposed":"midtone_bias","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":14,"Metadata":{"ScriptingName":"Gaussian Blur.1","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[573.0242222044352,-309.7206703047062],"Size":[158.0,55.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Gaussian blur: iterative separable implementation with 4 H/V pass pairs. Each pass uses a small tight 9-tap kernel; repeated convolution builds a smooth wide Gaussian. No banding artifacts.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        {\n            \"NAME\": \"radius\",\n            \"LABEL\": \"Blur Radius\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 1.0,\n            \"MIN\": 0.0,\n            \"MAX\": 10.0\n        }\n    ],\n    \"PASSES\": [\n        { \"TARGET\": \"h1\" },\n        { \"TARGET\": \"v1\" },\n        { \"TARGET\": \"h2\" },\n        { \"TARGET\": \"v2\" },\n        { \"TARGET\": \"h3\" },\n        { \"TARGET\": \"v3\" },\n        { \"TARGET\": \"h4\" },\n        { \"TARGET\": \"v4\" },\n        {}\n    ]\n}*/\n\nconst float offsets[3] = float[3](0.0, 1.3846153846, 3.2307692308);\nconst float weights[3] = float[3](0.2270270270, 0.3162162162, 0.0702702703);\n\nvec4 blur9(sampler2D tex, vec2 uv, vec2 direction, float s) {\n    vec2 px = direction * s / RENDERSIZE;\n    vec4 c = IMG_NORM_PIXEL(tex, uv) * weights[0];\n    for (int i = 1; i < 3; i++) {\n        vec2 off = px * offsets[i];\n        c += IMG_NORM_PIXEL(tex, uv + off) * weights[i];\n        c += IMG_NORM_PIXEL(tex, uv - off) * weights[i];\n    }\n    return c;\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    if (radius < 0.5) { gl_FragColor = IMG_NORM_PIXEL(inputImage, uv); return; }\n    float s = radius * 0.5;\n\n    if      (PASSINDEX == 0) gl_FragColor = blur9(inputImage, uv, vec2(1,0), s);\n    else if (PASSINDEX == 1) gl_FragColor = blur9(h1, uv, vec2(0,1), s);\n    else if (PASSINDEX == 2) gl_FragColor = blur9(v1, uv, vec2(1,0), s);\n    else if (PASSINDEX == 3) gl_FragColor = blur9(h2, uv, vec2(0,1), s);\n    else if (PASSINDEX == 4) gl_FragColor = blur9(v2, uv, vec2(1,0), s);\n    else if (PASSINDEX == 5) gl_FragColor = blur9(h3, uv, vec2(0,1), s);\n    else if (PASSINDEX == 6) gl_FragColor = blur9(v3, uv, vec2(1,0), s);\n    else if (PASSINDEX == 7) gl_FragColor = blur9(h4, uv, vec2(0,1), s);\n    else                     gl_FragColor = IMG_NORM_PIXEL(v4, uv);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Gaussian Blur.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"radius","Exposed":"radius","Value":{"Float":1.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":10.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":13,"Metadata":{"ScriptingName":"VHS Glitch","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-267.74677057179315,-326.52310183738024],"Size":[526.0,252.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CATEGORIES\": [\n        \"Glitch\",\n        \"Retro\"\n    ],\n    \"CREDIT\": \"David Lublin, original by Staffan Widegarn Åhlvik\",\n    \"DESCRIPTION\": \"VHS Glitch Style\",\n    \"INPUTS\": [\n        {\n            \"NAME\": \"inputImage\",\n            \"TYPE\": \"image\"\n        },\n        {\n            \"DEFAULT\": 1,\n            \"NAME\": \"autoScan\",\n            \"TYPE\": \"bool\"\n        },\n        {\n            \"DEFAULT\": 0.5,\n            \"MAX\": 1,\n            \"MIN\": 0,\n            \"NAME\": \"xScanline\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 0.5,\n            \"MAX\": 1,\n            \"MIN\": 0,\n            \"NAME\": \"xScanline2\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 0,\n            \"MAX\": 1,\n            \"MIN\": 0,\n            \"NAME\": \"yScanline\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 0.5,\n            \"MAX\": 1,\n            \"MIN\": 0,\n            \"NAME\": \"xScanlineSize\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 0.25,\n            \"MAX\": 1,\n            \"MIN\": 0,\n            \"NAME\": \"xScanlineSize2\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 0.25,\n            \"MAX\": 1,\n            \"MIN\": -1,\n            \"NAME\": \"yScanlineAmount\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 0,\n            \"MAX\": 3,\n            \"MIN\": 0,\n            \"NAME\": \"grainLevel\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 1,\n            \"NAME\": \"scanFollow\",\n            \"TYPE\": \"bool\"\n        },\n        {\n            \"DEFAULT\": 1,\n            \"MAX\": 10,\n            \"MIN\": 0,\n            \"NAME\": \"analogDistort\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 1,\n            \"MAX\": 3,\n            \"MIN\": 0,\n            \"NAME\": \"bleedAmount\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 0.5,\n            \"MAX\": 1,\n            \"MIN\": 0,\n            \"NAME\": \"bleedDistort\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 1,\n            \"MAX\": 2,\n            \"MIN\": 0,\n            \"NAME\": \"bleedRange\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": [\n                0.8,\n                0,\n                0.4,\n                1\n            ],\n            \"NAME\": \"colorBleedL\",\n            \"TYPE\": \"color\"\n        },\n        {\n            \"DEFAULT\": [\n                0,\n                0.5,\n                0.75,\n                1\n            ],\n            \"NAME\": \"colorBleedC\",\n            \"TYPE\": \"color\"\n        },\n        {\n            \"DEFAULT\": [\n                0.8,\n                0,\n                0.4,\n                1\n            ],\n            \"NAME\": \"colorBleedR\",\n            \"TYPE\": \"color\"\n        }\n    ],\n    \"ISFVSN\": \"2\"\n}\n*/\n\n\n\n\n//\tBased on https://github.com/staffantan/unity-vhsglitch\n//\tConverted by David Lublin / VIDVOX\n\n\nconst float tau = 6.28318530718;\n\n\nfloat rand(vec3 co){\n\treturn abs(mod(sin( dot(co.xyz ,vec3(12.9898,78.233,45.5432) )) * 43758.5453, 1.0));\n}\n\nvoid main()\t{\n\tfloat\tactualXLine = (!autoScan) ? xScanline : mod(xScanline + ((1.0+sin(0.34*TIME))/2.0 + (1.0+sin(TIME))/3.0 + (1.0+cos(2.1*TIME))/3.0 + (1.0+cos(0.027*TIME))/2.0)/3.5,1.0);\n\tfloat\tactualXLineWidth = (!autoScan) ? xScanlineSize : xScanlineSize + ((1.0+sin(1.2*TIME))/2.0 + (1.0+cos(3.91*TIME))/3.0 + (1.0+cos(0.014*TIME))/2.0)/3.5;\n\tvec2\tloc = isf_FragNormCoord;\n\tvec4\tvhs = IMG_NORM_PIXEL(inputImage, loc);\n\tfloat\tdx = 1.0+actualXLineWidth/25.0-abs(distance(loc.y, actualXLine));\n\tfloat\tdx2 = 1.0+xScanlineSize2/10.0-abs(distance(loc.y, xScanline2));\n\tfloat\tdy = (1.0-abs(distance(loc.y, yScanline)));\n\tif (autoScan)\n\t\tdy = (1.0-abs(distance(loc.y, mod(yScanline+TIME,1.0))));\n\t\n\tdy = (dy > 0.5) ? 2.0 * dy : 2.0 * (1.0 - dy);\n\t\n\tfloat\trX = (scanFollow) ? rand(vec3(dy,actualXLine,analogDistort)) : rand(vec3(dy,bleedAmount,analogDistort));\n\tfloat\txTime = (actualXLine > 0.5) ? 2.0 * actualXLine : 2.0 * (1.0 - actualXLine);\n\t\n\tloc.x += yScanlineAmount * dy * 0.025 + analogDistort * rX/(RENDERSIZE.x/2.0);\n\t\n\tif(dx2 > 1.0 - xScanlineSize2 / 10.0)\t{\n\t\tfloat\trX2 = (dy * rand(vec3(dy,dx2,dx+TIME)) + dx2) / 4.0;\n\t\tfloat\tdistortAmount = analogDistort * (sin(rX * tau / dx2) + cos(rX * tau * 0.78 / dx2)) / 10.0;\n\t\t//loc.y = xScanline2;\n\t\t//loc.x += (1.0 + distortAmount * sin(tau * (loc.x) / rX2 ) - 1.0) / 15.0;\n\t\tloc.x += (1.0 + distortAmount * sin(tau * (loc.x) / rX2 ) - 1.0) / 15.0;\n\t}\n\tif(dx > 1.0 - actualXLineWidth / 25.0)\n\t\tloc.y = actualXLine;\n\n\tloc.x = mod(loc.x,1.0);\n\tloc.y = mod(loc.y,1.0);\n\t\n\tvec4\tc = IMG_NORM_PIXEL(inputImage, loc);\n\tfloat\tx = (loc.x*320.0)/320.0;\n\tfloat\ty = (loc.y*240.0)/240.0;\n\tfloat\tbleed = 0.0;\n\t\n\tif (scanFollow)\n\t\tc -= rand(vec3(x, y, xTime)) * xTime / (5.0-grainLevel);\n\telse\n\t\tc -= rand(vec3(x, y, bleedAmount)) * (bleedAmount/20.0) / (5.0-grainLevel);\n\t\n\tif (bleedAmount > 0.0)\t{\n\t\tIMG_NORM_PIXEL(inputImage, loc + vec2(0.01, 0)).r;\n\t\tbleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(0.02, 0)).r;\n\t\tbleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(0.01, 0.01)).r;\n\t\tbleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(-0.02, 0.02)).r;\n\t\tbleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(0.0, -0.03)).r;\n\t\tbleed /= 6.0;\n\t\tbleed *= bleedAmount;\n\t}\n\n\tif (bleed > 0.1){\n\t\tfloat\tbleedFreq = 1.0;\n\t\tfloat\tbleedX = 0.0;\n\t\tif (autoScan)\n\t\t\tbleedX = x + bleedDistort * (yScanlineAmount + (1.5 + cos(TIME / 13.0 + tau*(bleedDistort+(1.0-loc.y))))/2.0) * sin((TIME / 9.0 + bleedDistort) * tau + loc.y * loc.y * tau * bleedFreq) / 8.0;\n\t\telse\n\t\t\tbleedX = x + (yScanlineAmount + (1.0 + sin(tau*(bleedDistort+loc.y)))/2.0) * sin(bleedDistort * tau + loc.y * loc.y * tau * bleedFreq) / 10.0;\n\t\tvec4\tcolorBleed = (bleedX < 0.5) ? mix(colorBleedL, colorBleedC, 2.0 * bleedX) : mix(colorBleedR, colorBleedC, 2.0 - 2.0 * bleedX);\n\t\tif (scanFollow)\n\t\t\tc += bleed * max(xScanlineSize,xTime) * colorBleed;\n\t\telse\n\t\t\tc += bleed * colorBleed;\n\t}\n\tgl_FragColor = c;\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/basic/filter/VHS Glitch.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"autoScan","Exposed":"autoscan","Value":{"Bool":true},"Init":{"Bool":false},"Domain":{"Bool":null}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"xScanline","Exposed":"xscanline","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"xScanline2","Exposed":"xscanline2","Value":{"Float":0.11520833522081375},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"yScanline","Exposed":"yscanline","Value":{"Float":0.39520832896232605},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"xScanlineSize","Exposed":"xscanlinesize","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"xScanlineSize2","Exposed":"xscanlinesize2","Value":{"Float":0.0},"Init":{"Float":0.25},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":7,"Hidden":true,"Custom":"yScanlineAmount","Exposed":"yscanlineamount","Value":{"Float":0.25},"Init":{"Float":0.25},"Domain":{"Float":{"Min":-1.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":8,"Hidden":true,"Custom":"grainLevel","Exposed":"grainlevel","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":3.0}}},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":9,"Hidden":true,"Custom":"scanFollow","Exposed":"scanfollow","Value":{"Bool":true},"Init":{"Bool":false},"Domain":{"Bool":null}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":10,"Hidden":true,"Custom":"analogDistort","Exposed":"analogdistort","Value":{"Float":10.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":10.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":11,"Hidden":true,"Custom":"bleedAmount","Exposed":"bleedamount","Value":{"Float":2.154062509536743},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":3.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":12,"Hidden":true,"Custom":"bleedDistort","Exposed":"bleeddistort","Value":{"Float":0.2980208396911621},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":13,"Hidden":true,"Custom":"bleedRange","Exposed":"bleedrange","Value":{"Float":0.3960416615009308},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":14,"Hidden":true,"Custom":"colorBleedL","Exposed":"colorbleedl","Value":{"Vec4f":[0.800000011920929,0.0,0.4000000059604645,1.0]},"Init":{"Vec4f":[0.800000011920929,0.0,0.4000000059604645,1.0]},"Domain":{}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":15,"Hidden":true,"Custom":"colorBleedC","Exposed":"colorbleedc","Value":{"Vec4f":[0.0,0.5,0.75,1.0]},"Init":{"Vec4f":[0.0,0.5,0.75,1.0]},"Domain":{}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":16,"Hidden":true,"Custom":"colorBleedR","Exposed":"colorbleedr","Value":{"Vec4f":[0.800000011920929,0.5003280639648438,0.0639963373541832,1.0]},"Init":{"Vec4f":[0.800000011920929,0.0,0.4000000059604645,1.0]},"Domain":{}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":12,"Metadata":{"ScriptingName":"Colour Distance","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-474.4666419599074,-334.12796490272797],"Size":[165.0,110.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CATEGORIES\": [\n        \"Dissolve\",\n        \"Wipe\"\n    ],\n    \"CREDIT\": \"Automatically converted from https://www.github.com/gl-transitions/gl-transitions/tree/master/ColourDistance.glsl\",\n    \"DESCRIPTION\": \"\",\n    \"INPUTS\": [\n        {\n            \"NAME\": \"startImage\",\n            \"TYPE\": \"image\"\n        },\n        {\n            \"NAME\": \"endImage\",\n            \"TYPE\": \"image\"\n        },\n        {\n            \"DEFAULT\": 0,\n            \"MAX\": 1,\n            \"MIN\": 0,\n            \"NAME\": \"progress\",\n            \"TYPE\": \"float\"\n        },\n        {\n            \"DEFAULT\": 5,\n            \"MAX\": 10,\n            \"MIN\": 0,\n            \"NAME\": \"power\",\n            \"TYPE\": \"float\"\n        }\n    ],\n    \"ISFVSN\": \"2\"\n}\n*/\n\n\n\nvec4 getFromColor(vec2 inUV)\t{\n\treturn IMG_NORM_PIXEL(startImage, inUV);\n}\nvec4 getToColor(vec2 inUV)\t{\n\treturn IMG_NORM_PIXEL(endImage, inUV);\n}\n\n\n\n// License: MIT\n// Author: P-Seebauer\n// ported by gre from https://gist.github.com/P-Seebauer/2a5fa2f77c883dd661f9\n\n\nvec4 transition(vec2 p) {\n  vec4 fTex = getFromColor(p);\n  vec4 tTex = getToColor(p);\n  float m = step(distance(fTex, tTex), progress);\n  return mix(\n    mix(fTex, tTex, m),\n    tTex,\n    pow(progress, power)\n  );\n}\n\n\n\nvoid main()\t{\n\tgl_FragColor = transition(isf_FragNormCoord.xy);\n}","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/basic/blend/Colour Distance.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"startImage","Exposed":"startimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":1,"Hidden":false,"Custom":"endImage","Exposed":"endimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"progress","Exposed":"progress","Value":{"Float":0.8399999737739563},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"power","Exposed":"power","Value":{"Float":6.199999809265137},"Init":{"Float":5.0},"Domain":{"Float":{"Min":0.0,"Max":10.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":10,"Metadata":{"ScriptingName":"Pixel Sort.1","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[295.9863798678047,-314.72310183738006],"Size":[248.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Pixel sort glitch effect. Shifts pixels along rows or columns based on brightness, creating the distinctive glitch art look. Pixels above the threshold are displaced in the sort direction proportional to their brightness. Single-pass approximation of true pixel sorting that produces convincing results in real-time.\",\n    \"CATEGORIES\": [ \"Glitch\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        { \"NAME\": \"threshold_low\",  \"LABEL\": \"Threshold Low\",  \"TYPE\": \"float\", \"DEFAULT\": 0.2,  \"MIN\": 0.0, \"MAX\": 1.0 },\n        { \"NAME\": \"threshold_high\", \"LABEL\": \"Threshold High\", \"TYPE\": \"float\", \"DEFAULT\": 0.8,  \"MIN\": 0.0, \"MAX\": 1.0 },\n        { \"NAME\": \"sort_strength\",  \"LABEL\": \"Sort Strength\",  \"TYPE\": \"float\", \"DEFAULT\": 0.1,  \"MIN\": 0.0, \"MAX\": 0.3 },\n        {\n            \"NAME\": \"sort_direction\",\n            \"LABEL\": \"Direction\",\n            \"TYPE\": \"long\",\n            \"DEFAULT\": 0,\n            \"VALUES\": [ 0, 1, 2, 3 ],\n            \"LABELS\": [ \"Right\", \"Left\", \"Up\", \"Down\" ]\n        },\n        { \"NAME\": \"sort_randomize\", \"LABEL\": \"Randomize Rows\", \"TYPE\": \"float\", \"DEFAULT\": 0.0,  \"MIN\": 0.0, \"MAX\": 1.0 }\n    ]\n}*/\n\nconst vec3 luma_coeff = vec3(0.2126, 0.7152, 0.0722);\n\n// Simple hash for row randomization\nfloat hash(float n) {\n    return fract(sin(n * 127.1) * 43758.5453);\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    vec4 orig = IMG_NORM_PIXEL(inputImage, uv);\n    float L = dot(luma_coeff, orig.rgb);\n\n    // Determine if this pixel is in the sorting range\n    bool inRange = (L >= threshold_low && L <= threshold_high);\n\n    if (!inRange || sort_strength < 0.001) {\n        gl_FragColor = orig;\n        return;\n    }\n\n    // Per-row/column randomization of sort amount\n    float rowId;\n    if (sort_direction <= 1) {\n        rowId = floor(uv.y * RENDERSIZE.y);\n    } else {\n        rowId = floor(uv.x * RENDERSIZE.x);\n    }\n    float rowRand = mix(1.0, hash(rowId + 0.5), sort_randomize);\n\n    // Sort displacement: brighter pixels move further in sort direction\n    // Normalized luminance within threshold range\n    float normalizedL = (L - threshold_low) / max(threshold_high - threshold_low, 0.001);\n    float displacement = normalizedL * sort_strength * rowRand;\n\n    vec2 sortUV = uv;\n    if (sort_direction == 0) sortUV.x -= displacement;       // right: read from left\n    else if (sort_direction == 1) sortUV.x += displacement;  // left: read from right\n    else if (sort_direction == 2) sortUV.y -= displacement;  // up: read from below\n    else sortUV.y += displacement;                            // down: read from above\n\n    // Sample at displaced position\n    vec4 sorted = IMG_NORM_PIXEL(inputImage, sortUV);\n    float sortedL = dot(luma_coeff, sorted.rgb);\n\n    // Only use the displaced sample if it's also in sorting range\n    // This creates the \"stretching\" appearance of sorted regions\n    bool sortedInRange = (sortedL >= threshold_low && sortedL <= threshold_high);\n    if (sortedInRange) {\n        gl_FragColor = sorted;\n    } else {\n        gl_FragColor = orig;\n    }\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Pixel Sort.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"threshold_low","Exposed":"threshold_low","Value":{"Float":0.0},"Init":{"Float":0.20000000298023224},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"threshold_high","Exposed":"threshold_high","Value":{"Float":0.35760417580604553},"Init":{"Float":0.800000011920929},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"sort_strength","Exposed":"sort_strength","Value":{"Float":0.30000001192092896},"Init":{"Float":0.10000000149011612},"Domain":{"Float":{"Min":0.0,"Max":0.30000001192092896}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"sort_direction","Exposed":"sort_direction","Value":{"Int":3},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3]}},"Values":[["Right",{"Int":0}],["Left",{"Int":1}],["Up",{"Int":2}],["Down",{"Int":3}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"sort_randomize","Exposed":"sort_randomize","Value":{"Float":1.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":8,"Metadata":{"ScriptingName":"Pixel Sort","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[159.1416908762363,34.559744817820715],"Size":[248.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Pixel sort glitch effect. Shifts pixels along rows or columns based on brightness, creating the distinctive glitch art look. Pixels above the threshold are displaced in the sort direction proportional to their brightness. Single-pass approximation of true pixel sorting that produces convincing results in real-time.\",\n    \"CATEGORIES\": [ \"Glitch\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        { \"NAME\": \"threshold_low\",  \"LABEL\": \"Threshold Low\",  \"TYPE\": \"float\", \"DEFAULT\": 0.2,  \"MIN\": 0.0, \"MAX\": 1.0 },\n        { \"NAME\": \"threshold_high\", \"LABEL\": \"Threshold High\", \"TYPE\": \"float\", \"DEFAULT\": 0.8,  \"MIN\": 0.0, \"MAX\": 1.0 },\n        { \"NAME\": \"sort_strength\",  \"LABEL\": \"Sort Strength\",  \"TYPE\": \"float\", \"DEFAULT\": 0.1,  \"MIN\": 0.0, \"MAX\": 0.3 },\n        {\n            \"NAME\": \"sort_direction\",\n            \"LABEL\": \"Direction\",\n            \"TYPE\": \"long\",\n            \"DEFAULT\": 0,\n            \"VALUES\": [ 0, 1, 2, 3 ],\n            \"LABELS\": [ \"Right\", \"Left\", \"Up\", \"Down\" ]\n        },\n        { \"NAME\": \"sort_randomize\", \"LABEL\": \"Randomize Rows\", \"TYPE\": \"float\", \"DEFAULT\": 0.0,  \"MIN\": 0.0, \"MAX\": 1.0 }\n    ]\n}*/\n\nconst vec3 luma_coeff = vec3(0.2126, 0.7152, 0.0722);\n\n// Simple hash for row randomization\nfloat hash(float n) {\n    return fract(sin(n * 127.1) * 43758.5453);\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    vec4 orig = IMG_NORM_PIXEL(inputImage, uv);\n    float L = dot(luma_coeff, orig.rgb);\n\n    // Determine if this pixel is in the sorting range\n    bool inRange = (L >= threshold_low && L <= threshold_high);\n\n    if (!inRange || sort_strength < 0.001) {\n        gl_FragColor = orig;\n        return;\n    }\n\n    // Per-row/column randomization of sort amount\n    float rowId;\n    if (sort_direction <= 1) {\n        rowId = floor(uv.y * RENDERSIZE.y);\n    } else {\n        rowId = floor(uv.x * RENDERSIZE.x);\n    }\n    float rowRand = mix(1.0, hash(rowId + 0.5), sort_randomize);\n\n    // Sort displacement: brighter pixels move further in sort direction\n    // Normalized luminance within threshold range\n    float normalizedL = (L - threshold_low) / max(threshold_high - threshold_low, 0.001);\n    float displacement = normalizedL * sort_strength * rowRand;\n\n    vec2 sortUV = uv;\n    if (sort_direction == 0) sortUV.x -= displacement;       // right: read from left\n    else if (sort_direction == 1) sortUV.x += displacement;  // left: read from right\n    else if (sort_direction == 2) sortUV.y -= displacement;  // up: read from below\n    else sortUV.y += displacement;                            // down: read from above\n\n    // Sample at displaced position\n    vec4 sorted = IMG_NORM_PIXEL(inputImage, sortUV);\n    float sortedL = dot(luma_coeff, sorted.rgb);\n\n    // Only use the displaced sample if it's also in sorting range\n    // This creates the \"stretching\" appearance of sorted regions\n    bool sortedInRange = (sortedL >= threshold_low && sortedL <= threshold_high);\n    if (sortedInRange) {\n        gl_FragColor = sorted;\n    } else {\n        gl_FragColor = orig;\n    }\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Pixel Sort.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"threshold_low","Exposed":"threshold_low","Value":{"Float":0.0},"Init":{"Float":0.20000000298023224},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"threshold_high","Exposed":"threshold_high","Value":{"Float":1.0},"Init":{"Float":0.800000011920929},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"sort_strength","Exposed":"sort_strength","Value":{"Float":0.012185156345367432},"Init":{"Float":0.10000000149011612},"Domain":{"Float":{"Min":0.0,"Max":0.30000001192092896}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"sort_direction","Exposed":"sort_direction","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3]}},"Values":[["Right",{"Int":0}],["Left",{"Int":1}],["Up",{"Int":2}],["Down",{"Int":3}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"sort_randomize","Exposed":"sort_randomize","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":7,"Metadata":{"ScriptingName":"Tonemap","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[908.3270632851469,33.08390871023189],"Size":[234.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score HDR pipeline\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Tone mapping for HDRtoSDR conversion. Expects linear-light input where 1.0 = SDR reference white and values > 1.0 are HDR highlights. Luminance-based operators (BT.2446, Reinhard) preserve hue; per-channel operators (ACES, AgX) reshape color.\",\n    \"CATEGORIES\": [\n        \"Color\"\n    ],\n    \"INPUTS\": [\n        {\n            \"NAME\": \"inputImage\",\n            \"TYPE\": \"image\"\n        },\n        {\n            \"NAME\": \"tonemap\",\n            \"LABEL\": \"Algorithm\",\n            \"TYPE\": \"long\",\n            \"DEFAULT\": 0,\n            \"VALUES\":  [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ],\n            \"LABELS\":  [\n                \"BT.2446 Method A\",\n                \"Reinhard (luminance)\",\n                \"Reinhard Extended\",\n                \"Hable (Uncharted 2)\",\n                \"ACES (Hill fit)\",\n                \"AgX (minimal)\",\n                \"Khronos PBR Neutral\",\n                \"Clamp\",\n                \"BT.2390 EETF (PQ)\"\n            ]\n        },\n        {\n            \"NAME\": \"exposure_ev\",\n            \"LABEL\": \"Pre-Exposure (EV)\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.0,\n            \"MIN\": -4.0,\n            \"MAX\": 4.0\n        },\n        {\n            \"NAME\": \"content_peak\",\n            \"LABEL\": \"Content Peak / SDR White\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 4.926,\n            \"MIN\": 1.0,\n            \"MAX\": 50.0\n        },\n        {\n            \"NAME\": \"saturation\",\n            \"LABEL\": \"Post-Tonemap Saturation\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 1.0,\n            \"MIN\": 0.0,\n            \"MAX\": 2.0\n        }\n    ]\n}*/\n\nconst vec3 luma_2020 = vec3(0.2627, 0.6780, 0.0593);\nconst vec3 luma_709  = vec3(0.2126, 0.7152, 0.0722);\n\n// ── BT.2446 Method A ──\nvec3 tm_bt2446a(vec3 color, float peakRatio) {\n    float srcPeak = peakRatio * 203.0;  // content peak in nits\n    float dstPeak = 203.0;             // SDR reference white\n\n    float p_hdr = 1.0 + 32.0 * pow(srcPeak / 10000.0, 1.0 / 2.4);\n    float p_sdr = 1.0 + 32.0 * pow(dstPeak / 10000.0, 1.0 / 2.4);\n    float gcr = luma_2020.r / luma_2020.g;\n    float gcb = luma_2020.b / luma_2020.g;\n\n    vec3 xp = pow(max(color / peakRatio, 0.0), vec3(1.0 / 2.4));\n    float y_hdr = dot(luma_2020, xp);\n    if (y_hdr <= 0.0) return vec3(0.0);\n\n    float yp = log(1.0 + (p_hdr - 1.0) * y_hdr) / log(p_hdr);\n\n    float yc;\n    if (yp <= 0.7399)      yc = 1.077 * yp;\n    else if (yp <= 0.9909) yc = (-1.1510 * yp + 2.7811) * yp - 0.6302;\n    else                    yc = 0.5 * yp + 0.5;\n\n    float y_sdr = (pow(p_sdr, yc) - 1.0) / (p_sdr - 1.0);\n\n    float sc = y_sdr / (1.1 * y_hdr);\n    float cb = sc * (xp.b - y_hdr);\n    float cr = sc * (xp.r - y_hdr);\n    float yt = y_sdr - max(0.1 * cr, 0.0);\n    float cg = -(gcr * cr + gcb * cb);\n\n    return pow(max(yt + vec3(cr, cg, cb), 0.0), vec3(2.4));\n}\n\n// ── Reinhard ──\nvec3 tm_reinhard(vec3 c) {\n    float L = dot(luma_709, c);\n    if (L <= 0.0) return vec3(0.0);\n    return c * (L / (1.0 + L)) / L;\n}\n\n// ── Reinhard Extended ──\nvec3 tm_reinhard_ext(vec3 c, float wp) {\n    float L = dot(luma_709, c);\n    if (L <= 0.0) return vec3(0.0);\n    float Lout = (L * (1.0 + L / (wp * wp))) / (1.0 + L);\n    return c * (Lout / L);\n}\n\n// ── Hable ──\nvec3 hable_f(vec3 x) {\n    const float A = 0.15, B = 0.50, C = 0.10, D = 0.20, E = 0.02, F = 0.30;\n    return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;\n}\nvec3 tm_hable(vec3 c, float wp) {\n    return hable_f(c * 2.0) * (1.0 / hable_f(vec3(wp)));\n}\n\n// ── ACES ──\nvec3 tm_aces(vec3 c) {\n    const mat3 I = mat3(\n        0.59719, 0.07600, 0.02840,\n        0.35458, 0.90834, 0.13383,\n        0.04823, 0.01566, 0.83777);\n    const mat3 O = mat3(\n         1.60475, -0.10208, -0.00327,\n        -0.53108,  1.10813, -0.07276,\n        -0.07367, -0.00605,  1.07602);\n    vec3 v = I * c;\n    vec3 a = v * (v + 0.0245786) - 0.000090537;\n    vec3 b = v * (0.983729 * v + 0.4329510) + 0.238081;\n    return O * (a / b);\n}\n\n// ── AgX ──\nvec3 agx_contrast(vec3 x) {\n    vec3 x2 = x * x; vec3 x4 = x2 * x2;\n    return 15.5*x4*x2 - 40.14*x4*x + 31.96*x4 - 6.868*x2*x + 0.4298*x2 + 0.1191*x - 0.00232;\n}\nvec3 tm_agx(vec3 c) {\n    const mat3 F = mat3(\n        0.842479062253094,  0.0423282422610123, 0.0423756549057051,\n        0.0784335999999992, 0.878468636469772,  0.0784336,\n        0.0792237451477643, 0.0791661274605434, 0.879142973793104);\n    const mat3 R = mat3(\n         1.19687900512017,  -0.0528968517574562, -0.0529716355144438,\n        -0.0980208811401368,  1.15190312990417,  -0.0980434501171241,\n        -0.0990297440797205, -0.0989611768448433,  1.15107367264116);\n    vec3 v = F * c;\n    v = max(v, 1e-10);\n    v = clamp(log2(v), -12.47393, 4.026069);\n    v = (v + 12.47393) / (4.026069 + 12.47393);\n    return R * agx_contrast(v);\n}\n\n// ── PBR Neutral ──\nvec3 tm_pbr(vec3 c) {\n    const float sc = 0.76, ds = 0.15;\n    float x = min(c.r, min(c.g, c.b));\n    float off = (x < 0.08) ? x - 6.25*x*x : 0.04;\n    c -= off;\n    float pk = max(c.r, max(c.g, c.b));\n    if (pk < sc) return c;\n    float d = 1.0 - sc;\n    float np = 1.0 - d*d / (pk + d - sc);\n    c *= np / pk;\n    float g = 1.0 - 1.0 / (ds * (pk - np) + 1.0);\n    return mix(c, vec3(np), g);\n}\n\n// -- BT.2390 EETF (ITU-R BT.2390, operates in PQ domain) --\n//    Designed specifically for PQ content. Applies a hermite spline\n//    roll-off from knee to peak in PQ domain, preserving hue ratios.\n//    Input: linear light, 1.0 = SDR white, content_peak = peak/SDR ratio.\n\nfloat pq_forward(float Y) {\n    float Ym1 = pow(max(Y, 0.0), 0.1593017578125);\n    return pow((0.8359375 + 18.8515625 * Ym1) / (1.0 + 18.6875 * Ym1), 78.84375);\n}\n\nfloat pq_inverse(float N) {\n    float Nm = pow(max(N, 0.0), 1.0 / 78.84375);\n    return pow(max(Nm - 0.8359375, 0.0) / (18.8515625 - 18.6875 * Nm), 1.0 / 0.1593017578125);\n}\n\nvec3 tm_bt2390(vec3 color, float peakRatio) {\n    float srcPeakNits = peakRatio * 203.0;\n    float dstPeakNits = 203.0;\n\n    float srcPeakPQ = pq_forward(srcPeakNits / 10000.0);\n    float dstPeakPQ = pq_forward(dstPeakNits / 10000.0);\n    float KS = 1.5 * dstPeakPQ - 0.5 * srcPeakPQ;\n\n    float maxC = max(color.r, max(color.g, color.b));\n    if (maxC <= 0.0) return color;\n\n    float absLinear = maxC * srcPeakNits / 10000.0;\n    float pqVal = pq_forward(absLinear);\n\n    // Hermite spline EETF\n    float mappedPQ = pqVal;\n    if (pqVal >= KS && srcPeakPQ > KS) {\n        float t = (pqVal - KS) / (srcPeakPQ - KS);\n        float t2 = t * t;\n        float t3 = t2 * t;\n        mappedPQ = (2.0*t3 - 3.0*t2 + 1.0) * KS\n                 + (t3 - 2.0*t2 + t) * (srcPeakPQ - KS)\n                 + (-2.0*t3 + 3.0*t2) * dstPeakPQ;\n    }\n\n    float mappedLinear = pq_inverse(mappedPQ);\n    float dstLinear = pq_inverse(dstPeakPQ);\n    float ratio = mappedLinear / max(dstLinear, 1e-10);\n    float sc = ratio / maxC;\n    return clamp(color * sc, 0.0, 1.0);\n}\n\nvoid main() {\n    vec3 c = IMG_THIS_PIXEL(inputImage).rgb;\n\n    // Pre-exposure\n    c *= pow(2.0, exposure_ev);\n\n    // Tone map\n    if (tonemap == 0)      c = tm_bt2446a(c, content_peak);\n    else if (tonemap == 1) c = tm_reinhard(c);\n    else if (tonemap == 2) c = tm_reinhard_ext(c, content_peak);\n    else if (tonemap == 3) c = tm_hable(c, content_peak);\n    else if (tonemap == 4) c = clamp(tm_aces(c), 0.0, 1.0);\n    else if (tonemap == 5) c = clamp(tm_agx(c), 0.0, 1.0);\n    else if (tonemap == 6) c = clamp(tm_pbr(c), 0.0, 1.0);\n    else if (tonemap == 7) c = clamp(c, 0.0, 1.0);\n    else if (tonemap == 8) c = tm_bt2390(c, content_peak);\n\n    // Post-tonemap saturation\n    if (saturation != 1.0) {\n        float lum = dot(luma_709, c);\n        c = mix(vec3(lum), c, saturation);\n    }\n\n    gl_FragColor = vec4(c, IMG_THIS_PIXEL(inputImage).a);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/hdr/Tonemap.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"tonemap","Exposed":"tonemap","Value":{"Int":4},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8]}},"Values":[["BT.2446 Method A",{"Int":0}],["Reinhard (luminance)",{"Int":1}],["Reinhard Extended",{"Int":2}],["Hable (Uncharted 2)",{"Int":3}],["ACES (Hill fit)",{"Int":4}],["AgX (minimal)",{"Int":5}],["Khronos PBR Neutral",{"Int":6}],["Clamp",{"Int":7}],["BT.2390 EETF (PQ)",{"Int":8}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"exposure_ev","Exposed":"exposure_ev","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-4.0,"Max":4.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"content_peak","Exposed":"content_peak","Value":{"Float":4.926000118255615},"Init":{"Float":4.926000118255615},"Domain":{"Float":{"Min":1.0,"Max":50.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"saturation","Exposed":"saturation","Value":{"Float":1.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":2.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":6,"Metadata":{"ScriptingName":"HDR Exposure","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-332.1894263504946,34.21643153267392],"Size":[297.0,125.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score HDR pipeline\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"HDR exposure and normalization controls. Use to scale between absolute luminance (nits from PQ decode) and normalized working space (1.0 = SDR white), or to adjust exposure in EV stops.\",\n    \"CATEGORIES\": [\n        \"Color\"\n    ],\n    \"INPUTS\": [\n        {\n            \"NAME\": \"inputImage\",\n            \"TYPE\": \"image\"\n        },\n        {\n            \"NAME\": \"mode\",\n            \"LABEL\": \"Mode\",\n            \"TYPE\": \"long\",\n            \"DEFAULT\": 0,\n            \"VALUES\":  [ 0, 1, 2 ],\n            \"LABELS\":  [\n                \"Nits to Normalized (/ SDR peak)\",\n                \"Normalized to Nits (* SDR peak)\",\n                \"EV Exposure Only\"\n            ]\n        },\n        {\n            \"NAME\": \"sdr_white_nits\",\n            \"LABEL\": \"SDR Reference White (nits)\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 203.0,\n            \"MIN\": 80.0,\n            \"MAX\": 400.0\n        },\n        {\n            \"NAME\": \"exposure_ev\",\n            \"LABEL\": \"Exposure (EV)\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.0,\n            \"MIN\": -6.0,\n            \"MAX\": 6.0\n        }\n    ]\n}*/\n\nvoid main() {\n    vec3 c = IMG_THIS_PIXEL(inputImage).rgb;\n\n    if (mode == 0) {\n        // Nits to normalized: 203 nits becomes 1.0\n        c /= sdr_white_nits;\n    } else if (mode == 1) {\n        // Normalized to nits: 1.0 becomes 203 nits\n        c *= sdr_white_nits;\n    }\n\n    // Exposure always applies\n    c *= pow(2.0, exposure_ev);\n\n    gl_FragColor = vec4(c, IMG_THIS_PIXEL(inputImage).a);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/hdr/HDR Exposure.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"mode","Exposed":"mode","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2]}},"Values":[["Nits to Normalized (/ SDR peak)",{"Int":0}],["Normalized to Nits (* SDR peak)",{"Int":1}],["EV Exposure Only",{"Int":2}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"sdr_white_nits","Exposed":"sdr_white_nits","Value":{"Float":203.0},"Init":{"Float":203.0},"Domain":{"Float":{"Min":80.0,"Max":400.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"exposure_ev","Exposed":"exposure_ev","Value":{"Float":-3.658015727996826},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-6.0,"Max":6.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":5,"Metadata":{"ScriptingName":"Film Grain.1","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[735.9182105841576,32.38512447656883],"Size":[157.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Photographic film grain. Organic noise weighted by luminance (more visible in midtones, less in deep shadows and bright highlights, like real film). Configurable size, intensity, and color/mono balance.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        {\n            \"NAME\": \"intensity\",\n            \"LABEL\": \"Intensity\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.05,\n            \"MIN\": 0.0,\n            \"MAX\": 0.3\n        },\n        {\n            \"NAME\": \"size\",\n            \"LABEL\": \"Grain Size\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 1.5,\n            \"MIN\": 0.5,\n            \"MAX\": 4.0\n        },\n        {\n            \"NAME\": \"color_amount\",\n            \"LABEL\": \"Color Grain\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.3,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        },\n        {\n            \"NAME\": \"midtone_bias\",\n            \"LABEL\": \"Midtone Bias\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.5,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        }\n    ]\n}*/\n\nconst vec3 luma = vec3(0.2126, 0.7152, 0.0722);\n\n// Hash-based pseudo-random (repeatable per pixel per frame)\nfloat hash12(vec2 p) {\n    vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n    p3 += dot(p3, p3.yzx + 33.33);\n    return fract((p3.x + p3.y) * p3.z);\n}\n\nfloat hash13(vec3 p) {\n    p = fract(p * 0.1031);\n    p += dot(p, p.zyx + 31.32);\n    return fract((p.x + p.y) * p.z);\n}\n\n// Approximate Gaussian from uniform hash (Box-Muller simplified)\nfloat gaussianNoise(vec2 uv, float seed) {\n    float u1 = max(hash13(vec3(uv, seed)), 1e-6);\n    float u2 = hash13(vec3(uv, seed + 17.37));\n    return sqrt(-2.0 * log(u1)) * cos(6.2831853 * u2);\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    vec4 orig = IMG_NORM_PIXEL(inputImage, uv);\n    vec3 c = orig.rgb;\n\n    // Grain coordinate (quantized for size control)\n    vec2 grainUV = floor(gl_FragCoord.xy / size) * size;\n    float t = TIME * 60.0; // animate grain per frame\n\n    // Luminance noise (monochrome grain)\n    float monoGrain = gaussianNoise(grainUV, t);\n\n    // Color noise (per-channel, shifted seeds)\n    vec3 colorGrain = vec3(\n        gaussianNoise(grainUV, t + 1.0),\n        gaussianNoise(grainUV, t + 2.0),\n        gaussianNoise(grainUV, t + 3.0)\n    );\n\n    // Blend mono and color grain\n    vec3 grain = mix(vec3(monoGrain), colorGrain, color_amount);\n\n    // Luminance-weighted response: more grain in midtones\n    // f(L) = L * (1-L) * 4 peaks at L=0.5\n    float L = dot(luma, c);\n    float weight = mix(1.0, 4.0 * L * (1.0 - clamp(L, 0.0, 1.0)), midtone_bias);\n\n    c += grain * intensity * weight;\n\n    gl_FragColor = vec4(c, orig.a);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Film Grain.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"intensity","Exposed":"intensity","Value":{"Float":0.196987122297287},"Init":{"Float":0.05000000074505806},"Domain":{"Float":{"Min":0.0,"Max":0.30000001192092896}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"size","Exposed":"size","Value":{"Float":1.5},"Init":{"Float":1.5},"Domain":{"Float":{"Min":0.5,"Max":4.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"color_amount","Exposed":"color_amount","Value":{"Float":0.30000001192092896},"Init":{"Float":0.30000001192092896},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"midtone_bias","Exposed":"midtone_bias","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":4,"Metadata":{"ScriptingName":"Film Grain","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-13.490642116831545,35.91521576633698],"Size":[157.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Photographic film grain. Organic noise weighted by luminance (more visible in midtones, less in deep shadows and bright highlights, like real film). Configurable size, intensity, and color/mono balance.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        {\n            \"NAME\": \"intensity\",\n            \"LABEL\": \"Intensity\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.05,\n            \"MIN\": 0.0,\n            \"MAX\": 0.3\n        },\n        {\n            \"NAME\": \"size\",\n            \"LABEL\": \"Grain Size\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 1.5,\n            \"MIN\": 0.5,\n            \"MAX\": 4.0\n        },\n        {\n            \"NAME\": \"color_amount\",\n            \"LABEL\": \"Color Grain\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.3,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        },\n        {\n            \"NAME\": \"midtone_bias\",\n            \"LABEL\": \"Midtone Bias\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.5,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        }\n    ]\n}*/\n\nconst vec3 luma = vec3(0.2126, 0.7152, 0.0722);\n\n// Hash-based pseudo-random (repeatable per pixel per frame)\nfloat hash12(vec2 p) {\n    vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n    p3 += dot(p3, p3.yzx + 33.33);\n    return fract((p3.x + p3.y) * p3.z);\n}\n\nfloat hash13(vec3 p) {\n    p = fract(p * 0.1031);\n    p += dot(p, p.zyx + 31.32);\n    return fract((p.x + p.y) * p.z);\n}\n\n// Approximate Gaussian from uniform hash (Box-Muller simplified)\nfloat gaussianNoise(vec2 uv, float seed) {\n    float u1 = max(hash13(vec3(uv, seed)), 1e-6);\n    float u2 = hash13(vec3(uv, seed + 17.37));\n    return sqrt(-2.0 * log(u1)) * cos(6.2831853 * u2);\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    vec4 orig = IMG_NORM_PIXEL(inputImage, uv);\n    vec3 c = orig.rgb;\n\n    // Grain coordinate (quantized for size control)\n    vec2 grainUV = floor(gl_FragCoord.xy / size) * size;\n    float t = TIME * 60.0; // animate grain per frame\n\n    // Luminance noise (monochrome grain)\n    float monoGrain = gaussianNoise(grainUV, t);\n\n    // Color noise (per-channel, shifted seeds)\n    vec3 colorGrain = vec3(\n        gaussianNoise(grainUV, t + 1.0),\n        gaussianNoise(grainUV, t + 2.0),\n        gaussianNoise(grainUV, t + 3.0)\n    );\n\n    // Blend mono and color grain\n    vec3 grain = mix(vec3(monoGrain), colorGrain, color_amount);\n\n    // Luminance-weighted response: more grain in midtones\n    // f(L) = L * (1-L) * 4 peaks at L=0.5\n    float L = dot(luma, c);\n    float weight = mix(1.0, 4.0 * L * (1.0 - clamp(L, 0.0, 1.0)), midtone_bias);\n\n    c += grain * intensity * weight;\n\n    gl_FragColor = vec4(c, orig.a);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Film Grain.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"intensity","Exposed":"intensity","Value":{"Float":0.05000000074505806},"Init":{"Float":0.05000000074505806},"Domain":{"Float":{"Min":0.0,"Max":0.30000001192092896}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"size","Exposed":"size","Value":{"Float":0.9497454166412354},"Init":{"Float":1.5},"Domain":{"Float":{"Min":0.5,"Max":4.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"color_amount","Exposed":"color_amount","Value":{"Float":0.30000001192092896},"Init":{"Float":0.30000001192092896},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"midtone_bias","Exposed":"midtone_bias","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":3,"Metadata":{"ScriptingName":"Bloom","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[427.03944917293654,34.195382773269],"Size":[292.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Bloom / glow with iterative separable Gaussian blur. Extracts bright pixels with soft knee, blurs with 4 H/V iterations, composites onto original. HDR-aware. Smooth, wide, artifact-free.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        { \"NAME\": \"threshold\",  \"LABEL\": \"Threshold\",  \"TYPE\": \"float\", \"DEFAULT\": 0.8, \"MIN\": 0.0, \"MAX\": 5.0 },\n        { \"NAME\": \"soft_knee\",  \"LABEL\": \"Soft Knee\",  \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 1.0 },\n        { \"NAME\": \"intensity\",  \"LABEL\": \"Intensity\",  \"TYPE\": \"float\", \"DEFAULT\": 0.4, \"MIN\": 0.0, \"MAX\": 2.0 },\n        { \"NAME\": \"spread\",     \"LABEL\": \"Spread\",     \"TYPE\": \"float\", \"DEFAULT\": 3.0, \"MIN\": 0.5, \"MAX\": 10.0 },\n        { \"NAME\": \"tint\",       \"LABEL\": \"Bloom Tint\", \"TYPE\": \"color\", \"DEFAULT\": [ 1.0, 1.0, 1.0, 1.0 ] }\n    ],\n    \"PASSES\": [\n        { \"TARGET\": \"bright\" },\n        { \"TARGET\": \"h1\" },\n        { \"TARGET\": \"v1\" },\n        { \"TARGET\": \"h2\" },\n        { \"TARGET\": \"v2\" },\n        { \"TARGET\": \"h3\" },\n        { \"TARGET\": \"v3\" },\n        { \"TARGET\": \"h4\" },\n        { \"TARGET\": \"v4\" },\n        {}\n    ]\n}*/\n\nconst vec3 luma_coeff = vec3(0.2126, 0.7152, 0.0722);\nconst float offsets[3] = float[3](0.0, 1.3846153846, 3.2307692308);\nconst float weights[3] = float[3](0.2270270270, 0.3162162162, 0.0702702703);\n\nvec4 blur9(sampler2D tex, vec2 uv, vec2 direction, float s) {\n    vec2 px = direction * s / RENDERSIZE;\n    vec4 c = IMG_NORM_PIXEL(tex, uv) * weights[0];\n    for (int i = 1; i < 3; i++) {\n        vec2 off = px * offsets[i];\n        c += IMG_NORM_PIXEL(tex, uv + off) * weights[i];\n        c += IMG_NORM_PIXEL(tex, uv - off) * weights[i];\n    }\n    return c;\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    float s = spread * 0.5;\n\n    if (PASSINDEX == 0) {\n        vec4 c = IMG_NORM_PIXEL(inputImage, uv);\n        float L = dot(luma_coeff, c.rgb);\n        float knee = threshold * soft_knee;\n        float t = max(L - threshold + knee, 0.0);\n        float blend = min(t / (2.0 * knee + 0.0001), 1.0);\n        blend *= blend;\n        gl_FragColor = vec4(c.rgb * blend, c.a);\n    }\n    else if (PASSINDEX == 1) gl_FragColor = blur9(bright, uv, vec2(1,0), s);\n    else if (PASSINDEX == 2) gl_FragColor = blur9(h1, uv, vec2(0,1), s);\n    else if (PASSINDEX == 3) gl_FragColor = blur9(v1, uv, vec2(1,0), s);\n    else if (PASSINDEX == 4) gl_FragColor = blur9(h2, uv, vec2(0,1), s);\n    else if (PASSINDEX == 5) gl_FragColor = blur9(v2, uv, vec2(1,0), s);\n    else if (PASSINDEX == 6) gl_FragColor = blur9(h3, uv, vec2(0,1), s);\n    else if (PASSINDEX == 7) gl_FragColor = blur9(v3, uv, vec2(1,0), s);\n    else if (PASSINDEX == 8) gl_FragColor = blur9(h4, uv, vec2(0,1), s);\n    else {\n        vec4 original = IMG_NORM_PIXEL(inputImage, uv);\n        vec3 bloom = IMG_NORM_PIXEL(v4, uv).rgb * intensity * tint.rgb;\n        gl_FragColor = vec4(original.rgb + bloom, original.a);\n    }\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Bloom.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"threshold","Exposed":"threshold","Value":{"Float":0.39249348640441895},"Init":{"Float":0.800000011920929},"Domain":{"Float":{"Min":0.0,"Max":5.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"soft_knee","Exposed":"soft_knee","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"intensity","Exposed":"intensity","Value":{"Float":2.0},"Init":{"Float":0.4000000059604645},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"spread","Exposed":"spread","Value":{"Float":3.0},"Init":{"Float":3.0},"Domain":{"Float":{"Min":0.5,"Max":10.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"tint","Exposed":"tint","Value":{"Vec4f":[1.0,1.0,1.0,1.0]},"Init":{"Vec4f":[1.0,1.0,1.0,1.0]},"Domain":{}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":2,"Metadata":{"ScriptingName":"Gaussian Blur","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-503.85739729901087,28.614000000000033],"Size":[152.0,55.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Gaussian blur: iterative separable implementation with 4 H/V pass pairs. Each pass uses a small tight 9-tap kernel; repeated convolution builds a smooth wide Gaussian. No banding artifacts.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        {\n            \"NAME\": \"radius\",\n            \"LABEL\": \"Blur Radius\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 1.0,\n            \"MIN\": 0.0,\n            \"MAX\": 10.0\n        }\n    ],\n    \"PASSES\": [\n        { \"TARGET\": \"h1\" },\n        { \"TARGET\": \"v1\" },\n        { \"TARGET\": \"h2\" },\n        { \"TARGET\": \"v2\" },\n        { \"TARGET\": \"h3\" },\n        { \"TARGET\": \"v3\" },\n        { \"TARGET\": \"h4\" },\n        { \"TARGET\": \"v4\" },\n        {}\n    ]\n}*/\n\nconst float offsets[3] = float[3](0.0, 1.3846153846, 3.2307692308);\nconst float weights[3] = float[3](0.2270270270, 0.3162162162, 0.0702702703);\n\nvec4 blur9(sampler2D tex, vec2 uv, vec2 direction, float s) {\n    vec2 px = direction * s / RENDERSIZE;\n    vec4 c = IMG_NORM_PIXEL(tex, uv) * weights[0];\n    for (int i = 1; i < 3; i++) {\n        vec2 off = px * offsets[i];\n        c += IMG_NORM_PIXEL(tex, uv + off) * weights[i];\n        c += IMG_NORM_PIXEL(tex, uv - off) * weights[i];\n    }\n    return c;\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    if (radius < 0.5) { gl_FragColor = IMG_NORM_PIXEL(inputImage, uv); return; }\n    float s = radius * 0.5;\n\n    if      (PASSINDEX == 0) gl_FragColor = blur9(inputImage, uv, vec2(1,0), s);\n    else if (PASSINDEX == 1) gl_FragColor = blur9(h1, uv, vec2(0,1), s);\n    else if (PASSINDEX == 2) gl_FragColor = blur9(v1, uv, vec2(1,0), s);\n    else if (PASSINDEX == 3) gl_FragColor = blur9(h2, uv, vec2(0,1), s);\n    else if (PASSINDEX == 4) gl_FragColor = blur9(v2, uv, vec2(1,0), s);\n    else if (PASSINDEX == 5) gl_FragColor = blur9(h3, uv, vec2(0,1), s);\n    else if (PASSINDEX == 6) gl_FragColor = blur9(v3, uv, vec2(1,0), s);\n    else if (PASSINDEX == 7) gl_FragColor = blur9(h4, uv, vec2(0,1), s);\n    else                     gl_FragColor = IMG_NORM_PIXEL(v4, uv);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Gaussian Blur.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"radius","Exposed":"radius","Value":{"Float":3.2436718940734863},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":10.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"ea13ed06-d21c-4c84-8d0f-83ce0027b81c","ObjectName":"gfxProcess","id":1,"Metadata":{"ScriptingName":"curve-1","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-703.7636472990108,30.614000000000033],"Size":[179.0,70.0],"Loops":false,"FoldMode":0,"Vertex":"/*{\n  \"DESCRIPTION\": \"curve\",\n  \"CREDIT\": \"anon (ported from https://www.vertexshaderart.com/art/TPrujGdAaBfqpYpvT)\",\n  \"ISFVSN\": \"2\",\n  \"MODE\": \"VERTEX_SHADER_ART\",\n  \"CATEGORIES\": [\n    \"Math\",\n    \"Animated\"\n  ],\n  \"POINT_COUNT\": 1024,\n  \"PRIMITIVE_MODE\": \"LINE_LOOP\",\n  \"LINE_SIZE\": \"NATIVE\",\n  \"BACKGROUND_COLOR\": [\n    0,\n    0,\n    0,\n    1\n  ],\n  \"INPUTS\": [],\n  \"METADATA\": {\n    \"ORIGINAL_VIEWS\": 91,\n    \"ORIGINAL_DATE\": {\n      \"$date\": 1463880533216\n    }\n  }\n}*/\n\nvoid main() {\n\n  float phi = vertexId / vertexCount * 3.14159265*2.0;\n\n  float x = cos(phi);\n  float y = sin(phi);\n  float z = 0.0;\n\n  float theta = 20.0 * sin(cos(phi)*3.1415192) * sin(time);//(x+time * 0.3) * 3.141592*2.0;\n\n  y *= cos(theta);\n  z = sin(theta) * sin(phi);\n\n  vec4 pos = vec4(x, y, z, 1.0);\n\n  vec3 eye = vec3(sin(time*0.3), 0, cos(time*0.3));\n  vec3 right = vec3(-eye.z, 0, eye.x);\n  vec3 look = -eye;\n\n  mat4 L = mat4(vec4(right, 0),\n        vec4(0, 1, 0, 0),\n        vec4(look, 0),\n        vec4(0, 0, 0, 1));\n\n  gl_Position = (L * pos) * vec4((resolution.y / resolution.x) * 0.5, 0.5, 0.5, 1);\n  v_color = vec4(sin(theta) * 0.5 + 0.5,\n        cos(phi) * 0.5 + 0.5,\n        sin(time) * 0.5 + 0.5,\n        1.0);\n}","Root":"<LIBRARY>:packages/default/Presets/Vertex Shader Art/basic/curve-1.vs","Inlets":[{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"vertexCount","Exposed":"vertexcount","Value":{"Float":25616.033203125},"Init":{"Float":1024.0},"Domain":{"Float":{"Min":3.0,"Max":100000.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"primitiveType","Exposed":"primitivetype","Value":{"Int":2},"Init":{"Int":2},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6]}},"Values":[["POINTS",{"Int":0}],["LINE_STRIP",{"Int":1}],["LINE_LOOP",{"Int":2}],["LINES",{"Int":3}],["TRI_STRIP",{"Int":4}],["TRI_FAN",{"Int":5}],["TRIANGLES",{"Int":6}]],"FolderPort":"","FileExtensions":""}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":18,"Metadata":{"ScriptingName":"Trigonometric2","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-840.1766248430761,-345.1124533998801],"Size":[324.0,176.0],"Loops":false,"FoldMode":0,"Vertex":"void main() {\n\tisf_vertShaderInit();\n\tisf_vertShaderFinish();\n}","Fragment":"/*{\n  \"CREDIT\": \"by mojovideotech\",\n  \"CATEGORIES\": [\n  \t\"generator\",\n    \"procedural\",\n    \"2d\",\n    \"trigonometric\"\n  ],\n  \"DESCRIPTION\": \"from https://www.shadertoy.com/view/Mdl3RH by iq.  Trigonometric iterations. Or, some abstract stuff inspired made after Pickover's popcorn formulas.\",\n  \"INPUTS\": [\n    {\n      \"MAX\": [\n        10,\n        10\n      ],\n      \"MIN\": [\n        -10,\n        -10\n      ],\n      \"DEFAULT\": [\n        0.5,\n        0.4\n      ],\n      \"NAME\": \"matrix\",\n      \"TYPE\": \"point2D\"\n    },\n    {\n      \"NAME\": \"seed1\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 250,\n      \"MIN\": 10,\n      \"MAX\": 500\n    },\n    {\n      \"NAME\": \"seed2\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 45,\n      \"MIN\": 1,\n      \"MAX\": 50\n    },\n    {\n      \"NAME\": \"offset1\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": -1,\n      \"MIN\": -3,\n      \"MAX\": 3\n    },\n    {\n      \"NAME\": \"offset2\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 2,\n      \"MIN\": -3,\n      \"MAX\": 3\n    },\n    {\n      \"NAME\": \"offset3\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 1.5,\n      \"MIN\": -5,\n      \"MAX\": 5\n    },\n    {\n      \"NAME\": \"depth\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.99,\n      \"MIN\": 0.5,\n      \"MAX\": 1.75\n    },\n    {\n      \"NAME\": \"color1\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.33,\n      \"MIN\": -0.5,\n      \"MAX\": 0.5\n    },\n    {\n      \"NAME\": \"color2\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": -0.33,\n      \"MIN\": -0.5,\n      \"MAX\": 0.5\n    },\n    {\n      \"NAME\": \"color3\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.33,\n      \"MIN\": 0,\n      \"MAX\": 1\n    },\n    {\n      \"NAME\": \"density\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.99,\n      \"MIN\": 0.025,\n      \"MAX\": 1.25\n    },\n    {\n      \"NAME\": \"multiplier\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 2,\n      \"MIN\": 1,\n      \"MAX\": 120\n    },\n    {\n      \"NAME\": \"rate\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0,\n      \"MIN\": -0.1,\n      \"MAX\": 0.1\n    }\n  ]\n}*/\n\n\n////////////////////////////////////////////////////////////\n// Trigonometric2  by mojovideotech\n//\n// based on :\n// shadertoy.com/\\Mdl3RH  by IQ - www.iquilezles.org\n//\n// Creative Commons Attribution-NonCommercial-ShareAlike 3.0\n////////////////////////////////////////////////////////////\n\n\n\nvec2 iterate( in vec2 p, in vec4 t ) {\n    return p - (1.0-depth)*cos(t.yz + p.x*p.y + cos(mix(t.zw,p.yx,matrix)+1.5*3.1415927*p.yx)+p.yy*length(p.yx) );\n}\n\nvoid main() \n{\n\tvec2 q = isf_FragNormCoord;\n\tvec2 p = offset1 + offset2*q;\n\tp.x *= RENDERSIZE.x/RENDERSIZE.y;\n    p *= offset3;\t\n    float tt = (rate*TIME-sqrt(TIME/seed1))*seed2;\n    vec4 t = 0.05*tt*vec4( p.y,floor(multiplier), matrix.y, matrix.x ) + vec4(0.6,2.0,3.0,1.0);\n    vec2 z = p;\n\tvec3 s = vec3(0.0);\n\tfor( int i=0; i<96; i++ ) {\n\t\tz = iterate( z, t );\n\t\tfloat d = dot( z-p, z-p ); \n\t\ts.x += 1.0/(0.1+d);\n\t\ts.y += sin(atan( p.x-z.x, p.y-z.y ));\n\t\ts.z += exp(-0.2*d );\n\t}\n    s /= 100.0;\n\tvec3 cola = 0.5 + 0.5*cos( vec3(0.5+color2,0.5,(1.0-(color2+0.5))) + 2.5 + s.z*6.2831 );\n\tcola *= 0.5 + 0.5*s.y;\n    cola *= s.x;\n    cola *= 0.94+density*sin(seed2*length(z));\n\tvec3 nor = normalize( vec3( (s.x), 0.02, (s.x) ) );\n\tvec3 dif = mix( nor*cola, vec3(color3,abs(color1+color2),1.0-color3),color3 );\n\tcola += 0.5*vec3(dif);\n\tcola *= 0.3 + 0.7*pow( seed1*q.x*q.y*(1.0-q.x)*(1.0-q.y), 0.2 );\n  \tvec3 colb = cola*(vec3(1.5 - nor));\n\tvec3 col = mix(cola,colb,0.5+color1);\n\t\n\tgl_FragColor = vec4( col, 1.0 );\n}","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/gitizenme/Trigonometric2.fs","Inlets":[{"uuid":"0adbbdda-fda4-451e-91cc-1da731bde9d5","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"matrix","Exposed":"matrix","Value":{"Vec2f":[0.5,0.4000000059604645]},"Init":{"Vec2f":[0.5,0.4000000059604645]},"Domain":{"Vec2f":{"Min":[-10.0,-10.0],"Max":[10.0,10.0],"Values":[[],[]]}},"Integral":false},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"seed1","Exposed":"seed1","Value":{"Float":250.0},"Init":{"Float":250.0},"Domain":{"Float":{"Min":10.0,"Max":500.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"seed2","Exposed":"seed2","Value":{"Float":45.0},"Init":{"Float":45.0},"Domain":{"Float":{"Min":1.0,"Max":50.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"offset1","Exposed":"offset1","Value":{"Float":-1.0},"Init":{"Float":-1.0},"Domain":{"Float":{"Min":-3.0,"Max":3.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"offset2","Exposed":"offset2","Value":{"Float":2.0},"Init":{"Float":2.0},"Domain":{"Float":{"Min":-3.0,"Max":3.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"offset3","Exposed":"offset3","Value":{"Float":1.5},"Init":{"Float":1.5},"Domain":{"Float":{"Min":-5.0,"Max":5.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"depth","Exposed":"depth","Value":{"Float":0.9900000095367432},"Init":{"Float":0.9900000095367432},"Domain":{"Float":{"Min":0.5,"Max":1.75}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":7,"Hidden":true,"Custom":"color1","Exposed":"color1","Value":{"Float":0.33000001311302185},"Init":{"Float":0.33000001311302185},"Domain":{"Float":{"Min":-0.5,"Max":0.5}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":8,"Hidden":true,"Custom":"color2","Exposed":"color2","Value":{"Float":-0.33000001311302185},"Init":{"Float":-0.33000001311302185},"Domain":{"Float":{"Min":-0.5,"Max":0.5}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":9,"Hidden":true,"Custom":"color3","Exposed":"color3","Value":{"Float":0.33000001311302185},"Init":{"Float":0.33000001311302185},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":10,"Hidden":true,"Custom":"density","Exposed":"density","Value":{"Float":0.9900000095367432},"Init":{"Float":0.9900000095367432},"Domain":{"Float":{"Min":0.02500000037252903,"Max":1.25}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":11,"Hidden":true,"Custom":"multiplier","Exposed":"multiplier","Value":{"Float":2.0},"Init":{"Float":2.0},"Domain":{"Float":{"Min":1.0,"Max":120.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":12,"Hidden":true,"Custom":"rate","Exposed":"rate","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-0.10000000149011612,"Max":0.10000000149011612}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":19,"Metadata":{"ScriptingName":"Video Mixer","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[1207.5895312499997,-260.0072968749998],"Size":[399.0,175.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CATEGORIES\": [\n        \"General\"\n    ],\n    \"CREDIT\": \"Jamie Owen, Jean-Michaël Celerier, Optimized by AI Assistant (Gemini)\",\n    \"DESCRIPTION\": \"8-channel video mixer (Optimized)\",\n    \"INPUTS\": [\n        { \"NAME\": \"t1\", \"LABEL\" : \"Texture 1\", \"TYPE\": \"image\" },\n        { \"NAME\": \"t2\", \"LABEL\" : \"Texture 2\", \"TYPE\": \"image\" },\n        { \"NAME\": \"t3\", \"LABEL\" : \"Texture 3\", \"TYPE\": \"image\" },\n        { \"NAME\": \"t4\", \"LABEL\" : \"Texture 4\", \"TYPE\": \"image\" },\n        { \"NAME\": \"t5\", \"LABEL\" : \"Texture 5\", \"TYPE\": \"image\" },\n        { \"NAME\": \"t6\", \"LABEL\" : \"Texture 6\", \"TYPE\": \"image\" },\n        { \"NAME\": \"t7\", \"LABEL\" : \"Texture 7\", \"TYPE\": \"image\" },\n        { \"NAME\": \"t8\", \"LABEL\" : \"Texture 8\", \"TYPE\": \"image\" },\n        { \"NAME\": \"alpha1\", \"LABEL\" : \"Alpha 1\", \"DEFAULT\": 1, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"NAME\": \"alpha2\", \"LABEL\" : \"Alpha 2\", \"DEFAULT\": 0, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"NAME\": \"alpha3\", \"LABEL\" : \"Alpha 3\", \"DEFAULT\": 0, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"NAME\": \"alpha4\", \"LABEL\" : \"Alpha 4\", \"DEFAULT\": 0, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"NAME\": \"alpha5\", \"LABEL\" : \"Alpha 5\", \"DEFAULT\": 0, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"NAME\": \"alpha6\", \"LABEL\" : \"Alpha 6\", \"DEFAULT\": 0, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"NAME\": \"alpha7\", \"LABEL\" : \"Alpha 7\", \"DEFAULT\": 0, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"NAME\": \"alpha8\", \"LABEL\" : \"Alpha 8\", \"DEFAULT\": 0, \"MAX\": 1, \"MIN\": 0, \"TYPE\": \"float\" },\n        { \"VALUES\" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],\n           \"LABELS\" : [ \"Add\", \"Average\", \"Color Burn\", \"Color Dodge\", \"Darken\", \"Difference\", \n                        \"Exclusion\", \"Glow\", \"Hard Light\", \"Hard Mix\", \"Lighten\", \"Linear Burn\", \n                        \"Linear Dodge\", \"Linear Light\", \"Multiply\", \"Negation\", \"Normal\", \"Overlay\", \n                        \"Phoenix\", \"Pin Light\", \"Reflect\", \"Screen\", \"Soft Light\", \"Subtract\", \"Vivid Light\"],\n           \"IDENTITY\" : 1,\n           \"DEFAULT\" : 17,\n           \"LABEL\" : \"Mode 1\",\n           \"TYPE\" : \"long\",\n           \"NAME\" : \"mode1\"\n        },\n        { \"VALUES\" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],\n           \"LABELS\" : [ \"Add\", \"Average\", \"Color Burn\", \"Color Dodge\", \"Darken\", \"Difference\", \n                        \"Exclusion\", \"Glow\", \"Hard Light\", \"Hard Mix\", \"Lighten\", \"Linear Burn\", \n                        \"Linear Dodge\", \"Linear Light\", \"Multiply\", \"Negation\", \"Normal\", \"Overlay\", \n                        \"Phoenix\", \"Pin Light\", \"Reflect\", \"Screen\", \"Soft Light\", \"Subtract\", \"Vivid Light\"],\n           \"IDENTITY\" : 1,\n           \"DEFAULT\" : 17,\n           \"LABEL\" : \"Mode 2\",\n           \"TYPE\" : \"long\",\n           \"NAME\" : \"mode2\"\n        },\n        { \"VALUES\" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],\n           \"LABELS\" : [ \"Add\", \"Average\", \"Color Burn\", \"Color Dodge\", \"Darken\", \"Difference\", \n                        \"Exclusion\", \"Glow\", \"Hard Light\", \"Hard Mix\", \"Lighten\", \"Linear Burn\", \n                        \"Linear Dodge\", \"Linear Light\", \"Multiply\", \"Negation\", \"Normal\", \"Overlay\", \n                        \"Phoenix\", \"Pin Light\", \"Reflect\", \"Screen\", \"Soft Light\", \"Subtract\", \"Vivid Light\"],\n           \"IDENTITY\" : 1,\n           \"DEFAULT\" : 17,\n           \"LABEL\" : \"Mode 3\",\n           \"TYPE\" : \"long\",\n           \"NAME\" : \"mode3\"\n        },\n        { \"VALUES\" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],\n           \"LABELS\" : [ \"Add\", \"Average\", \"Color Burn\", \"Color Dodge\", \"Darken\", \"Difference\", \n                        \"Exclusion\", \"Glow\", \"Hard Light\", \"Hard Mix\", \"Lighten\", \"Linear Burn\", \n                        \"Linear Dodge\", \"Linear Light\", \"Multiply\", \"Negation\", \"Normal\", \"Overlay\", \n                        \"Phoenix\", \"Pin Light\", \"Reflect\", \"Screen\", \"Soft Light\", \"Subtract\", \"Vivid Light\"],\n           \"IDENTITY\" : 1,\n           \"DEFAULT\" : 17,\n           \"LABEL\" : \"Mode 4\",\n           \"TYPE\" : \"long\",\n           \"NAME\" : \"mode4\"\n        },\n        { \"VALUES\" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],\n           \"LABELS\" : [ \"Add\", \"Average\", \"Color Burn\", \"Color Dodge\", \"Darken\", \"Difference\", \n                        \"Exclusion\", \"Glow\", \"Hard Light\", \"Hard Mix\", \"Lighten\", \"Linear Burn\", \n                        \"Linear Dodge\", \"Linear Light\", \"Multiply\", \"Negation\", \"Normal\", \"Overlay\", \n                        \"Phoenix\", \"Pin Light\", \"Reflect\", \"Screen\", \"Soft Light\", \"Subtract\", \"Vivid Light\"],\n           \"IDENTITY\" : 1,\n           \"DEFAULT\" : 17,\n           \"LABEL\" : \"Mode 5\",\n           \"TYPE\" : \"long\",\n           \"NAME\" : \"mode5\"\n        },\n        { \"VALUES\" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],\n           \"LABELS\" : [ \"Add\", \"Average\", \"Color Burn\", \"Color Dodge\", \"Darken\", \"Difference\", \n                        \"Exclusion\", \"Glow\", \"Hard Light\", \"Hard Mix\", \"Lighten\", \"Linear Burn\", \n                        \"Linear Dodge\", \"Linear Light\", \"Multiply\", \"Negation\", \"Normal\", \"Overlay\", \n                        \"Phoenix\", \"Pin Light\", \"Reflect\", \"Screen\", \"Soft Light\", \"Subtract\", \"Vivid Light\"],\n           \"IDENTITY\" : 1,\n           \"DEFAULT\" : 17,\n           \"LABEL\" : \"Mode 6\",\n           \"TYPE\" : \"long\",\n           \"NAME\" : \"mode6\"\n        },\n        { \"VALUES\" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],\n           \"LABELS\" : [ \"Add\", \"Average\", \"Color Burn\", \"Color Dodge\", \"Darken\", \"Difference\", \n                        \"Exclusion\", \"Glow\", \"Hard Light\", \"Hard Mix\", \"Lighten\", \"Linear Burn\", \n                        \"Linear Dodge\", \"Linear Light\", \"Multiply\", \"Negation\", \"Normal\", \"Overlay\", \n                        \"Phoenix\", \"Pin Light\", \"Reflect\", \"Screen\", \"Soft Light\", \"Subtract\", \"Vivid Light\"],\n           \"IDENTITY\" : 1,\n           \"DEFAULT\" : 17,\n           \"LABEL\" : \"Mode 7\",\n           \"TYPE\" : \"long\",\n           \"NAME\" : \"mode7\"\n        }\n    ],\n    \"ISFVSN\": \"2\"\n}\n*/\n\n/* Blend mode implementations courtesy of Jamie Owen:\n   https://github.com/jamieowen/glsl-blend\n*/\n\nvec3 blendPhoenix(vec3 base, vec3 blend) {\n  return min(base, blend) - max(base, blend) + vec3(1.0);\n}\nfloat blendOverlay(float base, float blend) {\n  return base < 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend));\n}\nvec3 blendOverlay(vec3 base, vec3 blend) {\n  return vec3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b));\n}\nvec3 blendNormal(vec3 base, vec3 blend) { return blend; }\nvec3 blendNegation(vec3 base, vec3 blend) {\n  return vec3(1.0) - abs(vec3(1.0) - base - blend);\n}\nvec3 blendMultiply(vec3 base, vec3 blend) { return base * blend; }\nfloat blendReflect(float base, float blend) {\n  return (blend == 1.0) ? blend : min(base * base / (1.0 - blend), 1.0);\n}\nvec3 blendReflect(vec3 base, vec3 blend) {\n  return vec3(blendReflect(base.r, blend.r), blendReflect(base.g, blend.g), blendReflect(base.b, blend.b));\n}\nvec3 blendAverage(vec3 base, vec3 blend) { return (base + blend) / 2.0; }\nfloat blendLinearBurn(float base, float blend) {\n  return max(base + blend - 1.0, 0.0);\n}\nvec3 blendLinearBurn(vec3 base, vec3 blend) {\n  return max(base + blend - vec3(1.0), vec3(0.0));\n}\nfloat blendLighten(float base, float blend) { return max(blend, base); }\nvec3 blendLighten(vec3 base, vec3 blend) {\n  return vec3(blendLighten(base.r, blend.r), blendLighten(base.g, blend.g), blendLighten(base.b, blend.b));\n}\nfloat blendScreen(float base, float blend) {\n  return 1.0 - ((1.0 - base) * (1.0 - blend));\n}\nvec3 blendScreen(vec3 base, vec3 blend) {\n  return vec3(blendScreen(base.r, blend.r), blendScreen(base.g, blend.g), blendScreen(base.b, blend.b));\n}\nfloat blendSoftLight(float base, float blend) {\n  return (blend < 0.5)\n             ? (2.0 * base * blend + base * base * (1.0 - 2.0 * blend))\n             : (sqrt(base) * (2.0 * blend - 1.0) + 2.0 * base * (1.0 - blend));\n}\nvec3 blendSoftLight(vec3 base, vec3 blend) {\n  return vec3(blendSoftLight(base.r, blend.r), blendSoftLight(base.g, blend.g), blendSoftLight(base.b, blend.b));\n}\nfloat blendSubtract(float base, float blend) {\n  return max(base + blend - 1.0, 0.0);\n}\nvec3 blendSubtract(vec3 base, vec3 blend) {\n  return max(base + blend - vec3(1.0), vec3(0.0));\n}\nvec3 blendExclusion(vec3 base, vec3 blend) {\n  return base + blend - 2.0 * base * blend;\n}\nvec3 blendDifference(vec3 base, vec3 blend) { return abs(base - blend); }\nfloat blendDarken(float base, float blend) { return min(blend, base); }\nvec3 blendDarken(vec3 base, vec3 blend) {\n  return vec3(blendDarken(base.r, blend.r), blendDarken(base.g, blend.g), blendDarken(base.b, blend.b));\n}\nfloat blendColorDodge(float base, float blend) {\n  return (blend == 1.0) ? blend : min(base / (1.0 - blend), 1.0);\n}\nvec3 blendColorDodge(vec3 base, vec3 blend) {\n  return vec3(blendColorDodge(base.r, blend.r), blendColorDodge(base.g, blend.g), blendColorDodge(base.b, blend.b));\n}\nfloat blendColorBurn(float base, float blend) {\n  return (blend == 0.0) ? blend : max((1.0 - ((1.0 - base) / blend)), 0.0);\n}\nvec3 blendColorBurn(vec3 base, vec3 blend) {\n  return vec3(blendColorBurn(base.r, blend.r), blendColorBurn(base.g, blend.g), blendColorBurn(base.b, blend.b));\n}\nfloat blendAdd(float base, float blend) { return min(base + blend, 1.0); }\nvec3 blendAdd(vec3 base, vec3 blend) { return min(base + blend, vec3(1.0)); }\nfloat blendLinearDodge(float base, float blend) {\n  return min(base + blend, 1.0);\n}\nvec3 blendLinearDodge(vec3 base, vec3 blend) {\n  return min(base + blend, vec3(1.0));\n}\nvec3 blendHardLight(vec3 base, vec3 blend) { return blendOverlay(blend, base); }\nvec3 blendGlow(vec3 base, vec3 blend) { return blendReflect(blend, base); }\nfloat blendVividLight(float base, float blend) {\n  return (blend < 0.5) ? blendColorBurn(base, (2.0 * blend)) : blendColorDodge(base, (2.0 * (blend - 0.5)));\n}\nvec3 blendVividLight(vec3 base, vec3 blend) {\n  return vec3(blendVividLight(base.r, blend.r), blendVividLight(base.g, blend.g), blendVividLight(base.b, blend.b));\n}\nfloat blendHardMix(float base, float blend) {\n  return (blendVividLight(base, blend) < 0.5) ? 0.0 : 1.0;\n}\nvec3 blendHardMix(vec3 base, vec3 blend) {\n  return vec3(blendHardMix(base.r, blend.r), blendHardMix(base.g, blend.g), blendHardMix(base.b, blend.b));\n}\nfloat blendLinearLight(float base, float blend) {\n  return blend < 0.5 ? blendLinearBurn(base, (2.0 * blend)) : blendLinearDodge(base, (2.0 * (blend - 0.5)));\n}\nvec3 blendLinearLight(vec3 base, vec3 blend) {\n  return vec3(blendLinearLight(base.r, blend.r), blendLinearLight(base.g, blend.g), blendLinearLight(base.b, blend.b));\n}\nfloat blendPinLight(float base, float blend) {\n  return (blend < 0.5) ? blendDarken(base, (2.0 * blend)) : blendLighten(base, (2.0 * (blend - 0.5)));\n}\nvec3 blendPinLight(vec3 base, vec3 blend) {\n  return vec3(blendPinLight(base.r, blend.r), blendPinLight(base.g, blend.g), blendPinLight(base.b, blend.b));\n}\n\n// 3-argument version of blendMode\nvec3 blendMode(int mode, vec3 base, vec3 blend) {\n  if (mode == 1) return blendAdd(base, blend);\n  else if (mode == 2) return blendAverage(base, blend);\n  else if (mode == 3) return blendColorBurn(base, blend);\n  else if (mode == 4) return blendColorDodge(base, blend);\n  else if (mode == 5) return blendDarken(base, blend);\n  else if (mode == 6) return blendDifference(base, blend);\n  else if (mode == 7) return blendExclusion(base, blend);\n  else if (mode == 8) return blendGlow(base, blend);\n  else if (mode == 9) return blendHardLight(base, blend);\n  else if (mode == 10) return blendHardMix(base, blend);\n  else if (mode == 11) return blendLighten(base, blend);\n  else if (mode == 12) return blendLinearBurn(base, blend);\n  else if (mode == 13) return blendLinearDodge(base, blend);\n  else if (mode == 14) return blendLinearLight(base, blend);\n  else if (mode == 15) return blendMultiply(base, blend);\n  else if (mode == 16) return blendNegation(base, blend);\n  else if (mode == 17) return blendNormal(base, blend);\n  else if (mode == 18) return blendOverlay(base, blend);\n  else if (mode == 19) return blendPhoenix(base, blend);\n  else if (mode == 20) return blendPinLight(base, blend);\n  else if (mode == 21) return blendReflect(base, blend);\n  else if (mode == 22) return blendScreen(base, blend);\n  else if (mode == 23) return blendSoftLight(base, blend);\n  else if (mode == 24) return blendSubtract(base, blend);\n  else if (mode == 25) return blendVividLight(base, blend);\n  else return vec3(0.,0.,0.);\n}\n\n// 4-argument version (handles the opacity mapping beautifully with mix!)\nvec3 blendMode(int mode, vec3 base, vec3 blend, float opacity) {\n    return mix(base, blendMode(mode, base, blend), opacity);\n}\n\nvoid main() {\n  // Base Layer (t1)\n  vec4 s1 = vec4(0.0);\n  if (alpha1 > 0.0) {\n      s1 = IMG_THIS_PIXEL(t1);\n  }\n  float a = s1.a * alpha1;\n  vec3 rgb = s1.rgb * a;\n  \n  // Layer 2\n  if (alpha2 > 0.0) {\n      vec4 s2 = IMG_THIS_PIXEL(t2);\n      float ea = s2.a * alpha2;\n      if (ea > 0.0) {\n          rgb = blendMode(mode1, rgb, s2.rgb, ea);\n          a = a + ea * (1.0 - a);\n      }\n  }\n\n  // Layer 3\n  if (alpha3 > 0.0) {\n      vec4 s3 = IMG_THIS_PIXEL(t3);\n      float ea = s3.a * alpha3;\n      if (ea > 0.0) {\n          rgb = blendMode(mode2, rgb, s3.rgb, ea);\n          a = a + ea * (1.0 - a);\n      }\n  }\n\n  // Layer 4\n  if (alpha4 > 0.0) {\n      vec4 s4 = IMG_THIS_PIXEL(t4);\n      float ea = s4.a * alpha4;\n      if (ea > 0.0) {\n          rgb = blendMode(mode3, rgb, s4.rgb, ea);\n          a = a + ea * (1.0 - a);\n      }\n  }\n\n  // Layer 5\n  if (alpha5 > 0.0) {\n      vec4 s5 = IMG_THIS_PIXEL(t5);\n      float ea = s5.a * alpha5;\n      if (ea > 0.0) {\n          rgb = blendMode(mode4, rgb, s5.rgb, ea);\n          a = a + ea * (1.0 - a);\n      }\n  }\n\n  // Layer 6\n  if (alpha6 > 0.0) {\n      vec4 s6 = IMG_THIS_PIXEL(t6);\n      float ea = s6.a * alpha6;\n      if (ea > 0.0) {\n          rgb = blendMode(mode5, rgb, s6.rgb, ea);\n          a = a + ea * (1.0 - a);\n      }\n  }\n\n  // Layer 7\n  if (alpha7 > 0.0) {\n      vec4 s7 = IMG_THIS_PIXEL(t7);\n      float ea = s7.a * alpha7;\n      if (ea > 0.0) {\n          rgb = blendMode(mode6, rgb, s7.rgb, ea);\n          a = a + ea * (1.0 - a);\n      }\n  }\n\n  // Layer 8\n  if (alpha8 > 0.0) {\n      vec4 s8 = IMG_THIS_PIXEL(t8);\n      float ea = s8.a * alpha8;\n      if (ea > 0.0) {\n          rgb = blendMode(mode7, rgb, s8.rgb, ea);\n          a = a + ea * (1.0 - a);\n      }\n  }\n\n  gl_FragColor = vec4(rgb, a);\n}","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/utility/Video Mixer.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"t1","Exposed":"t1","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":1,"Hidden":false,"Custom":"t2","Exposed":"t2","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":2,"Hidden":false,"Custom":"t3","Exposed":"t3","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":3,"Hidden":false,"Custom":"t4","Exposed":"t4","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":4,"Hidden":false,"Custom":"t5","Exposed":"t5","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":5,"Hidden":false,"Custom":"t6","Exposed":"t6","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":6,"Hidden":false,"Custom":"t7","Exposed":"t7","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":7,"Hidden":false,"Custom":"t8","Exposed":"t8","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":8,"Hidden":true,"Custom":"alpha1","Exposed":"alpha1","Value":{"Float":1.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":9,"Hidden":true,"Custom":"alpha2","Exposed":"alpha2","Value":{"Float":1.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":10,"Hidden":true,"Custom":"alpha3","Exposed":"alpha3","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":11,"Hidden":true,"Custom":"alpha4","Exposed":"alpha4","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":12,"Hidden":true,"Custom":"alpha5","Exposed":"alpha5","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":13,"Hidden":true,"Custom":"alpha6","Exposed":"alpha6","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":14,"Hidden":true,"Custom":"alpha7","Exposed":"alpha7","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":15,"Hidden":true,"Custom":"alpha8","Exposed":"alpha8","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":16,"Hidden":true,"Custom":"mode1","Exposed":"mode1","Value":{"Int":9},"Init":{"Int":17},"Domain":{"Int":{"Values":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"Values":[["Add",{"Int":1}],["Average",{"Int":2}],["Color Burn",{"Int":3}],["Color Dodge",{"Int":4}],["Darken",{"Int":5}],["Difference",{"Int":6}],["Exclusion",{"Int":7}],["Glow",{"Int":8}],["Hard Light",{"Int":9}],["Hard Mix",{"Int":10}],["Lighten",{"Int":11}],["Linear Burn",{"Int":12}],["Linear Dodge",{"Int":13}],["Linear Light",{"Int":14}],["Multiply",{"Int":15}],["Negation",{"Int":16}],["Normal",{"Int":17}],["Overlay",{"Int":18}],["Phoenix",{"Int":19}],["Pin Light",{"Int":20}],["Reflect",{"Int":21}],["Screen",{"Int":22}],["Soft Light",{"Int":23}],["Subtract",{"Int":24}],["Vivid Light",{"Int":25}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":17,"Hidden":true,"Custom":"mode2","Exposed":"mode2","Value":{"Int":17},"Init":{"Int":17},"Domain":{"Int":{"Values":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"Values":[["Add",{"Int":1}],["Average",{"Int":2}],["Color Burn",{"Int":3}],["Color Dodge",{"Int":4}],["Darken",{"Int":5}],["Difference",{"Int":6}],["Exclusion",{"Int":7}],["Glow",{"Int":8}],["Hard Light",{"Int":9}],["Hard Mix",{"Int":10}],["Lighten",{"Int":11}],["Linear Burn",{"Int":12}],["Linear Dodge",{"Int":13}],["Linear Light",{"Int":14}],["Multiply",{"Int":15}],["Negation",{"Int":16}],["Normal",{"Int":17}],["Overlay",{"Int":18}],["Phoenix",{"Int":19}],["Pin Light",{"Int":20}],["Reflect",{"Int":21}],["Screen",{"Int":22}],["Soft Light",{"Int":23}],["Subtract",{"Int":24}],["Vivid Light",{"Int":25}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":18,"Hidden":true,"Custom":"mode3","Exposed":"mode3","Value":{"Int":17},"Init":{"Int":17},"Domain":{"Int":{"Values":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"Values":[["Add",{"Int":1}],["Average",{"Int":2}],["Color Burn",{"Int":3}],["Color Dodge",{"Int":4}],["Darken",{"Int":5}],["Difference",{"Int":6}],["Exclusion",{"Int":7}],["Glow",{"Int":8}],["Hard Light",{"Int":9}],["Hard Mix",{"Int":10}],["Lighten",{"Int":11}],["Linear Burn",{"Int":12}],["Linear Dodge",{"Int":13}],["Linear Light",{"Int":14}],["Multiply",{"Int":15}],["Negation",{"Int":16}],["Normal",{"Int":17}],["Overlay",{"Int":18}],["Phoenix",{"Int":19}],["Pin Light",{"Int":20}],["Reflect",{"Int":21}],["Screen",{"Int":22}],["Soft Light",{"Int":23}],["Subtract",{"Int":24}],["Vivid Light",{"Int":25}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":19,"Hidden":true,"Custom":"mode4","Exposed":"mode4","Value":{"Int":17},"Init":{"Int":17},"Domain":{"Int":{"Values":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"Values":[["Add",{"Int":1}],["Average",{"Int":2}],["Color Burn",{"Int":3}],["Color Dodge",{"Int":4}],["Darken",{"Int":5}],["Difference",{"Int":6}],["Exclusion",{"Int":7}],["Glow",{"Int":8}],["Hard Light",{"Int":9}],["Hard Mix",{"Int":10}],["Lighten",{"Int":11}],["Linear Burn",{"Int":12}],["Linear Dodge",{"Int":13}],["Linear Light",{"Int":14}],["Multiply",{"Int":15}],["Negation",{"Int":16}],["Normal",{"Int":17}],["Overlay",{"Int":18}],["Phoenix",{"Int":19}],["Pin Light",{"Int":20}],["Reflect",{"Int":21}],["Screen",{"Int":22}],["Soft Light",{"Int":23}],["Subtract",{"Int":24}],["Vivid Light",{"Int":25}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":20,"Hidden":true,"Custom":"mode5","Exposed":"mode5","Value":{"Int":17},"Init":{"Int":17},"Domain":{"Int":{"Values":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"Values":[["Add",{"Int":1}],["Average",{"Int":2}],["Color Burn",{"Int":3}],["Color Dodge",{"Int":4}],["Darken",{"Int":5}],["Difference",{"Int":6}],["Exclusion",{"Int":7}],["Glow",{"Int":8}],["Hard Light",{"Int":9}],["Hard Mix",{"Int":10}],["Lighten",{"Int":11}],["Linear Burn",{"Int":12}],["Linear Dodge",{"Int":13}],["Linear Light",{"Int":14}],["Multiply",{"Int":15}],["Negation",{"Int":16}],["Normal",{"Int":17}],["Overlay",{"Int":18}],["Phoenix",{"Int":19}],["Pin Light",{"Int":20}],["Reflect",{"Int":21}],["Screen",{"Int":22}],["Soft Light",{"Int":23}],["Subtract",{"Int":24}],["Vivid Light",{"Int":25}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":21,"Hidden":true,"Custom":"mode6","Exposed":"mode6","Value":{"Int":17},"Init":{"Int":17},"Domain":{"Int":{"Values":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"Values":[["Add",{"Int":1}],["Average",{"Int":2}],["Color Burn",{"Int":3}],["Color Dodge",{"Int":4}],["Darken",{"Int":5}],["Difference",{"Int":6}],["Exclusion",{"Int":7}],["Glow",{"Int":8}],["Hard Light",{"Int":9}],["Hard Mix",{"Int":10}],["Lighten",{"Int":11}],["Linear Burn",{"Int":12}],["Linear Dodge",{"Int":13}],["Linear Light",{"Int":14}],["Multiply",{"Int":15}],["Negation",{"Int":16}],["Normal",{"Int":17}],["Overlay",{"Int":18}],["Phoenix",{"Int":19}],["Pin Light",{"Int":20}],["Reflect",{"Int":21}],["Screen",{"Int":22}],["Soft Light",{"Int":23}],["Subtract",{"Int":24}],["Vivid Light",{"Int":25}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":22,"Hidden":true,"Custom":"mode7","Exposed":"mode7","Value":{"Int":17},"Init":{"Int":17},"Domain":{"Int":{"Values":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"Values":[["Add",{"Int":1}],["Average",{"Int":2}],["Color Burn",{"Int":3}],["Color Dodge",{"Int":4}],["Darken",{"Int":5}],["Difference",{"Int":6}],["Exclusion",{"Int":7}],["Glow",{"Int":8}],["Hard Light",{"Int":9}],["Hard Mix",{"Int":10}],["Lighten",{"Int":11}],["Linear Burn",{"Int":12}],["Linear Dodge",{"Int":13}],["Linear Light",{"Int":14}],["Multiply",{"Int":15}],["Negation",{"Int":16}],["Normal",{"Int":17}],["Overlay",{"Int":18}],["Phoenix",{"Int":19}],["Pin Light",{"Int":20}],["Reflect",{"Int":21}],["Screen",{"Int":22}],["Soft Light",{"Int":23}],["Subtract",{"Int":24}],["Vivid Light",{"Int":25}]],"FolderPort":"","FileExtensions":""}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out","Address":"Window:/"}]},{"uuid":"7be51631-fb4b-4152-9ca7-86fdafa8a989","ObjectName":"Display","id":20,"Metadata":{"ScriptingName":"Text Box","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":10584000000,"Height":300.0,"StartOffset":0,"LoopDuration":10584000000,"Pos":[-827.5683309009227,-478.7178486312319],"Size":[496.0,98.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"9ae797ea-d94c-4792-acec-9ec1932bae5d","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"in","Exposed":"in","Value":{"String":"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\nhr { height: 1px; border-width: 0; }\nli.unchecked::marker { content: \"\\2610\"; }\nli.checked::marker { content: \"\\2612\"; }\n</style></head><body style=\" font-family:'Ubuntu'; font-size:13px; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">This example is a more advanced example of visual effect combining many shaders<br />in one nic visual.<br />It also features an example of feedback : the output of pixel sort is fed back at the <br />next frame to the second input of Colour Distance.<br /><br />Credits to Vidvox, and all the authors of the vairious shaders in this example!</p></body></html>"},"Init":{"String":"(Double-click to edit)"},"Domain":{}},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Auto-reflow","Exposed":"auto-reflow","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}}],"Outlets":[]}],"SmallViewRack":[{"Processes":[1,2,3,4,5,6,7,8,10,12,13,14,15,16,17,18,19,20],"Process":null,"Height":200.0,"Nodal":true}],"FullViewRack":[{"Process":0,"Nodal":true}],"DefaultDuration":10584000000,"MinDuration":10584000000,"MaxDuration":11113200000,"GuiDuration":11642400000,"Speed":1.0,"Rigidity":false,"MinNull":false,"MaxInf":true,"Signatures":[[0,[4,4]]],"StartState":0,"EndState":1,"StartDate":0,"HeightPercentage":0.0,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":7525985.295716857,"Center":4688568325,"NodalCenter":[18.33743647867706,-441.9782972937705],"NodalScale":0.5579817731496685,"ViewMode":1,"SmallViewShown":true,"HasSignature":true},"StartTimeNode":{"ObjectName":"Scenario::TimeSyncModel","id":0,"Metadata":{"ScriptingName":"Sync.start","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":0,"Events":[0],"MusicalSync":-1.0,"AutoTrigger":false,"Start":true,"Active":false,"Expression":" { true == false } "},"EndTimeNode":{"ObjectName":"Scenario::TimeSyncModel","id":1,"Metadata":{"ScriptingName":"Sync.end","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":10584000000,"Events":[1],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":true,"Expression":" { true == false } "},"StartEvent":{"ObjectName":"Scenario::EventModel","id":0,"Metadata":{"ScriptingName":"Event.start","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":0,"States":[0],"Condition":"","Date":0,"Offset":0},"EndEvent":{"ObjectName":"Scenario::EventModel","id":1,"Metadata":{"ScriptingName":"Event.end","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":1,"States":[1],"Condition":"","Date":10584000000,"Offset":0},"StartState":{"ObjectName":"Scenario::StateModel","id":0,"Metadata":{"ScriptingName":"State.start","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":0,"PreviousConstraint":null,"NextConstraint":0,"HeightPercentage":0.0,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"StateProcesses":[]},"EndState":{"ObjectName":"Scenario::StateModel","id":1,"Metadata":{"ScriptingName":"State.end","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":1,"PreviousConstraint":0,"NextConstraint":null,"HeightPercentage":0.0,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"StateProcesses":[]}},"Speed":1.0,"Cables":[{"ObjectName":"Process::Cable","id":1,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":1},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":2},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":4,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":3},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":5},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":7,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":5},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":7},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":5,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":2},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":6},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":6,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":6},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":4},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":8,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":4},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":8},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":9,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":8},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":3},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":22,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_expsmooth","ObjectId":17},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":12},{"ObjectName":"Inlet","ObjectId":2}]},{"ObjectName":"Process::Cable","id":16,"Type":2,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":10},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":12},{"ObjectName":"Inlet","ObjectId":1}]},{"ObjectName":"Process::Cable","id":17,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":12},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":13},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":18,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":13},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":10},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":19,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":10},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":14},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":20,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":14},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":15},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":21,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"LFO","ObjectId":16},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_expsmooth","ObjectId":17},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":23,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":18},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":12},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":24,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":15},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":19},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":25,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":7},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":19},{"ObjectName":"Inlet","ObjectId":1}]}],"BusIntervals":[]},"Plugins":[{"uuid":"1f923578-08c3-49be-9ba9-69c144ee2e32","Refresh":false,"Reconnect":false,"MidiRatio":1.0},{"uuid":"6e610e1f-9de2-4c36-90dd-0ef570002a21","RootNode":{},"Children":[{"Device":{"Name":"Window","Protocol":"5a181207-7d40-4ad8-814e-879fcdf8cc31","Mode":0,"Outputs":[],"InputWidth":1920,"InputHeight":1080,"SwapchainFlag":0,"SwapchainFormat":0},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"String":""},"Domain":{"String":{}},"Name":"screen"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[100.0,100.0]},"Domain":{},"Name":"position"}},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"cursor"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Float":{"Min":0.0,"Max":1.0}},"Name":"scaled"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Float":{"Min":0.0,"Max":1.0}},"Name":"gl"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Vec2f":{"Min":[0.0,0.0],"Max":[1280.0,720.0],"Values":[[],[]]}},"Name":"absolute"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Bool":false},"Domain":{},"Name":"visible"}}]},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"tablet"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Float":{"Min":0.0,"Max":1.0}},"Name":"scaled"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Vec2f":{"Min":[0.0,0.0],"Max":[1280.0,720.0],"Values":[[],[]]}},"Name":"absolute"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Int":0},"Domain":{},"Name":"z"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{},"Name":"pressure"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-1.0,"Max":1.0}},"Name":"tangential"}},{"Address":{"ioType":"<->","ClipMode":"Free","Unit":"angle.degree","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-180.0,"Max":180.0}},"Name":"rotation"}},{"Address":{"ioType":"<->","ClipMode":"Free","Unit":"angle.degree","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-60.0,"Max":60.0}},"Name":"tilt_x"}},{"Address":{"ioType":"<->","ClipMode":"Free","Unit":"angle.degree","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-60.0,"Max":60.0}},"Name":"tilt_y"}}]},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[1280.0,720.0]},"Domain":{},"Name":"size"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{},"Extended":{"description":"Set to [0, 0] to use the viewport's size"},"Name":"rendersize"}},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"key"},"Children":[{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"press"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Int":0},"Domain":{},"Name":"code"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"String":""},"Domain":{},"Name":"text"}}]},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"release"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Int":0},"Domain":{},"Name":"code"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"String":""},"Domain":{},"Name":"text"}}]}]},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Bool":false},"Domain":{},"Name":"fullscreen"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{},"Name":"fps"}}]}]},{"uuid":"05e72689-e02c-4c9d-a0bf-fe84c32d3d96","Data":""},{"uuid":"aac1402f-6851-4a1a-ab50-5f213acd1262","Name":"","Author":"","Description":"","Url":"","Platforms":"","Created":"","LastSaved":"2026-09-29T02:40:00.689Z","Thumbnail":"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","AutomaticThumbnail":true}],"Version":5,"Commit":"5bbabca73a6a56659aeedfb7129e6de35e65ba7c","Tag":"3.8.2"}