diff --git a/GLSL/Effect/y_flicker_GL/README.md b/GLSL/Effect/y_flicker_GL/README.md
new file mode 100644
index 0000000..956e84f
--- /dev/null
+++ b/GLSL/Effect/y_flicker_GL/README.md
@@ -0,0 +1,4 @@
+# y_flicker_GL
+
+If Remove: The 2nd input should be a locked frame frome the same clip as the 1st input. The locked frame should be at levels where you'd like to land the flicker free image. The Result is hopefully a flicker free front.
+If Match: The 2nd input should be a clip you'd like apply the same flicker to, that already exists in input 1. The Result is a flickered Input 2.
diff --git a/GLSL/Effect/y_flicker_GL/y_flicker_GL.png b/GLSL/Effect/y_flicker_GL/y_flicker_GL.png
new file mode 100644
index 0000000..4bc4e8d
Binary files /dev/null and b/GLSL/Effect/y_flicker_GL/y_flicker_GL.png differ
diff --git a/GLSL/Effect/y_flicker_GL/y_flicker_GL.py b/GLSL/Effect/y_flicker_GL/y_flicker_GL.py
new file mode 100644
index 0000000..442f0da
--- /dev/null
+++ b/GLSL/Effect/y_flicker_GL/y_flicker_GL.py
@@ -0,0 +1,710 @@
+# -*- coding: utf-8 -*-
+# DO NOT EDIT THIS FILE
+# This file was automatically generated by Natron PyPlug exporter version 10.
+
+# Hand-written code should be added in a separate file named y_flicker_GLExt.py
+# See http://natron.readthedocs.org/en/master/devel/groups.html#adding-hand-written-code-callbacks-etc
+# Note that Viewers are never exported
+
+import NatronEngine
+import sys
+
+# Try to import the extensions file where callbacks and hand-written code should be located.
+try:
+ from y_flicker_GLExt import *
+except ImportError:
+ pass
+
+def getPluginID():
+ return "natron.community.plugins.y_flicker_GL"
+
+def getLabel():
+ return "y_flicker_GL"
+
+def getVersion():
+ return 1
+
+def getIconPath():
+ return "y_flicker_GL.png"
+
+def getGrouping():
+ return "Community/GLSL/Effect"
+
+def createInstance(app,group):
+ # Create all nodes in the group
+
+ # Create the parameters of the group node the same way we did for all internal nodes
+ lastNode = group
+ lastNode.setColor(1, 0.5765, 0.3333)
+
+ # Create the user parameters
+ lastNode.Controls = lastNode.createPageParam("Controls", "Controls")
+ param = lastNode.createStringParam("sep01", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep01 = param
+ del param
+
+ param = lastNode.createStringParam("sep02", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep02 = param
+ del param
+
+ param = lastNode.createSeparatorParam("SETUP", "Setup")
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.SETUP = param
+ del param
+
+ param = lastNode.createStringParam("sep03", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep03 = param
+ del param
+
+ param = lastNode.createStringParam("sep04", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep04 = param
+ del param
+
+ param = lastNode.createChoiceParam("opChoice", "Operation : ")
+ entries = [ ("Remove", ""),
+ ("Match", "")]
+ param.setOptions(entries)
+ del entries
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("Try and match the chroma as well as luma.")
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.opChoice = param
+ del param
+
+ param = lastNode.createStringParam("sep05", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep05 = param
+ del param
+
+ param = lastNode.createStringParam("sep06", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep06 = param
+ del param
+
+ param = lastNode.createStringParam("sep07", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep07 = param
+ del param
+
+ param = lastNode.createStringParam("sep08", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep08 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1paramValueFloat0", "Average : ")
+ param.setMinimum(0, 0)
+ param.setMaximum(10, 0)
+ param.setDisplayMinimum(0, 0)
+ param.setDisplayMaximum(10, 0)
+ param.setDefaultValue(10, 0)
+ param.restoreDefaultValue(0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1paramValueFloat0 = param
+ del param
+
+ param = lastNode.createStringParam("sep09", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep09 = param
+ del param
+
+ param = lastNode.createStringParam("sep10", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep10 = param
+ del param
+
+ param = lastNode.createBooleanParam("Shadertoy1paramValueBool2", "Match Chroma : ")
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1paramValueBool2 = param
+ del param
+
+ param = lastNode.createStringParam("sep11", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep11 = param
+ del param
+
+ param = lastNode.createStringParam("sep12", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep12 = param
+ del param
+
+ lastNode.Credits = lastNode.createPageParam("Credits", "Credits")
+ param = lastNode.createStringParam("sep101", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep101 = param
+ del param
+
+ param = lastNode.createStringParam("sep102", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep102 = param
+ del param
+
+ param = lastNode.createSeparatorParam("NAME", "y_flicker_GL v1.0")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.NAME = param
+ del param
+
+ param = lastNode.createStringParam("sep103", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep103 = param
+ del param
+
+ param = lastNode.createStringParam("sep104", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep104 = param
+ del param
+
+ param = lastNode.createSeparatorParam("LINE103", "")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.LINE103 = param
+ del param
+
+ param = lastNode.createStringParam("sep105", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep105 = param
+ del param
+
+ param = lastNode.createStringParam("sep106", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep106 = param
+ del param
+
+ param = lastNode.createSeparatorParam("FR", "ShaderToy 0.8.8")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.FR = param
+ del param
+
+ param = lastNode.createStringParam("sep107", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep107 = param
+ del param
+
+ param = lastNode.createStringParam("sep108", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep108 = param
+ del param
+
+ param = lastNode.createSeparatorParam("CONVERSION", " (Fabrice Fernandez - 2018)")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.CONVERSION = param
+ del param
+
+ param = lastNode.createStringParam("sep109", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep109 = param
+ del param
+
+ param = lastNode.createStringParam("sep110", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep110 = param
+ del param
+
+ # Refresh the GUI with the newly created parameters
+ lastNode.setPagesOrder(['Controls', 'Credits', 'Node', 'Settings'])
+ lastNode.refreshUserParamsGUI()
+ del lastNode
+
+ # Start of node "Output1"
+ lastNode = app.createNode("fr.inria.built-in.Output", 1, group)
+ lastNode.setLabel("Output2")
+ lastNode.setPosition(4992, 5275)
+ lastNode.setSize(80, 30)
+ lastNode.setColor(0.7, 0.7, 0.7)
+ groupOutput1 = lastNode
+
+ del lastNode
+ # End of node "Output1"
+
+ # Start of node "Source"
+ lastNode = app.createNode("fr.inria.built-in.Input", 1, group)
+ lastNode.setScriptName("Source")
+ lastNode.setLabel("Source")
+ lastNode.setPosition(4992, 4606)
+ lastNode.setSize(80, 30)
+ lastNode.setColor(1, 1, 1)
+ groupSource = lastNode
+
+ del lastNode
+ # End of node "Source"
+
+ # Start of node "Shadertoy1"
+ lastNode = app.createNode("net.sf.openfx.Shadertoy", 1, group)
+ lastNode.setScriptName("Shadertoy1")
+ lastNode.setLabel("Shadertoy1")
+ lastNode.setPosition(4992, 4896)
+ lastNode.setSize(80, 32)
+ lastNode.setColor(0.3, 0.5, 0.2)
+ groupShadertoy1 = lastNode
+
+ param = lastNode.getParam("paramValueFloat0")
+ if param is not None:
+ param.setValue(10, 0)
+ del param
+
+ param = lastNode.getParam("paramValueInt1")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueBool2")
+ if param is not None:
+ param.setValue(False)
+ del param
+
+ param = lastNode.getParam("imageShaderSource")
+ if param is not None:
+ param.setValue("//\n//\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n// MM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMM MMMMMMM MMM. .MM\n// MM. .MMM MMMMMM MMM. .MM\n// MM. .MmM MMMM MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM MMM MMM. .MM\n// MM. .MMM MMMM MMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MM\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n//\n//\n//\n//\n// Adaptation pour Natron par F. Fernandez\n// Code original : y_flicker pour Autodesk Flame\n\n// Adapted to Natron by F.Fernandez\n// Original code : y_flicker for Autodesk Flame\n\n\n// iChannel0: Source,filter=linear,wrap=clamp\n// iChannel1: LockFrame,filter=linear,wrap=clamp\n// BBox: iChannel0\n\n\n#extension GL_ARB_shader_texture_lod : enable\n\nfloat adsk_getLuminance( vec3 rgb )\n{\n // Algorithm from Chapter 10 of Graphics Shaders.\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n return dot(rgb, W);\n}\n\n\nvec2 res = vec2(iResolution.x, iResolution.y);\n\n\nuniform float lod = 10.0; // Average : (Level of detail. Higher is lower and usually what you want.), min=0.0, max=10.0\nuniform int operation = 0; // Operation : (Choose to remove flicker from input 1, or copy the flicker of input 1 to input 2.), min=0, max=1\nuniform bool match_chroma = false; // Match Chroma : (Try and match the chroma as well as luma.)\n\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n\tvec2 st = fragCoord.xy / res;\n\n\tvec3 front = vec3(0.0);\n\tvec3 front_avg = texture2DLod(iChannel0, st, lod).rgb;\n\tvec3 lock_frame = texture2DLod(iChannel1, st, lod).rgb;\n\n\tvec3 new_gain = vec3(0.0);\n\n\tif (operation == 1) {\n\t\tif (lock_frame.r != 0.0) {\n\t\t\tnew_gain.r = front_avg.r / lock_frame.r;\n\t\t}\n\t\tif (lock_frame.g != 0.0) {\n\t\t\tnew_gain.g = front_avg.r / lock_frame.g;\n\t\t}\n\t\tif (lock_frame.b != 0.0) {\n\t\t\tnew_gain.b = front_avg.b / lock_frame.b;\n\t\t}\n\t\tfront = texture2D(iChannel1, st).rgb;\n\t} else {\n\t\tnew_gain = lock_frame / max(front_avg, vec3(.00001));\n\n\t\tif (front_avg.r != 0.0) {\n\t\t\tnew_gain.r = lock_frame.r / front_avg.r;\n\t\t}\n\t\tif (front_avg.g != 0.0) {\n\t\t\tnew_gain.g = lock_frame.r / front_avg.g;\n\t\t}\n\t\tif (front_avg.b != 0.0) {\n\t\t\tnew_gain.b = lock_frame.b / front_avg.b;\n\t\t}\n\n\t\tfront = texture2D(iChannel0, st).rgb;\n\t}\n\n\tnew_gain = clamp(new_gain, -5.0, 5.0);\n\n\tfloat gdif = adsk_getLuminance(new_gain.rgb);\n\n\tif (match_chroma) {\n\t\tfront *= new_gain;\n\t} else {\n\t\tfront *= gdif;\n\t}\n\n\tfragColor.rgb = front;\n}\n")
+ del param
+
+ param = lastNode.getParam("mipmap0")
+ if param is not None:
+ param.set("linear")
+ del param
+
+ param = lastNode.getParam("wrap0")
+ if param is not None:
+ param.set("clamp")
+ del param
+
+ param = lastNode.getParam("inputLabel0")
+ if param is not None:
+ param.setValue("Source")
+ del param
+
+ param = lastNode.getParam("mipmap1")
+ if param is not None:
+ param.set("linear")
+ del param
+
+ param = lastNode.getParam("wrap1")
+ if param is not None:
+ param.set("clamp")
+ del param
+
+ param = lastNode.getParam("inputLabel1")
+ if param is not None:
+ param.setValue("LockFrame")
+ del param
+
+ param = lastNode.getParam("inputEnable2")
+ if param is not None:
+ param.setValue(False)
+ del param
+
+ param = lastNode.getParam("inputEnable3")
+ if param is not None:
+ param.setValue(False)
+ del param
+
+ param = lastNode.getParam("bbox")
+ if param is not None:
+ param.set("iChannel0")
+ del param
+
+ param = lastNode.getParam("NatronParamFormatChoice")
+ if param is not None:
+ param.set("PC_Video")
+ del param
+
+ param = lastNode.getParam("mouseParams")
+ if param is not None:
+ param.setValue(False)
+ del param
+
+ param = lastNode.getParam("paramCount")
+ if param is not None:
+ param.setValue(3, 0)
+ del param
+
+ param = lastNode.getParam("paramType0")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName0")
+ if param is not None:
+ param.setValue("lod")
+ del param
+
+ param = lastNode.getParam("paramLabel0")
+ if param is not None:
+ param.setValue("Average :")
+ del param
+
+ param = lastNode.getParam("paramHint0")
+ if param is not None:
+ param.setValue("Level of detail. Higher is lower and usually what you want.")
+ del param
+
+ param = lastNode.getParam("paramDefaultFloat0")
+ if param is not None:
+ param.setValue(10, 0)
+ del param
+
+ param = lastNode.getParam("paramMinFloat0")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramMaxFloat0")
+ if param is not None:
+ param.setValue(10, 0)
+ del param
+
+ param = lastNode.getParam("paramType1")
+ if param is not None:
+ param.set("int")
+ del param
+
+ param = lastNode.getParam("paramName1")
+ if param is not None:
+ param.setValue("operation")
+ del param
+
+ param = lastNode.getParam("paramLabel1")
+ if param is not None:
+ param.setValue("Operation :")
+ del param
+
+ param = lastNode.getParam("paramHint1")
+ if param is not None:
+ param.setValue("Choose to remove flicker from input 1, or copy the flicker of input 1 to input 2.")
+ del param
+
+ param = lastNode.getParam("paramMinInt1")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramMaxInt1")
+ if param is not None:
+ param.setValue(1, 0)
+ del param
+
+ param = lastNode.getParam("paramType2")
+ if param is not None:
+ param.set("bool")
+ del param
+
+ param = lastNode.getParam("paramName2")
+ if param is not None:
+ param.setValue("match_chroma")
+ del param
+
+ param = lastNode.getParam("paramLabel2")
+ if param is not None:
+ param.setValue("Match Chroma :")
+ del param
+
+ param = lastNode.getParam("paramHint2")
+ if param is not None:
+ param.setValue("Try and match the chroma as well as luma.")
+ del param
+
+ del lastNode
+ # End of node "Shadertoy1"
+
+ # Start of node "Lock_Frame"
+ lastNode = app.createNode("fr.inria.built-in.Input", 1, group)
+ lastNode.setScriptName("Lock_Frame")
+ lastNode.setLabel("Lock Frame")
+ lastNode.setPosition(5149, 4609)
+ lastNode.setSize(80, 32)
+ lastNode.setColor(1, 1, 1)
+ groupLock_Frame = lastNode
+
+ del lastNode
+ # End of node "Lock_Frame"
+
+ # Start of node "Dot1"
+ lastNode = app.createNode("fr.inria.built-in.Dot", 1, group)
+ lastNode.setScriptName("Dot1")
+ lastNode.setLabel("Dot1")
+ lastNode.setPosition(5182, 4905)
+ lastNode.setSize(15, 15)
+ lastNode.setColor(0.7, 0.7, 0.7)
+ groupDot1 = lastNode
+
+ del lastNode
+ # End of node "Dot1"
+
+ # Now that all nodes are created we can connect them together, restore expressions
+ groupOutput1.connectInput(0, groupShadertoy1)
+ groupShadertoy1.connectInput(0, groupSource)
+ groupShadertoy1.connectInput(1, groupDot1)
+ groupDot1.connectInput(0, groupLock_Frame)
+
+ param = groupShadertoy1.getParam("paramValueFloat0")
+ group.getParam("Shadertoy1paramValueFloat0").setAsAlias(param)
+ del param
+ param = groupShadertoy1.getParam("paramValueInt1")
+ param.setExpression("thisGroup.opChoice.get()", False, 0)
+ del param
+ param = groupShadertoy1.getParam("paramValueBool2")
+ group.getParam("Shadertoy1paramValueBool2").setAsAlias(param)
+ del param
+
+ try:
+ extModule = sys.modules["y_flicker_GLExt"]
+ except KeyError:
+ extModule = None
+ if extModule is not None and hasattr(extModule ,"createInstanceExt") and hasattr(extModule.createInstanceExt,"__call__"):
+ extModule.createInstanceExt(app,group)
diff --git a/GLSL/Effect/y_flicker_GL/y_flicker_GL.xml b/GLSL/Effect/y_flicker_GL/y_flicker_GL.xml
new file mode 100644
index 0000000..9cd7a80
--- /dev/null
+++ b/GLSL/Effect/y_flicker_GL/y_flicker_GL.xml
@@ -0,0 +1,10 @@
+
+
+ y_flicker_GL
+ If Remove: The 2nd input should be a locked frame frome the same clip as the 1st input. The locked frame should be at levels where you'd like to land the flicker free image. The Result is hopefully a flicker free front. If Match: The 2nd input should be a clip you'd like apply the same flicker to, that already exists in input 1. The Result is a flickered Input 2.
+ 1.0
+ @DATE@
+ natron.community.plugins.y_flicker_GL
+ script
+
+
diff --git a/GLSL/Effect/y_ixform_GL/README.md b/GLSL/Effect/y_ixform_GL/README.md
new file mode 100644
index 0000000..66e3cd3
--- /dev/null
+++ b/GLSL/Effect/y_ixform_GL/README.md
@@ -0,0 +1,3 @@
+# y_ixform_GL
+
+Transform a thing. This is only cool if you input the optional black and white strength channel. The transormation will be multiplied by the value of the strength channel.
diff --git a/GLSL/Effect/y_ixform_GL/y_ixform_GL.png b/GLSL/Effect/y_ixform_GL/y_ixform_GL.png
new file mode 100644
index 0000000..4bc4e8d
Binary files /dev/null and b/GLSL/Effect/y_ixform_GL/y_ixform_GL.png differ
diff --git a/GLSL/Effect/y_ixform_GL/y_ixform_GL.py b/GLSL/Effect/y_ixform_GL/y_ixform_GL.py
new file mode 100644
index 0000000..27254a2
--- /dev/null
+++ b/GLSL/Effect/y_ixform_GL/y_ixform_GL.py
@@ -0,0 +1,1384 @@
+# -*- coding: utf-8 -*-
+# DO NOT EDIT THIS FILE
+# This file was automatically generated by Natron PyPlug exporter version 10.
+
+# Hand-written code should be added in a separate file named y_ixform_GLExt.py
+# See http://natron.readthedocs.org/en/master/devel/groups.html#adding-hand-written-code-callbacks-etc
+# Note that Viewers are never exported
+
+import NatronEngine
+import sys
+
+# Try to import the extensions file where callbacks and hand-written code should be located.
+try:
+ from y_ixform_GLExt import *
+except ImportError:
+ pass
+
+def getPluginID():
+ return "natron.community.plugins.y_ixform_GL"
+
+def getLabel():
+ return "y_ixform_GL"
+
+def getVersion():
+ return 1.0
+
+def getIconPath():
+ return "y_ixform_GL.png"
+
+def getGrouping():
+ return "Community/GLSL/Effect"
+
+def getPluginDescription():
+ return "Transform a thing. This is only cool if you input the optional black and white strength channel. The transormation will be multiplied by the value of the strength channel."
+
+def createInstance(app,group):
+ # Create all nodes in the group
+
+ # Create the parameters of the group node the same way we did for all internal nodes
+ lastNode = group
+ lastNode.setColor(1, 0.698, 0.8314)
+
+ # Create the user parameters
+ lastNode.Controls = lastNode.createPageParam("Controls", "Controls")
+ param = lastNode.createStringParam("sep01", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep01 = param
+ del param
+
+ param = lastNode.createStringParam("sep02", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep02 = param
+ del param
+
+ param = lastNode.createSeparatorParam("TRANSFORM", "Transform")
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.TRANSFORM = param
+ del param
+
+ param = lastNode.createStringParam("sep03", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep03 = param
+ del param
+
+ param = lastNode.createStringParam("sep04", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep04 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat0", "Position X : ")
+ param.setDisplayMinimum(-2048, 0)
+ param.setDisplayMaximum(2048, 0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat0 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat1", "Position Y : ")
+ param.setDisplayMinimum(-2048, 0)
+ param.setDisplayMaximum(2048, 0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat1 = param
+ del param
+
+ param = lastNode.createStringParam("sep05", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep05 = param
+ del param
+
+ param = lastNode.createStringParam("sep06", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep06 = param
+ del param
+
+ param = lastNode.createStringParam("sep07", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep07 = param
+ del param
+
+ param = lastNode.createStringParam("sep08", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep08 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat2", "Scale : ")
+ param.setDisplayMinimum(0, 0)
+ param.setDisplayMaximum(10, 0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat2 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat3", "Scale X : ")
+ param.setDisplayMinimum(0, 0)
+ param.setDisplayMaximum(10, 0)
+ param.setDefaultValue(1, 0)
+ param.restoreDefaultValue(0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat3 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat4", "Scale Y : ")
+ param.setDisplayMinimum(0, 0)
+ param.setDisplayMaximum(10, 0)
+ param.setDefaultValue(1, 0)
+ param.restoreDefaultValue(0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat4 = param
+ del param
+
+ param = lastNode.createStringParam("sep09", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep09 = param
+ del param
+
+ param = lastNode.createStringParam("sep10", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep10 = param
+ del param
+
+ param = lastNode.createStringParam("sep11", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep11 = param
+ del param
+
+ param = lastNode.createStringParam("sep12", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep12 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat5", "Rotation : ")
+ param.setDisplayMinimum(-306, 0)
+ param.setDisplayMaximum(360, 0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat5 = param
+ del param
+
+ param = lastNode.createStringParam("sep13", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep13 = param
+ del param
+
+ param = lastNode.createStringParam("sep14", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep14 = param
+ del param
+
+ param = lastNode.createStringParam("sep15", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep15 = param
+ del param
+
+ param = lastNode.createStringParam("sep16", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep16 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat6", "Skew X : ")
+ param.setDisplayMinimum(-10, 0)
+ param.setDisplayMaximum(10, 0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat6 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat7", "Skew Y : ")
+ param.setDisplayMinimum(-10, 0)
+ param.setDisplayMaximum(10, 0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat7 = param
+ del param
+
+ param = lastNode.createStringParam("sep17", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep17 = param
+ del param
+
+ param = lastNode.createStringParam("sep18", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep18 = param
+ del param
+
+ param = lastNode.createStringParam("sep19", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep19 = param
+ del param
+
+ param = lastNode.createStringParam("sep20", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep20 = param
+ del param
+
+ param = lastNode.createDouble2DParam("Shadertoy1_2paramValueVec211", "Center : ")
+ param.setDefaultValue(0.5, 0)
+ param.restoreDefaultValue(0)
+ param.setDefaultValue(0.5, 1)
+ param.restoreDefaultValue(1)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueVec211 = param
+ del param
+
+ param = lastNode.createStringParam("sep21", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep21 = param
+ del param
+
+ param = lastNode.createStringParam("sep22", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep22 = param
+ del param
+
+ param = lastNode.createSeparatorParam("OUTPUT", "Output")
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.OUTPUT = param
+ del param
+
+ param = lastNode.createStringParam("sep23", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep23 = param
+ del param
+
+ param = lastNode.createStringParam("sep24", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep24 = param
+ del param
+
+ param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat8", "Transparency : ")
+ param.setMinimum(0, 0)
+ param.setMaximum(1, 0)
+ param.setDisplayMinimum(0, 0)
+ param.setDisplayMaximum(1, 0)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueFloat8 = param
+ del param
+
+ param = lastNode.createStringParam("sep25", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep25 = param
+ del param
+
+ param = lastNode.createStringParam("sep26", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep26 = param
+ del param
+
+ param = lastNode.createStringParam("sep27", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep27 = param
+ del param
+
+ param = lastNode.createStringParam("sep28", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep28 = param
+ del param
+
+ param = lastNode.createBooleanParam("Shadertoy1_2paramValueBool9", "Repeat Texture : ")
+ param.setDefaultValue(True)
+ param.restoreDefaultValue()
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(True)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueBool9 = param
+ del param
+
+ param = lastNode.createBooleanParam("Shadertoy1_2paramValueBool10", "Wraped Only : ")
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setAddNewLine(False)
+ param.setAnimationEnabled(True)
+ lastNode.Shadertoy1_2paramValueBool10 = param
+ del param
+
+ param = lastNode.createStringParam("sep29", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep29 = param
+ del param
+
+ param = lastNode.createStringParam("sep30", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Controls.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep30 = param
+ del param
+
+ lastNode.Credits = lastNode.createPageParam("Credits", "Credits")
+ param = lastNode.createStringParam("sep101", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep101 = param
+ del param
+
+ param = lastNode.createStringParam("sep102", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep102 = param
+ del param
+
+ param = lastNode.createSeparatorParam("NAME", "y_ixform_GL v1.0")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.NAME = param
+ del param
+
+ param = lastNode.createStringParam("sep103", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep103 = param
+ del param
+
+ param = lastNode.createStringParam("sep104", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep104 = param
+ del param
+
+ param = lastNode.createSeparatorParam("LINE103", "")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.LINE103 = param
+ del param
+
+ param = lastNode.createStringParam("sep105", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep105 = param
+ del param
+
+ param = lastNode.createStringParam("sep106", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep106 = param
+ del param
+
+ param = lastNode.createSeparatorParam("FR", "ShaderToy 0.8.8")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.FR = param
+ del param
+
+ param = lastNode.createStringParam("sep107", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep107 = param
+ del param
+
+ param = lastNode.createStringParam("sep108", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep108 = param
+ del param
+
+ param = lastNode.createSeparatorParam("CONVERSION", " (Fabrice Fernandez - 2018)")
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setPersistent(False)
+ param.setEvaluateOnChange(False)
+ lastNode.CONVERSION = param
+ del param
+
+ param = lastNode.createStringParam("sep109", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep109 = param
+ del param
+
+ param = lastNode.createStringParam("sep110", "")
+ param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel)
+
+ # Add the param to the page
+ lastNode.Credits.addParam(param)
+
+ # Set param properties
+ param.setHelp("")
+ param.setAddNewLine(True)
+ param.setEvaluateOnChange(False)
+ param.setAnimationEnabled(False)
+ lastNode.sep110 = param
+ del param
+
+ # Refresh the GUI with the newly created parameters
+ lastNode.setPagesOrder(['Controls', 'Credits', 'Node', 'Settings'])
+ lastNode.refreshUserParamsGUI()
+ del lastNode
+
+ # Start of node "Output1"
+ lastNode = app.createNode("fr.inria.built-in.Output", 1, group)
+ lastNode.setLabel("Output2")
+ lastNode.setPosition(4570, 4150)
+ lastNode.setSize(80, 30)
+ lastNode.setColor(0.7, 0.7, 0.7)
+ groupOutput1 = lastNode
+
+ del lastNode
+ # End of node "Output1"
+
+ # Start of node "Front"
+ lastNode = app.createNode("fr.inria.built-in.Input", 1, group)
+ lastNode.setScriptName("Front")
+ lastNode.setLabel("Front")
+ lastNode.setPosition(4424, 3597)
+ lastNode.setSize(80, 32)
+ lastNode.setColor(1, 1, 1)
+ groupFront = lastNode
+
+ del lastNode
+ # End of node "Front"
+
+ # Start of node "Matte"
+ lastNode = app.createNode("fr.inria.built-in.Input", 1, group)
+ lastNode.setScriptName("Matte")
+ lastNode.setLabel("Matte")
+ lastNode.setPosition(4568, 3593)
+ lastNode.setSize(80, 32)
+ lastNode.setColor(1, 1, 1)
+ groupMatte = lastNode
+
+ del lastNode
+ # End of node "Matte"
+
+ # Start of node "Strength"
+ lastNode = app.createNode("fr.inria.built-in.Input", 1, group)
+ lastNode.setScriptName("Strength")
+ lastNode.setLabel("Strength")
+ lastNode.setPosition(4709, 3590)
+ lastNode.setSize(80, 32)
+ lastNode.setColor(1, 1, 1)
+ groupStrength = lastNode
+
+ del lastNode
+ # End of node "Strength"
+
+ # Start of node "Shadertoy1_2"
+ lastNode = app.createNode("net.sf.openfx.Shadertoy", 1, group)
+ lastNode.setScriptName("Shadertoy1_2")
+ lastNode.setLabel("Shadertoy1_2")
+ lastNode.setPosition(4570, 3926)
+ lastNode.setSize(80, 32)
+ lastNode.setColor(0.3, 0.5, 0.2)
+ groupShadertoy1_2 = lastNode
+
+ param = lastNode.getParam("paramValueFloat0")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat1")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat2")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat3")
+ if param is not None:
+ param.setValue(1, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat4")
+ if param is not None:
+ param.setValue(1, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat5")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat6")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat7")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueFloat8")
+ if param is not None:
+ param.setValue(0, 0)
+ del param
+
+ param = lastNode.getParam("paramValueBool9")
+ if param is not None:
+ param.setValue(True)
+ del param
+
+ param = lastNode.getParam("paramValueBool10")
+ if param is not None:
+ param.setValue(False)
+ del param
+
+ param = lastNode.getParam("paramValueVec211")
+ if param is not None:
+ param.setValue(0.5, 0)
+ param.setValue(0.5, 1)
+ del param
+
+ param = lastNode.getParam("imageShaderSource")
+ if param is not None:
+ param.setValue("//\n//\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n// MM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMM MMMMMMM MMM. .MM\n// MM. .MMM MMMMMM MMM. .MM\n// MM. .MmM MMMM MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM MMM MMM. .MM\n// MM. .MMM MMMM MMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MM\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n//\n//\n//\n//\n// Adaptation pour Natron par F. Fernandez\n// Code original : y_ixform Matchbox pour Autodesk Flame\n\n// Adapted to Natron by F.Fernandez\n// Original code : y_ixform Matchbox for Autodesk Flame\n\n\n// iChannel0:Front,filter=linear,wrap=repeat\n// iChannel1:Matte,filter=linear,wrap=repeat\n// iChannel2:Strength,filter=linear,wrap=repeat\n// BBox: iChannel0\n\n\nfloat result_frameratio = iResolution.x/iResolution.y;\n\nvec2 res = vec2(iResolution.x, iResolution.y);\nvec2 texel = vec2(1.0) / res;\n\n\n\nuniform float pos_x = 0.0; // Position X : (Horizontal translation.)\nuniform float pos_y = 0.0; // Position Y : (Vertical translation.)\n\nuniform float scale = 0.0; // Scale : (Scale.)\nuniform float scale_x = 1.0; // Scale X : (Horizontal scale bias.)\nuniform float scale_y = 1.0; // Scale Y : (Vertical scale bias.)\n\nuniform float rot = 0.0; // Rotation : (Rotation.)\n\nuniform float skew_x = 0.0; // Skew X : (Horizontal skew.)\nuniform float skew_y = 0.0; // Skew Y : (Vertical skew.)\n\nuniform float trans = 0.0; // Transparency : (Transparency.)\n\nuniform bool repeat_texture = true; // Repeat Texture : (Repeat the Texture)\nuniform bool warped_only = false; // Wraped Only : (Output warped only. Default is to comp over the original.)\n\n//const vec2 center = vec2(.5);\n\nuniform vec2 center = vec2(0.5,0.5); // Center : (Center of scale and rotation.)\n\nbool isInTex( const vec2 coords )\n{\n\t return coords.x >= 0.0 && coords.x <= 1.0 &&\n\t\t coords.y >= 0.0 && coords.y <= 1.0;\n}\n\n\nvec2 pre(vec2 coords)\n{\n\tcoords -= center;\n\tcoords.x *= result_frameratio;\n\n\treturn coords;\n}\n\nvec2 post(vec2 coords)\n{\n\tcoords.x /= result_frameratio;\n\tcoords += center;\n\n\treturn coords;\n}\n\nvec2 rotate_coords(vec2 coords, float rot)\n{\n\tmat2 rm = mat2(\n\t\tcos(rot), sin(rot),\n\t\t-sin(rot), cos(rot)\n\t);\n\n\tcoords = pre(coords);\n\tcoords *= rm;\n\tcoords = post(coords);\n\n\treturn coords;\n}\n\nvec2 scale_coords(vec2 coords, vec2 scale_val)\n{\n\tcoords = pre(coords);\n\tcoords /= scale_val + vec2(1.0);\n\tcoords = post(coords);\n\n\treturn coords;\n}\n\nvec2 skew_coords(vec2 coords, vec2 skew_val)\n{\n\tmat2 sm = mat2(\n\t\t1.0, skew_val.x,\n\t\tskew_val.y, 1.0\n\t);\n\n\tcoords *= sm;\n\n\treturn coords;\n}\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n\tvec2 st = fragCoord.xy / res;\n\n\tvec3 back = texture2D(iChannel0, st).rgb;\n\n\tfloat strength = texture2D(iChannel2, st).r;\n\n\tvec2 fcoords = st;\n\n\tvec2 s = vec2(strength);\n\n\tfcoords = scale_coords(fcoords, vec2(scale) * vec2(scale_x, scale_y) * s);\n\tfcoords = skew_coords(fcoords, vec2(skew_x, skew_y) * s);\n\tfcoords = fcoords - vec2(pos_x, pos_y) * s;\n\tfcoords = rotate_coords(fcoords, rot * strength);\n\n\tvec3 front = texture2D(iChannel0, fcoords).rgb;\n\tfloat matte = texture2D(iChannel1, fcoords).r;\n\n/*\n\tif (isInTex(fcoords)) {\n\t\tfront = texture2D(iChannel0, fcoords).rgb;\n\t} else {\n\t\tfcoords = 1.0 - fcoords;\n\t\tfront = texture2D(iChannel0, fcoords).rgb;\n\t}\n\t*/\n\n\tif (! repeat_texture && ! isInTex(fcoords)) {\n\t\tfront = vec3(0.0);\n\t\tmatte = 0.0;\n\t}\n\n\tfloat alpha = mix(matte, 0.0, trans);\n\n\tvec3 comp = mix(back, front, alpha);\n\tif (warped_only) {\n\t\tcomp = front * vec3(alpha) * vec3(strength);\n\t}\n\n\tfragColor = vec4(comp, alpha);\n}\n")
+ del param
+
+ param = lastNode.getParam("mipmap0")
+ if param is not None:
+ param.set("linear")
+ del param
+
+ param = lastNode.getParam("inputLabel0")
+ if param is not None:
+ param.setValue("Front")
+ del param
+
+ param = lastNode.getParam("mipmap1")
+ if param is not None:
+ param.set("linear")
+ del param
+
+ param = lastNode.getParam("inputLabel1")
+ if param is not None:
+ param.setValue("Matte")
+ del param
+
+ param = lastNode.getParam("mipmap2")
+ if param is not None:
+ param.set("linear")
+ del param
+
+ param = lastNode.getParam("inputLabel2")
+ if param is not None:
+ param.setValue("Strength")
+ del param
+
+ param = lastNode.getParam("inputEnable3")
+ if param is not None:
+ param.setValue(False)
+ del param
+
+ param = lastNode.getParam("bbox")
+ if param is not None:
+ param.set("iChannel0")
+ del param
+
+ param = lastNode.getParam("NatronParamFormatChoice")
+ if param is not None:
+ param.set("PC_Video")
+ del param
+
+ param = lastNode.getParam("mouseParams")
+ if param is not None:
+ param.setValue(False)
+ del param
+
+ param = lastNode.getParam("paramCount")
+ if param is not None:
+ param.setValue(12, 0)
+ del param
+
+ param = lastNode.getParam("paramType0")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName0")
+ if param is not None:
+ param.setValue("pos_x")
+ del param
+
+ param = lastNode.getParam("paramLabel0")
+ if param is not None:
+ param.setValue("Position X :")
+ del param
+
+ param = lastNode.getParam("paramHint0")
+ if param is not None:
+ param.setValue("Horizontal translation.")
+ del param
+
+ param = lastNode.getParam("paramType1")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName1")
+ if param is not None:
+ param.setValue("pos_y")
+ del param
+
+ param = lastNode.getParam("paramLabel1")
+ if param is not None:
+ param.setValue("Position Y :")
+ del param
+
+ param = lastNode.getParam("paramHint1")
+ if param is not None:
+ param.setValue("Vertical translation.")
+ del param
+
+ param = lastNode.getParam("paramType2")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName2")
+ if param is not None:
+ param.setValue("scale")
+ del param
+
+ param = lastNode.getParam("paramLabel2")
+ if param is not None:
+ param.setValue("Scale :")
+ del param
+
+ param = lastNode.getParam("paramHint2")
+ if param is not None:
+ param.setValue("Scale.")
+ del param
+
+ param = lastNode.getParam("paramType3")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName3")
+ if param is not None:
+ param.setValue("scale_x")
+ del param
+
+ param = lastNode.getParam("paramLabel3")
+ if param is not None:
+ param.setValue("Scale X :")
+ del param
+
+ param = lastNode.getParam("paramHint3")
+ if param is not None:
+ param.setValue("Horizontal scale bias.")
+ del param
+
+ param = lastNode.getParam("paramDefaultFloat3")
+ if param is not None:
+ param.setValue(1, 0)
+ del param
+
+ param = lastNode.getParam("paramType4")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName4")
+ if param is not None:
+ param.setValue("scale_y")
+ del param
+
+ param = lastNode.getParam("paramLabel4")
+ if param is not None:
+ param.setValue("Scale Y :")
+ del param
+
+ param = lastNode.getParam("paramHint4")
+ if param is not None:
+ param.setValue("Vertical scale bias.")
+ del param
+
+ param = lastNode.getParam("paramDefaultFloat4")
+ if param is not None:
+ param.setValue(1, 0)
+ del param
+
+ param = lastNode.getParam("paramType5")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName5")
+ if param is not None:
+ param.setValue("rot")
+ del param
+
+ param = lastNode.getParam("paramLabel5")
+ if param is not None:
+ param.setValue("Rotation :")
+ del param
+
+ param = lastNode.getParam("paramHint5")
+ if param is not None:
+ param.setValue("Rotation.")
+ del param
+
+ param = lastNode.getParam("paramType6")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName6")
+ if param is not None:
+ param.setValue("skew_x")
+ del param
+
+ param = lastNode.getParam("paramLabel6")
+ if param is not None:
+ param.setValue("Skew X :")
+ del param
+
+ param = lastNode.getParam("paramHint6")
+ if param is not None:
+ param.setValue("Horizontal skew.")
+ del param
+
+ param = lastNode.getParam("paramType7")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName7")
+ if param is not None:
+ param.setValue("skew_y")
+ del param
+
+ param = lastNode.getParam("paramLabel7")
+ if param is not None:
+ param.setValue("Skew Y :")
+ del param
+
+ param = lastNode.getParam("paramHint7")
+ if param is not None:
+ param.setValue("Vertical skew.")
+ del param
+
+ param = lastNode.getParam("paramType8")
+ if param is not None:
+ param.set("float")
+ del param
+
+ param = lastNode.getParam("paramName8")
+ if param is not None:
+ param.setValue("trans")
+ del param
+
+ param = lastNode.getParam("paramLabel8")
+ if param is not None:
+ param.setValue("Transparency :")
+ del param
+
+ param = lastNode.getParam("paramHint8")
+ if param is not None:
+ param.setValue("Transparency.")
+ del param
+
+ param = lastNode.getParam("paramType9")
+ if param is not None:
+ param.set("bool")
+ del param
+
+ param = lastNode.getParam("paramName9")
+ if param is not None:
+ param.setValue("repeat_texture")
+ del param
+
+ param = lastNode.getParam("paramLabel9")
+ if param is not None:
+ param.setValue("Repeat Texture :")
+ del param
+
+ param = lastNode.getParam("paramHint9")
+ if param is not None:
+ param.setValue("Repeat the Texture")
+ del param
+
+ param = lastNode.getParam("paramDefaultBool9")
+ if param is not None:
+ param.setValue(True)
+ del param
+
+ param = lastNode.getParam("paramType10")
+ if param is not None:
+ param.set("bool")
+ del param
+
+ param = lastNode.getParam("paramName10")
+ if param is not None:
+ param.setValue("warped_only")
+ del param
+
+ param = lastNode.getParam("paramLabel10")
+ if param is not None:
+ param.setValue("Wraped Only :")
+ del param
+
+ param = lastNode.getParam("paramHint10")
+ if param is not None:
+ param.setValue("Output warped only. Default is to comp over the original.")
+ del param
+
+ param = lastNode.getParam("paramType11")
+ if param is not None:
+ param.set("vec2")
+ del param
+
+ param = lastNode.getParam("paramName11")
+ if param is not None:
+ param.setValue("center")
+ del param
+
+ param = lastNode.getParam("paramLabel11")
+ if param is not None:
+ param.setValue("Center :")
+ del param
+
+ param = lastNode.getParam("paramHint11")
+ if param is not None:
+ param.setValue("Center of scale and rotation.")
+ del param
+
+ param = lastNode.getParam("paramDefaultVec211")
+ if param is not None:
+ param.setValue(0.5, 0)
+ param.setValue(0.5, 1)
+ del param
+
+ del lastNode
+ # End of node "Shadertoy1_2"
+
+ # Start of node "Dot1"
+ lastNode = app.createNode("fr.inria.built-in.Dot", 1, group)
+ lastNode.setScriptName("Dot1")
+ lastNode.setLabel("Dot1")
+ lastNode.setPosition(4459, 3935)
+ lastNode.setSize(15, 15)
+ lastNode.setColor(0.7, 0.7, 0.7)
+ groupDot1 = lastNode
+
+ del lastNode
+ # End of node "Dot1"
+
+ # Start of node "Dot2"
+ lastNode = app.createNode("fr.inria.built-in.Dot", 1, group)
+ lastNode.setScriptName("Dot2")
+ lastNode.setLabel("Dot2")
+ lastNode.setPosition(4744, 3938)
+ lastNode.setSize(15, 15)
+ lastNode.setColor(0.7, 0.7, 0.7)
+ groupDot2 = lastNode
+
+ del lastNode
+ # End of node "Dot2"
+
+ # Start of node "Shuffle2"
+ lastNode = app.createNode("net.sf.openfx.ShufflePlugin", 3, group)
+ lastNode.setScriptName("Shuffle2")
+ lastNode.setLabel("Shuffle2")
+ lastNode.setPosition(4570, 3828)
+ lastNode.setSize(80, 32)
+ lastNode.setColor(0.6, 0.24, 0.39)
+ groupShuffle2 = lastNode
+
+ param = lastNode.getParam("outputR")
+ if param is not None:
+ param.set("B.uk.co.thefoundry.OfxImagePlaneColour.A")
+ del param
+
+ del lastNode
+ # End of node "Shuffle2"
+
+ # Now that all nodes are created we can connect them together, restore expressions
+ groupOutput1.connectInput(0, groupShadertoy1_2)
+ groupShadertoy1_2.connectInput(0, groupDot1)
+ groupShadertoy1_2.connectInput(1, groupShuffle2)
+ groupShadertoy1_2.connectInput(2, groupDot2)
+ groupDot1.connectInput(0, groupFront)
+ groupDot2.connectInput(0, groupStrength)
+ groupShuffle2.connectInput(0, groupMatte)
+
+ param = groupShadertoy1_2.getParam("paramValueFloat0")
+ group.getParam("Shadertoy1_2paramValueFloat0").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat1")
+ group.getParam("Shadertoy1_2paramValueFloat1").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat2")
+ group.getParam("Shadertoy1_2paramValueFloat2").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat3")
+ group.getParam("Shadertoy1_2paramValueFloat3").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat4")
+ group.getParam("Shadertoy1_2paramValueFloat4").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat5")
+ group.getParam("Shadertoy1_2paramValueFloat5").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat6")
+ group.getParam("Shadertoy1_2paramValueFloat6").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat7")
+ group.getParam("Shadertoy1_2paramValueFloat7").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueFloat8")
+ group.getParam("Shadertoy1_2paramValueFloat8").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueBool9")
+ group.getParam("Shadertoy1_2paramValueBool9").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueBool10")
+ group.getParam("Shadertoy1_2paramValueBool10").setAsAlias(param)
+ del param
+ param = groupShadertoy1_2.getParam("paramValueVec211")
+ group.getParam("Shadertoy1_2paramValueVec211").setAsAlias(param)
+ del param
+
+ try:
+ extModule = sys.modules["y_ixform_GLExt"]
+ except KeyError:
+ extModule = None
+ if extModule is not None and hasattr(extModule ,"createInstanceExt") and hasattr(extModule.createInstanceExt,"__call__"):
+ extModule.createInstanceExt(app,group)
diff --git a/GLSL/Effect/y_ixform_GL/y_ixform_GL.xml b/GLSL/Effect/y_ixform_GL/y_ixform_GL.xml
new file mode 100644
index 0000000..22fb792
--- /dev/null
+++ b/GLSL/Effect/y_ixform_GL/y_ixform_GL.xml
@@ -0,0 +1,10 @@
+
+
+ y_ixform_GL
+ Transform a thing. This is only cool if you input the optional black and white strength channel. The transormation will be multiplied by the value of the strength channel.
+ 1.0
+ @DATE@
+ natron.community.plugins.y_ixform_GL
+ script
+
+
diff --git a/Shadertoy/y_flicker.frag.glsl b/Shadertoy/y_flicker.frag.glsl
new file mode 100644
index 0000000..46d5c13
--- /dev/null
+++ b/Shadertoy/y_flicker.frag.glsl
@@ -0,0 +1,104 @@
+//
+//
+// MMMMMMMMMMMMMMMMMMMMMMMMMMMM
+// MM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MMMM MMMMMMM MMM. .MM
+// MM. .MMM MMMMMM MMM. .MM
+// MM. .MmM MMMM MMM. .MM
+// MM. .MMM MM MMM. .MM
+// MM. .MMM M MMM. .MM
+// MM. .MMM MMM. .MM
+// MM. .MMM MMM. .MM
+// MM. .MMM M MMM. .MM
+// MM. .MMM MM MMM. .MM
+// MM. .MMM MMM MMM. .MM
+// MM. .MMM MMMM MMM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MM
+// MMMMMMMMMMMMMMMMMMMMMMMMMMMM
+//
+//
+//
+//
+// Adaptation pour Natron par F. Fernandez
+// Code original : y_flicker pour Autodesk Flame
+
+// Adapted to Natron by F.Fernandez
+// Original code : y_flicker for Autodesk Flame
+
+
+// iChannel0: Source,filter=linear,wrap=clamp
+// iChannel1: LockFrame,filter=linear,wrap=clamp
+// BBox: iChannel0
+
+
+#extension GL_ARB_shader_texture_lod : enable
+
+float adsk_getLuminance( vec3 rgb )
+{
+ // Algorithm from Chapter 10 of Graphics Shaders.
+ const vec3 W = vec3(0.2125, 0.7154, 0.0721);
+ return dot(rgb, W);
+}
+
+
+vec2 res = vec2(iResolution.x, iResolution.y);
+
+
+uniform float lod = 10.0; // Average : (Level of detail. Higher is lower and usually what you want.), min=0.0, max=10.0
+uniform int operation = 0; // Operation : (Choose to remove flicker from input 1, or copy the flicker of input 1 to input 2.), min=0, max=1
+uniform bool match_chroma = false; // Match Chroma : (Try and match the chroma as well as luma.)
+
+
+void mainImage( out vec4 fragColor, in vec2 fragCoord )
+{
+ vec2 st = fragCoord.xy / res;
+
+ vec3 front = vec3(0.0);
+ vec3 front_avg = texture2DLod(iChannel0, st, lod).rgb;
+ vec3 lock_frame = texture2DLod(iChannel1, st, lod).rgb;
+
+ vec3 new_gain = vec3(0.0);
+
+ if (operation == 1) {
+ if (lock_frame.r != 0.0) {
+ new_gain.r = front_avg.r / lock_frame.r;
+ }
+ if (lock_frame.g != 0.0) {
+ new_gain.g = front_avg.r / lock_frame.g;
+ }
+ if (lock_frame.b != 0.0) {
+ new_gain.b = front_avg.b / lock_frame.b;
+ }
+ front = texture2D(iChannel1, st).rgb;
+ } else {
+ new_gain = lock_frame / max(front_avg, vec3(.00001));
+
+ if (front_avg.r != 0.0) {
+ new_gain.r = lock_frame.r / front_avg.r;
+ }
+ if (front_avg.g != 0.0) {
+ new_gain.g = lock_frame.r / front_avg.g;
+ }
+ if (front_avg.b != 0.0) {
+ new_gain.b = lock_frame.b / front_avg.b;
+ }
+
+ front = texture2D(iChannel0, st).rgb;
+ }
+
+ new_gain = clamp(new_gain, -5.0, 5.0);
+
+ float gdif = adsk_getLuminance(new_gain.rgb);
+
+ if (match_chroma) {
+ front *= new_gain;
+ } else {
+ front *= gdif;
+ }
+
+ fragColor.rgb = front;
+}
diff --git a/Shadertoy/y_ixform.frag.glsl b/Shadertoy/y_ixform.frag.glsl
new file mode 100644
index 0000000..dc11384
--- /dev/null
+++ b/Shadertoy/y_ixform.frag.glsl
@@ -0,0 +1,167 @@
+//
+//
+// MMMMMMMMMMMMMMMMMMMMMMMMMMMM
+// MM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MMMM MMMMMMM MMM. .MM
+// MM. .MMM MMMMMM MMM. .MM
+// MM. .MmM MMMM MMM. .MM
+// MM. .MMM MM MMM. .MM
+// MM. .MMM M MMM. .MM
+// MM. .MMM MMM. .MM
+// MM. .MMM MMM. .MM
+// MM. .MMM M MMM. .MM
+// MM. .MMM MM MMM. .MM
+// MM. .MMM MMM MMM. .MM
+// MM. .MMM MMMM MMM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM
+// MM. .MM
+// MMMMMMMMMMMMMMMMMMMMMMMMMMMM
+//
+//
+//
+//
+// Adaptation pour Natron par F. Fernandez
+// Code original : y_ixform Matchbox pour Autodesk Flame
+
+// Adapted to Natron by F.Fernandez
+// Original code : y_ixform Matchbox for Autodesk Flame
+
+
+// iChannel0:Front,filter=linear,wrap=repeat
+// iChannel1:Matte,filter=linear,wrap=repeat
+// iChannel2:Strength,filter=linear,wrap=repeat
+// BBox: iChannel0
+
+
+float result_frameratio = iResolution.x/iResolution.y;
+
+vec2 res = vec2(iResolution.x, iResolution.y);
+vec2 texel = vec2(1.0) / res;
+
+
+
+uniform float pos_x = 0.0; // Position X : (Horizontal translation.)
+uniform float pos_y = 0.0; // Position Y : (Vertical translation.)
+
+uniform float scale = 0.0; // Scale : (Scale.)
+uniform float scale_x = 1.0; // Scale X : (Horizontal scale bias.)
+uniform float scale_y = 1.0; // Scale Y : (Vertical scale bias.)
+
+uniform float rot = 0.0; // Rotation : (Rotation.)
+
+uniform float skew_x = 0.0; // Skew X : (Horizontal skew.)
+uniform float skew_y = 0.0; // Skew Y : (Vertical skew.)
+
+uniform float trans = 0.0; // Transparency : (Transparency.)
+
+uniform bool repeat_texture = true; // Repeat Texture : (Repeat the Texture)
+uniform bool warped_only = false; // Wraped Only : (Output warped only. Default is to comp over the original.)
+
+//const vec2 center = vec2(.5);
+
+uniform vec2 center = vec2(0.5,0.5); // Center : (Center of scale and rotation.)
+
+bool isInTex( const vec2 coords )
+{
+ return coords.x >= 0.0 && coords.x <= 1.0 &&
+ coords.y >= 0.0 && coords.y <= 1.0;
+}
+
+
+vec2 pre(vec2 coords)
+{
+ coords -= center;
+ coords.x *= result_frameratio;
+
+ return coords;
+}
+
+vec2 post(vec2 coords)
+{
+ coords.x /= result_frameratio;
+ coords += center;
+
+ return coords;
+}
+
+vec2 rotate_coords(vec2 coords, float rot)
+{
+ mat2 rm = mat2(
+ cos(rot), sin(rot),
+ -sin(rot), cos(rot)
+ );
+
+ coords = pre(coords);
+ coords *= rm;
+ coords = post(coords);
+
+ return coords;
+}
+
+vec2 scale_coords(vec2 coords, vec2 scale_val)
+{
+ coords = pre(coords);
+ coords /= scale_val + vec2(1.0);
+ coords = post(coords);
+
+ return coords;
+}
+
+vec2 skew_coords(vec2 coords, vec2 skew_val)
+{
+ mat2 sm = mat2(
+ 1.0, skew_val.x,
+ skew_val.y, 1.0
+ );
+
+ coords *= sm;
+
+ return coords;
+}
+
+void mainImage( out vec4 fragColor, in vec2 fragCoord )
+{
+ vec2 st = fragCoord.xy / res;
+
+ vec3 back = texture2D(iChannel0, st).rgb;
+
+ float strength = texture2D(iChannel2, st).r;
+
+ vec2 fcoords = st;
+
+ vec2 s = vec2(strength);
+
+ fcoords = scale_coords(fcoords, vec2(scale) * vec2(scale_x, scale_y) * s);
+ fcoords = skew_coords(fcoords, vec2(skew_x, skew_y) * s);
+ fcoords = fcoords - vec2(pos_x, pos_y) * s;
+ fcoords = rotate_coords(fcoords, rot * strength);
+
+ vec3 front = texture2D(iChannel0, fcoords).rgb;
+ float matte = texture2D(iChannel1, fcoords).r;
+
+/*
+ if (isInTex(fcoords)) {
+ front = texture2D(iChannel0, fcoords).rgb;
+ } else {
+ fcoords = 1.0 - fcoords;
+ front = texture2D(iChannel0, fcoords).rgb;
+ }
+ */
+
+ if (! repeat_texture && ! isInTex(fcoords)) {
+ front = vec3(0.0);
+ matte = 0.0;
+ }
+
+ float alpha = mix(matte, 0.0, trans);
+
+ vec3 comp = mix(back, front, alpha);
+ if (warped_only) {
+ comp = front * vec3(alpha) * vec3(strength);
+ }
+
+ fragColor = vec4(comp, alpha);
+}