set cut_paste_input [stack 0]
push $cut_paste_input
Group {
name RCM
label "Expected Input is Linear Davinci Wide Gamut and output DaResolve's Rec709 Gamma 2.4"
selected true
xpos -386
ypos -115
}
Input {
inputs 0
name Input1
xpos 0
}
Group {
name LogConvert_Davinci_Intermediate
selected true
xpos 0
ypos 49
disable true
addUserKnob {20 Intermediate_tab l Intermediate}
addUserKnob {4 operation M {log2lin lin2log}}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
Dot {
name Dot1
xpos -6
ypos 114
}
set Nf878d400 [stack 0]
Expression {
expr0 r<=DI_LIN_CUT?r*DI_M:(log(r+DI_A)/log(2)+DI_B)*DI_C
expr1 g<=DI_LIN_CUT?g*DI_M:(log(g+DI_A)/log(2)+DI_B)*DI_C
expr2 b<=DI_LIN_CUT?b*DI_M:(log(b+DI_A)/log(2)+DI_B)*DI_C
channel3 none
name lin2log
xpos 80
ypos 110
addUserKnob {20 Params}
addUserKnob {7 DI_A}
DI_A 0.0075
addUserKnob {7 DI_B}
DI_B 7
addUserKnob {7 DI_C}
DI_C 0.07329248
addUserKnob {7 DI_M}
DI_M 10.44426855
addUserKnob {7 DI_LIN_CUT}
DI_LIN_CUT 0.00262409
addUserKnob {7 DI_LOG_CUT}
DI_LOG_CUT 0.02740668
}
push $Nf878d400
Expression {
expr0 r<=DI_LOG_CUT?r/DI_M:pow(2.0,(r/DI_C)-DI_B)-DI_A
expr1 g<=DI_LOG_CUT?g/DI_M:pow(2.0,(g/DI_C)-DI_B)-DI_A
expr2 b<=DI_LOG_CUT?b/DI_M:pow(2.0,(b/DI_C)-DI_B)-DI_A
channel3 none
name log2lin
xpos -160
ypos 110
addUserKnob {20 Params}
addUserKnob {7 DI_A}
DI_A 0.0075
addUserKnob {7 DI_B}
DI_B 7
addUserKnob {7 DI_C}
DI_C 0.07329248
addUserKnob {7 DI_M}
DI_M 10.44426855
addUserKnob {7 DI_LIN_CUT}
DI_LIN_CUT 0.00262409
addUserKnob {7 DI_LOG_CUT}
DI_LOG_CUT 0.02740668
}
Switch {
inputs 2
which {{parent.operation}}
name Operation
xpos -40
ypos 190
}
Output {
name Output1
xpos -40
ypos 310
}
end_group
Expression {
expr0 invert?(s0*r/(s1-r))**(1/n):s1*r**n/(r**n+s0)
expr1 invert?(s0*g/(s1-g))**(1/n):s1*g**n/(g**n+s0)
expr2 invert?(s0*b/(s1-b))**(1/n):s1*b**n/(b**n+s0)
name NakaRush
xpos 0
ypos 122
addUserKnob {20 User}
addUserKnob {7 n R 1 10}
n 1
addUserKnob {7 g0}
g0 0.09
addUserKnob {7 g1}
g1 0.09
addUserKnob {7 m0}
m0 100
addUserKnob {7 m1}
m1 1
addUserKnob {7 s0}
s0 {{(g0**n)*(s1-g1)/g1}}
addUserKnob {7 s1}
s1 {{m1*g1*(g0**n-m0**n)/(m1*g0**n-g1*m0**n)}}
addUserKnob {6 invert +STARTLINE}
}
Group {
name GamutConvert
tile_color 0xcc804eff
label "DaVinci Wide Gamut to Rec709"
xpos 0
ypos 167
addUserKnob {20 Params}
addUserKnob {35 presets_src l src M {"gamut/ACES AP0" "knobs this \{src_name \"ACES AP0\" src \"0.7347 0.2653 0.0 1.0 0.0001 -0.077 0.32168 0.33767\"\}" "gamut/ACES AP1" "knobs this \{src_name \"ACES AP1\" src \"0.713 0.293 0.165 0.83 0.128 0.044 0.32168 0.33767\"\}" "gamut/Filmlight E-Gamut" "knobs this \{src_name \"Filmlight E-Gamut\" src \"0.8 0.3177 0.18 0.9 0.065 -0.0805 0.3127 0.329\"\}" "gamut/DaVinci Wide Gamut" "knobs this \{src_name \"DaVinci Wide Gamut\" src \"0.8 0.313 0.1682 0.9877 0.079 -0.1155 0.3127 0.329\"\}" gamut/Rec709 "knobs this \{src_name \"Rec709\" src \"0.64 0.33 0.3 0.6 0.15 0.06 0.3127 0.329\"\}" gamut/Rec2020 "knobs this \{src_name \"Rec2020\" src \"0.708 0.292 0.17 0.797 0.131 0.046 0.3127 0.329\"\}" gamut/P3D60 "knobs this \{src_name \"P3D60\" src \"0.68 0.32 0.265 0.69 0.15 0.06 0.321626 0.337737\"\}" gamut/P3D65 "knobs this \{src_name \"P3D65\" src \"0.68 0.32 0.265 0.69 0.15 0.06 0.3127 0.329\"\}" gamut/P3DCI "knobs this \{src_name \"P3DCI\" src \"0.68 0.32 0.265 0.69 0.15 0.06 0.314 0.351\"\}" "gamut/Arri Wide Gamut" "knobs this \{src_name \"Arri Wide Gamut\" src \"0.684 0.313 0.221 0.848 0.0861 -0.102 0.3127 0.329\"\}" "gamut/Arri Wide Gamut 4" "knobs this \{src_name \"Arri Wide Gamut 4\" src \"0.7347 0.2653 0.1424 0.8576 0.0991 -0.0308 0.3127 0.329\"\}" "gamut/RED Wide Gamut RGB" "knobs this \{src_name \"RED Wide Gamut RGB\" src \"0.780308 0.304253 0.121595 1.493994 0.095612 -0.084589 0.3127 0.329\"\}" "gamut/GoPro Protune Native" "knobs this \{src_name \"GoPro Protune Native\" src \"0.69848046 0.19302645 0.32955538 1.02459662 0.10844263 -0.03467857 0.3127 0.329\"\}" "gamut/Canon Cinema Gamut" "knobs this \{src_name \"Canon Cinema Gamut\" src \"0.74 0.27 0.17 1.14 0.08 -0.1 0.3127 0.329\"\}" "gamut/Sony SGamut3" "knobs this \{src_name \"Sony SGamut3\" src \"0.73 0.28 0.14 0.855 0.1 -0.05 0.3127 0.329\"\}" "gamut/Sony SGamut3.Cine" "knobs this \{src_name \"Sony SGamut3.Cine\" src \"0.766 0.275 0.225 0.8 0.089 -0.087 0.3127 0.329\"\}" "gamut/Panasonic V-Gamut" "knobs this \{src_name \"Panasonic V-Gamut\" src \"0.73 0.28 0.165 0.84 0.1 -0.03 0.3127 0.329\"\}" "gamut/DJI D-Gamut" "knobs this \{src_name \"DJI D-Gamut\" src \"0.71 0.31 0.21 0.88 0.09 -0.08 0.3127 0.329\"\}" "gamut/Fujifilm F-Gamut" "knobs this \{src_name \"Fujifilm F-Gamut\" src \"0.708 0.292 0.17 0.797 0.131 0.046 0.3127 0.329\"\}" "gamut/Nikon N-Gamut" "knobs this \{src_name \"Nikon N-Gamut\" src \"0.708 0.292 0.17 0.797 0.131 0.046 0.3127 0.329\"\}" "gamut/Blackmagic Wide Gamut" "knobs this \{src_name \"Blackmagic Wide Gamut\" src \"0.7177215 0.3171181 0.228041 0.861569 0.1005841 -0.0820452 0.3127 0.329\"\}" "gamut/Adobe RGB" "knobs this \{src_name \"Adobe RGB\" src \"0.64 0.33 0.21 0.71 0.15 0.06 0.3127 0.329\"\}" "gamut/Adobe WideGamutRGB" "knobs this \{src_name \"Adobe WideGamutRGB\" src \"0.7347 0.2653 0.1152 0.8264 0.1566 0.0177 0.3457 0.3585\"\}" gamut/ProPhotoRGB "knobs this \{src_name \"ProPhotoRGB\" src \"0.734699 0.265301 0.159597 0.840403 0.036598 0.000105 0.345704 0.358540\"\}"}}
addUserKnob {1 src_name l "" -STARTLINE}
src_name "DaVinci Wide Gamut"
addUserKnob {1 src l " " t "source gamut chromaticities: rgbw"}
src "0.8 0.313 0.1682 0.9877 0.079 -0.1155 0.3127 0.329"
addUserKnob {35 presets_dst l dst M {gamut/XYZ "knobs this \{dst_name \"XYZ\" dst \"\"\}" "gamut/XYZ D65" "knobs this \{dst_name \"XYZ D65\" dst \"1 0 0 1 0 0 0.3127 0.329\"\}" "gamut/ACES AP0" "knobs this \{dst_name \"ACES AP0\" dst \"0.7347 0.2653 0.0 1.0 0.0001 -0.077 0.32168 0.33767\"\}" "gamut/ACES AP1" "knobs this \{dst_name \"ACES AP1\" dst \"0.713 0.293 0.165 0.83 0.128 0.044 0.32168 0.33767\"\}" "gamut/Filmlight E-Gamut" "knobs this \{dst_name \"Filmlight E-Gamut\" dst \"0.8 0.3177 0.18 0.9 0.065 -0.0805 0.3127 0.329\"\}" "gamut/DaVinci Wide Gamut" "knobs this \{dst_name \"DaVinci Wide Gamut\" dst \"0.8 0.313 0.1682 0.9877 0.079 -0.1155 0.3127 0.329\"\}" gamut/Rec709 "knobs this \{dst_name \"Rec709\" dst \"0.64 0.33 0.3 0.6 0.15 0.06 0.3127 0.329\"\}" gamut/Rec2020 "knobs this \{dst_name \"Rec2020\" dst \"0.708 0.292 0.17 0.797 0.131 0.046 0.3127 0.329\"\}" gamut/P3D60 "knobs this \{dst_name \"P3D60\" dst \"0.68 0.32 0.265 0.69 0.15 0.06 0.321626 0.337737\"\}" gamut/P3D65 "knobs this \{dst_name \"P3D65\" dst \"0.68 0.32 0.265 0.69 0.15 0.06 0.3127 0.329\"\}" gamut/P3DCI "knobs this \{dst_name \"P3DCI\" dst \"0.68 0.32 0.265 0.69 0.15 0.06 0.314 0.351\"\}" "gamut/Arri Wide Gamut" "knobs this \{dst_name \"Arri Wide Gamut\" dst \"0.684 0.313 0.221 0.848 0.0861 -0.102 0.3127 0.329\"\}" "gamut/Arri Wide Gamut 4" "knobs this \{dst_name \"Arri Wide Gamut 4\" dst \"0.7347 0.2653 0.1424 0.8576 0.0991 -0.0308 0.3127 0.329\"\}" "gamut/RED Wide Gamut RGB" "knobs this \{dst_name \"RED Wide Gamut RGB\" dst \"0.780308 0.304253 0.121595 1.493994 0.095612 -0.084589 0.3127 0.329\"\}" "gamut/GoPro Protune Native" "knobs this \{dst_name \"GoPro Protune Native\" dst \"0.69848046 0.19302645 0.32955538 1.02459662 0.10844263 -0.03467857 0.3127 0.329\"\}" "gamut/Canon Cinema Gamut" "knobs this \{dst_name \"Canon Cinema Gamut\" dst \"0.74 0.27 0.17 1.14 0.08 -0.1 0.3127 0.329\"\}" "gamut/Sony SGamut3" "knobs this \{dst_name \"Sony SGamut3\" dst \"0.73 0.28 0.14 0.855 0.1 -0.05 0.3127 0.329\"\}" "gamut/Sony SGamut3.Cine" "knobs this \{dst_name \"Sony SGamut3.Cine\" dst \"0.766 0.275 0.225 0.8 0.089 -0.087 0.3127 0.329\"\}" "gamut/Panasonic V-Gamut" "knobs this \{dst_name \"Panasonic V-Gamut\" dst \"0.73 0.28 0.165 0.84 0.1 -0.03 0.3127 0.329\"\}" "gamut/DJI D-Gamut" "knobs this \{dst_name \"DJI D-Gamut\" dst \"0.71 0.31 0.21 0.88 0.09 -0.08 0.3127 0.329\"\}" "gamut/Fujifilm F-Gamut" "knobs this \{dst_name \"Fujifilm F-Gamut\" dst \"0.708 0.292 0.17 0.797 0.131 0.046 0.3127 0.329\"\}" "gamut/Nikon N-Gamut" "knobs this \{dst_name \"Nikon N-Gamut\" dst \"0.708 0.292 0.17 0.797 0.131 0.046 0.3127 0.329\"\}" "gamut/Blackmagic Wide Gamut" "knobs this \{dst_name \"Blackmagic Wide Gamut\" dst \"0.7177215 0.3171181 0.228041 0.861569 0.1005841 -0.0820452 0.3127 0.329\"\}" "gamut/Adobe RGB" "knobs this \{dst_name \"Adobe RGB\" dst \"0.64 0.33 0.21 0.71 0.15 0.06 0.3127 0.329\"\}" "gamut/Adobe WideGamutRGB" "knobs this \{dst_name \"Adobe WideGamutRGB\" dst \"0.7347 0.2653 0.1152 0.8264 0.1566 0.0177 0.3457 0.3585\"\}" gamut/ProPhotoRGB "knobs this \{dst_name \"ProPhotoRGB\" dst \"0.734699 0.265301 0.159597 0.840403 0.036598 0.000105 0.345704 0.358540\"\}"}}
addUserKnob {1 dst_name l "" -STARTLINE}
dst_name Rec709
addUserKnob {1 dst l " " t "destination gamut chromaticities: rgbw"}
dst "0.64 0.33 0.3 0.6 0.15 0.06 0.3127 0.329"
addUserKnob {83 cat M {bradford cat02 none}}
cat cat02
addUserKnob {26 ""}
addUserKnob {6 invert t "invert matrix direction" +STARTLINE}
addUserKnob {22 calc l Calculate t "Calculate a 3x3 matrix to convert from source gamut to destination gamut, with chromatic adaptation transform if whitepoints are different." -STARTLINE T "import nuke\n\ndef matmul(m0, m1):\n # multiply two square matrices\n return \[\[sum(a*b for a,b in zip(r, c)) for c in zip(*m1)] for r in m0]\n\ndef vdot(m, v):\n # multiply AxA matrix by Ax1 vector\n return \[sum(x*y for x,y in zip(r,v)) for r in m]\n\ndef transpose(m):\n # transpose matrix m by swapping rows and cols\n return \[list(r) for r in zip(*m)]\n\ndef zeros(l):\n # create square matrix of size l\n return \[\[0.0]*l for i in range(l)]\n\ndef diag(m, v):\n # set diagonal row of matrix m to vector v or float v\n if isinstance(v, float): \n v = \[v]*len(m)\n for p in range(len(m)):\n m\[p]\[p] = v\[p]\n return m\n\ndef identity(l):\n # return identity matrix of size l\n return diag(zeros(3), 1.0)\n\ndef det(m):\n # calculate determinant of 3x3 matrix m\n return m\[0]\[0]*(m\[1]\[1]*m\[2]\[2]-m\[2]\[1]*m\[1]\[2])-m\[0]\[1]*(m\[1]\[0]*m\[2]\[2]-m\[1]\[2]*m\[2]\[0])+m\[0]\[2]*(m\[1]\[0]*m\[2]\[1]-m\[1]\[1]*m\[2]\[0])\n\ndef inv(m):\n # invert 3x3 matrix m\n d = det(m)\n if d == 0.0:\n return m\n i = zeros(3)\n i\[0]\[0] = (m\[1]\[1]*m\[2]\[2]-m\[2]\[1]*m\[1]\[2])/d\n i\[0]\[1] = (m\[0]\[2]*m\[2]\[1]-m\[0]\[1]*m\[2]\[2])/d\n i\[0]\[2] = (m\[0]\[1]*m\[1]\[2]-m\[0]\[2]*m\[1]\[1])/d\n i\[1]\[0] = (m\[1]\[2]*m\[2]\[0]-m\[1]\[0]*m\[2]\[2])/d\n i\[1]\[1] = (m\[0]\[0]*m\[2]\[2]-m\[0]\[2]*m\[2]\[0])/d\n i\[1]\[2] = (m\[1]\[0]*m\[0]\[2]-m\[0]\[0]*m\[1]\[2])/d\n i\[2]\[0] = (m\[1]\[0]*m\[2]\[1]-m\[2]\[0]*m\[1]\[1])/d\n i\[2]\[1] = (m\[2]\[0]*m\[0]\[1]-m\[0]\[0]*m\[2]\[1])/d\n i\[2]\[2] = (m\[0]\[0]*m\[1]\[1]-m\[1]\[0]*m\[0]\[1])/d\n return i\n\ndef flatten(l):\n # flatten multidimensional list into one dimensional list\n return sum(l, \[])\n\ndef npm(ch):\n # Calculate the Normalized Primaries Matrix for the specified chromaticities\n # Adapted from SMPTE Recommended Practice - Derivation of Basic Television Color Equations\n # http://doi.org/10.5594/S9781614821915\n if len(ch) == 8: # handle flat list\n ch = \[\[ch\[0], ch\[1]], \[ch\[2], ch\[3]], \[ch\[4], ch\[5]], \[ch\[6], ch\[7]]]\n for c in ch:\n c.append(1.0-c\[0]-c\[1]) \n P = transpose(\[ch\[0], ch\[1], ch\[2]])\n W = \[ch\[3]\[0] / ch\[3]\[1], 1.0, ch\[3]\[2] / ch\[3]\[1]]\n C = vdot(inv(P), W)\n C = diag(zeros(3), C)\n return matmul(P, C)\n\ndef cat(ws, wd, method='bradford'):\n # Calculate a von Kries style chromatic adaptation transform matrix given xy chromaticities for src and dst white\n # Source: Mark D. Fairchild - 2013 - Color Appearance Models Third Edition p. 181-186\n # Source: Bruce Lindbloom - Chromatic Adaptation - http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\n if ws == wd: # src and dst are equal, nothing to do\n return identity(3)\n if method == 'bradford':\n mcat = \[\[0.8951, 0.2664, -0.1614], \[-0.7502, 1.7135, 0.0367], \[0.0389, -0.0685, 1.0296]]\n elif method == 'cat02':\n mcat = \[\[0.7328, 0.4296, -0.1624], \[-0.7036, 1.6975, 0.0061], \[0.003, 0.0136, 0.9834]]\n else:\n mcat = identity(3)\n \n def xy_to_XYZ(xy):\n # convert xy chromaticity to XYZ tristimulus with Y=1.0\n return \[xy\[0]/xy\[1], 1.0, (1.0-xy\[0]-xy\[1])/xy\[1]]\n \n sXYZ = xy_to_XYZ(ws)\n dXYZ = xy_to_XYZ(wd)\n \n s_cone_mtx = vdot(mcat, sXYZ)\n d_cone_mtx = vdot(mcat, dXYZ)\n \n smat = diag(zeros(3), \[a/b for a,b in zip(d_cone_mtx, s_cone_mtx)])\n nmtx = matmul(inv(mcat), smat)\n return matmul(nmtx, mcat)\n\ndef wp(ch):\n # return whitepoint of chromaticities array\n return ch\[-2:]\n\ndef is_xyz(ch):\n # test if ch is XYZ\n prims = ch\[:-2]\n return True if prims == \[1, 0, 0, 1, 0, 0] else False\n\ndef calc_mtx(ch0, ch1, method='bradford'):\n # calculate 3x3 matrix to convert gamut ch0 to ch1, with cat\n if not ch1:\n return npm(ch0)\n rgb0_to_xyz = identity(3) if is_xyz(ch0) else npm(ch0)\n rgb1_to_xyz = identity(3) if is_xyz(ch1) else npm(ch1)\n xyz_to_cat = cat(wp(ch0), wp(ch1), method=method)\n rgb0_to_cat = matmul(xyz_to_cat, rgb0_to_xyz)\n rgb0_to_rgb1 = matmul(inv(rgb1_to_xyz), rgb0_to_cat)\n return rgb0_to_rgb1\n\n\n\nnode = nuke.thisNode()\n\ndef get_ch(k):\n # get chromaticities from knob name k\n ch_str = node\[k].getValue()\n if ' ' in ch_str:\n chs = ch_str.split(' ')\n if not len(chs) == 8:\n print('Error: need 8 space-separated float xy coordinates for RGBW')\n return None\n else:\n ch = list()\n for c in chs:\n try:\n ch.append(float(c))\n except ValueError:\n print('Error: could not convert \{0\} to float'.format(c))\n return None\n return ch\n else:\n return None\n\ndef print_mtx(mtx):\n label = node\['label'].getValue()\n \n # round to 12 digits of precision\n mtx_str = \[format(round(v, 12), '.12g') for v in flatten(mtx)]\n \n # print some useful representations of the matrix\n # an ocio matrixtransform\n mtx_str_pad = mtx_str\[0:3]+\['0']+mtx_str\[3:6]+\['0']+mtx_str\[6:9]+\['0']*4+\['1']\n mtx_string = ', '.join(map(str, mtx_str_pad))\n ocio_matrixtransform_string = '!<MatrixTransform> \{\{matrix: \[\{0\}]\}\}'.format(mtx_string)\n print('\{0\} - OCIO MatrixTransform\\n\{1\}\\n'.format(label, ocio_matrixtransform_string))\n \n # an spimtx file\n spimtx_string = '\{0\} 0\\n\{1\} 0\\n\{2\} 0'.format(\n ' '.join(mtx_str\[0:3]),\n ' '.join(mtx_str\[3:6]),\n ' '.join(mtx_str\[6:9]),\n )\n print('\{0\}.spimtx\\n\{1\}\\n'.format(label, spimtx_string))\n\ndef reset():\n # reset matrix\n node\['matrix'].setValue(flatten(identity(3)))\n \ndef calc():\n # gather node info\n src_ch = get_ch('src')\n if not src_ch:\n reset()\n return\n dst_ch = get_ch('dst')\n cat_method = node\['cat'].value()\n mtx = calc_mtx(src_ch, dst_ch, method=cat_method)\n if node\['invert'].getValue():\n mtx = inv(mtx)\n node\['matrix'].setValue(flatten(mtx))\n label = '\{1\} to \{0\}' if node\['invert'].getValue() else '\{0\} to \{1\}'\n label = label.format(node\['src_name'].getValue(), node\['dst_name'].getValue())\n node\['label'].setValue(label)\n if node\['print_mtx'].getValue():\n print_mtx(mtx)\n \ncalc()"}
addUserKnob {6 print_mtx l print t "print a few useful representations of the matrix ni the script editor, for OCIO MatrixTransforms, spimtx files, etc" -STARTLINE}
addUserKnob {41 matrix T ColorMatrix.matrix}
addUserKnob {22 create_colormatrix l "Create ColorMatrix" t "create ColorMatrix node using calculated 3x3 matrix" -STARTLINE T "from __future__ import with_statement\nnode = nuke.thisNode()\nwith nuke.root():\n nukescripts.clear_selection_recursive()\n m = nuke.createNode('ColorMatrix')\n m.setXYpos(node.xpos()-120, node.ypos())\n m\['matrix'].setValue(node\['matrix'].getValue())\n m\['label'].setValue(node\['label'].getValue())"}
}
Input {
inputs 0
name Input
xpos -40
ypos 206
}
ColorMatrix {
matrix {
{1.898614899 -0.7921761834 -0.1064387159}
{-0.1689487865 1.488975754 -0.3200269676}
{-0.1215391606 -0.3156758531 1.437215014}
}
name ColorMatrix
xpos -40
ypos 255
}
Output {
name Output
xpos -40
ypos 302
}
end_group
Group {
name GamutCompressCLin
help "<b>Chromaticity Linear Gamut Compression</b>\n\nCompress gamut in a straight line from source chromaticity towards achromatic, according to the quadratic compression function which compresses out of gamut chroma value x0 to the gamut boundary, distributed over a range from t0 to 1."
xpos 0
ypos 221
addUserKnob {20 Params}
addUserKnob {41 t0 t "threshold chroma value to begin compression. 0 is achromatic, 1 is gamut boundary. " T Expression.t0}
addUserKnob {41 x0 t "out of gamut chroma value to compress to the gamut boundary." T Expression.x0}
addUserKnob {41 invert T Expression.invert}
}
Input {
inputs 0
name Input
xpos -480
ypos -442
}
Expression {
temp_name0 m
temp_expr0 max(r,g,b)
temp_name1 c
temp_expr1 m==0?0:(m-min(r,g,b))/m
temp_name2 f
temp_expr2 c==0?0:(c<t0?c:invert?pow((oy-c)/s,2)+ox:s*sqrt(c-ox)+oy)/c
expr0 m*(1-f)+r*f
expr1 m*(1-f)+g*f
expr2 m*(1-f)+b*f
maskChannelMask rgba.red
name Expression
xpos -480
ypos -394
addUserKnob {20 Params_tab l Params}
addUserKnob {7 t0 l threshold}
t0 0.8
addUserKnob {7 x0 l distance R 1 2}
x0 1.4
addUserKnob {7 y0 R 0 2}
y0 1
addUserKnob {7 s}
s {{(y0-t0)/sqrt(x0-y0)}}
addUserKnob {7 ox R -2 2}
ox {{t0-s*s/4}}
addUserKnob {7 oy R -2 2}
oy {{t0-s*sqrt(s*s/4)}}
addUserKnob {6 invert +STARTLINE}
}
Output {
name Output
xpos -480
ypos -346
}
end_group
Colorspace {
colorspace_out rec709
name Colorspace1
xpos 0
ypos 269
}
Output {
name Output1
xpos 0
ypos 320
}
end_group