diff --git a/_pkg_KuFunc/_obsolete/mod_IP_v1s0.py b/_pkg_KuFunc/_obsolete/mod_IP_v1s0.py
new file mode 100644
index 0000000..65acec2
--- /dev/null
+++ b/_pkg_KuFunc/_obsolete/mod_IP_v1s0.py
@@ -0,0 +1,254 @@
+'''
+
+Functions to call for VIEWER_INPUT
+
+'''
+
+
+
+
+#------------------------------------------------------------------------------
+#-Module Import
+#------------------------------------------------------------------------------
+
+
+
+
+import platform
+import os
+from Qt import QtWidgets, QtGui, QtCore
+import nuke, nukescripts
+
+
+
+
+#------------------------------------------------------------------------------
+#-Header
+#------------------------------------------------------------------------------
+
+
+
+
+__VERSION__ = '1.0'
+__OS__ = platform.system()
+__AUTHOR__ = "Tianlun Jiang"
+__WEBSITE__ = "jiangovfx.com"
+__COPYRIGHT__ = "copyright (c) %s - %s" % (__AUTHOR__, __WEBSITE__)
+
+__TITLE__ = "IP v%s" % __VERSION__
+
+
+
+def _version_():
+ ver='''
+
+ version 1.0
+ - Creating A IP node with preset buttons
+
+ '''
+ return ver
+
+
+
+#------------------------------------------------------------------------------
+#-Global Variables
+#------------------------------------------------------------------------------
+
+
+
+
+PRESET_STR = 'IPSet'
+
+
+
+
+#-------------------------------------------------------------------------------
+#- Main Callable
+#-------------------------------------------------------------------------------
+
+
+
+
+def IP():
+ '''main callable function'''
+
+ if 'VIEWER_INPUT' not in [n.name() for n in nuke.allNodes('Group')]:
+ build_IP()
+ else:
+ nuke.message("VIEWER_INPUT already exist")
+
+
+
+
+#-------------------------------------------------------------------------------
+#-Supporting Functions
+#-------------------------------------------------------------------------------
+
+
+
+
+def build_IP():
+ '''build IP node'''
+ if 'VIEWER_INPUT' in [n.name() for n in nuke.allNodes()]:
+ nuke.message('IP already exist')
+ else:
+
+ str_autolabel = "\n('exp: %s\\n' % nuke.thisNode()['exp'].value())+('gamma: %s\\n' % nuke.thisNode()['y'].value())+('sat: %s\\n' % nuke.thisNode()['sat'].value())"
+ colour_bg = 2135237631
+ colour_text = 4289560575
+
+ # Declare Node
+ node_IP = nuke.nodes.Group(
+ note_font_color = colour_text,
+ note_font_size = 48,
+ note_font = 'bold',
+ tile_color = colour_bg,
+ hide_input = True
+ )
+ node_IP.setName('VIEWER_INPUT')
+
+ # Declare knobs
+ k_tab = nuke.Tab_Knob('tb_user', 'ku_IP')
+ k_cdl_add = nuke.PyScript_Knob('cdl_add', 'add cdl', 'mod_IP.add_cdl()')
+ k_exp = nuke.Double_Knob('exp', 'exposure')
+ k_exp_d = nuke.Boolean_Knob('d_exp', 'disable', True)
+ k_y = nuke.Double_Knob('y', 'gamma')
+ k_y_d = nuke.Boolean_Knob('d_y', 'disable', True)
+ k_sat = nuke.Double_Knob('sat', 'saturation')
+ k_sat_d = nuke.Boolean_Knob('d_sat', 'disable', True)
+ k_cdl = nuke.Boolean_Knob('cdl', 'SHOW CDL GRADE')
+ k_div_preset = nuke.Text_Knob('tx_preset', 'preset')
+ k_preset_add = nuke.PyScript_Knob('preset_add', '+', 'mod_IP.add_preset()')
+ k_preset_remove = nuke.PyScript_Knob('preset_remove', '−', 'mod_IP.remove_preset()')
+
+ k_exp.setValue(0)
+ k_y.setValue(1)
+ k_sat.setValue(1)
+
+ for k in [k_exp_d, k_y_d, k_sat_d, k_preset_remove]:
+ k.clearFlag(nuke.STARTLINE)
+ k_cdl.setFlag(nuke.STARTLINE)
+
+ ## Add Knobs
+ for k in [k_tab, k_cdl_add, k_exp, k_exp_d, k_y, k_y_d, k_sat, k_sat_d, k_cdl, k_div_preset, k_preset_add, k_preset_remove]:
+ node_IP.addKnob(k)
+
+ # Add nodes inside IP Group
+ with node_IP:
+ nuke.createNode('Input', "name Input", inpanel=False)
+ nuke.createNode('EXPTool', "name _EXPOSURE_ channels rgb", inpanel=False)
+ nuke.createNode('Gamma', "name _GAMMA_ channels rgb", inpanel=False)
+ nuke.createNode('Saturation', "name _SATURATION_ channels rgb", inpanel=False)
+ nuke.createNode('Output', "name Output", inpanel=False)
+
+ nuke.toNode('_EXPOSURE_')['red'].setExpression('parent.exp')
+ nuke.toNode('_EXPOSURE_')['green'].setExpression('parent.exp')
+ nuke.toNode('_EXPOSURE_')['blue'].setExpression('parent.exp')
+ nuke.toNode('_GAMMA_')['value'].setExpression('parent.y')
+ nuke.toNode('_SATURATION_')['saturation'].setExpression('parent.sat')
+
+ nuke.toNode('_EXPOSURE_')['disable'].setExpression('parent.d_exp')
+ nuke.toNode('_GAMMA_')['disable'].setExpression('parent.d_y')
+ nuke.toNode('_SATURATION_')['disable'].setExpression('parent.d_sat')
+
+ node_IP['autolabel'].setValue(str_autolabel)
+
+def add_cdl():
+ '''adds cdl group to IP node'''
+ node_cdl = nuke.root().selectedNode()
+ print node_cdl.name()
+ if node_cdl != nuke.thisNode():
+ node_ip = nuke.thisNode()
+ #node_ip = nuke.toNode('VIEWER_INPUT')
+ with nuke.root():
+ nuke.nodeCopy('%clipboard%')
+ nukescripts.clear_selection_recursive()
+
+ # k_cdl = nuke.Boolean_Knob('cdl', "AVID GRADE CDL")
+ # k_cdl.setFlag(nuke.STARTLINE)
+ # node_ip.addKnob(k_cdl)
+
+ with node_ip:
+ group_input = nuke.toNode('Input')
+ group_input.setSelected(True)
+ node_cdl = nuke.nodePaste('%clipboard%')
+ node_cdl['disable'].setExpression('!parent.cdl')
+
+
+def add_preset():
+ '''create preset buttons adds data to tooltip'''
+ node = nuke.thisNode()
+ node_viewer = nuke.activeViewer().node()
+
+ # Get knob values
+ dict_knobs = {}
+
+ dict_knobs['lut'] = node_viewer['viewerProcess'].value()
+ dict_knobs['cdl'] = node['cdl'].value() if 'cdl' in node.knobs() else None
+ ls_knobs = ['exp', 'y','sat', 'd_exp', 'd_y', 'd_sat']
+ for k in ls_knobs:
+ dict_knobs[k] = node[k].value()
+
+ # Build knob for this preset
+ this_preset_idx = preset_idx()
+ preset_latest = PRESET_STR+str(this_preset_idx)
+
+ ## Label input
+ this_preset_label = nuke.getInput('Preset Label (keep it short)',
+ preset_latest.replace(PRESET_STR, PRESET_STR+': '))
+
+ if this_preset_label:
+ cmd="mod_IP.apply_preset()"
+ k_preset = nuke.PyScript_Knob(preset_latest, this_preset_label, cmd)
+ k_preset.setTooltip(str(dict_knobs))
+ if this_preset_idx > 1:
+ k_preset.clearFlag(nuke.STARTLINE)
+
+ node.addKnob(k_preset)
+
+
+def apply_preset():
+ '''apply presets
+ @idx: (int), index for preset to apply
+ '''
+
+ node = nuke.thisNode()
+ thisPreset = eval(nuke.thisKnob().tooltip())
+
+ for k,v in thisPreset.iteritems():
+ if k == 'lut':
+ nuke.activeViewer().node()['viewerProcess'].setValue(v)
+ elif k == 'cdl' and v != None:
+ node[k].setValue(v)
+ else:
+ node[k].setValue(v)
+
+
+def preset_idx():
+ '''finds latest preset button index
+ return: int
+ '''
+
+ node = nuke.thisNode()
+ try:
+ idx_latest = int(max([k.split(PRESET_STR)[1] for k in node.knobs() if k.startswith(PRESET_STR)]))+1
+ except:
+ idx_latest = 1
+
+ return int(idx_latest)
+
+
+def remove_preset():
+ '''remove preset button'''
+
+ node = nuke.thisNode()
+
+ knob_presets = [str(k +' | ' + node.knob(k).label()) for k in node.knobs() if k.startswith(PRESET_STR)]
+
+ p = nukescripts.PythonPanel('Remove A Preset')
+ pk_knoblist = nuke.Enumeration_Knob('knoblist', "Delete Preset: ", knob_presets)
+ p.addKnob(pk_knoblist)
+
+ if p.showModalDialog():
+ knob_delete = node.knob(pk_knoblist.value().split(' | ')[0])
+ node.removeKnob(knob_delete)
diff --git a/_pkg_KuFunc/mod_IP.py b/_pkg_KuFunc/mod_IP.py
index 65acec2..d0e221a 100644
--- a/_pkg_KuFunc/mod_IP.py
+++ b/_pkg_KuFunc/mod_IP.py
@@ -16,7 +16,6 @@
import platform
import os
-from Qt import QtWidgets, QtGui, QtCore
import nuke, nukescripts
@@ -29,7 +28,7 @@
-__VERSION__ = '1.0'
+__VERSION__ = '2.0'
__OS__ = platform.system()
__AUTHOR__ = "Tianlun Jiang"
__WEBSITE__ = "jiangovfx.com"
@@ -45,11 +44,17 @@ def _version_():
version 1.0
- Creating A IP node with preset buttons
+ version 2.0
+ - set channels to all and copy alpha to output
+ - add reset button
+ - remove startline to preset buttons
+
'''
return ver
+
#------------------------------------------------------------------------------
#-Global Variables
#------------------------------------------------------------------------------
@@ -109,17 +114,16 @@ def build_IP():
# Declare knobs
k_tab = nuke.Tab_Knob('tb_user', 'ku_IP')
- k_cdl_add = nuke.PyScript_Knob('cdl_add', 'add cdl', 'mod_IP.add_cdl()')
k_exp = nuke.Double_Knob('exp', 'exposure')
k_exp_d = nuke.Boolean_Knob('d_exp', 'disable', True)
k_y = nuke.Double_Knob('y', 'gamma')
k_y_d = nuke.Boolean_Knob('d_y', 'disable', True)
k_sat = nuke.Double_Knob('sat', 'saturation')
k_sat_d = nuke.Boolean_Knob('d_sat', 'disable', True)
- k_cdl = nuke.Boolean_Knob('cdl', 'SHOW CDL GRADE')
k_div_preset = nuke.Text_Knob('tx_preset', 'preset')
k_preset_add = nuke.PyScript_Knob('preset_add', '+', 'mod_IP.add_preset()')
k_preset_remove = nuke.PyScript_Knob('preset_remove', '−', 'mod_IP.remove_preset()')
+ k_reset = nuke.PyScript_Knob('reset', 'reset', 'mod_IP.reset()')
k_exp.setValue(0)
k_y.setValue(1)
@@ -127,23 +131,24 @@ def build_IP():
for k in [k_exp_d, k_y_d, k_sat_d, k_preset_remove]:
k.clearFlag(nuke.STARTLINE)
- k_cdl.setFlag(nuke.STARTLINE)
+ k_reset.setFlag(nuke.STARTLINE)
## Add Knobs
- for k in [k_tab, k_cdl_add, k_exp, k_exp_d, k_y, k_y_d, k_sat, k_sat_d, k_cdl, k_div_preset, k_preset_add, k_preset_remove]:
+ for k in [k_tab, k_exp, k_exp_d, k_y, k_y_d, k_sat, k_sat_d, k_div_preset, k_preset_add, k_preset_remove, k_reset]:
node_IP.addKnob(k)
# Add nodes inside IP Group
with node_IP:
nuke.createNode('Input', "name Input", inpanel=False)
- nuke.createNode('EXPTool', "name _EXPOSURE_ channels rgb", inpanel=False)
- nuke.createNode('Gamma', "name _GAMMA_ channels rgb", inpanel=False)
- nuke.createNode('Saturation', "name _SATURATION_ channels rgb", inpanel=False)
+ nuke.createNode('Multiply', "name _EXPOSURE_ channels all", inpanel=False)
+ nuke.createNode('Gamma', "name _GAMMA_ channels all", inpanel=False)
+ nuke.createNode('Saturation', "name _SATURATION_ channels all", inpanel=False)
+ copy_node = nuke.createNode('Copy', "name _ALPHA_COPY_", inpanel=False)
+ copy_node.setInput(0, nuke.toNode('_SATURATION_'))
+ copy_node.setInput(1, nuke.toNode('Input'))
nuke.createNode('Output', "name Output", inpanel=False)
- nuke.toNode('_EXPOSURE_')['red'].setExpression('parent.exp')
- nuke.toNode('_EXPOSURE_')['green'].setExpression('parent.exp')
- nuke.toNode('_EXPOSURE_')['blue'].setExpression('parent.exp')
+ nuke.toNode('_EXPOSURE_')['value'].setExpression('pow(2,parent.exp)')
nuke.toNode('_GAMMA_')['value'].setExpression('parent.y')
nuke.toNode('_SATURATION_')['saturation'].setExpression('parent.sat')
@@ -153,26 +158,25 @@ def build_IP():
node_IP['autolabel'].setValue(str_autolabel)
-def add_cdl():
- '''adds cdl group to IP node'''
- node_cdl = nuke.root().selectedNode()
- print node_cdl.name()
- if node_cdl != nuke.thisNode():
- node_ip = nuke.thisNode()
- #node_ip = nuke.toNode('VIEWER_INPUT')
- with nuke.root():
- nuke.nodeCopy('%clipboard%')
- nukescripts.clear_selection_recursive()
-
- # k_cdl = nuke.Boolean_Knob('cdl', "AVID GRADE CDL")
- # k_cdl.setFlag(nuke.STARTLINE)
- # node_ip.addKnob(k_cdl)
-
- with node_ip:
- group_input = nuke.toNode('Input')
- group_input.setSelected(True)
- node_cdl = nuke.nodePaste('%clipboard%')
- node_cdl['disable'].setExpression('!parent.cdl')
+
+
+
+#-------------------------------------------------------------------------------
+#-Button Functions
+#-------------------------------------------------------------------------------
+
+
+
+def reset():
+ """Reset Parameters"""
+ n = nuke.thisNode()
+
+ n['exp'].setValue(0)
+ n['y'].setValue(1)
+ n['sat'].setValue(1)
+ n['d_exp'].setValue(1)
+ n['d_y'].setValue(1)
+ n['d_sat'].setValue(1)
def add_preset():
@@ -201,10 +205,10 @@ def add_preset():
cmd="mod_IP.apply_preset()"
k_preset = nuke.PyScript_Knob(preset_latest, this_preset_label, cmd)
k_preset.setTooltip(str(dict_knobs))
- if this_preset_idx > 1:
- k_preset.clearFlag(nuke.STARTLINE)
-
+ # if this_preset_idx > 1:
+ # k_preset.clearFlag(nuke.STARTLINE)
node.addKnob(k_preset)
+ k_preset.setFlag(nuke.STARTLINE)
def apply_preset():