{
    "id": "hydra",
    "nodes": [
    {
        "id": "out",
        "out": "out",
        "nodes": [
            {"id": "self", "ref": "arg", "value": "self"},
            {"id": "tex", "ref": "arg", "value": "tex"},
            {"id": "args_tex", "ref": "array"},
            {"id": "args_no_tex", "ref": "array"},
            {"id": "args", "ref": "if"},
            {"id": "out_fn", "value": "out"},
            {"id": "out", "ref": "call"}
        ],
        "edges": [
            {"from": "tex", "to": "args_tex", "as": "a0"},
            {"from": "tex", "to": "args", "as": "pred"},
            {"from": "args_tex", "to": "args", "as": "true"},
            {"from": "args_no_tex", "to": "args", "as": "false"},
            {"from": "args", "to": "out", "as": "args"},
            {"from": "self", "to": "out", "as": "self"},
            {"from": "out_fn", "to": "out", "as": "fn"}
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "noise",
            "type": "src",
            "inputs": [
                {
                    "type": "float",
                    "name": "scale",
                    "default": 10
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0.1
                }
            ],
            "glsl": "   return vec4(vec3(_noise(vec3(_st*scale, offset*time))), 1.0);"
        },
        "id": "noise",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scale"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "noise",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scale",
                "type": "float",
                "ref": "arg",
                "value": "scale"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "voronoi",
            "type": "src",
            "inputs": [
                {
                    "type": "float",
                    "name": "scale",
                    "default": 5
                },
                {
                    "type": "float",
                    "name": "speed",
                    "default": 0.3
                },
                {
                    "type": "float",
                    "name": "blending",
                    "default": 0.3
                }
            ],
            "glsl": "   vec3 color = vec3(.0);\n   // Scale\n   _st *= scale;\n   // Tile the space\n   vec2 i_st = floor(_st);\n   vec2 f_st = fract(_st);\n   float m_dist = 10.;  // minimun distance\n   vec2 m_point;        // minimum point\n   for (int j=-1; j<=1; j++ ) {\n   for (int i=-1; i<=1; i++ ) {\n   vec2 neighbor = vec2(float(i),float(j));\n   vec2 p = i_st + neighbor;\n   vec2 point = fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453);\n   point = 0.5 + 0.5*sin(time*speed + 6.2831*point);\n   vec2 diff = neighbor + point - f_st;\n   float dist = length(diff);\n   if( dist < m_dist ) {\n   m_dist = dist;\n   m_point = point;\n   }\n   }\n   }\n   // Assign a color using the closest point position\n   color += dot(m_point,vec2(.3,.6));\n   color *= 1.0 - blending*m_dist;\n   return vec4(color, 1.0);"
        },
        "id": "voronoi",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scale"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "speed"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "blending"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "voronoi",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scale",
                "type": "float",
                "ref": "arg",
                "value": "scale"
            },
            {
                "id": "speed",
                "type": "float",
                "ref": "arg",
                "value": "speed"
            },
            {
                "id": "blending",
                "type": "float",
                "ref": "arg",
                "value": "blending"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "osc",
            "type": "src",
            "inputs": [
                {
                    "type": "float",
                    "name": "frequency",
                    "default": 60
                },
                {
                    "type": "float",
                    "name": "sync",
                    "default": 0.1
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   vec2 st = _st;\n   float r = sin((st.x-offset/frequency+time*sync)*frequency)*0.5  + 0.5;\n   float g = sin((st.x+time*sync)*frequency)*0.5 + 0.5;\n   float b = sin((st.x+offset/frequency+time*sync)*frequency)*0.5  + 0.5;\n   return vec4(r, g, b, 1.0);"
        },
        "id": "osc",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "frequency"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "sync"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "osc",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "frequency",
                "type": "float",
                "ref": "arg",
                "value": "frequency"
            },
            {
                "id": "sync",
                "type": "float",
                "ref": "arg",
                "value": "sync"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "shape",
            "type": "src",
            "inputs": [
                {
                    "type": "float",
                    "name": "sides",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "radius",
                    "default": 0.3
                },
                {
                    "type": "float",
                    "name": "smoothing",
                    "default": 0.01
                }
            ],
            "glsl": "   vec2 st = _st * 2. - 1.;\n   // Angle and radius from the current pixel\n   float a = atan(st.x,st.y)+3.1416;\n   float r = (2.*3.1416)/sides;\n   float d = cos(floor(.5+a/r)*r-a)*length(st);\n   return vec4(vec3(1.0-smoothstep(radius,radius + smoothing + 0.0000001,d)), 1.0);"
        },
        "id": "shape",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "sides"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "radius"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "smoothing"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "shape",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "sides",
                "type": "float",
                "ref": "arg",
                "value": "sides"
            },
            {
                "id": "radius",
                "type": "float",
                "ref": "arg",
                "value": "radius"
            },
            {
                "id": "smoothing",
                "type": "float",
                "ref": "arg",
                "value": "smoothing"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "gradient",
            "type": "src",
            "inputs": [
                {
                    "type": "float",
                    "name": "speed",
                    "default": 0
                }
            ],
            "glsl": "   return vec4(_st, sin(time*speed), 1.0);"
        },
        "id": "gradient",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "speed"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "gradient",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "speed",
                "type": "float",
                "ref": "arg",
                "value": "speed"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "src",
            "type": "src",
            "inputs": [
                {
                    "type": "sampler2D",
                    "name": "tex",
                    "default": null
                }
            ],
            "glsl": "   //  vec2 uv = gl_FragCoord.xy/vec2(1280., 720.);\n   return texture2D(tex, fract(_st));"
        },
        "id": "src",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "src",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "type": "sampler2D",
                "ref": "arg",
                "value": "tex"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "solid",
            "type": "src",
            "inputs": [
                {
                    "type": "float",
                    "name": "r",
                    "default": 0
                },
                {
                    "type": "float",
                    "name": "g",
                    "default": 0
                },
                {
                    "type": "float",
                    "name": "b",
                    "default": 0
                },
                {
                    "type": "float",
                    "name": "a",
                    "default": 1
                }
            ],
            "glsl": "   return vec4(r, g, b, a);"
        },
        "id": "solid",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "r"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "g"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "b"
            },
            {
                "as": "arg3",
                "to": "args",
                "from": "a"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "solid",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "r",
                "type": "float",
                "ref": "arg",
                "value": "r"
            },
            {
                "id": "g",
                "type": "float",
                "ref": "arg",
                "value": "g"
            },
            {
                "id": "b",
                "type": "float",
                "ref": "arg",
                "value": "b"
            },
            {
                "id": "a",
                "type": "float",
                "ref": "arg",
                "value": "a"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "rotate",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "angle",
                    "default": 10
                },
                {
                    "type": "float",
                    "name": "speed",
                    "default": 0
                }
            ],
            "glsl": "   vec2 xy = _st - vec2(0.5);\n   float ang = angle + speed *time;\n   xy = mat2(cos(ang),-sin(ang), sin(ang),cos(ang))*xy;\n   xy += 0.5;\n   return xy;"
        },
        "id": "rotate",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "angle"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "speed"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "rotate",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "angle",
                "type": "float",
                "ref": "arg",
                "value": "angle"
            },
            {
                "id": "speed",
                "type": "float",
                "ref": "arg",
                "value": "speed"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "scale",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 1.5
                },
                {
                    "type": "float",
                    "name": "xMult",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "yMult",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "offsetX",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "offsetY",
                    "default": 0.5
                }
            ],
            "glsl": "   vec2 xy = _st - vec2(offsetX, offsetY);\n   xy*=(1.0/vec2(amount*xMult, amount*yMult));\n   xy+=vec2(offsetX, offsetY);\n   return xy;\n   "
        },
        "id": "scale",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "amount"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "xMult"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "yMult"
            },
            {
                "as": "arg3",
                "to": "args",
                "from": "offsetX"
            },
            {
                "as": "arg4",
                "to": "args",
                "from": "offsetY"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "scale",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            },
            {
                "id": "xMult",
                "type": "float",
                "ref": "arg",
                "value": "xMult"
            },
            {
                "id": "yMult",
                "type": "float",
                "ref": "arg",
                "value": "yMult"
            },
            {
                "id": "offsetX",
                "type": "float",
                "ref": "arg",
                "value": "offsetX"
            },
            {
                "id": "offsetY",
                "type": "float",
                "ref": "arg",
                "value": "offsetY"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "pixelate",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "pixelX",
                    "default": 20
                },
                {
                    "type": "float",
                    "name": "pixelY",
                    "default": 20
                }
            ],
            "glsl": "   vec2 xy = vec2(pixelX, pixelY);\n   return (floor(_st * xy) + 0.5)/xy;"
        },
        "id": "pixelate",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "pixelX"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "pixelY"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "pixelate",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "pixelX",
                "type": "float",
                "ref": "arg",
                "value": "pixelX"
            },
            {
                "id": "pixelY",
                "type": "float",
                "ref": "arg",
                "value": "pixelY"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "posterize",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "bins",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "gamma",
                    "default": 0.6
                }
            ],
            "glsl": "   vec4 c2 = pow(_c0, vec4(gamma));\n   c2 *= vec4(bins);\n   c2 = floor(c2);\n   c2/= vec4(bins);\n   c2 = pow(c2, vec4(1.0/gamma));\n   return vec4(c2.xyz, _c0.a);"
        },
        "id": "posterize",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "bins"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "gamma"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "posterize",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "bins",
                "type": "float",
                "ref": "arg",
                "value": "bins"
            },
            {
                "id": "gamma",
                "type": "float",
                "ref": "arg",
                "value": "gamma"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "shift",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "r",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "g",
                    "default": 0
                },
                {
                    "type": "float",
                    "name": "b",
                    "default": 0
                },
                {
                    "type": "float",
                    "name": "a",
                    "default": 0
                }
            ],
            "glsl": "   vec4 c2 = vec4(_c0);\n   c2.r = fract(c2.r + r);\n   c2.g = fract(c2.g + g);\n   c2.b = fract(c2.b + b);\n   c2.a = fract(c2.a + a);\n   return vec4(c2.rgba);"
        },
        "id": "shift",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "r"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "g"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "b"
            },
            {
                "as": "arg3",
                "to": "args",
                "from": "a"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "shift",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "r",
                "type": "float",
                "ref": "arg",
                "value": "r"
            },
            {
                "id": "g",
                "type": "float",
                "ref": "arg",
                "value": "g"
            },
            {
                "id": "b",
                "type": "float",
                "ref": "arg",
                "value": "b"
            },
            {
                "id": "a",
                "type": "float",
                "ref": "arg",
                "value": "a"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "repeat",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "repeatX",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "repeatY",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "offsetX",
                    "default": 0
                },
                {
                    "type": "float",
                    "name": "offsetY",
                    "default": 0
                }
            ],
            "glsl": "   vec2 st = _st * vec2(repeatX, repeatY);\n   st.x += step(1., mod(st.y,2.0)) * offsetX;\n   st.y += step(1., mod(st.x,2.0)) * offsetY;\n   return fract(st);"
        },
        "id": "repeat",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "repeatX"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "repeatY"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "offsetX"
            },
            {
                "as": "arg3",
                "to": "args",
                "from": "offsetY"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "repeat",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "repeatX",
                "type": "float",
                "ref": "arg",
                "value": "repeatX"
            },
            {
                "id": "repeatY",
                "type": "float",
                "ref": "arg",
                "value": "repeatY"
            },
            {
                "id": "offsetX",
                "type": "float",
                "ref": "arg",
                "value": "offsetX"
            },
            {
                "id": "offsetY",
                "type": "float",
                "ref": "arg",
                "value": "offsetY"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateRepeat",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "repeatX",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "repeatY",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "offsetX",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "offsetY",
                    "default": 0.5
                }
            ],
            "glsl": "   vec2 st = _st * vec2(repeatX, repeatY);\n   st.x += step(1., mod(st.y,2.0)) + _c0.r * offsetX;\n   st.y += step(1., mod(st.x,2.0)) + _c0.g * offsetY;\n   return fract(st);"
        },
        "id": "modulateRepeat",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "repeatX"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "repeatY"
            },
            {
                "as": "arg3",
                "to": "args",
                "from": "offsetX"
            },
            {
                "as": "arg4",
                "to": "args",
                "from": "offsetY"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateRepeat",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "repeatX",
                "type": "float",
                "ref": "arg",
                "value": "repeatX"
            },
            {
                "id": "repeatY",
                "type": "float",
                "ref": "arg",
                "value": "repeatY"
            },
            {
                "id": "offsetX",
                "type": "float",
                "ref": "arg",
                "value": "offsetX"
            },
            {
                "id": "offsetY",
                "type": "float",
                "ref": "arg",
                "value": "offsetY"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "repeatX",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "reps",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   vec2 st = _st * vec2(reps, 1.0);\n   //  float f =  mod(_st.y,2.0);\n   st.y += step(1., mod(st.x,2.0))* offset;\n   return fract(st);"
        },
        "id": "repeatX",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "reps"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "repeatX",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "reps",
                "type": "float",
                "ref": "arg",
                "value": "reps"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateRepeatX",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "reps",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0.5
                }
            ],
            "glsl": "   vec2 st = _st * vec2(reps, 1.0);\n   //  float f =  mod(_st.y,2.0);\n   st.y += step(1., mod(st.x,2.0)) + _c0.r * offset;\n   return fract(st);"
        },
        "id": "modulateRepeatX",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "reps"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateRepeatX",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "reps",
                "type": "float",
                "ref": "arg",
                "value": "reps"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "repeatY",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "reps",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   vec2 st = _st * vec2(1.0, reps);\n   //  float f =  mod(_st.y,2.0);\n   st.x += step(1., mod(st.y,2.0))* offset;\n   return fract(st);"
        },
        "id": "repeatY",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "reps"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "repeatY",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "reps",
                "type": "float",
                "ref": "arg",
                "value": "reps"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateRepeatY",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "reps",
                    "default": 3
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0.5
                }
            ],
            "glsl": "   vec2 st = _st * vec2(reps, 1.0);\n   //  float f =  mod(_st.y,2.0);\n   st.x += step(1., mod(st.y,2.0)) + _c0.r * offset;\n   return fract(st);"
        },
        "id": "modulateRepeatY",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "reps"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateRepeatY",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "reps",
                "type": "float",
                "ref": "arg",
                "value": "reps"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "kaleid",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "nSides",
                    "default": 4
                }
            ],
            "glsl": "   vec2 st = _st;\n   st -= 0.5;\n   float r = length(st);\n   float a = atan(st.y, st.x);\n   float pi = 2.*3.1416;\n   a = mod(a,pi/nSides);\n   a = abs(a-pi/nSides/2.);\n   return r*vec2(cos(a), sin(a));"
        },
        "id": "kaleid",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "nSides"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "kaleid",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "nSides",
                "type": "float",
                "ref": "arg",
                "value": "nSides"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateKaleid",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "nSides",
                    "default": 4
                }
            ],
            "glsl": "   vec2 st = _st - 0.5;\n   float r = length(st);\n   float a = atan(st.y, st.x);\n   float pi = 2.*3.1416;\n   a = mod(a,pi/nSides);\n   a = abs(a-pi/nSides/2.);\n   return (_c0.r+r)*vec2(cos(a), sin(a));"
        },
        "id": "modulateKaleid",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "nSides"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateKaleid",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "nSides",
                "type": "float",
                "ref": "arg",
                "value": "nSides"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "scroll",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "scrollX",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "scrollY",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "speedX",
                    "default": 0
                },
                {
                    "type": "float",
                    "name": "speedY",
                    "default": 0
                }
            ],
            "glsl": "\n   _st.x += scrollX + time*speedX;\n   _st.y += scrollY + time*speedY;\n   return fract(_st);"
        },
        "id": "scroll",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scrollX"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "scrollY"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "speedX"
            },
            {
                "as": "arg3",
                "to": "args",
                "from": "speedY"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "scroll",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scrollX",
                "type": "float",
                "ref": "arg",
                "value": "scrollX"
            },
            {
                "id": "scrollY",
                "type": "float",
                "ref": "arg",
                "value": "scrollY"
            },
            {
                "id": "speedX",
                "type": "float",
                "ref": "arg",
                "value": "speedX"
            },
            {
                "id": "speedY",
                "type": "float",
                "ref": "arg",
                "value": "speedY"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "scrollX",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "scrollX",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "speed",
                    "default": 0
                }
            ],
            "glsl": "   _st.x += scrollX + time*speed;\n   return fract(_st);"
        },
        "id": "scrollX",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scrollX"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "speed"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "scrollX",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scrollX",
                "type": "float",
                "ref": "arg",
                "value": "scrollX"
            },
            {
                "id": "speed",
                "type": "float",
                "ref": "arg",
                "value": "speed"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateScrollX",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "scrollX",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "speed",
                    "default": 0
                }
            ],
            "glsl": "   _st.x += _c0.r*scrollX + time*speed;\n   return fract(_st);"
        },
        "id": "modulateScrollX",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "scrollX"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "speed"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateScrollX",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "scrollX",
                "type": "float",
                "ref": "arg",
                "value": "scrollX"
            },
            {
                "id": "speed",
                "type": "float",
                "ref": "arg",
                "value": "speed"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "scrollY",
            "type": "coord",
            "inputs": [
                {
                    "type": "float",
                    "name": "scrollY",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "speed",
                    "default": 0
                }
            ],
            "glsl": "   _st.y += scrollY + time*speed;\n   return fract(_st);"
        },
        "id": "scrollY",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scrollY"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "speed"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "scrollY",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scrollY",
                "type": "float",
                "ref": "arg",
                "value": "scrollY"
            },
            {
                "id": "speed",
                "type": "float",
                "ref": "arg",
                "value": "speed"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateScrollY",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "scrollY",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "speed",
                    "default": 0
                }
            ],
            "glsl": "   _st.y += _c0.r*scrollY + time*speed;\n   return fract(_st);"
        },
        "id": "modulateScrollY",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "scrollY"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "speed"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateScrollY",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "scrollY",
                "type": "float",
                "ref": "arg",
                "value": "scrollY"
            },
            {
                "id": "speed",
                "type": "float",
                "ref": "arg",
                "value": "speed"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "add",
            "type": "combine",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 1
                }
            ],
            "glsl": "   return (_c0+_c1)*amount + _c0*(1.0-amount);"
        },
        "id": "add",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "add",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "sub",
            "type": "combine",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 1
                }
            ],
            "glsl": "   return (_c0-_c1)*amount + _c0*(1.0-amount);"
        },
        "id": "sub",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "sub",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "layer",
            "type": "combine",
            "inputs": [],
            "glsl": "   return vec4(mix(_c0.rgb, _c1.rgb, _c1.a), clamp(_c0.a + _c1.a, 0.0, 1.0));"
        },
        "id": "layer",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "layer",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "blend",
            "type": "combine",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 0.5
                }
            ],
            "glsl": "   return _c0*(1.0-amount)+_c1*amount;"
        },
        "id": "blend",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "blend",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "mult",
            "type": "combine",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 1
                }
            ],
            "glsl": "   return _c0*(1.0-amount)+(_c0*_c1)*amount;"
        },
        "id": "mult",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "mult",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "diff",
            "type": "combine",
            "inputs": [],
            "glsl": "   return vec4(abs(_c0.rgb-_c1.rgb), max(_c0.a, _c1.a));"
        },
        "id": "diff",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "diff",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulate",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 0.1
                }
            ],
            "glsl": "   //  return fract(st+(_c0.xy-0.5)*amount);\n   return _st + _c0.xy*amount;"
        },
        "id": "modulate",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulate",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateScale",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "multiple",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 1
                }
            ],
            "glsl": "   vec2 xy = _st - vec2(0.5);\n   xy*=(1.0/vec2(offset + multiple*_c0.r, offset + multiple*_c0.g));\n   xy+=vec2(0.5);\n   return xy;"
        },
        "id": "modulateScale",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "multiple"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateScale",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "multiple",
                "type": "float",
                "ref": "arg",
                "value": "multiple"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulatePixelate",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "multiple",
                    "default": 10
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 3
                }
            ],
            "glsl": "   vec2 xy = vec2(offset + _c0.x*multiple, offset + _c0.y*multiple);\n   return (floor(_st * xy) + 0.5)/xy;"
        },
        "id": "modulatePixelate",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "multiple"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulatePixelate",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "multiple",
                "type": "float",
                "ref": "arg",
                "value": "multiple"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateRotate",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "multiple",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   vec2 xy = _st - vec2(0.5);\n   float angle = offset + _c0.x * multiple;\n   xy = mat2(cos(angle),-sin(angle), sin(angle),cos(angle))*xy;\n   xy += 0.5;\n   return xy;"
        },
        "id": "modulateRotate",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "multiple"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateRotate",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "multiple",
                "type": "float",
                "ref": "arg",
                "value": "multiple"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "modulateHue",
            "type": "combineCoord",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 1
                }
            ],
            "glsl": "   return _st + (vec2(_c0.g - _c0.r, _c0.b - _c0.g) * amount * 1.0/resolution);"
        },
        "id": "modulateHue",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "modulateHue",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "invert",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 1
                }
            ],
            "glsl": "   return vec4((1.0-_c0.rgb)*amount + _c0.rgb*(1.0-amount), _c0.a);"
        },
        "id": "invert",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "invert",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "contrast",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 1.6
                }
            ],
            "glsl": "   vec4 c = (_c0-vec4(0.5))*vec4(amount) + vec4(0.5);\n   return vec4(c.rgb, _c0.a);"
        },
        "id": "contrast",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "contrast",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "brightness",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 0.4
                }
            ],
            "glsl": "   return vec4(_c0.rgb + vec3(amount), _c0.a);"
        },
        "id": "brightness",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "brightness",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "mask",
            "type": "combine",
            "inputs": [],
            "glsl": "   float a = _luminance(_c1.rgb);\n  return vec4(_c0.rgb*a, a*_c0.a);"
        },
        "id": "mask",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "tex"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "mask",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "tex",
                "value": "texture",
                "ref": "arg"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "luma",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "threshold",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "tolerance",
                    "default": 0.1
                }
            ],
            "glsl": "   float a = smoothstep(threshold-(tolerance+0.0000001), threshold+(tolerance+0.0000001), _luminance(_c0.rgb));\n   return vec4(_c0.rgb*a, a);"
        },
        "id": "luma",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "threshold"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "tolerance"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "luma",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "threshold",
                "type": "float",
                "ref": "arg",
                "value": "threshold"
            },
            {
                "id": "tolerance",
                "type": "float",
                "ref": "arg",
                "value": "tolerance"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "thresh",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "threshold",
                    "default": 0.5
                },
                {
                    "type": "float",
                    "name": "tolerance",
                    "default": 0.04
                }
            ],
            "glsl": "   return vec4(vec3(smoothstep(threshold-(tolerance+0.0000001), threshold+(tolerance+0.0000001), _luminance(_c0.rgb))), _c0.a);"
        },
        "id": "thresh",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "threshold"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "tolerance"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "thresh",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "threshold",
                "type": "float",
                "ref": "arg",
                "value": "threshold"
            },
            {
                "id": "tolerance",
                "type": "float",
                "ref": "arg",
                "value": "tolerance"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "color",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "r",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "g",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "b",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "a",
                    "default": 1
                }
            ],
            "glsl": "   vec4 c = vec4(r, g, b, a);\n   vec4 pos = step(0.0, c); // detect whether negative\n   // if > 0, return r * _c0\n   // if < 0 return (1.0-r) * _c0\n   return vec4(mix((1.0-_c0)*abs(c), c*_c0, pos));"
        },
        "id": "color",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "r"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "g"
            },
            {
                "as": "arg2",
                "to": "args",
                "from": "b"
            },
            {
                "as": "arg3",
                "to": "args",
                "from": "a"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "color",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "r",
                "type": "float",
                "ref": "arg",
                "value": "r"
            },
            {
                "id": "g",
                "type": "float",
                "ref": "arg",
                "value": "g"
            },
            {
                "id": "b",
                "type": "float",
                "ref": "arg",
                "value": "b"
            },
            {
                "id": "a",
                "type": "float",
                "ref": "arg",
                "value": "a"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "saturate",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 2
                }
            ],
            "glsl": "   const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n   vec3 intensity = vec3(dot(_c0.rgb, W));\n   return vec4(mix(intensity, _c0.rgb, amount), _c0.a);"
        },
        "id": "saturate",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "saturate",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "hue",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "hue",
                    "default": 0.4
                }
            ],
            "glsl": "   vec3 c = _rgbToHsv(_c0.rgb);\n   c.r += hue;\n   //  c.r = fract(c.r);\n   return vec4(_hsvToRgb(c), _c0.a);"
        },
        "id": "hue",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "hue"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "hue",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "hue",
                "type": "float",
                "ref": "arg",
                "value": "hue"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "colorama",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "amount",
                    "default": 0.005
                }
            ],
            "glsl": "   vec3 c = _rgbToHsv(_c0.rgb);\n   c += vec3(amount);\n   c = _hsvToRgb(c);\n   c = fract(c);\n   return vec4(c, _c0.a);"
        },
        "id": "colorama",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "amount"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "colorama",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "amount",
                "type": "float",
                "ref": "arg",
                "value": "amount"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "prev",
            "type": "src",
            "inputs": [],
            "glsl": "   return texture2D(prevBuffer, fract(_st));"
        },
        "id": "prev",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "prev",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "sum",
            "type": "color",
            "inputs": [
                {
                    "type": "vec4",
                    "name": "scale",
                    "default": 1
                }
            ],
            "glsl": "   vec4 v = _c0 * s;\n   return v.r + v.g + v.b + v.a;\n   }\n   float sum(vec2 _st, vec4 s) { // vec4 is not a typo, because argument type is not overloaded\n   vec2 v = _st.xy * s.xy;\n   return v.x + v.y;"
        },
        "id": "sum",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scale"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "sum",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scale",
                "type": "vec4",
                "ref": "arg",
                "value": "scale"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "r",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "scale",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   return vec4(_c0.r * scale + offset);"
        },
        "id": "r",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scale"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "r",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scale",
                "type": "float",
                "ref": "arg",
                "value": "scale"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "g",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "scale",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   return vec4(_c0.g * scale + offset);"
        },
        "id": "g",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scale"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "g",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scale",
                "type": "float",
                "ref": "arg",
                "value": "scale"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "b",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "scale",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   return vec4(_c0.b * scale + offset);"
        },
        "id": "b",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scale"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "b",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scale",
                "type": "float",
                "ref": "arg",
                "value": "scale"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    },
    {
        "out": "out",
        "element": {
            "name": "a",
            "type": "color",
            "inputs": [
                {
                    "type": "float",
                    "name": "scale",
                    "default": 1
                },
                {
                    "type": "float",
                    "name": "offset",
                    "default": 0
                }
            ],
            "glsl": "   return vec4(_c0.a * scale + offset);"
        },
        "id": "a",
        "edges": [
            {
                "as": "self",
                "to": "out",
                "from": "self"
            },
            {
                "as": "fn",
                "from": "fn_name",
                "to": "out"
            },
            {
                "as": "args",
                "to": "out",
                "from": "args"
            },
            {
                "as": "arg0",
                "to": "args",
                "from": "scale"
            },
            {
                "as": "arg1",
                "to": "args",
                "from": "offset"
            }
        ],
        "nodes": [
            {
                "id": "self",
                "value": "self",
                "ref": "arg"
            },
            {
                "id": "out",
                "ref": "call"
            },
            {
                "value": "a",
                "id": "fn_name"
            },
            {
                "ref": "array",
                "id": "args"
            },
            {
                "id": "scale",
                "type": "float",
                "ref": "arg",
                "value": "scale"
            },
            {
                "id": "offset",
                "type": "float",
                "ref": "arg",
                "value": "offset"
            }
        ]
    }
],
    "edges": [
    {
        "from": "hydra.noise",
        "to": "hydra"
    },
    {
        "from": "hydra.voronoi",
        "to": "hydra"
    },
    {
        "from": "hydra.osc",
        "to": "hydra"
    },
    {
        "from": "hydra.shape",
        "to": "hydra"
    },
    {
        "from": "hydra.gradient",
        "to": "hydra"
    },
    {
        "from": "hydra.src",
        "to": "hydra"
    },
    {
        "from": "hydra.solid",
        "to": "hydra"
    },
    {
        "from": "hydra.rotate",
        "to": "hydra"
    },
    {
        "from": "hydra.scale",
        "to": "hydra"
    },
    {
        "from": "hydra.pixelate",
        "to": "hydra"
    },
    {
        "from": "hydra.posterize",
        "to": "hydra"
    },
    {
        "from": "hydra.shift",
        "to": "hydra"
    },
    {
        "from": "hydra.repeat",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateRepeat",
        "to": "hydra"
    },
    {
        "from": "hydra.repeatX",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateRepeatX",
        "to": "hydra"
    },
    {
        "from": "hydra.repeatY",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateRepeatY",
        "to": "hydra"
    },
    {
        "from": "hydra.kaleid",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateKaleid",
        "to": "hydra"
    },
    {
        "from": "hydra.scroll",
        "to": "hydra"
    },
    {
        "from": "hydra.scrollX",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateScrollX",
        "to": "hydra"
    },
    {
        "from": "hydra.scrollY",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateScrollY",
        "to": "hydra"
    },
    {
        "from": "hydra.add",
        "to": "hydra"
    },
    {
        "from": "hydra.sub",
        "to": "hydra"
    },
    {
        "from": "hydra.layer",
        "to": "hydra"
    },
    {
        "from": "hydra.blend",
        "to": "hydra"
    },
    {
        "from": "hydra.mult",
        "to": "hydra"
    },
    {
        "from": "hydra.diff",
        "to": "hydra"
    },
    {
        "from": "hydra.modulate",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateScale",
        "to": "hydra"
    },
    {
        "from": "hydra.modulatePixelate",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateRotate",
        "to": "hydra"
    },
    {
        "from": "hydra.modulateHue",
        "to": "hydra"
    },
    {
        "from": "hydra.invert",
        "to": "hydra"
    },
    {
        "from": "hydra.contrast",
        "to": "hydra"
    },
    {
        "from": "hydra.brightness",
        "to": "hydra"
    },
    {
        "from": "hydra.mask",
        "to": "hydra"
    },
    {
        "from": "hydra.luma",
        "to": "hydra"
    },
    {
        "from": "hydra.thresh",
        "to": "hydra"
    },
    {
        "from": "hydra.color",
        "to": "hydra"
    },
    {
        "from": "hydra.saturate",
        "to": "hydra"
    },
    {
        "from": "hydra.hue",
        "to": "hydra"
    },
    {
        "from": "hydra.colorama",
        "to": "hydra"
    },
    {
        "from": "hydra.prev",
        "to": "hydra"
    },
    {
        "from": "hydra.sum",
        "to": "hydra"
    },
    {
        "from": "hydra.r",
        "to": "hydra"
    },
    {
        "from": "hydra.g",
        "to": "hydra"
    },
    {
        "from": "hydra.b",
        "to": "hydra"
    },
    {
        "from": "hydra.a",
        "to": "hydra"
    }
]
}