Skip to content

Instantly share code, notes, and snippets.

@jedypod
Last active September 12, 2022 11:10
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jedypod/ea25c5ff2eed68bfeaaafddd26958133 to your computer and use it in GitHub Desktop.
Save jedypod/ea25c5ff2eed68bfeaaafddd26958133 to your computer and use it in GitHub Desktop.
Jed Smith Gamut Compression Development

This gist has moved to a proper git repo

Please go here to get the latest version.

Gamut Compression Experiments

A gist containing experiments related to development of a gamut compression algorithm.

kernel GamutCompression : ImageComputationKernel<ePixelWise> {
Image<eRead, eAccessPoint, eEdgeClamped> src;
Image<eWrite> dst;
param:
float threshold;
float cyan;
float magenta;
float yellow;
int method;
bool invert;
// calc hyperbolic tangent
float tanh( float in) {
float f = exp(2.0f*in);
return (f-1.0f) / (f+1.0f);
}
// calc inverse hyperbolic tangent
float atanh( float in) {
return log((1.0f+in)/(1.0f-in))/2.0f;
}
void process() {
// thr is the complement of threshold.
// that is: the percentage of the core gamut to protect
float thr = 1.0f - threshold;
// bias limits by color component
// range is limited to 0.00001 > lim < 1/thr
// cyan = 0: no compression
// cyan = 1: "normal" compression with limit at 1.0
// 1 > cyan < 1/thr : compress more than edge of gamut. max = hard clip (e.g., thr=0.8, max = 1.25)
float3 lim;
lim.x = 1.0f/max(0.00001f, min(1.0f/thr, cyan));
lim.y = 1.0f/max(0.00001f, min(1.0f/thr, magenta));
lim.z = 1.0f/max(0.00001f, min(1.0f/thr, yellow));
float r = src().x;
float g = src().y;
float b = src().z;
// achromatic axis
float ach = max(r, max(g, b));
// distance from the achromatic axis for each color component
float d_r, d_g, d_b;
d_r = ach == 0 ? 0 : fabs(float(r-ach)) / ach;
d_g = ach == 0 ? 0 : fabs(float(g-ach)) / ach;
d_b = ach == 0 ? 0 : fabs(float(b-ach)) / ach;
// compress distance for each color component
// method 0 : tanh - hyperbolic tangent compression method suggested by Thomas Mansencal https://community.acescentral.com/t/simplistic-gamut-mapping-approaches-in-nuke/2679/2
// method 1 : exp - natural exponent compression method
// method 2 : simple - simple Reinhard type compression suggested by Nick Shaw https://community.acescentral.com/t/simplistic-gamut-mapping-approaches-in-nuke/2679/3
// example plots for each method: https://www.desmos.com/calculator/x69iyptspq
float cd_r, cd_g, cd_b;
if (method == 0.0f) {
if (invert == 0.0f) {
cd_r = d_r > thr ? thr + (lim.x - thr) * tanh( ( (d_r - thr)/( lim.x-thr))) : d_r;
cd_g = d_g > thr ? thr + (lim.y - thr) * tanh( ( (d_g - thr)/( lim.y-thr))) : d_g;
cd_b = d_b > thr ? thr + (lim.z - thr) * tanh( ( (d_b - thr)/( lim.z-thr))) : d_b;
} else {
cd_r = d_r > thr ? thr + (lim.x - thr) * atanh( d_r/( lim.x - thr) - thr/( lim.x - thr)) : d_r;
cd_g = d_g > thr ? thr + (lim.y - thr) * atanh( d_g/( lim.y - thr) - thr/( lim.y - thr)) : d_g;
cd_b = d_b > thr ? thr + (lim.z - thr) * atanh( d_b/( lim.z - thr) - thr/( lim.z - thr)) : d_b;
}
} else if (method == 1.0f) {
if (invert == 0.0f) {
cd_r = d_r > thr ? lim.x-(lim.x-thr)*exp(-(((d_r-thr)*((1.0f*lim.x)/(lim.x-thr))/lim.x))) : d_r;
cd_g = d_g > thr ? lim.y-(lim.y-thr)*exp(-(((d_g-thr)*((1.0f*lim.y)/(lim.y-thr))/lim.y))) : d_g;
cd_b = d_b > thr ? lim.z-(lim.z-thr)*exp(-(((d_b-thr)*((1.0f*lim.z)/(lim.z-thr))/lim.z))) : d_b;
} else {
cd_r = d_r > thr ? -log( (d_r-lim.x)/(thr-lim.x))*(-thr+lim.x)/1.0f+thr : d_r;
cd_g = d_g > thr ? -log( (d_g-lim.y)/(thr-lim.y))*(-thr+lim.y)/1.0f+thr : d_g;
cd_b = d_b > thr ? -log( (d_b-lim.z)/(thr-lim.z))*(-thr+lim.z)/1.0f+thr : d_b;
}
} else if (method == 2.0f) {
if (invert == 0.0f) {
cd_r = d_r > thr ? thr+(-1/((d_r-thr)/(lim.x-thr)+1)+1)*(lim.x-thr) : d_r;
cd_g = d_g > thr ? thr+(-1/((d_g-thr)/(lim.y-thr)+1)+1)*(lim.y-thr) : d_g;
cd_b = d_b > thr ? thr+(-1/((d_b-thr)/(lim.z-thr)+1)+1)*(lim.z-thr) : d_b;
} else {
cd_r = d_r > thr ? (pow(thr, 2.0f) - thr*d_r + (lim.x-thr)*d_r) / (thr + (lim.x-thr) - d_r) : d_r;
cd_g = d_g > thr ? (pow(thr, 2.0f) - thr*d_g + (lim.y-thr)*d_g) / (thr + (lim.y-thr) - d_g) : d_g;
cd_b = d_b > thr ? (pow(thr, 2.0f) - thr*d_b + (lim.z-thr)*d_b) / (thr + (lim.z-thr) - d_b) : d_b;
}
}
// scale each color component relative to achromatic axis by gamut compression factor
float c_r, c_g, c_b;
c_r = ach-cd_r*ach;
c_g = ach-cd_g*ach;
c_b = ach-cd_b*ach;
// write to output
dst() = float4(c_r, c_g, c_b, 1);
}
};
set cut_paste_input [stack 0]
push $cut_paste_input
Group {
name GamutCompress_blink
label "\[value method]: \[value direction]"
note_font Helvetica
selected true
xpos -2591
ypos 394
addUserKnob {20 GamutCompress}
addUserKnob {4 method t "<b>softclip method</b>" M {tanh exp simple "" "" "" ""}}
addUserKnob {7 threshold t "Percentage of the gamut to affect. A value of 0.2 will leave leave the core 80% of the colors within the gamut unaffected." R 0 0.2}
threshold 0.2
addUserKnob {26 limits_label l " " T <b>limits}
addUserKnob {7 cyan t "cyan limit" R 0.001 1.25}
cyan 1
addUserKnob {7 magenta t "magenta limit" R 0.001 1.25}
magenta 1
addUserKnob {7 yellow t "yellow limit" R 0.001 1.25}
yellow 1
addUserKnob {26 ""}
addUserKnob {4 direction M {forward reverse}}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
AddChannels {
name AddChannels1
note_font Helvetica
xpos -40
ypos 24
}
BlinkScript {
ProgramGroup 1
KernelDescription "2 \"GamutCompression\" iterate pixelWise 39cdc154d9d0744705ee017683e108a77ee5e4d36e0659cdf2f2b7296ac3aee1 2 \"src\" Read Point \"dst\" Write Point 6 \"threshold\" Float 1 AAAAAA== \"cyan\" Float 1 AAAAAA== \"magenta\" Float 1 AAAAAA== \"yellow\" Float 1 AAAAAA== \"method\" Int 1 AAAAAA== \"invert\" Bool 1 AA== 6 \"threshold\" 1 1 \"cyan\" 1 1 \"magenta\" 1 1 \"yellow\" 1 1 \"method\" 1 1 \"invert\" 1 1 0"
kernelSource "kernel GamutCompression : ImageComputationKernel<ePixelWise> \{\n Image<eRead, eAccessPoint, eEdgeClamped> src;\n Image<eWrite> dst;\n\n param:\n float threshold;\n float cyan;\n float magenta;\n float yellow;\n int method;\n bool invert;\n\n // calc hyperbolic tangent\n float tanh( float in) \{\n float f = exp(2.0f*in);\n return (f-1.0f) / (f+1.0f);\n \}\n\n // calc inverse hyperbolic tangent\n float atanh( float in) \{\n return log((1.0f+in)/(1.0f-in))/2.0f;\n \}\n\n void process() \{\n // thr is the complement of threshold. \n // that is: the percentage of the core gamut to protect\n float thr = 1.0f - threshold;\n\n // bias limits by color component\n // range is limited to 0.00001 > lim < 1/thr\n // cyan = 0: no compression\n // cyan = 1: \"normal\" compression with limit at 1.0\n // 1 > cyan < 1/thr : compress more than edge of gamut. max = hard clip (e.g., thr=0.8, max = 1.25)\n float3 lim;\n lim.x = 1.0f/max(0.00001f, min(1.0f/thr, cyan));\n lim.y = 1.0f/max(0.00001f, min(1.0f/thr, magenta));\n lim.z = 1.0f/max(0.00001f, min(1.0f/thr, yellow));\n\n float r = src().x;\n float g = src().y;\n float b = src().z;\n\n // achromatic axis \n float ach = max(r, max(g, b));\n\n // distance from the achromatic axis for each color component\n float d_r, d_g, d_b;\n d_r = ach == 0 ? 0 : fabs(float(r-ach)) / ach;\n d_g = ach == 0 ? 0 : fabs(float(g-ach)) / ach;\n d_b = ach == 0 ? 0 : fabs(float(b-ach)) / ach;\n\n // compress distance for each color component\n // method 0 : tanh - hyperbolic tangent compression method suggested by Thomas Mansencal https://community.acescentral.com/t/simplistic-gamut-mapping-approaches-in-nuke/2679/2\n // method 1 : exp - natural exponent compression method\n // method 2 : simple - simple Reinhard type compression suggested by Nick Shaw https://community.acescentral.com/t/simplistic-gamut-mapping-approaches-in-nuke/2679/3\n // example plots for each method: https://www.desmos.com/calculator/x69iyptspq\n float cd_r, cd_g, cd_b;\n if (method == 0.0f) \{\n if (invert == 0.0f) \{\n cd_r = d_r > thr ? thr + (lim.x - thr) * tanh( ( (d_r - thr)/( lim.x-thr))) : d_r;\n cd_g = d_g > thr ? thr + (lim.y - thr) * tanh( ( (d_g - thr)/( lim.y-thr))) : d_g;\n cd_b = d_b > thr ? thr + (lim.z - thr) * tanh( ( (d_b - thr)/( lim.z-thr))) : d_b;\n \} else \{\n cd_r = d_r > thr ? thr + (lim.x - thr) * atanh( d_r/( lim.x - thr) - thr/( lim.x - thr)) : d_r;\n cd_g = d_g > thr ? thr + (lim.y - thr) * atanh( d_g/( lim.y - thr) - thr/( lim.y - thr)) : d_g;\n cd_b = d_b > thr ? thr + (lim.z - thr) * atanh( d_b/( lim.z - thr) - thr/( lim.z - thr)) : d_b;\n \}\n \} else if (method == 1.0f) \{\n if (invert == 0.0f) \{\n cd_r = d_r > thr ? lim.x-(lim.x-thr)*exp(-(((d_r-thr)*((1.0f*lim.x)/(lim.x-thr))/lim.x))) : d_r;\n cd_g = d_g > thr ? lim.y-(lim.y-thr)*exp(-(((d_g-thr)*((1.0f*lim.y)/(lim.y-thr))/lim.y))) : d_g;\n cd_b = d_b > thr ? lim.z-(lim.z-thr)*exp(-(((d_b-thr)*((1.0f*lim.z)/(lim.z-thr))/lim.z))) : d_b;\n \} else \{\n cd_r = d_r > thr ? -log( (d_r-lim.x)/(thr-lim.x))*(-thr+lim.x)/1.0f+thr : d_r;\n cd_g = d_g > thr ? -log( (d_g-lim.y)/(thr-lim.y))*(-thr+lim.y)/1.0f+thr : d_g;\n cd_b = d_b > thr ? -log( (d_b-lim.z)/(thr-lim.z))*(-thr+lim.z)/1.0f+thr : d_b;\n \}\n \} else if (method == 2.0f) \{\n if (invert == 0.0f) \{\n cd_r = d_r > thr ? thr+(-1/((d_r-thr)/(lim.x-thr)+1)+1)*(lim.x-thr) : d_r;\n cd_g = d_g > thr ? thr+(-1/((d_g-thr)/(lim.y-thr)+1)+1)*(lim.y-thr) : d_g;\n cd_b = d_b > thr ? thr+(-1/((d_b-thr)/(lim.z-thr)+1)+1)*(lim.z-thr) : d_b;\n \} else \{\n cd_r = d_r > thr ? (pow(thr, 2.0f) - thr*d_r + (lim.x-thr)*d_r) / (thr + (lim.x-thr) - d_r) : d_r;\n cd_g = d_g > thr ? (pow(thr, 2.0f) - thr*d_g + (lim.y-thr)*d_g) / (thr + (lim.y-thr) - d_g) : d_g;\n cd_b = d_b > thr ? (pow(thr, 2.0f) - thr*d_b + (lim.z-thr)*d_b) / (thr + (lim.z-thr) - d_b) : d_b;\n \}\n \}\n\n // scale each color component relative to achromatic axis by gamut compression factor\n float c_r, c_g, c_b;\n c_r = ach-cd_r*ach;\n c_g = ach-cd_g*ach;\n c_b = ach-cd_b*ach;\n\n // write to output\n dst() = float4(c_r, c_g, c_b, 1);\n\n \}\n\};"
rebuild ""
GamutCompression_threshold {{parent.threshold}}
GamutCompression_cyan {{parent.cyan}}
GamutCompression_magenta {{parent.magenta}}
GamutCompression_yellow {{parent.yellow}}
GamutCompression_method {{parent.method}}
GamutCompression_invert {{parent.direction}}
rebuild_finalise ""
name GamutCompress
note_font Helvetica
xpos -40
ypos 82
}
Output {
name Output
xpos -40
ypos 134
}
end_group
push $cut_paste_input
Group {
name GamutCompress
label "\[value method]: \[value direction]"
note_font Helvetica
selected true
xpos -2701
ypos 394
addUserKnob {20 GamutCompress}
addUserKnob {4 method t "<b>softclip method</b>" M {tanh exp simple ""}}
addUserKnob {7 threshold t "Percentage of the gamut to affect. A value of 0.2 will leave leave the core 80% of the colors within the gamut unaffected." R 0 0.2}
threshold 0.2
addUserKnob {26 limits_label l " " T <b>limits}
addUserKnob {7 cyan t "cyan limit" R 0.001 1.25}
cyan 1
addUserKnob {7 magenta t "magenta limit" R 0.001 1.25}
magenta 1
addUserKnob {7 yellow t "yellow limit" R 0.001 1.25}
yellow 1
addUserKnob {26 ""}
addUserKnob {4 direction M {forward reverse}}
addUserKnob {20 info_tab l Info}
addUserKnob {26 info_label l " " T "<b>Information</b>\n<br><br>\nThis tool compresses out of gamut colors back\ninto gamut.<br><br>\n\nOut of gamut colors can ocurr with modern<br>\ndigital cinema cameras. <br>\nUsing the original camera gamut, there would be<br>\nno problem, but often when doing visual effects<br>\nor grading, we need to work in a different colorspace<br>\nlike ACEScg. Since ACEScg is designed to operate within<br>\nthe spectral locus, this is where out of gamut colors can appear.<br><br>\n\nCameras can generate color outside of the spectral locus because<br>\nthe spectral response curves of the camera<br>\ndo not match the spectral response curves<br>\nof the human eye, making the camera a <br>\nnon-colorimetric device which does not satisfy<br>\nthe Luther-Ives criterion. <br><br>\n\nOut of gamut colors often ocurr with highly saturated<br>\nlight sources like police lights, neon, or lasers.<br>\nRe-mapping these colors back into gamut is necessary<br>\nfor pleasing color reproduction, and for working.<br><br>\n\n<b>Usage</b><br>\nMethod specifies the type of compression curve to use.<br>\nTanh is a hyperbolic tangent function which has a very <br>\nsmooth rolloff. This method tends to preserve the appearance<br>\nof colors very well.<br>\nExp is a natural exponential compression function which is <br>\na bit more agressive slope.<br>\nSimple has a more aggressive slope, and tends to change<br>\nthe appearance of colors a bit more, but can be good when<br>\nused with creative intent. Good base is 0.8 for limits when <br>\nusing this compression method.<br><br>\nThreshold is the percentage of the core gamut to affect.<br>\nA value of 0 would be a hard clip, a value of 0.2 would affect <br>\nthe outer 20% of the gamut's most saturated colors.<br><br>\n\nThe cyan / magenta / yellow limits allow you to adjust<br>\nthe amount of compression per color component. <br>\nFor example increasing the magenta limit will push blues more cyan.<br>\nA value of 0 is no compression. A value of 1 compresses<br>\nto the gamut boundary. And values above 1<br>\nup to a max of 1/(1-threshold) will compress more than the <br>\ngamut boundary. Note a value at max will be a hard clip at the <br>\nthreshold (inside the gamut boundary!) and is probably not something you want!<br><br>\n\nInverting the gamut compression is possible but should be used<br>\nwith an excess of caution, because saturated values can be pushed<br>\nwell outside of the spectral locus. \n<br><br>\n<b>About</b><br>\nWritten by Jed Smith with help from the <br>\nACES Gamut Mapping Virtual Working Group\n<br>github.com/jedypod\n<br>https://community.acescentral.com/t/rgb-saturation-gamut-mapping-approach-and-a-comp-vfx-perspective"}
}
Input {
inputs 0
name Input
label "\[value number]"
xpos -40
ypos -184
}
Dot {
name Dot1
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xff
xpos -6
ypos 66
}
set Nbfedae20 [stack 0]
Dot {
name Dot5
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xff
xpos 104
ypos 66
}
set Nbefdcc40 [stack 0]
Expression {
temp_name0 ach
temp_expr0 max(r,g,b)
temp_name1 d_r
temp_expr1 ach==0?0:fabs(r-ach)/ach
temp_name2 d_g
temp_expr2 ach==0?0:fabs(g-ach)/ach
temp_name3 d_b
temp_expr3 ach==0?0:fabs(b-ach)/ach
expr0 ach-(d_r<thr?d_r:(pow2(thr)-thr*d_r+(lim_x-thr)*d_r)/(thr+(lim_x-thr)-d_r))*ach
expr1 ach-(d_g<thr?d_g:(pow2(thr)-thr*d_g+(lim_y-thr)*d_g)/(thr+(lim_y-thr)-d_g))*ach
expr2 ach-(d_b<thr?d_b:(pow2(thr)-thr*d_b+(lim_z-thr)*d_b)/(thr+(lim_z-thr)-d_b))*ach
name GamutUnCompress_simple
note_font Helvetica
xpos 290
ypos 111
addUserKnob {20 User}
addUserKnob {7 thr t "complement of threshold"}
thr {{1-parent.threshold}}
addUserKnob {7 lim_x R 0 1.25}
lim_x {{"1/max(0.0001, min(1/thr, cyan))"}}
addUserKnob {7 lim_y R 0 1.25}
lim_y {{"1/max(0.0001, min(1/thr, magenta))"}}
addUserKnob {7 lim_z R 0 1.25}
lim_z {{"1/max(0.0001, min(1/thr, yellow))"}}
}
push $Nbefdcc40
Expression {
temp_name0 ach
temp_expr0 max(r,g,b)
temp_name1 d_r
temp_expr1 ach==0?0:fabs(r-ach)/ach
temp_name2 d_g
temp_expr2 ach==0?0:fabs(g-ach)/ach
temp_name3 d_b
temp_expr3 ach==0?0:fabs(b-ach)/ach
expr0 "ach-(d_r<thr?d_r : -log( (d_r-lim_x)/(thr-lim_x))*(-thr+lim_x)+thr)*ach"
expr1 "ach-(d_g<thr?d_g : -log( (d_g-lim_y)/(thr-lim_y))*(-thr+lim_y)+thr)*ach"
expr2 "ach-(d_b<thr?d_b : -log( (d_b-lim_z)/(thr-lim_z))*(-thr+lim_z)+thr)*ach"
name GamutUnCompress_exp
note_font Helvetica
xpos 180
ypos 111
addUserKnob {20 User}
addUserKnob {7 thr t "complement of threshold"}
thr {{1-parent.threshold}}
addUserKnob {7 lim_x R 0 1.25}
lim_x {{"1/max(0.0001, min(1/thr, cyan))"}}
addUserKnob {7 lim_y R 0 1.25}
lim_y {{"1/max(0.0001, min(1/thr, magenta))"}}
addUserKnob {7 lim_z R 0 1.25}
lim_z {{"1/max(0.0001, min(1/thr, yellow))"}}
}
push $Nbefdcc40
Expression {
temp_name0 ach
temp_expr0 max(r,g,b)
temp_name1 d_r
temp_expr1 ach==0?0:fabs(r-ach)/ach
temp_name2 d_g
temp_expr2 ach==0?0:fabs(g-ach)/ach
temp_name3 d_b
temp_expr3 ach==0?0:fabs(b-ach)/ach
expr0 "ach-(d_r<thr?d_r : thr+(lim_x-thr)*log((1+(d_r/(lim_x-thr)-thr/(lim_x-thr)))/(1-(d_r/(lim_x-thr)-thr/(lim_x-thr))))/2)*ach"
expr1 "ach-(d_g<thr?d_g : thr+(lim_y-thr)*log((1+(d_g/(lim_y-thr)-thr/(lim_y-thr)))/(1-(d_g/(lim_y-thr)-thr/(lim_y-thr))))/2)*ach"
expr2 "ach-(d_b<thr?d_b : thr+(lim_z-thr)*log((1+(d_b/(lim_z-thr)-thr/(lim_z-thr)))/(1-(d_b/(lim_z-thr)-thr/(lim_z-thr))))/2)*ach"
name GamutUnCompress_tanh
note_font Helvetica
xpos 70
ypos 111
addUserKnob {20 User}
addUserKnob {7 thr t "complement of threshold"}
thr {{1-parent.threshold}}
addUserKnob {7 lim_x R 0 1.25}
lim_x {{"1/max(0.0001, min(1/thr, cyan))"}}
addUserKnob {7 lim_y R 0 1.25}
lim_y {{"1/max(0.0001, min(1/thr, magenta))"}}
addUserKnob {7 lim_z R 0 1.25}
lim_z {{"1/max(0.0001, min(1/thr, yellow))"}}
}
Switch {
inputs 3
which {{parent.method}}
name switch_method1
note_font Helvetica
xpos 70
ypos 183
}
push $Nbfedae20
Dot {
name Dot3
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xff
xpos -116
ypos 66
}
set Ne72acc60 [stack 0]
Expression {
temp_name0 ach
temp_expr0 max(r,g,b)
temp_name1 d_r
temp_expr1 ach==0?0:fabs(r-ach)/ach
temp_name2 d_g
temp_expr2 ach==0?0:fabs(g-ach)/ach
temp_name3 d_b
temp_expr3 ach==0?0:fabs(b-ach)/ach
expr0 "ach-( d_r < thr ? d_r : thr+(-1/((d_r-thr)/(lim_x-thr)+1)+1)*(lim_x-thr))*ach"
expr1 "ach-( d_g < thr ? d_g : thr+(-1/((d_g-thr)/(lim_y-thr)+1)+1)*(lim_y-thr))*ach"
expr2 "ach-( d_b < thr ? d_b : thr+(-1/((d_b-thr)/(lim_z-thr)+1)+1)*(lim_z-thr))*ach"
name GamutCompress_simple
note_font Helvetica
xpos -150
ypos 111
addUserKnob {20 User}
addUserKnob {7 thr t "complement of threshold"}
thr {{1-parent.threshold}}
addUserKnob {7 lim_x R 0 1.25}
lim_x {{"1/max(0.0001, min(1/thr, cyan))"}}
addUserKnob {7 lim_y R 0 1.25}
lim_y {{"1/max(0.0001, min(1/thr, magenta))"}}
addUserKnob {7 lim_z R 0 1.25}
lim_z {{"1/max(0.0001, min(1/thr, yellow))"}}
}
push $Ne72acc60
Expression {
temp_name0 ach
temp_expr0 max(r,g,b)
temp_name1 d_r
temp_expr1 ach==0?0:fabs(r-ach)/ach
temp_name2 d_g
temp_expr2 ach==0?0:fabs(g-ach)/ach
temp_name3 d_b
temp_expr3 ach==0?0:fabs(b-ach)/ach
expr0 "ach-( d_r > thr ? lim_x-(lim_x-thr)*exp(-(((d_r-thr)*((lim_x)/(lim_x-thr))/lim_x))) : d_r)*ach"
expr1 "ach-( d_g > thr ? lim_y-(lim_y-thr)*exp(-(((d_g-thr)*((lim_y)/(lim_y-thr))/lim_y))) : d_g)*ach"
expr2 "ach-( d_b > thr ? lim_z-(lim_z-thr)*exp(-(((d_b-thr)*((lim_z)/(lim_z-thr))/lim_z))) : d_b)*ach"
name GamutCompress_exp
note_font Helvetica
xpos -260
ypos 111
addUserKnob {20 User}
addUserKnob {7 thr t "complement of threshold"}
thr {{1-parent.threshold}}
addUserKnob {7 lim_x R 0 1.25}
lim_x {{"1/max(0.0001, min(1/thr, cyan))"}}
addUserKnob {7 lim_y R 0 1.25}
lim_y {{"1/max(0.0001, min(1/thr, magenta))"}}
addUserKnob {7 lim_z R 0 1.25}
lim_z {{"1/max(0.0001, min(1/thr, yellow))"}}
}
push $Ne72acc60
Expression {
temp_name0 ach
temp_expr0 max(r,g,b)
temp_name1 d_r
temp_expr1 ach==0?0:fabs(r-ach)/ach
temp_name2 d_g
temp_expr2 ach==0?0:fabs(g-ach)/ach
temp_name3 d_b
temp_expr3 ach==0?0:fabs(b-ach)/ach
expr0 "ach-( d_r > thr ? thr + (lim_x -thr) * tanh( ( (d_r-thr)/( lim_x-thr))) : d_r)*ach"
expr1 "ach-( d_g > thr ? thr + (lim_y -thr) * tanh( ( (d_g-thr)/( lim_y-thr))) : d_g)*ach"
expr2 "ach-( d_b > thr ? thr + (lim_z -thr) * tanh( ( (d_b-thr)/( lim_z-thr))) : d_b)*ach"
name GamutCompress_tanh
note_font Helvetica
xpos -370
ypos 111
addUserKnob {20 User}
addUserKnob {7 thr t "complement of threshold"}
thr {{1-parent.threshold}}
addUserKnob {7 lim_x R 0 1.25}
lim_x {{"1/max(0.0001, min(1/thr, cyan))"}}
addUserKnob {7 lim_y R 0 1.25}
lim_y {{"1/max(0.0001, min(1/thr, magenta))"}}
addUserKnob {7 lim_z R 0 1.25}
lim_z {{"1/max(0.0001, min(1/thr, yellow))"}}
}
Switch {
inputs 3
which {{parent.method}}
name switch_method
note_font Helvetica
xpos -150
ypos 183
}
Switch {
inputs 2
which {{parent.direction}}
name switch_direction
note_font Helvetica
xpos -40
ypos 231
}
Output {
name Output
xpos -40
ypos 422
}
end_group
#! /opt/thefoundry/nuke/Nuke12.1v2/libnuke-12.1.2.so -nx
version 12.1 v2
define_window_layout_xml {<?xml version="1.0" encoding="UTF-8"?>
<layout version="1.0">
<window x="0" y="0" w="1920" h="1200" fullscreen="1" screen="0">
<splitter orientation="1">
<split size="40"/>
<splitter orientation="2">
<split size="1161"/>
<dock id="" hideTitles="1" activePageId="Toolbar.1">
<page id="Toolbar.1"/>
</dock>
</splitter>
<split size="642"/>
<splitter orientation="2">
<split size="723"/>
<dock id="" activePageId="uk.co.thefoundry.scripteditor.1">
<page id="uk.co.thefoundry.scripteditor.1"/>
</dock>
<split size="434"/>
<dock id="" activePageId="Curve Editor.1">
<page id="DopeSheet.1"/>
<page id="Curve Editor.1"/>
</dock>
</splitter>
<split size="1230"/>
<dock id="" activePageId="DAG.1" focus="true">
<page id="DAG.1"/>
<page id="DAG.2"/>
<page id="DAG.3"/>
</dock>
</splitter>
</window>
<window x="0" y="1" w="717" h="764" screen="0">
<splitter orientation="2">
<split size="764"/>
<dock id="" activePageId="Viewer.1">
<page id="Viewer.1"/>
</dock>
</splitter>
</window>
</layout>
}
Root {
inputs 0
name "/cave/dev/color/aces_gamut_vwg/work/Jed Smith - gamut_mapping_v01.nk"
project_directory "\[python \{nuke.script_directory()\}]"
last_frame 52
lock_range true
format "2048 1556 0 0 2048 1556 1 2K_Super_35_full_ap"
proxy_type scale
proxy_format "640 480 0 0 640 480 1 PC_Video"
colorManagement OCIO
OCIO_config custom
customOCIOConfigPath /cave/dev/ocio/ocio-configs/colour-science-OpenColorIO-Configs/aces_1.2/config.ocio
defaultViewerLUT "OCIO LUTs"
workingSpaceLUT scene_linear
monitorLut ACES/sRGB
int8Lut matte_paint
int16Lut texture_paint
logLut compositing_log
floatLut scene_linear
addUserKnob {20 mariTab l Mari}
addUserKnob {26 cmdStatus l "listen status" t "The status of Nuke's command port" T <b>Disabled</b>}
addUserKnob {26 sendStatus l "send status" t "The status of Nuke's connection to Mari" T <b>Inactive</b>}
addUserKnob {3 socketPort l "nuke command port" t "Port to listen on. Make sure this matches the command port set in Mari's \"Nuke\" Palette."}
socketPort 50107
addUserKnob {6 enableSocket l enabled -STARTLINE}
addUserKnob {26 divider l "" +STARTLINE}
addUserKnob {20 advanced n 1}
advanced 0
addUserKnob {3 portRange l "port range" t "If the main specified command port is unavailable, Nuke will try using the next port number, and continue until successful or the indicated number of ports have been tried."}
portRange 200
addUserKnob {4 enablePortRange l "" t "Indicates whether to use a range of ports up to the given number, or to use only the single one specified." -STARTLINE M {"use range" "single port only"}}
addUserKnob {6 localhostOnly l "local host only" t "This determines whether the Mari bridge server will listen for connections from any machine, or from \"localhost\" (the local machine) only.<p>Only allowing connections from localhost is more secure, but will prevent you from using the Nuke&lt;&gt;Mari workflow across the network." +STARTLINE}
addUserKnob {1 hostName l "mari host" t "The machine name or IP address that Mari is running on.\nLeave empty if both Mari and Nuke are running on the same machine."}
hostName localhost
addUserKnob {3 socketPortSend l port t "Port that Mari is listening to. Make sure this matches the command port set in Mari's preferences." -STARTLINE}
socketPortSend 6100
addUserKnob {2 mariDataDir l "mari data dir" t "Path to directory that will hold transient data to be sent to Mari (exrs, objs and fbx files). If this is left empty, a \"mari\" directory will be created in the nk file's location"}
mariDataDir "\[getenv NUKE_TEMP_DIR]/mariData"
addUserKnob {2 mariLocation l "mari launch path" t "The path to launch Mari from.<br>This can also be set using the <b>MARI_INSTALL_PATH</b> environment variable."}
addUserKnob {20 endGroup n -1}
addUserKnob {20 GMS l "Global MotionBlur Settings"}
addUserKnob {20 TGC l "Transform Global Control" n 1}
addUserKnob {7 motionblur t "reference the motionblur setting on the Transform node" R 0 4}
motionblur 1
addUserKnob {7 shutter R 0 4}
shutter 0.5
addUserKnob {22 batchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nif n\['motionblur'].hasExpression():\n\tn\['motionblur'].clearAnimated()\n\tn\['motionblur'].setValue(n\['msamplert'].value())\nelse:\n\tn\['msamplert'].setValue(n\['motionblur'].value())\n\tn\['motionblur'].setValue(n\['msamplert'].value())\n\nn\['t_ind'].setValue('Interactive ON - Batch ON')" +STARTLINE}
addUserKnob {22 batchoninteractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblur'].hasExpression() is False:\n\tvaluemb = n\['motionblur'].value()\n\tn\['msamplert'].setValue(valuemb)\nn\['motionblur'].clearAnimated()\nn\['motionblur'].setExpression(\"!\$gui ? \[knob root.msamplert] : 0\")\nn\['t_ind'].setValue(\"Interactive OFF - Batch ON\")"}
addUserKnob {22 batchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblur'].hasExpression():\n\tn\['motionblur'].clearAnimated()\nn\['motionblur'].setExpression(\"0\")\n#n\['motionblur'].setValue(0)\nn\['t_ind'].setValue(\"Interactive OFF - Batch OFF\")"}
addUserKnob {7 msamplert l INVISIBLE -STARTLINE +INVISIBLE}
msamplert 1
addUserKnob {1 t_ind l status:}
t_ind "Interactive ON - Batch ON"
addUserKnob {20 RRGC l "Roto Render Global Control" n 1}
addUserKnob {6 motionBlur t "toggle motionBlur button on RotoRenders on or off\n" +STARTLINE}
motionBlur true
addUserKnob {6 motionBlurAllCrvs t "toggle motionBlurAllCrvs on/off" +STARTLINE}
motionBlurAllCrvs true
addUserKnob {7 shutterAngle R 0 360}
shutterAngle 180
addUserKnob {7 shutterStart R -180 180}
shutterStart -90
addUserKnob {7 motionBlurSteps R 0 2}
motionBlurSteps 15
addUserKnob {22 rrbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nn\['motionBlur'].clearAnimated()\nn\['motionBlurAllCrvs'].clearAnimated()\nn\['motionBlur'].setValue(1)\nn\['motionBlurAllCrvs'].setValue(1)\nn\['rr_ind'].setValue(\"Interactive ON - Batch ON\")" +STARTLINE}
addUserKnob {22 rrbatchointeractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nn\['motionBlur'].setExpression(\"!\$gui ? 1: 0\")\nn\['motionBlurAllCrvs'].setExpression(\"!\$gui ? 1: 0\")\nn\['rr_ind'].setValue(\"Interactive OFF - Batch ON\")"}
addUserKnob {22 rrbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nn\['motionBlur'].clearAnimated()\nn\['motionBlur'].setValue(0)\nn\['motionBlurAllCrvs'].clearAnimated()\nn\['motionBlurAllCrvs'].setValue(0)\nn\['rr_ind'].setValue(\"Interactive OFF - Batch OFF\")"}
addUserKnob {1 rr_ind l status:}
rr_ind "Interactive ON - Batch ON"
addUserKnob {20 endGroup_2 l endGroup n -1}
addUserKnob {20 C3dGC l "Card3D Global Control" n 1}
addUserKnob {7 motionblurc3d l motionblur R 0 4}
motionblurc3d 1
addUserKnob {7 shutterc3d l shutter R 0 2}
shutterc3d 0.5
addUserKnob {22 c3dbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nif n\['motionblurc3d'].hasExpression():\n\tn\['motionblurc3d'].clearAnimated()\n\tn\['motionblurc3d'].setValue(n\['msamplerc3d'].value())\nelse:\n\tn\['msamplerc3d'].setValue(n\['motionblurc3d'].value())\n\tn\['motionblurc3d'].setValue(n\['msamplerc3d'].value())\n\tn\['c3d_ind'].setValue(\"Interactive ON - Batch ON\")" +STARTLINE}
addUserKnob {22 crdbatchoninteractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblurc3d'].hasExpression() is False:\n\tvaluemb = n\['motionblurc3d'].value()\n\tprint \"foo\", n\['msamplerc3d'].value()\n\tif n\['motionblurc3d'].value() != 0:\n\t\tn\['msamplerc3d'].setValue(valuemb)\n\tn\['motionblurc3d'].setExpression(\"!\$gui ? \[knob root.msamplerc3d] : 0\")\nn\['c3d_ind'].setValue(\"Interactive OFF - Batch ON\")\n\n"}
addUserKnob {22 c3dbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblurc3d'].hasExpression():\n\tn\['motionblurc3d'].clearAnimated()\nelse:\n\tn\['msamplerc3d'].setValue(n\['motionblurc3d'].value())\nn\['motionblurc3d'].setExpression(\"0\")\nn\['c3d_ind'].setValue(\"Interactive OFF - Batch OFF\")"}
addUserKnob {7 msamplerc3d l INVISIBLE +INVISIBLE}
msamplerc3d 1
addUserKnob {1 c3d_ind l status:}
c3d_ind "Interactive ON - Batch ON"
addUserKnob {20 endGroup_3 l endGroup n -1}
addUserKnob {20 sr l "Scanline Render" n 1}
addUserKnob {7 prescan_samples l samples R 0 50}
prescan_samples 5
addUserKnob {7 batch_samples l "batch samples" R 0 50}
batch_samples 5
addUserKnob {7 scan_shutter l shutter}
scan_shutter 0.5
addUserKnob {22 srbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nif n\['scan_samples'].hasExpression():\n n\['scan_samples'].clearAnimated()\nif n\['prescan_samples'].hasExpression():\n\tn\['prescan_samples'].clearAnimated()\n\tn\['prescan_samples'].setValue(n\['scan_sampler'].value())\nelse:\n\tn\['scan_sampler'].setValue(n\['prescan_samples'].value())\n\n\nif n\['batch_samples'].hasExpression():\n\tn\['batch_samples'].clearAnimated()\n\tn\['batch_samples'].setValue(n\['batch_sampler'].value())\nelse:\n\tn\['batch_sampler'].setValue(n\['batch_samples'].value())\n\n\nn\['batch_samples'].setValue(n\['batch_sampler'].value())\nn\['prescan_samples'].setValue(n\['scan_sampler'].value())\nn\['scan_samples'].setExpression(\"\$gui ? %s : %s\" % (\"root.prescan_samples\",\"root.batch_samples\" ))\nn\['sr_ind'].setValue(\"Interactive ON - Batch ON\")\n" +STARTLINE}
addUserKnob {22 srbatchoninteractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\n\nif n\['prescan_samples'].hasExpression():\n\tn\['prescan_samples'].clearAnimated()\n\tn\['prescan_samples'].setExpression(\"0\")\nelse:\n\tn\['scan_sampler'].setValue(n\['prescan_samples'].value())\n\tn\['prescan_samples'].setExpression(\"0\")\n\nif n\['batch_samples'].hasExpression():\n\tn\['batch_samples'].clearAnimated()\nelse:\n\tn\['batch_sampler'].setValue(n\['batch_samples'].value())\n\nn\['batch_samples'].setValue(n\['batch_sampler'].value())\nn\['scan_samples'].setExpression(\"!\$gui ? root.batch_samples : root.prescan_samples\")\nn\['sr_ind'].setValue(\"Interactive OFF - Batch ON\")"}
addUserKnob {22 srbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nif n\['prescan_samples'].hasExpression() is False:\n\tn\['scan_sampler'].setValue(n\['prescan_samples'].value())\n\nif n\['batch_samples'].hasExpression() is False:\n\tn\['batch_sampler'].setValue(n\['batch_samples'].value())\n\nn\['scan_samples'].setExpression(\"!\$gui ? root.batch_samples : root.prescan_samples\")\nn\['prescan_samples'].setExpression(\"0\")\nn\['batch_samples'].setExpression(\"0\")\n\nn\['sr_ind'].setValue(\"Interactive OFF - Batch OFF\")"}
addUserKnob {7 scan_sampler l INVISIBLE -STARTLINE +INVISIBLE}
scan_sampler 10
addUserKnob {7 scan_samples l INVISIBLE -STARTLINE +INVISIBLE}
scan_samples {{"\$gui ? root.prescan_samples : root.batch_samples"}}
addUserKnob {7 batch_sampler l INVISIBLE -STARTLINE +INVISIBLE}
batch_sampler 10
addUserKnob {1 sr_ind l status:}
sr_ind "Interactive ON - Batch ON"
addUserKnob {20 endGroup_4 l endGroup n -1}
addUserKnob {20 rn l "Roto Node Global Control" n 1}
addUserKnob {6 rotoMotionBlur_on l motionblur t "toggle motionBlur button on Roto nodes on or off\n" +STARTLINE}
rotoMotionBlur_on true
addUserKnob {7 rotoMotionBlur_samples l "motionblur samples" t "Sets the number of motion blur samples" R 0 4}
rotoMotionBlur_samples 1
addUserKnob {7 rotoMotionBlur_shutter l "motionblur shutter" t "This sets how long the shutter should be open. The value is in frames, so 0.5 is half a frame" R 0 2}
rotoMotionBlur_shutter 0.5
addUserKnob {4 rotoShutterOffsetType l "shutter offset type" t "The value of this controls how the shutter behaves with respect to the current frame value" M {centred start end custom}}
addUserKnob {7 rotoShutterOffset l "shutter offset" t "If the \"shutter offset type\" is set to 'custom', this parameter is used to set the time the shutter opens by adding it to the current frame. \nValues are in frames, so -0.5 would open the shutter half a frame before the current frame" R -1 1}
addUserKnob {22 rnbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nn\['rotoMotionBlur_on'].clearAnimated()\nn\['rotoMotionBlur_on'].setValue(1)\nn\['rn_ind'].setValue(\"Interactive ON - Batch ON\")" +STARTLINE}
addUserKnob {22 rnbatchointeractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nn\['rotoMotionBlur_on'].setExpression(\"!\$gui ? 1: 0\")\nn\['rn_ind'].setValue(\"Interactive OFF - Batch ON\")"}
addUserKnob {22 rnbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nn\['rotoMotionBlur_on'].clearAnimated()\nn\['rotoMotionBlur_on'].setValue(0)\nn\['rn_ind'].setValue(\"Interactive OFF - Batch OFF\")"}
addUserKnob {1 rn_ind l status:}
rn_ind "Interactive ON - Batch ON"
addUserKnob {20 endGroup_5 l endGroup n -1}
}
BackdropNode {
inputs 0
name BackdropNode8
label "Image inputs:\nUse timeline to switch sources\n\nFrame 1: Plot Gamut Grid (see Master node)\nFrame 2: Color Wheel (in plotSourceGamut)\nFrame >= 3: connect your image inputs (expected in scene-linear, ACES/AP0)\n"
note_font_size 36
xpos 3480
ypos -1048
bdwidth 5684
bdheight 664
}
BackdropNode {
inputs 0
name BackdropNode9
tile_color 0x829dccff
label "Viewing Nodes:\nImages are in ACEScg (lin_ap1)\nApply display your\ntransform as needed"
note_font_size 36
xpos 2987
ypos -677
bdwidth 477
bdheight 312
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Point_Grey_Grasshopper_50S5C_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read59
xpos 9025
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 80 111 105 110 116 95 71 114 101 121 95 71 114 97 115 115 104 111 112 112 101 114 95 53 48 83 53 67 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 94}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text45
xpos 9025
ypos -624
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 9059
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Pentax_K_5_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read58
xpos 8915
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 80 101 110 116 97 120 95 75 95 53 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 76}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text44
xpos 8915
ypos -624
}
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8949
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Olympus_E_PL2_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read57
xpos 8805
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 79 108 121 109 112 117 115 95 69 95 80 76 50 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 79}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text43
xpos 8805
ypos -624
}
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8839
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Nokia_N900_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read56
xpos 8695
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 78 111 107 105 97 95 78 57 48 48 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 76}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text42
xpos 8695
ypos -624
}
Dot {
name Dot4
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8729
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Nikon_D3_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read55
xpos 8585
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 78 105 107 111 110 95 68 51 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 74}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text41
xpos 8585
ypos -624
}
Dot {
name Dot5
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8619
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Hasselblad_H2_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read54
xpos 8475
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 72 97 115 115 101 108 98 108 97 100 95 72 50 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 79}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text40
xpos 8475
ypos -624
}
Dot {
name Dot6
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8509
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Fujifilm_X_T2_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read28
xpos 8365
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 70 117 106 105 102 105 108 109 95 88 95 84 50 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 79}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text39
xpos 8365
ypos -624
}
Dot {
name Dot7
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8399
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_CIE_1931_2_Degree_Standard_Observer_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read27
xpos 8255
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 67 73 69 95 49 57 51 49 95 50 95 68 101 103 114 101 101 95 83 116 97 110 100 97 114 100 95 79 98 115 101 114 118 101 114 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 101}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text38
xpos 8255
ypos -624
}
Dot {
name Dot8
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8289
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Cornell_Box_Rigid_Spheres_190_Patch_Roughplastic_Canon_5DMarkII_RGB_W_lin_ap0.exr
format "1024 1024 0 0 1024 1024 1 square_1K"
origset true
colorspace acescg
raw true
name Read26
xpos 8145
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 111 114 110 101 108 108 95 66 111 120 95 82 105 103 105 100 95 83 112 104 101 114 101 115 95 49 57 48 95 80 97 116 99 104 95 82 111 117 103 104 112 108 97 115 116 105 99 95 67 97 110 111 110 95 53 68 77 97 114 107 73 73 95 82 71 66 95 87 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 80}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text37
xpos 8145
ypos -624
}
Dot {
name Dot9
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8179
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C096_171213_R11N_lin_ap0.0895897.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read53
xpos 8047
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 57 54 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 57 53 56 57 55 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text36
xpos 8047
ypos -624
}
Dot {
name Dot10
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 8081
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C095_171213_R11N_lin_ap0.0893744.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read52
xpos 7937
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 57 53 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 57 51 55 52 52 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text35
xpos 7937
ypos -624
}
Dot {
name Dot11
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7971
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C094_171213_R11N_lin_ap0.0892173.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
version 14
colorspace acescg
raw true
name Read51
xpos 7827
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 57 52 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 57 50 49 55 51 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text34
xpos 7827
ypos -624
}
Dot {
name Dot12
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7861
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C093_171213_R11N_lin_ap0.0890902.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read50
xpos 7717
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 57 51 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 57 48 57 48 50 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text33
xpos 7717
ypos -624
}
Dot {
name Dot13
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7751
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C092_171213_R11N_lin_ap0.0889688.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read49
xpos 7607
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 57 50 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 56 57 54 56 56 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text32
xpos 7607
ypos -624
}
Dot {
name Dot14
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7641
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C091_171213_R11N_lin_ap0.0888367.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read48
xpos 7497
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 57 49 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 56 56 51 54 55 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text31
xpos 7497
ypos -624
}
Dot {
name Dot15
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7531
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C090_171213_R11N_lin_ap0.0887144.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read47
xpos 7387
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 57 48 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 56 55 49 52 52 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text30
xpos 7387
ypos -624
}
Dot {
name Dot16
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7421
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C089_171213_R11N_lin_ap0.0885836.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read46
xpos 7277
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 57 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 56 53 56 51 54 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text29
xpos 7277
ypos -624
}
Dot {
name Dot17
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7311
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C088_171213_R11N_lin_ap0.0883827.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read45
xpos 7167
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 56 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 56 51 56 50 55 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text28
xpos 7167
ypos -624
}
Dot {
name Dot18
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7201
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C087_171213_R11N_lin_ap0.0880363.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read44
xpos 7057
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 55 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 56 48 51 54 51 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text27
xpos 7057
ypos -624
}
Dot {
name Dot19
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 7091
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C086_171213_R11N_lin_ap0.0878098.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read43
xpos 6947
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 54 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 55 56 48 57 56 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text26
xpos 6947
ypos -624
}
Dot {
name Dot20
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6981
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C085_171213_R11N_lin_ap0.0876649.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read42
xpos 6837
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 53 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 55 54 54 52 57 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text25
xpos 6837
ypos -624
}
Dot {
name Dot21
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6871
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C084_171213_R11N_lin_ap0.0875601.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read41
xpos 6727
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 52 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 55 53 54 48 49 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text24
xpos 6727
ypos -624
}
Dot {
name Dot22
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6761
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C083_171213_R11N_lin_ap0.0874303.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read40
xpos 6617
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 51 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 55 52 51 48 51 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text23
xpos 6617
ypos -624
}
Dot {
name Dot23
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6651
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C082_171213_R11N_lin_ap0.0873001.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read39
xpos 6507
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 50 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 55 51 48 48 49 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text22
xpos 6507
ypos -624
}
Dot {
name Dot24
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6541
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C081_171213_R11N_lin_ap0.0871457.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read38
xpos 6397
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 49 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 55 49 52 53 55 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text21
xpos 6397
ypos -624
}
Dot {
name Dot25
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6431
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C080_171213_R11N_lin_ap0.0869910.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read37
xpos 6287
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 56 48 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 54 57 57 49 48 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text20
xpos 6287
ypos -624
}
Dot {
name Dot26
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6321
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C079_171213_R11N_lin_ap0.0867242.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read36
xpos 6177
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 57 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 54 55 50 52 50 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text19
xpos 6177
ypos -624
}
Dot {
name Dot27
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6211
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C078_171213_R11N_lin_ap0.0865904.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read35
xpos 6067
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 56 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 54 53 57 48 52 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text18
xpos 6067
ypos -624
}
Dot {
name Dot28
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 6101
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C077_171213_R11N_lin_ap0.0864011.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read34
xpos 5957
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 55 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 54 52 48 49 49 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text17
xpos 5957
ypos -624
}
Dot {
name Dot29
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5991
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C076_171213_R11N_lin_ap0.0862483.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read33
xpos 5847
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 54 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 54 50 52 56 51 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text16
xpos 5847
ypos -624
}
Dot {
name Dot30
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5881
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C075_171213_R11N_lin_ap0.0861340.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read32
xpos 5737
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 53 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 54 49 51 52 48 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text15
xpos 5737
ypos -624
}
Dot {
name Dot31
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5771
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C074_171213_R11N_lin_ap0.0858420.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read31
xpos 5627
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 52 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 53 56 52 50 48 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text14
xpos 5627
ypos -624
}
Dot {
name Dot32
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5661
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C073_171213_R11N_lin_ap0.0856643.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read30
xpos 5517
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 51 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 53 54 54 52 51 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text13
xpos 5517
ypos -624
}
Dot {
name Dot33
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5551
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/A004C072_171213_R11N_lin_ap0.0854945.exr
format "3168 1782 0 0 3168 1782 1 "
origset true
colorspace acescg
raw true
name Read29
xpos 5407
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{65 48 48 52 67 48 55 50 95 49 55 49 50 49 51 95 82 49 49 78 95 108 105 110 95 97 112 48 46 48 56 53 52 57 52 53 46 101 120 114}
}
old_expression_markers {{0 39}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text12
xpos 5407
ypos -624
}
Dot {
name Dot34
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5441
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_025A6843_lin_ap0.exr
format "5796 3870 0 0 5796 3870 1 "
origset true
colorspace acescg
raw true
name Read23
xpos 5305
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 48 50 53 65 54 56 52 51 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 34}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text56
xpos 5305
ypos -624
}
Dot {
name Dot35
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5339
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_025A6842_lin_ap0.exr
format "5796 3870 0 0 5796 3870 1 "
origset true
colorspace acescg
raw true
name Read22
xpos 5195
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 48 50 53 65 54 56 52 50 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 34}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text55
xpos 5195
ypos -624
}
Dot {
name Dot36
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5229
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_025A6841_lin_ap0.exr
format "5796 3870 0 0 5796 3870 1 "
origset true
colorspace acescg
raw true
name Read21
xpos 5085
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 48 50 53 65 54 56 52 49 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 34}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text54
xpos 5085
ypos -624
}
Dot {
name Dot37
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5119
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_025A6840_lin_ap0.exr
format "5796 3870 0 0 5796 3870 1 "
origset true
colorspace acescg
raw true
name Read20
xpos 4975
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 48 50 53 65 54 56 52 48 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 34}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text53
xpos 4975
ypos -624
}
Dot {
name Dot38
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 5009
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_025A6839_lin_ap0.exr
format "5796 3870 0 0 5796 3870 1 "
origset true
colorspace acescg
raw true
name Read19
xpos 4865
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 48 50 53 65 54 56 51 57 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 34}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text52
xpos 4865
ypos -624
}
Dot {
name Dot39
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4899
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_025A6838_lin_ap0.exr
format "5796 3870 0 0 5796 3870 1 "
origset true
colorspace acescg
raw true
name Read18
xpos 4755
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 48 50 53 65 54 56 51 56 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 34}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text51
xpos 4755
ypos -624
}
Dot {
name Dot40
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4789
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_025A6837_lin_ap0.exr
format "5796 3870 0 0 5796 3870 1 "
origset true
colorspace acescg
raw true
name Read17
xpos 4645
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 48 50 53 65 54 56 51 55 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 34}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text50
xpos 4645
ypos -624
}
Dot {
name Dot41
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4679
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_RED_Helium_lin_ap0.exr
format "8192 4320 0 0 8192 4320 1 "
origset true
colorspace acescg
raw true
name Read25
xpos 4544
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 82 69 68 95 72 101 108 105 117 109 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 36}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text49
xpos 4544
ypos -624
}
Dot {
name Dot42
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4578
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_RED_Dragon_lin_ap0.exr
format "6144 3160 0 0 6144 3160 1 "
origset true
colorspace acescg
raw true
name Read24
xpos 4448
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 82 69 68 95 68 114 97 103 111 110 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 36}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text48
xpos 4448
ypos -624
}
Dot {
name Dot43
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4482
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Justin_Johnson_AlexaMINI_lin_ap0.exr
format "3424 2202 0 0 3424 2202 1 "
origset true
colorspace acescg
raw true
name Read5
xpos 4352
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 117 115 116 105 110 95 74 111 104 110 115 111 110 95 65 108 101 120 97 77 73 78 73 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 35}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text10
xpos 4352
ypos -624
}
Dot {
name Dot44
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4386
ypos -526
}
Read {
inputs 0
file_type exr
file "../images/Joseph Goldstone_-_Tungsten_3200K_lin_ap0.exr"
format "4096 2160 0 0 4096 2160 1 4K_DCP"
origset true
colorspace acescg
raw true
name Read1
xpos 4260
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{74 111 115 101 112 104 32 71 111 108 100 115 116 111 110 101 95 45 95 84 117 110 103 115 116 101 110 95 51 50 48 48 75 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 44}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text11
xpos 4260
ypos -624
}
Dot {
name Dot50
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4294
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Carol_Payne_J001_C001_08178N_001_lin_ap0.exr
format "3840 2160 0 0 3840 2160 1 UHD_4K"
origset true
colorspace acescg
raw true
name Read2
xpos 4168
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{67 97 114 111 108 95 80 97 121 110 101 95 74 48 48 49 95 67 48 48 49 95 48 56 49 55 56 78 95 48 48 49 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 43}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text9
xpos 4168
ypos -624
}
Dot {
name Dot49
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4202
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Fabian_Matas_Alexamini_OutofGamut_2_lin_ap0.exr
format "2048 1152 0 0 2048 1152 1 2K_1.77"
origset true
colorspace acescg
raw true
name Read3
xpos 4080
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{70 97 98 105 97 110 95 77 97 116 97 115 95 65 108 101 120 97 109 105 110 105 95 79 117 116 111 102 71 97 109 117 116 95 50 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 46}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text8
xpos 4080
ypos -624
}
Dot {
name Dot48
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4114
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/Fabian_Matas_Alexamini_OutofGamut_1_lin_ap0.exr
format "2048 1152 0 0 2048 1152 1 2K_1.77"
origset true
colorspace aces
raw true
name Read4
xpos 3987
ypos -829
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{70 97 98 105 97 110 95 77 97 116 97 115 95 65 108 101 120 97 109 105 110 105 95 79 117 116 111 102 71 97 109 117 116 95 49 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 46}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text7
xpos 3987
ypos -624
}
Dot {
name Dot47
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 4021
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/SonyF35.StillLife_lin_ap0.exr
format "1920 1080 0 0 1920 1080 1 HD_1080"
origset true
colorspace acescg
raw true
name Read16
xpos 3897
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{83 111 110 121 70 51 53 46 83 116 105 108 108 76 105 102 101 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 28}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text47
xpos 3897
ypos -624
}
Dot {
name Dot46
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3931
ypos -526
}
Read {
inputs 0
file_type exr
file ../images/syntheticChart.01_lin_ap0.exr
format "2048 1080 0 0 2048 1080 1 2K_DCP"
origset true
colorspace acescg
raw true
name Read15
xpos 3805
ypos -830
}
Text2 {
font_size_toolbar 100
font_width_toolbar 100
font_height_toolbar 100
message "\[python os.path.basename(nuke.thisNode().metadata('input/filename'))]"
old_message {{115 121 110 116 104 101 116 105 99 67 104 97 114 116 46 48 49 95 108 105 110 95 97 112 48 46 101 120 114}
}
old_expression_markers {{0 28}
}
box {0 0 {width} {height}}
yjustify bottom
transforms {{0 2}
}
cursor_position 17
global_font_scale {{width/4000}}
center {1024 576}
cursor_initialised true
autofit_bbox false
initial_cursor_position {{0 1152}
}
group_animations {{0} imported: 0 selected: items: "root transform/"}
animation_layers {{1 11 1024 576 0 0 1 1 0 0 0 0}
}
enable_shadows true
name Text46
xpos 3805
ypos -624
}
Dot {
name Dot45
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3839
ypos -526
}
ColorWheel {
inputs 0
format "2048 2048 0 0 2048 2048 1 square_2k"
gamma 0.45
name ColorWheel5
note_font "Bitstream Vera Sans"
xpos 3700
ypos -822
}
Group {
inputs 0
name GamutGrid3
xpos 3562
ypos -817
postage_stamp true
addUserKnob {20 GamutGrid}
addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" Rec709 Rec2020 P3D60 P3D65 P3DCI ArriAlexaWideGamut "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB GoProProtune CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut ""}}
gamut ACES
addUserKnob {4 style M {dots grid}}
style grid
addUserKnob {4 distribution t "Which chromaticity space should the overlays be constructed in? \n\nYxy is familiar, but not very perceptually uniform.\n\nLu'v' is designed to be more perceptually uniform." -STARTLINE M {"CIE Yxy" "CIE Lu'v'"}}
addUserKnob {7 density R 10 150}
density 119
addUserKnob {4 output t "choose pixel output type\n" M {rgb xyz ""}}
addUserKnob {26 chromaticity_coordinates_label l " " T "<b>Chromaticity Coordinates</b>"}
addUserKnob {20 chromaticities_grp l "" +STARTLINE n 1}
addUserKnob {41 rxy T ColorMatrix.rxy}
addUserKnob {41 gxy T ColorMatrix.gxy}
addUserKnob {41 bxy T ColorMatrix.bxy}
addUserKnob {41 wxy T ColorMatrix.wxy}
addUserKnob {41 matrix T ColorMatrix.matrix}
addUserKnob {20 endGroup n -1}
}
ColorWheel {
inputs 0
format "512 512 0 0 512 512 1 square_512"
centerSaturation 1
fillFormat false
area {-170 -158 682 670}
name ColorWheel4
xpos -260
ypos 14
postage_stamp false
}
Crop {
box {0 0 512 512}
crop false
name Crop2
xpos -260
ypos 38
}
Reformat {
type scale
scale {{max(parent.density/50,0.25)}}
resize distort
filter impulse
pbb true
name Reformat3
note_font "Bitstream Vera Sans"
xpos -260
ypos 62
}
Dot {
name Dot11
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -226
ypos 114
}
set Nff55ea0 [stack 0]
push $Nff55ea0
ContactSheet {
inputs 2
width {{width*columns}}
height {{height/pixel_aspect*rows}}
rows 1
columns 2
roworder TopBottom
name ContactSheet2
xpos -260
ypos 158
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -226
ypos 282
}
ColorWheel {
inputs 0
format "512 512 0 0 512 512 1 square_512"
fillFormat false
area {40 40 472 472}
name ColorWheel1
xpos -40
ypos -672
postage_stamp false
}
Reformat {
type scale
scale {{max(parent.density/50,0.25)}}
resize distort
filter impulse
pbb true
name Reformat1
note_font "Bitstream Vera Sans"
xpos -40
ypos -634
}
Crop {
box {0 0 {width} {height}}
reformat true
name Crop1
note_font "Bitstream Vera Sans"
xpos -40
ypos -600
}
Unpremult {
name Unpremult1
xpos -40
ypos -514
}
ColorMatrix {
matrix {
{{curve(which) 1 0.9525524378 0.6624541879 0.7053968906 0.4123907983 0.6369580626 0.5049495697 0.4865709841 0.4451698363 0.6380076408 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481}}
{{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295}}
{{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375}}
}
invert {{parent.invert}}
name ColorMatrix
label "RGB to XYZ"
xpos -40
ypos -439
addUserKnob {20 Gamut}
addUserKnob {3 which}
which {{parent.gamut}}
addUserKnob {12 rxy +DISABLED}
rxy {{curve(which) 0 0.7347 0.713 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73} {curve(which) 0 0.2653 0.293 0.3177 0.33 0.292 0.32 0.32 0.32 0.313 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28}}
addUserKnob {12 gxy +DISABLED}
gxy {{curve(which) 0 0 0.165 0.18 0.3 0.17 0.265 0.265 0.265 0.221 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165} {curve(which) 0 1 0.83 0.9 0.6 0.797 0.69 0.69 0.69 0.848 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84}}
addUserKnob {12 bxy +DISABLED}
bxy {{curve(which) 0 0.0001 0.128 0.065 0.15 0.131 0.15 0.15 0.15 0.0861 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1} {curve(which) 0 -0.077 0.044 -0.0805 0.06 0.046 0.06 0.06 0.06 -0.102 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03}}
addUserKnob {12 wxy +DISABLED}
wxy {{curve(which) 0.33333 0.32168 0.32168 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127} {curve(which) 0.33333 0.33767 0.33767 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329}}
}
Colorspace {
colorspace_in CIE-XYZ
colorspace_out CIE-Yxy
name Colorspace1
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -40
ypos -352
}
set Nc47c300 [stack 0]
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -556
ypos -342
}
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression10
label "CIE Yxy to CIELuv"
xpos -589
ypos -319
disable {{!parent.distribution}}
}
Expression {
expr0 r
expr1 "(-(degrees(atan2(g-white.x, b-white.y))-180)+270)%360/360"
expr2 "hypot(g-white.x, b-white.y)"
expr3 a
name Expression11
xpos -590
ypos -250
cached true
addUserKnob {20 User}
addUserKnob {12 white}
white {{"parent.distribution ? 4*parent.wxy.x / ( -2 * parent.wxy.x + 12 * parent.wxy.y + 3) : parent.wxy"} {"parent.distribution ? 9*parent.wxy.y / ( -2*parent.wxy.x + 12*parent.wxy.y + 3) : parent.wxy"}}
}
set Nc84f9a0 [stack 0]
Posterize {
channels rgb
Colors {{rint(parent.density/3*2)}}
name Posterize1
note_font "Bitstream Vera Sans"
xpos -590
ypos -202
}
set Nb7fc3b0 [stack 0]
push $Nc84f9a0
Dot {
name Dot15
note_font "Bitstream Vera Sans"
xpos -446
ypos -222
}
Copy {
inputs 2
from0 rgba.blue
to0 rgba.blue
name Copy1
xpos -480
ypos -136
}
push $Nb7fc3b0
push $Nc84f9a0
Dot {
name Dot16
note_font "Bitstream Vera Sans"
xpos -666
ypos -222
}
Copy {
inputs 2
from0 rgba.green
to0 rgba.green
name Copy2
xpos -700
ypos -136
}
ContactSheet {
inputs 2
width {{width*columns}}
height {{height/pixel_aspect*rows}}
rows 1
columns 2
center true
roworder TopBottom
name ContactSheet3
xpos -590
ypos -82
}
Expression {
expr0 r
expr1 cos(radians(g*360))*b+white.x
expr2 sin(radians(g*360))*b+white.y
expr3 a
name Expression12
xpos -590
ypos -46
cached true
addUserKnob {20 User}
addUserKnob {12 white}
white {{parent.Expression11.white} {parent.Expression11.white}}
}
Expression {
expr0 r
expr1 "9*g / ( 6*g - 16*b + 12)"
expr2 "4*b/ ( 6*g - 16*b + 12)"
name Expression13
label "CIELuv to CIE Yxy"
xpos -592
ypos -12
disable {{!parent.distribution}}
}
Colorspace {
colorspace_in CIE-Yxy
colorspace_out CIE-XYZ
name Colorspace2
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -590
ypos 32
}
ColorMatrix {
matrix {
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
}
invert true
name ColorMatrix2
label "XYZ to RGB"
xpos -590
ypos 80
}
Clamp {
channels rgba
maximum_enable false
name ClampMin2
xpos -590
ypos 118
}
Clamp {
channels {-rgba.red -rgba.green -rgba.blue rgba.alpha}
minimum 1
MinClampTo_enable true
MaxClampTo_enable true
name Clamp1
note_font "Bitstream Vera Sans"
xpos -590
ypos 152
}
Premult {
name Premult1
xpos -590
ypos 206
}
Merge2 {
inputs 2
operation under
bbox B
name Merge2
xpos -590
ypos 278
}
Shuffle {
alpha white
name Shuffle1
label "\[value in] -> \[value out]"
xpos -590
ypos 320
}
Dot {
name Dot3
label " GRID"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -556
ypos 378
}
push $Nff55ea0
push $Nc47c300
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression14
label "CIE Yxy to CIELuv"
xpos -40
ypos -302
disable {{!parent.distribution}}
}
Expression {
expr0 r
expr1 rint(g*Colors)/Colors
expr2 rint(b*Colors)/Colors
expr3 a
name Expression1
label rint
note_font "Bitstream Vera Sans"
xpos -40
ypos -248
addUserKnob {20 User}
addUserKnob {7 Colors R 1 256}
Colors {{parent.density}}
}
Expression {
expr0 r
expr1 "9*g / ( 6*g - 16*b + 12)"
expr2 "4*b/ ( 6*g - 16*b + 12)"
name Expression3
label "CIELuv to CIE Yxy"
xpos -40
ypos -190
disable {{!parent.distribution}}
}
Colorspace {
colorspace_in CIE-Yxy
colorspace_out CIE-XYZ
name Colorspace3
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -40
ypos -142
}
ColorMatrix {
matrix {
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
}
invert true
name ColorMatrix1
label "XYZ to RGB"
xpos -40
ypos -72
}
Clamp {
channels {-rgba.red -rgba.green -rgba.blue rgba.alpha}
minimum 1
MinClampTo_enable true
MaxClampTo_enable true
name Clamp4
note_font "Bitstream Vera Sans"
xpos -40
ypos -16
}
Premult {
name Premult2
xpos -40
ypos 38
}
Merge2 {
inputs 2
operation under
bbox B
name Merge1
xpos -40
ypos 110
}
Clamp {
channels rgba
maximum_enable false
name ClampMin1
xpos -40
ypos 182
}
Dot {
name Dot4
label " DOTS"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 378
}
Switch {
inputs 2
which {{parent.style}}
name Switch1
xpos -260
ypos 494
}
ColorMatrix {
matrix {
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
{{parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix} {parent.ColorMatrix.matrix}}
}
name ColorMatrix4
label "RGB to XYZ"
xpos -260
ypos 560
disable {{!parent.output}}
}
Output {
name Output
xpos -260
ypos 734
}
ColorWheel {
inputs 0
format "256 256 0 0 256 256 1 square_256"
area {40 40 472 472}
name ColorWheel2
xpos -40
ypos -706
postage_stamp false
}
end_group
Saturation {
saturation 2
mode Average
name Saturation1
xpos 3562
ypos -712
disable true
}
Dot {
name Dot55
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3596
ypos -519
}
Switch {
inputs 52
which {{frame-1}}
name Switch1
note_font "Bitstream Vera Sans"
xpos 3700
ypos -442
}
Group {
name GamutToXYZ1
label "\[if \{\[value invert]==true\} \{return \"XYZ to \[value gamut]\"\} else \{return \"\[value gamut] to XYZ\"\}]"
xpos 3700
ypos -328
addUserKnob {20 GamutToXYZ_tab l GamutToXYZ}
addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" Rec709 Rec2020 P3D60 P3D65 P3DCI ArriAlexaWideGamut "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB GoProProtune CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut ""}}
gamut ACES
addUserKnob {6 invert +STARTLINE}
addUserKnob {41 matrix T ColorMatrix.matrix}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
ColorMatrix {
matrix {
{{curve(which) 1 0.9525524378 0.6624541879 0.7053968906 0.4123907983 0.6369580626 0.5049495697 0.4865709841 0.4451698363 0.6380076408 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481}}
{{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295}}
{{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375}}
}
invert {{parent.invert}}
name ColorMatrix
label "RGB to XYZ"
xpos -40
ypos 33
addUserKnob {20 Gamut}
addUserKnob {3 which}
which {{parent.gamut}}
addUserKnob {12 rxy +DISABLED}
rxy {{curve(which) 0 0.7347 0.713 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73} {curve(which) 0 0.2653 0.293 0.3177 0.33 0.292 0.32 0.32 0.32 0.313 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28}}
addUserKnob {12 gxy +DISABLED}
gxy {{curve(which) 0 0 0.165 0.18 0.3 0.17 0.265 0.265 0.265 0.221 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165} {curve(which) 0 1 0.83 0.9 0.6 0.797 0.69 0.69 0.69 0.848 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84}}
addUserKnob {12 bxy +DISABLED}
bxy {{curve(which) 0 0.0001 0.128 0.065 0.15 0.131 0.15 0.15 0.15 0.0861 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1} {curve(which) 0 -0.077 0.044 -0.0805 0.06 0.046 0.06 0.06 0.06 -0.102 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03}}
addUserKnob {12 wxy +DISABLED}
wxy {{curve(which) 0.33333 0.32168 0.32168 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127} {curve(which) 0.33333 0.33767 0.33767 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329}}
}
Output {
name Output
xpos -40
ypos 86
}
end_group
Group {
name GamutToXYZ
label "\[if \{\[value invert]==true\} \{return \"XYZ to \[value gamut]\"\} else \{return \"\[value gamut] to XYZ\"\}]"
xpos 3700
ypos -256
addUserKnob {20 GamutToXYZ_tab l GamutToXYZ}
addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" Rec709 Rec2020 P3D60 P3D65 P3DCI ArriAlexaWideGamut "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB GoProProtune CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut ""}}
gamut ACEScg
addUserKnob {6 invert +STARTLINE}
invert true
addUserKnob {41 matrix T ColorMatrix.matrix}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
ColorMatrix {
matrix {
{{curve(which) 1 0.9525524378 0.6624541879 0.7053968906 0.4123907983 0.6369580626 0.5049495697 0.4865709841 0.4451698363 0.6380076408 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481}}
{{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295}}
{{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375}}
}
invert {{parent.invert}}
name ColorMatrix
label "RGB to XYZ"
xpos -40
ypos 33
addUserKnob {20 Gamut}
addUserKnob {3 which}
which {{parent.gamut}}
addUserKnob {12 rxy +DISABLED}
rxy {{curve(which) 0 0.7347 0.713 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73} {curve(which) 0 0.2653 0.293 0.3177 0.33 0.292 0.32 0.32 0.32 0.313 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28}}
addUserKnob {12 gxy +DISABLED}
gxy {{curve(which) 0 0 0.165 0.18 0.3 0.17 0.265 0.265 0.265 0.221 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165} {curve(which) 0 1 0.83 0.9 0.6 0.797 0.69 0.69 0.69 0.848 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84}}
addUserKnob {12 bxy +DISABLED}
bxy {{curve(which) 0 0.0001 0.128 0.065 0.15 0.131 0.15 0.15 0.15 0.0861 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1} {curve(which) 0 -0.077 0.044 -0.0805 0.06 0.046 0.06 0.06 0.06 -0.102 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03}}
addUserKnob {12 wxy +DISABLED}
wxy {{curve(which) 0.33333 0.32168 0.32168 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127} {curve(which) 0.33333 0.33767 0.33767 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329}}
}
Output {
name Output
xpos -40
ypos 86
}
end_group
Dot {
name Dot53
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3734
ypos -126
}
set Nf447430 [stack 0]
Dot {
name Dot57
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3514
ypos -126
}
set Nf44c2b0 [stack 0]
Dot {
name Dot54
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3294
ypos -126
}
Group {
name OutOfGamut1
xpos 3260
ypos -58
}
Input {
inputs 0
name Input
xpos 706
ypos -120
}
Dot {
name Dot56
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 740
ypos -59
}
set Ne296920 [stack 0]
Expression {
expr3 "(r < 0 || g < 0 || b < 0) ? 1 : 0"
name Expression1
label "Out of Gamut"
xpos 596
ypos -20
}
Premult {
name Premult1
xpos 596
ypos 32
}
push $Ne296920
Fill {
color {0.18 0.18 0.18 1}
name Fill1
xpos 706
ypos -16
}
Merge2 {
inputs 2
bbox B
name Merge1
xpos 706
ypos 32
}
Output {
name Output1
xpos 706
ypos 152
}
end_group
set Nf4560b0 [stack 0]
Dot {
name Dot52
xpos 3074
ypos -486
hide_input true
addUserKnob {20 User}
addUserKnob {1 input_node}
input_node Dot58
}
NoOp {
name OutOfGamut
note_font_size 20
xpos 3040
ypos -446
}
push $Nf447430
Dot {
name Dot56
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3954
ypos -126
}
Group {
name GamutCompress1
label " Norm. HSV Sat. Softclip in LMS + Purple Suppression"
xpos 3920
ypos -64
addUserKnob {20 GamutCompress}
addUserKnob {41 src_gamut l "src gamut" T SOURCE_GAMUT_GamutToXYZ.gamut}
addUserKnob {35 target_gamut_presets l target t "Cboose target gamut to compress into" M {gamut/ACES "knobs this \{rxy \{0.73470 0.26530\} gxy \{0.00000 1.00000\} bxy \{0.00010 -0.07700\} wxy \{0.32168 0.33767\} target_gamut_name \{ACES\} target_gamut \{ACES\}\}" gamut/ACEScg "knobs this \{rxy \{0.713 0.293\} gxy \{0.165 0.830\} bxy \{0.128 0.044\} wxy \{0.32168 0.33767\} target_gamut_name \{ACEScg\} target_gamut \{ACEScg\}\}" "gamut/Filmlight E-Gamut" "knobs this \{ rxy \{0.8 0.3177\} gxy \{0.18 0.9\} bxy \{0.065 -0.0805\} wxy \{0.3127 0.329\} target_gamut_name \{Filmlight E target_gamut_name \{Filt E-Gamut\}\}" gamut/Rec709 "knobs this \{rxy \{0.64000 0.33000\} gxy \{0.30000 0.60000\} bxy \{0.15000 0.06000\} wxy \{0.31270 0.32900\} target_gamut_name \{Rec709\} target_gamut \{Rec709\}\}" gamut/Rec2020 "knobs this \{rxy \{0.70800 0.29200\} gxy \{0.17000 0.79700\} bxy \{0.13100 0.04600\} wxy \{0.31270 0.32900\} target_gamut_name \{Rec2020\} target_gamut \{Rec2020\}\}" gamut/P3D60 "knobs this \{rxy \{0.68000 0.32000\} gxy \{0.26500 0.69000\} bxy \{0.15000 0.06000\} wxy \{0.32168 0.33767\} target_gamut_name \{P3D60\} target_gamut \{P3D60\}\}" gamut/P3D65 "knobs this \{rxy \{0.68000 0.32000\} gxy \{0.26500 0.69000\} bxy \{0.15000 0.06000\} wxy \{0.31270 0.32900\} target_gamut_name \{P3D65\} target_gamut \{P3D65\}\}" gamut/P3DCI "knobs this \{rxy \{0.68000 0.32000\} gxy \{0.26500 0.69000\} bxy \{0.15000 0.06000\} wxy \{0.31400 0.35100\} target_gamut_name \{P3DCI\} target_gamut \{P3DCI\}\}" gamut/ArriAlexaWideGamut "knobs this \{rxy \{0.68400 0.31300\} gxy \{0.22100 0.84800\} bxy \{0.08610 0.10200\} wxy \{0.31270 0.32900\} target_gamut_name \{ArriAlexaWideGamut\} target_gamut \{ArriAlexaWideGamut\}\}" "gamut/AdobeRGB " "knobs this \{rxy \{0.6400 0.3300\} gxy \{0.2100 0.7100\} bxy \{0.1500 0.0600\} wxy \{0.3127 0.3290\} target_gamut_name \{AdobeRGB\} target_gamut \{AdobeRGB\}\}" gamut/AdobeWideGamutRGB "knobs this \{rxy \{0.7347 0.2653\} gxy \{0.1152 0.8264\} bxy \{0.1566 0.0177\} wxy \{0.3457 0.3585\} target_gamut_name \{AdobeWideGamutRGB\} target_gamut \{AdobeWideGamutRGB\}\}" gamut/ROMM "knobs this \{rxy \{7.34700000e-01 2.65300000e-01\} gxy \{1.59600000e-01 8.40400000e-01\} bxy \{3.66000000e-02 1.00000000e-04\} wxy \{0.3457 0.3585\} target_gamut_name \{ROMM\} target_gamut \{ROMM\}\}" gamut/RIMM "knobs this \{rxy \{7.34700000e-01 2.65300000e-01\} gxy \{1.59600000e-01 8.40400000e-01\} bxy \{3.66000000e-02 1.00000000e-04\} wxy \{0.3457 0.3585\} target_gamut_name \{RIMM\} target_gamut \{RIMM\}\}" gamut/ERIMM "knobs this \{rxy \{7.34700000e-01 2.65300000e-01\} gxy \{1.59600000e-01 8.40400000e-01\} bxy \{3.66000000e-02 1.00000000e-04\} wxy \{0.3457 0.3585\} target_gamut_name \{ERIMM\} target_gamut \{ERIMM\}\}" gamut/ProPhotoRGB "knobs this \{rxy \{0.734699 0.265301\} gxy \{0.159597 0.840403\} bxy \{0.036598 0.000105\} wxy \{0.345704 0.358540\} target_gamut_name \{ProPhotoRGB\} target_gamut \{ProPhotoRGB\}\}" gamut/REDDRAGONcolor "knobs this \{rxy \{0.753044222785 0.327830576682\} gxy \{0.299570228481 0.700699321956\} bxy \{0.079642066735 -0.0549379510888\} wxy \{0.321683187724 0.337673316035\} target_gamut_name \{REDDRAGONcolor\} target_gamut \{REDDRAGONcolor\}\}" gamut/REDDRAGONcolor2 "knobs this \{rxy \{0.753044491143 0.327831029513\} gxy \{0.299570490451 0.700699415614\} bxy \{0.145011584278 0.0510971250879\} wxy \{0.321683210353 0.337673610062\} target_gamut_name \{REDDRAGONcolor2\} target_gamut \{REDDRAGONcolor2\}\}" gamut/REDcolor "knobs this \{rxy \{0.699747001291 0.329046930313\} gxy \{0.304264039024 0.623641145129\} bxy \{0.134913961296 0.0347174412813\} wxy \{0.321683289449 0.337673447208\} target_gamut_name \{REDcolor\} target_gamut \{REDcolor\}\}" gamut/REDcolor2 "knobs this \{rxy \{0.878682510476 0.32496400741\} gxy \{0.300888714367 0.679054755791\} bxy \{0.0953986946056 -0.0293793268343\} wxy \{0.321683289449 0.337673447208\} target_gamut_name \{REDcolor2\} target_gamut \{REDcolor2\}\}" gamut/REDcolor3 "knobs this \{rxy \{0.701181035906 0.329014155583\} gxy \{0.300600304652 0.683788834269\} bxy \{0.108154455624 -0.00868817578666\} wxy \{0.321683210353 0.337673610062\} target_gamut_name \{REDcolor3\} target_gamut \{REDcolor3\}\}" gamut/REDcolor4 "knobs this \{rxy \{0.701180591892 0.329013699116\} gxy \{0.300600395529 0.683788824257\} bxy \{0.145331946229 0.0516168036226\} wxy \{0.321683289449 0.337673447208\} target_gamut_name \{REDcolor4\} target_gamut \{REDcolor4\}\}" gamut/REDWideGamutRGB "knobs this \{rxy \{0.780308 0.304253\} gxy \{0.121595 1.493994\} bxy \{0.095612 -0.084589\} wxy \{0.3127 0.3290\} target_gamut_name \{REDWideGamutRGB\} target_gamut \{REDWideGamutRGB\}\}" gamut/GoProProtune "knobs this \{rxy \{0.69848046 0.19302645\} gxy \{0.32955538 1.02459662\} bxy \{0.10844263 -0.03467857\} wxy \{0.3127 0.329\} target_gamut_name \{GoProProtune\} target_gamut \{GoProProtune\}\}" gamut/CanonCinemaGamut "knobs this \{rxy \{0.74 0.27\} gxy \{0.17 1.14\} bxy \{0.08 -0.1\} wxy \{0.3127 0.329\} target_gamut_name \{CanonCinemaGamut\} target_gamut \{CanonCinemaGamut\}\}" gamut/SonySGamut "knobs this \{rxy \{0.73 0.28\} gxy \{0.14 0.855\} bxy \{0.1 -0.05\} wxy \{0.3127 0.329\} target_gamut_name \{SonySGamut\} target_gamut \{SonySGamut\}\}" gamut/SonySGamut3Cine "knobs this \{rxy \{0.766 0.275\} gxy \{0.225 0.8\} bxy \{0.089 -0.087\} wxy \{0.3127 0.329\} target_gamut_name \{SonySGamut3Cine\} target_gamut \{SonySGamut3Cine\}\}" gamut/PanasonicVGamut "knobs this \{rxy \{0.730 0.280\} gxy \{0.165 0.840\} bxy \{0.100 -0.030\} wxy \{0.3127 0.3290\} target_gamut_name \{PanasonicVGamut\} target_gamut \{PanasonicVGamut\}\}" gamut/XYZ "knobs this \{rxy \{0 0\} gxy \{0 0\} bxy \{0 0\} wxy \{0 0\} target_gamut_name \{XYZ\} target_gamut \{XYZ\}\}" "" ""}}
addUserKnob {1 target_gamut_name l "" -STARTLINE +DISABLED}
target_gamut_name ACEScg
addUserKnob {6 compress_only l "compress only" t "No gamut conversion, just do the compression mapping.\n<b>INPUT</b>: CIE XYZ\n<b>OUTPUT</b>: CIE XYZ" +STARTLINE}
addUserKnob {6 invert +STARTLINE}
addUserKnob {26 ""}
addUserKnob {26 compress_gamut_label l " " T "<b>Compress Gamut"}
addUserKnob {7 threshold}
threshold 0.665
addUserKnob {7 slope}
slope 0.87
addUserKnob {41 limit T SoftCompress15.limit}
addUserKnob {22 calc_limit l "Calculate Limit" t "Calculate the max saturation value" T "n = nuke.thisNode()\nnuke.root().begin()\nn.begin()\nct = nuke.toNode('CT')\nnuke.execute(ct, nuke.frame(), nuke.frame())\nmaxpx = ct\['maxlumapixvalue'].getValue()\n\nn\['limit'].setValue(maxpx\[1])" +STARTLINE}
addUserKnob {26 ""}
addUserKnob {26 purple_supression_label l " " T "<b>Suppress Purple"}
addUserKnob {7 strength}
addUserKnob {7 hue_phase}
hue_phase 0.5
addUserKnob {7 range}
range 0.7
addUserKnob {20 Chromaticities}
addUserKnob {41 target_gamut l "target gamut" +DISABLED T TARGET_GAMUT_GamutToXYZ1.gamut}
addUserKnob {26 target_chromaticities_label l " " T "<b>Target Gamut Chromaticities</b>"}
addUserKnob {12 rxy l r t "Red xy chromaticity coordinates in CIE 1931 colorspace."}
rxy {0.713 0.293}
addUserKnob {12 gxy l g t "Green xy chromaticity coordinates in CIE 1931 colorspace."}
gxy {0.165 0.83}
addUserKnob {12 bxy l b t "Blue xy chromaticity coordinates in CIE 1931 colorspace."}
bxy {0.128 0.044}
addUserKnob {12 wxy l w t "Whitepoint xy chromaticity coordinates in CIE 1931 colorspace."}
wxy {0.32168 0.33767}
addUserKnob {13 primaryAngle}
primaryAngle {{"(-(degrees(atan2(rxy.x - wxy.x, rxy.y-wxy.y))-180)+270)%360/360"} {"(-(degrees(atan2(gxy.x-wxy.x, gxy.y-wxy.y))-180)+270)%360/360"} {"(-(degrees(atan2(bxy.x-wxy.x, bxy.y-wxy.y))-180)+270)%360/360"}}
}
BackdropNode {
inputs 0
name BackdropNode1
tile_color 0x5e295fff
label "Purple Supress"
note_font_size 42
xpos 171
ypos 127
bdwidth 508
bdheight 598
}
Input {
inputs 0
name Input
xpos -40
ypos -202
}
Dot {
name Dot6
label " SRC GAMUT"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos -136
}
Group {
name SOURCE_GAMUT_GamutToXYZ
label "\[if \{\[value invert]==true\} \{return \"XYZ to \[value gamut]\"\} else \{return \"\[value gamut] to XYZ\"\}]"
xpos -40
ypos -80
disable {{parent.compress_only}}
addUserKnob {20 GamutToXYZ_tab l GamutToXYZ}
addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" Rec709 Rec2020 P3D60 P3D65 P3DCI ArriAlexaWideGamut "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB GoProProtune CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut ""}}
gamut ACEScg
addUserKnob {6 invert +STARTLINE}
addUserKnob {41 matrix T ColorMatrix.matrix}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
ColorMatrix {
matrix {
{{curve(which) 1 0.9525524378 0.6624541879 0.7053968906 0.4123907983 0.6369580626 0.5049495697 0.4865709841 0.4451698363 0.6380076408 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481}}
{{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295}}
{{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375}}
}
invert {{parent.invert}}
name ColorMatrix
label "RGB to XYZ"
xpos -40
ypos 33
addUserKnob {20 Gamut}
addUserKnob {3 which}
which {{parent.gamut}}
addUserKnob {12 rxy +DISABLED}
rxy {{curve(which) 0 0.7347 0.713 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73} {curve(which) 0 0.2653 0.293 0.3177 0.33 0.292 0.32 0.32 0.32 0.313 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28}}
addUserKnob {12 gxy +DISABLED}
gxy {{curve(which) 0 0 0.165 0.18 0.3 0.17 0.265 0.265 0.265 0.221 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165} {curve(which) 0 1 0.83 0.9 0.6 0.797 0.69 0.69 0.69 0.848 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84}}
addUserKnob {12 bxy +DISABLED}
bxy {{curve(which) 0 0.0001 0.128 0.065 0.15 0.131 0.15 0.15 0.15 0.0861 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1} {curve(which) 0 -0.077 0.044 -0.0805 0.06 0.046 0.06 0.06 0.06 -0.102 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03}}
addUserKnob {12 wxy +DISABLED}
wxy {{curve(which) 0.33333 0.32168 0.32168 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127} {curve(which) 0.33333 0.33767 0.33767 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329}}
}
Output {
name Output
xpos -40
ypos 86
}
end_group
Dot {
name Dot45
label " XYZ"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos -6
}
Group {
name XYZtoLMS5
label "direction : \[value direction]"
xpos -40
ypos 104
addUserKnob {20 XYZtoLMS}
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 42
}
set Ne56e870 [stack 0]
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
invert true
name ColorMatrix1
label "LMS\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 92
}
Expression {
temp_name2 Xd65
temp_expr2 (r+(cb-1)*b)/cb
expr0 Xd65
expr1 (g+(cg-1)*Xd65)/cg
expr2 b
name Expression47
label "X'Y'Z (D65)\nto\nXYZ (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 188
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
push $Ne56e870
Expression {
expr0 "(cb*r) - ((cb-1)*b)"
expr1 "(cg*g) - ((cg-1)*r)"
expr2 b
name Expression4
label "XYZ (D65)\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos -150
ypos 91
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
name ColorMatrix8
label "X'Y'Z (D65)\nto\nLMS"
note_font "Bitstream Vera Sans"
xpos -150
ypos 188
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -40
ypos 350
}
Output {
name Output
xpos -40
ypos 446
}
end_group
Dot {
name Dot44
label " LMS"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 162
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 234
}
set Na4f81b0 [stack 0]
Dot {
name Dot39
xpos 544
ypos 234
}
Expression {
temp_name0 v
temp_expr0 max(abs(r-g),abs(g-b),abs(r-r))
temp_name1 n
temp_expr1 v/max(r,g,b)
expr0 n
expr1 n
expr2 n
expr3 n
name Expression13
label "saturation mask"
xpos 510
ypos 344
}
Clamp {
channels rgba
name Clamp3
xpos 510
ypos 398
}
Dot {
name Dot38
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 544
ypos 474
}
push $Na4f81b0
Group {
name RGBtoHSV
label "direction : \[value direction]"
xpos -40
ypos 296
addUserKnob {20 RGBtoHSV_tab l RGBtoHSV}
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name Input
xpos -700
ypos 566
}
set Ne7bf520 [stack 0]
Expression {
temp_name0 C
temp_expr0 b*g
temp_name1 X
temp_expr1 C*(1-abs((r*6)%2-1))
temp_name2 m
temp_expr2 b-C
expr0 (r<1/6?C:r<2/6?X:r<3/6?0:r<4/6?0:r<5/6?X:C)+m
expr1 (r<1/6?X:r<2/6?C:r<3/6?C:r<4/6?X:r<5/6?0:0)+m
expr2 (r<1/6?0:r<2/6?0:r<3/6?X:r<4/6?C:r<5/6?C:X)+m
name Expression48
label "HSV to RGB"
note_font "Bitstream Vera Sans"
xpos -590
ypos 656
}
push $Ne7bf520
Expression {
temp_name0 cmax
temp_expr0 max(r,g,b)
temp_name1 cmin
temp_expr1 min(r,g,b)
temp_name2 delta
temp_expr2 cmax-cmin
expr0 delta==0?0:cmax==r?(((g-b)/delta+6)%6)/6:cmax==g?(((b-r)/delta+2)/6):(((r-g)/delta+4)/6)
expr1 "cmax == 0 ? 0 : delta / cmax"
expr2 cmax
name Expression47
label "RGB to HSV"
note_font "Bitstream Vera Sans"
xpos -810
ypos 656
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -700
ypos 734
}
Output {
name Output
xpos -700
ypos 806
}
end_group
Dot {
name Dot2
label " HSV"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 354
}
Dot {
name Dot46
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 426
}
set Nb376330 [stack 0]
Expression {
expr0 "r < 0 ? 1-abs(r)%1:r%1"
expr1 g
expr2 b
expr3 a
name Expression23
label "hue wrap-around"
xpos 290
ypos 416
}
set Ncb4f770 [stack 0]
Expression {
expr0 -(r+o)*m/c/c*exp(-(r+o)*m*(r+o)*m/2/c/c)
expr1 g
expr2 b
expr3 a
name Expression25
label "gauss derivative"
xpos 400
ypos 416
addUserKnob {20 User}
addUserKnob {7 amplitude R 0 0.1}
amplitude {{"0.6*max(1e-8, parent.strength)/exp(1/parent.range*2)"}}
addUserKnob {7 phase R -1 1}
phase {{parent.hue_phase}}
addUserKnob {7 length}
length {{parent.range/2}}
addUserKnob {7 c R 0 5}
c {{(1/exp(0.5)/amplitude)}}
addUserKnob {7 m}
m {{exp(1/length)*c}}
addUserKnob {7 o}
o {{-phase}}
}
Merge2 {
inputs 2
operation multiply
name Merge15
xpos 400
ypos 470
}
set Nb3ef660 [stack 0]
push $Ncb4f770
Merge2 {
inputs 2
operation from
bbox B
output rgb
name Merge19
xpos 400
ypos 542
}
push $Nb3ef660
push $Ncb4f770
Merge2 {
inputs 2
operation plus
name Merge16
xpos 290
ypos 542
}
Switch {
inputs 2
which {{parent.invert}}
name Switch_Inverse
xpos 290
ypos 590
}
Expression {
expr0 "r < 0 ? 1 - abs(r) % 1 : r % 1"
expr1 g
expr2 b
expr3 a
name Expression26
label "hue wrap-around"
xpos 290
ypos 632
}
push $Nb376330
Copy {
inputs 2
from0 rgba.red
to0 rgba.red
name Copy3
xpos -40
ypos 632
}
Dot {
name Dot40
xpos -6
ypos 834
}
set Nc4457e0 [stack 0]
Dot {
name Dot41
xpos 434
ypos 834
}
Group {
name RGBtoHSV1
label "direction : \[value direction]"
xpos 400
ypos 873
addUserKnob {20 RGBtoHSV_tab l RGBtoHSV}
addUserKnob {4 direction M {forward inverse}}
direction inverse
}
Input {
inputs 0
name Input
xpos -700
ypos 566
}
set Nc458e30 [stack 0]
Expression {
temp_name0 C
temp_expr0 b*g
temp_name1 X
temp_expr1 C*(1-abs((r*6)%2-1))
temp_name2 m
temp_expr2 b-C
expr0 (r<1/6?C:r<2/6?X:r<3/6?0:r<4/6?0:r<5/6?X:C)+m
expr1 (r<1/6?X:r<2/6?C:r<3/6?C:r<4/6?X:r<5/6?0:0)+m
expr2 (r<1/6?0:r<2/6?0:r<3/6?X:r<4/6?C:r<5/6?C:X)+m
name Expression48
label "HSV to RGB"
note_font "Bitstream Vera Sans"
xpos -590
ypos 656
}
push $Nc458e30
Expression {
temp_name0 cmax
temp_expr0 max(r,g,b)
temp_name1 cmin
temp_expr1 min(r,g,b)
temp_name2 delta
temp_expr2 cmax-cmin
expr0 delta==0?0:cmax==r?(((g-b)/delta+6)%6)/6:cmax==g?(((b-r)/delta+2)/6):(((r-g)/delta+4)/6)
expr1 "cmax == 0 ? 0 : delta / cmax"
expr2 cmax
name Expression47
label "RGB to HSV"
note_font "Bitstream Vera Sans"
selected true
xpos -810
ypos 656
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -700
ypos 734
}
Output {
name Output
xpos -700
ypos 806
}
end_group
Group {
name XYZtoLMS1
label "direction : \[value direction]"
xpos 400
ypos 926
addUserKnob {20 XYZtoLMS}
addUserKnob {4 direction M {forward inverse}}
direction inverse
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 42
}
set Nc60c030 [stack 0]
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
invert true
name ColorMatrix1
label "LMS\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 92
}
Expression {
temp_name2 Xd65
temp_expr2 (r+(cb-1)*b)/cb
expr0 Xd65
expr1 (g+(cg-1)*Xd65)/cg
expr2 b
name Expression47
label "X'Y'Z (D65)\nto\nXYZ (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 188
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
push $Nc60c030
Expression {
expr0 "(cb*r) - ((cb-1)*b)"
expr1 "(cg*g) - ((cg-1)*r)"
expr2 b
name Expression4
label "XYZ (D65)\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos -150
ypos 91
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
name ColorMatrix8
label "X'Y'Z (D65)\nto\nLMS"
note_font "Bitstream Vera Sans"
xpos -150
ypos 188
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -40
ypos 350
}
Output {
name Output
xpos -40
ypos 446
}
end_group
Colorspace {
colorspace_in CIE-XYZ
colorspace_out CIE-Yxy
name Colorspace6
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos 400
ypos 1001
}
Expression {
temp_name0 yellow
temp_expr0 "hypot(( (g*white.y-b*white.x)*(red.x-green.x)-(g-white.x)*(red.x*green.y-red.y*green.x) ) / ( (g-white.x)*(red.y-green.y)-(b-white.y)*(red.x-green.x) )-white.x, ( (g*white.y-b*white.x)*(red.y-green.y)-(b-white.y)*(red.x*green.y-red.y*green.x) ) / ( (g-white.x)*(red.y-green.y)-(b-white.y)*(red.x-green.x) )-white.y)"
temp_name1 cyan
temp_expr1 "hypot(( (g*white.y-b*white.x)*(green.x-blue.x)-(g-white.x)*(green.x*blue.y-green.y*blue.x) ) / ( (g-white.x)*(green.y-blue.y)-(b-white.y)*(green.x-blue.x) )-white.x, ( (g*white.y-b*white.x)*(green.y-blue.y)-(b-white.y)*(green.x*blue.y-green.y*blue.x) ) / ( (g-white.x)*(green.y-blue.y)-(b-white.y)*(green.x-blue.x) )-white.y)"
temp_name2 magenta
temp_expr2 "hypot(( (g*white.y-b*white.x)*(blue.x-red.x)-(g-white.x)*(blue.x*red.y-blue.y*red.x) ) / ( (g-white.x)*(blue.y-red.y)-(b-white.y)*(blue.x-red.x) )-white.x, ( (g*white.y-b*white.x)*(blue.y-red.y)-(b-white.y)*(blue.x*red.y-blue.y*red.x) ) / ( (g-white.x)*(blue.y-red.y)-(b-white.y)*(blue.x-red.x) )-white.y)"
temp_name3 angleNorm
temp_expr3 "(-(degrees(atan2(g-white.x, b-white.y))-180)+270)%360/360-primaryNormOffset < 0 ? (-(degrees(atan2(g-white.x, b-white.y))-180)+270)%360/360-primaryNormOffset + 1 : (-(degrees(atan2(g-white.x, b-white.y))-180)+270)%360/360-primaryNormOffset"
expr0 r
expr1 "(-(degrees(atan2(g-white.x, b-white.y))-180)+270)%360/360"
expr2 "g == white.x && b == white.y ? hypot(g-red.x, b-red.y) : angleNorm < primaryAngleNorm.y ? yellow : angleNorm < primaryAngleNorm.z ? cyan : magenta"
name Expression_max_rg5
label "Yxy to YHmaxC"
note_font "Bitstream Vera Sans"
xpos 400
ypos 1050
addUserKnob {20 User}
addUserKnob {12 red}
red {{parent.rxy} {parent.rxy}}
addUserKnob {12 green}
green {{parent.gxy} {parent.gxy}}
addUserKnob {12 blue}
blue {{parent.bxy} {parent.bxy}}
addUserKnob {12 white}
white {{parent.wxy} {parent.wxy}}
addUserKnob {13 primaryAngle}
primaryAngle {{parent.primaryAngle} {parent.primaryAngle} {parent.primaryAngle}}
addUserKnob {7 primaryNormOffset}
primaryNormOffset {{primaryAngle.x}}
addUserKnob {13 primaryAngleNorm}
primaryAngleNorm {{"primaryAngle.x-primaryNormOffset < 0 ? primaryAngle.x-primaryNormOffset + 1 : primaryAngle.x-primaryNormOffset"} {"primaryAngle.y-primaryNormOffset < 0 ? primaryAngle.y-primaryNormOffset + 1 : primaryAngle.y-primaryNormOffset"} {"primaryAngle.z-primaryNormOffset < 0 ? primaryAngle.z-primaryNormOffset + 1 : primaryAngle.z-primaryNormOffset"}}
}
Expression {
expr0 1
expr1 cos(radians(g*360))*b+white.x
expr2 sin(radians(g*360))*b+white.y
expr3 1
name Expression40
label "YHC to 1xy"
xpos 400
ypos 1096
addUserKnob {20 User}
addUserKnob {12 white}
white {{parent.wxy} {parent.wxy}}
}
Colorspace {
colorspace_in CIE-Yxy
colorspace_out CIE-XYZ
name Colorspace7
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos 400
ypos 1143
}
Group {
name XYZtoLMS2
label "direction : \[value direction]"
xpos 400
ypos 1197
addUserKnob {20 XYZtoLMS}
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 42
}
set Nb61a410 [stack 0]
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
invert true
name ColorMatrix1
label "LMS\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 92
}
Expression {
temp_name2 Xd65
temp_expr2 (r+(cb-1)*b)/cb
expr0 Xd65
expr1 (g+(cg-1)*Xd65)/cg
expr2 b
name Expression47
label "X'Y'Z (D65)\nto\nXYZ (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 188
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
push $Nb61a410
Expression {
expr0 "(cb*r) - ((cb-1)*b)"
expr1 "(cg*g) - ((cg-1)*r)"
expr2 b
name Expression4
label "XYZ (D65)\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos -150
ypos 91
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
name ColorMatrix8
label "X'Y'Z (D65)\nto\nLMS"
note_font "Bitstream Vera Sans"
xpos -150
ypos 188
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -40
ypos 350
}
Output {
name Output
xpos -40
ypos 446
}
end_group
Group {
name RGBtoHSV2
label "direction : \[value direction]"
xpos 400
ypos 1247
addUserKnob {20 RGBtoHSV_tab l RGBtoHSV}
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name Input
xpos -700
ypos 566
}
set Nbb72950 [stack 0]
Expression {
temp_name0 C
temp_expr0 b*g
temp_name1 X
temp_expr1 C*(1-abs((r*6)%2-1))
temp_name2 m
temp_expr2 b-C
expr0 (r<1/6?C:r<2/6?X:r<3/6?0:r<4/6?0:r<5/6?X:C)+m
expr1 (r<1/6?X:r<2/6?C:r<3/6?C:r<4/6?X:r<5/6?0:0)+m
expr2 (r<1/6?0:r<2/6?0:r<3/6?X:r<4/6?C:r<5/6?C:X)+m
name Expression48
label "HSV to RGB"
note_font "Bitstream Vera Sans"
xpos -590
ypos 656
}
push $Nbb72950
Expression {
temp_name0 cmax
temp_expr0 max(r,g,b)
temp_name1 cmin
temp_expr1 min(r,g,b)
temp_name2 delta
temp_expr2 cmax-cmin
expr0 delta==0?0:cmax==r?(((g-b)/delta+6)%6)/6:cmax==g?(((b-r)/delta+2)/6):(((r-g)/delta+4)/6)
expr1 "cmax == 0 ? 0 : delta / cmax"
expr2 cmax
name Expression47
label "RGB to HSV"
note_font "Bitstream Vera Sans"
xpos -810
ypos 656
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -700
ypos 734
}
Output {
name Output
xpos -700
ypos 806
}
end_group
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 434
ypos 1329
}
set Nb6c30b0 [stack 0]
Dot {
name Dot42
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 434
ypos 1520
}
push $Nc4457e0
Dot {
name Dot4
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 1262
}
set Nb6ccf50 [stack 0]
push $Nb6c30b0
Merge2 {
inputs 2
operation divide
name Merge17
note_font "Bitstream Vera Sans"
xpos 190
ypos 1325
}
set Nb6d1e50 [stack 0]
Group {
name SoftCompress15
label "direction: \[knob direction]"
xpos 190
ypos 1421
addUserKnob {20 SoftCompress}
addUserKnob {7 slope t "The softness of the compressing curve's slope. 0 is a clamp."}
slope {{parent.threshold}}
addUserKnob {7 threshold t "The minimum threshold. Values below this number will not be affected." R 0 2}
threshold {{parent.slope}}
addUserKnob {7 limit t "The asymptotic maximum value. For example, the value that inf becomes." R 0 2}
limit 1
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name InputMask
xpos -590
ypos 806
number 1
}
Input {
inputs 0
name Input
xpos -810
ypos 494
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -776
ypos 546
}
set N1050db10 [stack 0]
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 threshold
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : (pow(sl, 2) + 2 * sl * th - 2 * sl * r + pow(th, 2) - th * r + lim * r)/(th + lim - r)"
expr1 "g < th + sl ? g : (pow(sl, 2) + 2 * sl * th - 2 * sl * g + pow(th, 2) - th * g + lim * g)/(th + lim - g)"
expr2 "b < th + sl ? b : (pow(sl, 2) + 2 * sl * th - 2 * sl * b + pow(th, 2) - th * b + lim * b)/(th + lim - b)"
expr3 "a < th + sl ? a : (pow(sl, 2) + 2 * sl * th - 2 * sl * a + pow(th, 2) - th * a + lim * a)/(th + lim - a)"
name SoftCompress_inverse
xpos -700
ypos 638
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
push $N1050db10
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 "min(threshold, limit)"
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : th + (-1 / ((r - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr1 "g < th + sl ? g : th + (-1 / ((g - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr2 "b < th + sl ? b : th + (-1 / ((b - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr3 "a < th + sl ? a : th + (-1 / ((a - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
name SoftCompress
xpos -920
ypos 638
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
Switch {
inputs 2
which {{parent.direction}}
name SwitchDirection
xpos -810
ypos 710
}
push $N1050db10
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 546
}
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 810
}
NodeWrapper {
inputs 2+1
channels rgba
name NodeWrapper1
xpos -810
ypos 806
}
Output {
name Output
xpos -810
ypos 926
}
end_group
Merge2 {
inputs 2
operation multiply
name Merge18
note_font "Bitstream Vera Sans"
xpos 190
ypos 1516
}
Dot {
name Dot5
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 224
ypos 1610
}
push $Nb6ccf50
Copy {
inputs 2
from0 rgba.green
to0 rgba.green
name Copy1
xpos -40
ypos 1600
}
Group {
name RGBtoHSV3
label "direction : \[value direction]"
xpos -40
ypos 1689
addUserKnob {20 RGBtoHSV_tab l RGBtoHSV}
addUserKnob {4 direction M {forward inverse}}
direction inverse
}
Input {
inputs 0
name Input
xpos -700
ypos 566
}
set N105bbe30 [stack 0]
Expression {
temp_name0 C
temp_expr0 b*g
temp_name1 X
temp_expr1 C*(1-abs((r*6)%2-1))
temp_name2 m
temp_expr2 b-C
expr0 (r<1/6?C:r<2/6?X:r<3/6?0:r<4/6?0:r<5/6?X:C)+m
expr1 (r<1/6?X:r<2/6?C:r<3/6?C:r<4/6?X:r<5/6?0:0)+m
expr2 (r<1/6?0:r<2/6?0:r<3/6?X:r<4/6?C:r<5/6?C:X)+m
name Expression48
label "HSV to RGB"
note_font "Bitstream Vera Sans"
xpos -590
ypos 656
}
push $N105bbe30
Expression {
temp_name0 cmax
temp_expr0 max(r,g,b)
temp_name1 cmin
temp_expr1 min(r,g,b)
temp_name2 delta
temp_expr2 cmax-cmin
expr0 delta==0?0:cmax==r?(((g-b)/delta+6)%6)/6:cmax==g?(((b-r)/delta+2)/6):(((r-g)/delta+4)/6)
expr1 "cmax == 0 ? 0 : delta / cmax"
expr2 cmax
name Expression47
label "RGB to HSV"
note_font "Bitstream Vera Sans"
xpos -810
ypos 656
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -700
ypos 734
}
Output {
name Output
xpos -700
ypos 806
}
end_group
Group {
name XYZtoLMS4
label "direction : \[value direction]"
xpos -40
ypos 1741
addUserKnob {20 XYZtoLMS}
addUserKnob {4 direction M {forward inverse}}
direction inverse
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 42
}
set N107ff9a0 [stack 0]
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
invert true
name ColorMatrix1
label "LMS\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 92
}
Expression {
temp_name2 Xd65
temp_expr2 (r+(cb-1)*b)/cb
expr0 Xd65
expr1 (g+(cg-1)*Xd65)/cg
expr2 b
name Expression47
label "X'Y'Z (D65)\nto\nXYZ (D65)"
note_font "Bitstream Vera Sans"
xpos 70
ypos 188
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
push $N107ff9a0
Expression {
expr0 "(cb*r) - ((cb-1)*b)"
expr1 "(cg*g) - ((cg-1)*r)"
expr2 b
name Expression4
label "XYZ (D65)\nto\nX'Y'Z (D65)"
note_font "Bitstream Vera Sans"
xpos -150
ypos 91
addUserKnob {20 User}
addUserKnob {7 cb R 0 2}
cb 1.15
addUserKnob {7 cg}
cg 0.66
}
ColorMatrix {
matrix {
{0.41478972 0.579999 0.014648}
{-0.20151 1.120649 0.0531008}
{-0.0166008 0.2648 0.6684799}
}
name ColorMatrix8
label "X'Y'Z (D65)\nto\nLMS"
note_font "Bitstream Vera Sans"
xpos -150
ypos 188
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -40
ypos 350
}
Output {
name Output
xpos -40
ypos 446
}
end_group
ColorMatrix {
matrix {
{{parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix} {parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix} {parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix}}
{{parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix} {parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix} {parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix}}
{{parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix} {parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix} {parent.SOURCE_GAMUT_GamutToXYZ.ColorMatrix.matrix}}
}
invert true
name ColorMatrix1
label "XYZ to \[value parent.src_gamut]"
xpos -40
ypos 1909
disable {{parent.compress_only}}
}
Dot {
name Dot7
label " OUTPUT GAMUT"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 1986
}
Output {
name Output
xpos -40
ypos 2121
}
push $Nb6d1e50
Group {
name SoftCompress16
label "direction: \[knob direction]"
xpos 1023
ypos 1394
addUserKnob {20 SoftCompress}
addUserKnob {7 slope t "The softness of the compressing curve's slope. 0 is a clamp."}
slope {{parent.SoftCompress15.slope}}
addUserKnob {7 threshold t "The minimum threshold. Values below this number will not be affected." R 0 2}
threshold {{parent.SoftCompress15.threshold}}
addUserKnob {7 limit t "The asymptotic maximum value. For example, the value that inf becomes." R 0 2}
limit {{parent.SoftCompress15.limit}}
addUserKnob {4 direction M {forward inverse}}
direction inverse
}
Input {
inputs 0
name InputMask
xpos -590
ypos 806
number 1
}
Input {
inputs 0
name Input
xpos -810
ypos 494
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -776
ypos 546
}
set Ndf97a00 [stack 0]
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 threshold
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : (pow(sl, 2) + 2 * sl * th - 2 * sl * r + pow(th, 2) - th * r + lim * r)/(th + lim - r)"
expr1 "g < th + sl ? g : (pow(sl, 2) + 2 * sl * th - 2 * sl * g + pow(th, 2) - th * g + lim * g)/(th + lim - g)"
expr2 "b < th + sl ? b : (pow(sl, 2) + 2 * sl * th - 2 * sl * b + pow(th, 2) - th * b + lim * b)/(th + lim - b)"
name SoftCompress_inverse
xpos -700
ypos 638
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
push $Ndf97a00
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 "min(threshold, limit)"
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : th + (-1 / ((r - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr1 "g < th + sl ? g : th + (-1 / ((g - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr2 "b < th + sl ? b : th + (-1 / ((b - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
name SoftCompress
xpos -920
ypos 638
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
Switch {
inputs 2
which {{parent.direction}}
name Switch1
xpos -810
ypos 710
}
push $Ndf97a00
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 546
}
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 810
}
NodeWrapper {
inputs 2+1
channels rgb
name NodeWrapper1
xpos -810
ypos 806
}
Output {
name Output
xpos -810
ypos 926
}
end_group
push 0
Switch {
inputs 2
which {{parent.invert}}
name Switch_Inverse1
xpos 1023
ypos 1482
}
Group {
inputs 0
name SoftclipExpression8
label "Type A"
note_font "Bitstream Vera Sans"
xpos 610
ypos 1441
addUserKnob {20 User}
addUserKnob {18 threshold}
threshold {0 0 0}
addUserKnob {6 threshold_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {3 direction}
addUserKnob {7 mix}
mix 1
}
Input {
inputs 0
name Input1
xpos -284
ypos 147
}
set Ncb3edb0 [stack 0]
Expression {
temp_name0 one_minus_e
temp_expr0 "1 - pow(10,-15)"
temp_name1 maxr
temp_expr1 "(pow(threshold.r, 2) - 2 * threshold.r * one_minus_e + one_minus_e ) / ( 1 - one_minus_e )"
temp_name2 maxg
temp_expr2 "(pow(threshold.g, 2) - 2 * threshold.g * one_minus_e + one_minus_e ) / ( 1 - one_minus_e )"
temp_name3 maxb
temp_expr3 "(pow(threshold.b, 2) - 2 * threshold.b * one_minus_e + one_minus_e ) / ( 1 - one_minus_e )"
expr0 " threshold.r < 1 ? r >= 1 ? maxr : r > threshold.r ? (pow(threshold.r, 2) - 2 * threshold.r * r + r ) / ( 1 - r ) : r : r"
expr1 " threshold.g < 1 ? g >= 1 ? maxg : g > threshold.g ? (pow(threshold.g, 2) - 2 * threshold.g * g + g ) / ( 1 - g ) : g : g"
expr2 " threshold.b < 1 ? b >= 1 ? maxb : b > threshold.b ? (pow(threshold.b, 2) - 2 * threshold.b * b + b ) / ( 1 - b ) : b : b"
expr3 a
mix {{parent.mix}}
name Expression2
label inverse
xpos -222
ypos 258
addUserKnob {20 User}
addUserKnob {18 threshold}
threshold {{parent.threshold.r} {parent.threshold.g} {parent.threshold.b}}
addUserKnob {6 threshold_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
}
push $Ncb3edb0
Expression {
expr0 "threshold.r < 1 ? r > threshold.r ? ( -1 / (( r - threshold.r ) / ( 1 - threshold.r ) +1 ) +1 ) * ( 1 - threshold.r ) + threshold.r : r : r"
expr1 "threshold.g < 1 ? g > threshold.g ? ( -1 / (( g - threshold.g ) / ( 1 - threshold.g ) +1 ) +1 ) * ( 1 - threshold.g ) + threshold.g : g : g"
expr2 "threshold.b < 1 ? b > threshold.b ? ( -1 / (( b - threshold.b ) / ( 1 - threshold.b ) +1 ) +1 ) * ( 1 - threshold.b ) + threshold.b : b : b"
expr3 a
mix {{parent.mix}}
name Expression1
label forward
xpos -349
ypos 258
addUserKnob {20 User}
addUserKnob {18 threshold_1 l threshold}
threshold_1 {{parent.threshold.r} {parent.threshold.g} {parent.threshold.b}}
addUserKnob {6 threshold_1_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_1_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
}
Switch {
inputs 2
which {{parent.direction}}
name Switch2
note_font "Bitstream Vera Sans"
xpos -287
ypos 351
}
Output {
name Output1
xpos -287
ypos 463
}
end_group
Group {
inputs 0
name SoftclipExpression1
label "Type B"
note_font "Bitstream Vera Sans"
xpos 720
ypos 1441
addUserKnob {20 User}
addUserKnob {18 threshold}
threshold {0 0 0}
addUserKnob {6 threshold_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {3 direction}
addUserKnob {7 mix}
mix 1
}
Input {
inputs 0
name Input1
xpos -284
ypos 147
}
set Ne188f20 [stack 0]
Expression {
temp_name0 atanh_r
temp_expr0 log((1+(threshold.r-r)/threshCompl.r)/(1-(threshold.r-r)/threshCompl.r))/2
temp_name1 atanh_g
temp_expr1 log((1+(threshold.g-g)/threshCompl.g)/(1-(threshold.g-g)/threshCompl.g))/2
temp_name2 atanh_b
temp_expr2 log((1+(threshold.b-b)/threshCompl.b)/(1-(threshold.b-b)/threshCompl.b))/2
expr0 "r > threshold.r ? threshold.r*(-atanh_r) + atanh_r + threshold.r : r"
expr1 "g > threshold.g ? threshold.g*(-atanh_g) + atanh_g + threshold.g : g"
expr2 "b > threshold.b ? threshold.b*(-atanh_b) + atanh_b + threshold.b : b"
expr3 a
name Expression12
label inverse
xpos -204
ypos 272
addUserKnob {20 User}
addUserKnob {18 threshold}
threshold {{parent.threshold.r} {parent.threshold.g} {parent.threshold.b}}
addUserKnob {6 threshold_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {18 threshCompl}
threshCompl {{threshold.r-1} {threshold.g-1} {threshold.b-1}}
addUserKnob {6 threshCompl_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
}
push $Ne188f20
Expression {
expr0 "r > threshold.r ? threshold.r + threshCompl.r * tanh((r - threshold.r) / threshCompl.r) : r"
expr1 "g > threshold.g ? threshold.g + threshCompl.g * tanh((g - threshold.g) / threshCompl.g) : g"
expr2 "b > threshold.b ? threshold.b + threshCompl.b * tanh((b - threshold.b) / threshCompl.b) : b"
expr3 a
name Expression3
label forward
xpos -376
ypos 269
addUserKnob {20 User}
addUserKnob {18 threshold}
threshold {{parent.threshold.r} {parent.threshold.g} {parent.threshold.b}}
addUserKnob {6 threshold_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {18 threshCompl}
threshCompl {{1-threshold.r} {1-threshold.g} {1-threshold.b}}
addUserKnob {6 threshCompl_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
addUserKnob {6 threshCompl_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN}
}
Switch {
inputs 2
which {{parent.direction}}
name Switch2
note_font "Bitstream Vera Sans"
xpos -287
ypos 356
}
Output {
name Output1
xpos -287
ypos 463
}
end_group
Group {
inputs 0
name SoftCompress1
label "direction: \[knob direction]"
xpos 73
ypos 1417
addUserKnob {20 SoftCompress}
addUserKnob {7 slope t "The softness of the compressing curve's slope. 0 is a clamp."}
slope 0.945
addUserKnob {7 threshold t "The minimum threshold. Values below this number will not be affected." R 0 2}
threshold 0.57
addUserKnob {7 limit t "The asymptotic maximum value. For example, the value that inf becomes." R 0 2}
limit 1.07
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name InputMask
xpos -590
ypos 806
number 1
}
Input {
inputs 0
name Input
xpos -810
ypos 494
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -776
ypos 546
}
set Ndd817b0 [stack 0]
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 threshold
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : (pow(sl, 2) + 2 * sl * th - 2 * sl * r + pow(th, 2) - th * r + lim * r)/(th + lim - r)"
expr1 "g < th + sl ? g : (pow(sl, 2) + 2 * sl * th - 2 * sl * g + pow(th, 2) - th * g + lim * g)/(th + lim - g)"
expr2 "b < th + sl ? b : (pow(sl, 2) + 2 * sl * th - 2 * sl * b + pow(th, 2) - th * b + lim * b)/(th + lim - b)"
expr3 "a < th + sl ? a : (pow(sl, 2) + 2 * sl * th - 2 * sl * a + pow(th, 2) - th * a + lim * a)/(th + lim - a)"
name SoftCompress_inverse
xpos -702
ypos 636
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
push $Ndd817b0
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 "min(threshold, limit)"
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : th + (-1 / ((r - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr1 "g < th + sl ? g : th + (-1 / ((g - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr2 "b < th + sl ? b : th + (-1 / ((b - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr3 "a < th + sl ? a : th + (-1 / ((a - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
name SoftCompress
xpos -921
ypos 639
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
Switch {
inputs 2
which {{parent.direction}}
name SwitchDirection
xpos -810
ypos 709
}
push $Ndd817b0
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 546
}
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 810
}
NodeWrapper {
inputs 2+1
channels rgba
name NodeWrapper1
xpos -810
ypos 806
}
Output {
name Output
xpos -810
ypos 926
}
end_group
push $Nb6d1e50
CurveTool {
operation "Max Luma Pixel"
ROI {0 0 {input.width} {input.height}}
autocropdata {0 0 {input.width} {input.height}}
maxlumapixdata {{curve x1 478 x6 1021 x14 1800} {curve x1 364 x6 199 x14 436}}
maxlumapixvalue {{curve x1 329576.0312 x6 17232.42383 x14 3.869687557} {curve x1 1.28495717 x6 0.3491346538 x14 4.130000114} {curve x1 0.4011462331 x6 0.05546005815 x14 3.160937548}}
minlumapixdata {{curve x1 145 x6 253 x14 380} {curve x1 425 x6 2 x14 0}}
minlumapixvalue {{curve x1 2.707561186e-25 x6 0.01374461688 x14 0} {curve x1 0 x6 0.002241947223 x14 0} {curve x1 0 x6 0.03770677745 x14 0}}
name CT
xpos 320
ypos 1424
}
push $Nb6d1e50
Viewer {
frame_range 1-52
viewerProcess "sRGB (ACES)"
name Viewer1
selected true
xpos 533
ypos 692
addUserKnob {20 Lock}
addUserKnob {6 lock_all_buffers l "lock all buffers" -STARTLINE}
addUserKnob {6 lock_buffer_1 l "lock buffer 1" +STARTLINE}
addUserKnob {6 lock_buffer_2 l "lock buffer 2" +STARTLINE}
addUserKnob {6 lock_buffer_3 l "lock buffer 3" +STARTLINE}
addUserKnob {6 lock_buffer_4 l "lock buffer 4" +STARTLINE}
addUserKnob {6 lock_buffer_5 l "lock buffer 5" +STARTLINE}
addUserKnob {6 lock_buffer_6 l "lock buffer 6" +STARTLINE}
addUserKnob {6 lock_buffer_7 l "lock buffer 7" +STARTLINE}
addUserKnob {6 lock_buffer_8 l "lock buffer 8" +STARTLINE}
addUserKnob {6 lock_buffer_9 l "lock buffer 9" +STARTLINE}
addUserKnob {6 lock_buffer_0 l "lock buffer 0" +STARTLINE}
}
end_group
push $Nf447430
Group {
name GamutCompress2
label "Saturation Adjust - Pre-Keyed for best fit to input imagery"
xpos 3700
ypos -48
addUserKnob {20 User}
addUserKnob {22 calc_max_sat l "Calculate Max Saturation" t "Calculate the max saturation of the input image. That is, how far out of gamut is the most offending pixel." T "n = nuke.thisNode()\nnuke.root().begin()\nn.begin()\nct = nuke.toNode('CT')\nnuke.execute(ct, nuke.frame(), nuke.frame())\nmaxpx = ct\['maxlumapixvalue'].getValue()\nmaxpx = max(1, maxpx\[0])\nn\['max_sat'].setValue(maxpx)" +STARTLINE}
addUserKnob {7 max_sat l "max sat" t "max saturation\ni.e. how far out of gamut is the worst pixel" R 1 1.5}
max_sat {{curve x1 1.434577703 1.409547567 1.2 1.143328071 1.060532331 1.110794544 1.057173729 1 1.192092896 1.28297925 1.259831667 x18 1.060389042 x19 1 x24 1 x34 1.041455269 x35 1.077255249 1.1039536 x40 1.091059685 x41 1.08315599 1.06418395 1 1.161405921 1.209861159}}
addUserKnob {7 desat}
desat {{curve x1 0.295 0.31 0.315 0.06 0.07 0.105 0.1 0 0.15 0.24 0.24 x18 0.19 x19 0 x24 0.04 x26 0.05 x30 0 0.05 x35 0.125 0.14 x40 0.12 x41 0.11 0.1 0 0.15 0.18}}
addUserKnob {7 core_threshold l "core threshold" t "core or \"confidence\" gamut threshold.\n\n1 is a clip. 0 is no confidence gamut."}
core_threshold {{curve x1 0.62 0.66 0.76 0.77 0.75 0.505 0.845 0.835 0.63 0.695 0.75 x18 0.77 x19 0 x24 0.925 x26 0.915 x34 0.725 x35 0.745 0.745 x44 0.715 x45 0.75}}
addUserKnob {20 weights_grp l weights n 1}
addUserKnob {7 r_weight}
r_weight 1
addUserKnob {7 g_weight}
g_weight 1
addUserKnob {7 b_weight}
b_weight {{curve x3 1 0 1 1}}
addUserKnob {20 endGroup n -1}
}
BackdropNode {
inputs 0
name BackdropNode1
tile_color 0x4c4c4c01
label "<left><font size=6><b>Other Failed Ideas</b></font>\n"
note_font_size 24
note_font_color 0x1e1e1eff
xpos 1639
ypos 214.8
bdwidth 1445
bdheight 880
}
Input {
inputs 0
name Input
xpos 730
ypos 313
}
Dot {
name Dot68
xpos 764
ypos 402
}
set Ndda9900 [stack 0]
Dot {
name Dot70
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 984
ypos 402
}
set Nddae750 [stack 0]
Expression {
temp_name0 lum
temp_expr0 "max(max(r,g,b), 1e-2)"
temp_name1 minpx
temp_expr1 min(r,g,b)
temp_name2 sat
temp_expr2 (lum-minpx)/lum
expr0 "lum == 0 ? 1 : sat"
expr1 "lum == 0 ? 1 : sat"
expr2 "lum == 0 ? 1 : sat"
expr3 "lum == 0 ? 1 : sat"
name Saturation3
xpos 950
ypos 439
}
set Nddb3720 [stack 0]
Group {
name BlurPercent
tile_color 0xc4814dff
xpos 1081
ypos 439
addUserKnob {20 percentBlur l "Percent Blur"}
addUserKnob {41 channels T _BLUR_.channels}
addUserKnob {14 percent R 0 100}
percent 3
addUserKnob {41 filter T _BLUR_.filter}
addUserKnob {41 quality l "" -STARTLINE T _BLUR_.quality}
addUserKnob {41 crop l "crop to format" -STARTLINE T _BLUR_.crop}
addUserKnob {41 mix T _BLUR_.mix}
}
Input {
inputs 0
name Input
xpos 440
ypos -225
}
Blur {
channels rgba
size {{width/3*(percent/100) x1001 6.826666667e+10} {width/3*(percent/100)*(1/pixel_aspect)}}
crop false
name _BLUR_
xpos 440
ypos -153
addUserKnob {20 User}
addUserKnob {7 xpercent l xPercent R 0 100}
xpercent 25.5
addUserKnob {7 ypercent l yPercent R 0 100}
ypercent {{xpercent}}
}
Output {
name Output1
xpos 440
ypos -81
}
end_group
CurveTool {
operation "Max Luma Pixel"
ROI {0 0 {input.width} {input.height}}
autocropdata {0 0 {input.width} {input.height}}
maxlumapixdata {{curve x1 0 35 85 1431 2047 0 799 1807 3423 1777 5355 x18 3534 x24 2134 x34 1837 x35 1807 1813 x40 1843 x41 1843 1846 1681 1023 186} {curve x1 275 1028 320 849 0 1151 478 532 1795 1807 2565 x18 2750 x24 664 x34 526 x35 595 526 x40 526 x41 526 526 43 1023 303}}
maxlumapixvalue {{curve x1 1.434577703 1.409547567 4476280.5 1.143328071 1.060532331 1.110794544 1.057173729 0.9376456141 1.192092896 1.28297925 1.259831667 x18 1.060389042 x24 0.957698822 x34 1.041455269 x35 1.077255249 1.1039536 x40 1.091059685 x41 1.08315599 1.06418395 0.9758271575 1.161405921 1.209861159} {curve x1 1.434577703 1.409547567 4476280.5 1.143328071 1.060532331 1.110794544 1.057173729 0.9376456141 1.192092896 1.28297925 1.259831667 x18 1.060389042 x24 0.957698822 x34 1.041455269 x35 1.077255249 1.1039536 x40 1.091059685 x41 1.08315599 1.06418395 0.9758271575 1.161405921 1.209861159} {curve x1 1.434577703 1.409547567 4476280.5 1.143328071 1.060532331 1.110794544 1.057173729 0.9376456141 1.192092896 1.28297925 1.259831667 x18 1.060389042 x24 0.957698822 x34 1.041455269 x35 1.077255249 1.1039536 x40 1.091059685 x41 1.08315599 1.06418395 0.9758271575 1.161405921 1.209861159}}
minlumapixdata {{curve x1 776 1025 685 1851 1131 99 2449 4069 1330 1807 3909 x18 2082 x24 1258 x34 91 x35 91 1501 x40 91 x41 91 1258 1258 519 522} {curve x1 240 1023 145 347 27 20 721 346 46 57 2553 x18 1969 x24 46 x34 46 x35 46 1030 x40 46 x41 46 46 46 395 395}}
minlumapixvalue {{curve x1 6.984702736e-07 0.2395722866 0.0030396441 0.151778549 0.5825394988 0.004060547333 0.07391577214 0.02645999752 0.6499049067 0.6279835701 0.5038699508 x18 0.3795001209 x24 0.5246937275 x34 0.5586354733 x35 0.6015037298 0.5296355486 x40 0.5670491457 x41 0.5622775555 0.5552452803 0.5526627302 0.04067442194 0.04791568592} {curve x1 6.984702736e-07 0.2395722866 0.0030396441 0.151778549 0.5825394988 0.004060547333 0.07391577214 0.02645999752 0.6499049067 0.6279835701 0.5038699508 x18 0.3795001209 x24 0.5246937275 x34 0.5586354733 x35 0.6015037298 0.5296355486 x40 0.5670491457 x41 0.5622775555 0.5552452803 0.5526627302 0.04067442194 0.04791568592} {curve x1 6.984702736e-07 0.2395722866 0.0030396441 0.151778549 0.5825394988 0.004060547333 0.07391577214 0.02645999752 0.6499049067 0.6279835701 0.5038699508 x18 0.3795001209 x24 0.5246937275 x34 0.5586354733 x35 0.6015037298 0.5296355486 x40 0.5670491457 x41 0.5622775555 0.5552452803 0.5526627302 0.04067442194 0.04791568592}}
name CT
xpos 1081
ypos 481
}
push $Nddb3720
Expression {
expr3 a/pivot
name Remap
xpos 950
ypos 488
addUserKnob {20 User}
addUserKnob {7 pivot R 1 2}
pivot {{parent.max_sat}}
}
Expression {
expr3 1-a
name Complement2
xpos 950
ypos 535
}
Expression {
expr0 r
expr1 g
expr2 b
expr3 "1/(wp-bp) * a - 1/(wp-bp) * bp"
name WhitepointBlackpoint4
xpos 950
ypos 583
addUserKnob {20 User}
addUserKnob {7 wp R 0 2}
wp {{1-parent.core_threshold}}
addUserKnob {7 bp}
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 984
ypos 664
}
set Nd3ace90 [stack 0]
push $Ndda9900
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 764
ypos 614
}
set Nd3b1fe0 [stack 0]
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 max(r,g,b)
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation
label max
xpos 840
ypos 741
dope_sheet true
addUserKnob {20 User}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
push $Nd3ace90
push $Nd3b1fe0
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 r*weight.x+g*weight.y+b*weight.z
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation2
label coefficients
xpos 950
ypos 741
dope_sheet true
addUserKnob {20 User}
addUserKnob {13 weight}
weight {0.1 0.7 0.2}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
push $Nddae750
Dot {
name Dot61
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 1892
ypos 402
}
set Nc0e1360 [stack 0]
BlinkScript {
recompileCount 11
ProgramGroup 1
KernelDescription "2 \"ACES_rrt_sweeteners\" iterate pixelWise f8a9ce320f06d7e170d1557518df73160acb98a9d89a22f03ddd75c61a3f7f73 2 \"src\" Read Point \"dst\" Write Point 5 \"RRT_RED_SCALE\" Float 1 AAAAAA== \"RRT_RED_PIVOT\" Float 1 AAAAAA== \"RRT_RED_HUE\" Float 1 AAAAAA== \"RRT_RED_WIDTH\" Float 1 AAAAAA== \"invert\" Bool 1 AA== 5 \"RRT_RED_SCALE\" 1 1 \"RRT_RED_PIVOT\" 1 1 \"RRT_RED_HUE\" 1 1 \"RRT_RED_WIDTH\" 1 1 \"invert\" 1 1 0"
kernelSource "kernel ACES_rrt_sweeteners : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessPoint, eEdgeClamped> src;\n Image<eWrite> dst;\n\nparam:\n // User controllable parameters\n float RRT_RED_SCALE;\n float RRT_RED_PIVOT;\n float RRT_RED_HUE;\n float RRT_RED_WIDTH;\n bool invert;\n\n // // Red modifier constants\n // RRT_RED_SCALE = 0.82;\n // RRT_RED_PIVOT = 0.03;\n // RRT_RED_HUE = 0.;\n // RRT_RED_WIDTH = 135.;\n\n\n float min_f3(float3 a) \{\n return min( a.x, min( a.y, a.z));\n \}\n\n float max_f3(float3 a) \{\n return max( a.x, max( a.y, a.z));\n \}\n\n float rgb_2_saturation( float3 rgb ) \{\n return ( max( max_f3(rgb), 1e-10) - max( min_f3(rgb), 1e-10)) / max( max_f3(rgb), 1e-2);\n \}\n\n float sigmoid_shaper( float x) \{\n float t = max( float(1. - fabs( float(x / 2.))), float(0));\n float y = 1. + sign(float(x)) * (1. - t * t);\n return y / 2.;\n \}\n\n float rgb_2_yc( float3 rgb, float ycRadiusWeight) \{\n // keyword arguments don't work with blink.. ycRadiusWeight default if not specified was 1.75\n float r = rgb.x; \n float g = rgb.y; \n float b = rgb.z;\n float chroma = sqrt(float(b*(b-g)+g*(g-r)+r*(r-b)));\n return ( b + g + r + ycRadiusWeight * chroma) / 3.;\n \}\n\n // ------- Glow module functions\n float glow_fwd( float ycIn, float glowGainIn, float glowMid) \{\n float glowGainOut;\n if (ycIn <= 2./3. * glowMid) \{\n glowGainOut = glowGainIn;\n \} else if ( ycIn >= 2. * glowMid) \{\n glowGainOut = 0.;\n \} else \{\n glowGainOut = glowGainIn * (glowMid / ycIn - 1./2.);\n \}\n return glowGainOut;\n \}\n\n // Transformations from RGB to other color representations\n float rgb_2_hue( float3 rgb) \n \{\n // Returns a geometric hue angle in degrees (0-360) based on RGB values.\n // For neutral colors, hue is undefined and the function will return a quiet NaN value.\n float hue;\n if (rgb.x == rgb.y && rgb.y == rgb.z) \{\n hue = 0.; // RGB triplets where RGB are equal have an undefined hue\n \} else \{\n hue = (180./3.14159265359) * atan2( sqrt(3)*(rgb.y-rgb.z), 2*rgb.x-rgb.y-rgb.z);\n \}\n if (hue < 0.) hue = hue + 360.;\n return hue;\n \}\n\n float center_hue( float hue, float centerH) \{\n float hueCentered = hue - centerH;\n if (hueCentered < -180.) hueCentered = hueCentered + 360.;\n else if (hueCentered > 180.) hueCentered = hueCentered - 360.;\n return hueCentered;\n \}\n\n float cubic_basis_shaper( float x, float w) \{\n float M\[4]\[4] = \{ \{ -1./6, 3./6, -3./6, 1./6 \},\n \{ 3./6, -6./6, 3./6, 0./6 \},\n \{ -3./6, 0./6, 3./6, 0./6 \},\n \{ 1./6, 4./6, 1./6, 0./6 \} \};\n \n double knots\[5] = \{ -w/2.,\n -w/4.,\n 0.,\n w/4.,\n w/2. \};\n float y = 0;\n if ((x > knots\[0]) && (x < knots\[4])) \{ \n float knot_coord = (x - knots\[0]) * 4./w; \n int j = knot_coord;\n float t = knot_coord - j;\n float monomials\[4] = \{ t*t*t, t*t, t, 1. \};\n // (if/else structure required for compatibility with CTL < v1.5.)\n if ( j == 3) \{\n y = monomials\[0] * M\[0]\[0] + monomials\[1] * M\[1]\[0] + \n monomials\[2] * M\[2]\[0] + monomials\[3] * M\[3]\[0];\n \} else if ( j == 2) \{\n y = monomials\[0] * M\[0]\[1] + monomials\[1] * M\[1]\[1] + \n monomials\[2] * M\[2]\[1] + monomials\[3] * M\[3]\[1];\n \} else if ( j == 1) \{\n y = monomials\[0] * M\[0]\[2] + monomials\[1] * M\[1]\[2] + \n monomials\[2] * M\[2]\[2] + monomials\[3] * M\[3]\[2];\n \} else if ( j == 0) \{\n y = monomials\[0] * M\[0]\[3] + monomials\[1] * M\[1]\[3] + \n monomials\[2] * M\[2]\[3] + monomials\[3] * M\[3]\[3];\n \} else \{\n y = 0.0;\n \}\n \}\n return y * 3/2.;\n \}\n\n\n void process() \{\n float3 aces = float3(src().x, src().y, src().z);\n\n float saturation = rgb_2_saturation(aces);\n\n // --- Red modifier --- //\n float hue = rgb_2_hue( aces);\n float centeredHue = center_hue( hue, RRT_RED_HUE);\n float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH);\n\n if ( invert == 0 ) \{\n aces.x = aces.x + hueWeight * saturation * (RRT_RED_PIVOT - aces.x) * (1. - RRT_RED_SCALE);\n \} \n else \{ // invert red modifier: note that this is not mathematically perfect\n float minChan;\n if (centeredHue < 0) \{ // min_f3(aces) = aces\[1] (i.e. magenta-red)\n minChan = aces.y;\n \} else \{ // min_f3(aces) = aces\[2] (i.e. yellow-red)\n minChan = aces.z;\n \}\n float a = hueWeight * (1. - RRT_RED_SCALE) - 1.;\n float b = aces.x - hueWeight * (RRT_RED_PIVOT + minChan) * (1. - RRT_RED_SCALE);\n float c = hueWeight * RRT_RED_PIVOT * minChan * (1. - RRT_RED_SCALE);\n aces.x = ( -b - sqrt( float(b * b - 4. * a * c )) ) / ( 2. * a);\n \}\n\n //dst() = float4(aces.x, aces.y, aces.z, src().w);\n dst() = float4(hue/360.0, centeredHue/360.0, aces.x, hueWeight);\n \}\n\};"
rebuild ""
ACES_rrt_sweeteners_RRT_RED_SCALE 1
ACES_rrt_sweeteners_RRT_RED_PIVOT 1
ACES_rrt_sweeteners_RRT_RED_HUE {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_HUE+240}}
ACES_rrt_sweeteners_RRT_RED_WIDTH {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_WIDTH}}
rebuild_finalise ""
name rrt_sweetener_red_modifier3
xpos 1749
ypos 462
}
push 0
push $Nc0e1360
BlinkScript {
recompileCount 11
ProgramGroup 1
KernelDescription "2 \"ACES_rrt_sweeteners\" iterate pixelWise f8a9ce320f06d7e170d1557518df73160acb98a9d89a22f03ddd75c61a3f7f73 2 \"src\" Read Point \"dst\" Write Point 5 \"RRT_RED_SCALE\" Float 1 AAAAAA== \"RRT_RED_PIVOT\" Float 1 AAAAAA== \"RRT_RED_HUE\" Float 1 AAAAAA== \"RRT_RED_WIDTH\" Float 1 AAAAAA== \"invert\" Bool 1 AA== 5 \"RRT_RED_SCALE\" 1 1 \"RRT_RED_PIVOT\" 1 1 \"RRT_RED_HUE\" 1 1 \"RRT_RED_WIDTH\" 1 1 \"invert\" 1 1 0"
kernelSource "kernel ACES_rrt_sweeteners : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessPoint, eEdgeClamped> src;\n Image<eWrite> dst;\n\nparam:\n // User controllable parameters\n float RRT_RED_SCALE;\n float RRT_RED_PIVOT;\n float RRT_RED_HUE;\n float RRT_RED_WIDTH;\n bool invert;\n\n // // Red modifier constants\n // RRT_RED_SCALE = 0.82;\n // RRT_RED_PIVOT = 0.03;\n // RRT_RED_HUE = 0.;\n // RRT_RED_WIDTH = 135.;\n\n\n float min_f3(float3 a) \{\n return min( a.x, min( a.y, a.z));\n \}\n\n float max_f3(float3 a) \{\n return max( a.x, max( a.y, a.z));\n \}\n\n float rgb_2_saturation( float3 rgb ) \{\n return ( max( max_f3(rgb), 1e-10) - max( min_f3(rgb), 1e-10)) / max( max_f3(rgb), 1e-2);\n \}\n\n float sigmoid_shaper( float x) \{\n float t = max( float(1. - fabs( float(x / 2.))), float(0));\n float y = 1. + sign(float(x)) * (1. - t * t);\n return y / 2.;\n \}\n\n float rgb_2_yc( float3 rgb, float ycRadiusWeight) \{\n // keyword arguments don't work with blink.. ycRadiusWeight default if not specified was 1.75\n float r = rgb.x; \n float g = rgb.y; \n float b = rgb.z;\n float chroma = sqrt(float(b*(b-g)+g*(g-r)+r*(r-b)));\n return ( b + g + r + ycRadiusWeight * chroma) / 3.;\n \}\n\n // ------- Glow module functions\n float glow_fwd( float ycIn, float glowGainIn, float glowMid) \{\n float glowGainOut;\n if (ycIn <= 2./3. * glowMid) \{\n glowGainOut = glowGainIn;\n \} else if ( ycIn >= 2. * glowMid) \{\n glowGainOut = 0.;\n \} else \{\n glowGainOut = glowGainIn * (glowMid / ycIn - 1./2.);\n \}\n return glowGainOut;\n \}\n\n // Transformations from RGB to other color representations\n float rgb_2_hue( float3 rgb) \n \{\n // Returns a geometric hue angle in degrees (0-360) based on RGB values.\n // For neutral colors, hue is undefined and the function will return a quiet NaN value.\n float hue;\n if (rgb.x == rgb.y && rgb.y == rgb.z) \{\n hue = 0.; // RGB triplets where RGB are equal have an undefined hue\n \} else \{\n hue = (180./3.14159265359) * atan2( sqrt(3)*(rgb.y-rgb.z), 2*rgb.x-rgb.y-rgb.z);\n \}\n if (hue < 0.) hue = hue + 360.;\n return hue;\n \}\n\n float center_hue( float hue, float centerH) \{\n float hueCentered = hue - centerH;\n if (hueCentered < -180.) hueCentered = hueCentered + 360.;\n else if (hueCentered > 180.) hueCentered = hueCentered - 360.;\n return hueCentered;\n \}\n\n float cubic_basis_shaper( float x, float w) \{\n float M\[4]\[4] = \{ \{ -1./6, 3./6, -3./6, 1./6 \},\n \{ 3./6, -6./6, 3./6, 0./6 \},\n \{ -3./6, 0./6, 3./6, 0./6 \},\n \{ 1./6, 4./6, 1./6, 0./6 \} \};\n \n double knots\[5] = \{ -w/2.,\n -w/4.,\n 0.,\n w/4.,\n w/2. \};\n float y = 0;\n if ((x > knots\[0]) && (x < knots\[4])) \{ \n float knot_coord = (x - knots\[0]) * 4./w; \n int j = knot_coord;\n float t = knot_coord - j;\n float monomials\[4] = \{ t*t*t, t*t, t, 1. \};\n // (if/else structure required for compatibility with CTL < v1.5.)\n if ( j == 3) \{\n y = monomials\[0] * M\[0]\[0] + monomials\[1] * M\[1]\[0] + \n monomials\[2] * M\[2]\[0] + monomials\[3] * M\[3]\[0];\n \} else if ( j == 2) \{\n y = monomials\[0] * M\[0]\[1] + monomials\[1] * M\[1]\[1] + \n monomials\[2] * M\[2]\[1] + monomials\[3] * M\[3]\[1];\n \} else if ( j == 1) \{\n y = monomials\[0] * M\[0]\[2] + monomials\[1] * M\[1]\[2] + \n monomials\[2] * M\[2]\[2] + monomials\[3] * M\[3]\[2];\n \} else if ( j == 0) \{\n y = monomials\[0] * M\[0]\[3] + monomials\[1] * M\[1]\[3] + \n monomials\[2] * M\[2]\[3] + monomials\[3] * M\[3]\[3];\n \} else \{\n y = 0.0;\n \}\n \}\n return y * 3/2.;\n \}\n\n\n void process() \{\n float3 aces = float3(src().x, src().y, src().z);\n\n float saturation = rgb_2_saturation(aces);\n\n // --- Red modifier --- //\n float hue = rgb_2_hue( aces);\n float centeredHue = center_hue( hue, RRT_RED_HUE);\n float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH);\n\n if ( invert == 0 ) \{\n aces.x = aces.x + hueWeight * saturation * (RRT_RED_PIVOT - aces.x) * (1. - RRT_RED_SCALE);\n \} \n else \{ // invert red modifier: note that this is not mathematically perfect\n float minChan;\n if (centeredHue < 0) \{ // min_f3(aces) = aces\[1] (i.e. magenta-red)\n minChan = aces.y;\n \} else \{ // min_f3(aces) = aces\[2] (i.e. yellow-red)\n minChan = aces.z;\n \}\n float a = hueWeight * (1. - RRT_RED_SCALE) - 1.;\n float b = aces.x - hueWeight * (RRT_RED_PIVOT + minChan) * (1. - RRT_RED_SCALE);\n float c = hueWeight * RRT_RED_PIVOT * minChan * (1. - RRT_RED_SCALE);\n aces.x = ( -b - sqrt( float(b * b - 4. * a * c )) ) / ( 2. * a);\n \}\n\n //dst() = float4(aces.x, aces.y, aces.z, src().w);\n dst() = float4(hue/360.0, centeredHue/360.0, aces.x, hueWeight);\n \}\n\};"
rebuild ""
ACES_rrt_sweeteners_RRT_RED_SCALE 1
ACES_rrt_sweeteners_RRT_RED_PIVOT 1
ACES_rrt_sweeteners_RRT_RED_HUE {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_HUE+120}}
ACES_rrt_sweeteners_RRT_RED_WIDTH {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_WIDTH}}
rebuild_finalise ""
name rrt_sweetener_red_modifier2
xpos 1858
ypos 464
}
push $Nc0e1360
BlinkScript {
recompileCount 12
ProgramGroup 1
KernelDescription "2 \"ACES_rrt_sweeteners\" iterate pixelWise 525953e4a603c811da0cfa6bf8fda5775d0803ca6090c445a640ce77d1fee80c 2 \"src\" Read Point \"dst\" Write Point 5 \"RRT_RED_SCALE\" Float 1 AAAAAA== \"RRT_RED_PIVOT\" Float 1 AAAAAA== \"RRT_RED_HUE\" Float 1 AAAAAA== \"RRT_RED_WIDTH\" Float 1 AAAAAA== \"invert\" Bool 1 AA== 5 \"RRT_RED_SCALE\" 1 1 \"RRT_RED_PIVOT\" 1 1 \"RRT_RED_HUE\" 1 1 \"RRT_RED_WIDTH\" 1 1 \"invert\" 1 1 0"
kernelSource "kernel ACES_rrt_sweeteners : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessPoint, eEdgeClamped> src;\n Image<eWrite> dst;\n\nparam:\n // User controllable parameters\n float RRT_RED_SCALE;\n float RRT_RED_PIVOT;\n float RRT_RED_HUE;\n float RRT_RED_WIDTH;\n bool invert;\n\n // // Red modifier constants\n // RRT_RED_SCALE = 0.82;\n // RRT_RED_PIVOT = 0.03;\n // RRT_RED_HUE = 0.;\n // RRT_RED_WIDTH = 135.;\n\n\n float min_f3(float3 a) \{\n return min( a.x, min( a.y, a.z));\n \}\n\n float max_f3(float3 a) \{\n return max( a.x, max( a.y, a.z));\n \}\n\n float rgb_2_saturation( float3 rgb ) \{\n return ( max( max_f3(rgb), 1e-10) - max( min_f3(rgb), 1e-10)) / max( max_f3(rgb), 1e-2);\n \}\n\n float sigmoid_shaper( float x) \{\n float t = max( float(1. - fabs( float(x / 2.))), float(0));\n float y = 1. + sign(float(x)) * (1. - t * t);\n return y / 2.;\n \}\n\n float rgb_2_yc( float3 rgb, float ycRadiusWeight) \{\n // keyword arguments don't work with blink.. ycRadiusWeight default if not specified was 1.75\n float r = rgb.x; \n float g = rgb.y; \n float b = rgb.z;\n float chroma = sqrt(float(b*(b-g)+g*(g-r)+r*(r-b)));\n return ( b + g + r + ycRadiusWeight * chroma) / 3.;\n \}\n\n // ------- Glow module functions\n float glow_fwd( float ycIn, float glowGainIn, float glowMid) \{\n float glowGainOut;\n if (ycIn <= 2./3. * glowMid) \{\n glowGainOut = glowGainIn;\n \} else if ( ycIn >= 2. * glowMid) \{\n glowGainOut = 0.;\n \} else \{\n glowGainOut = glowGainIn * (glowMid / ycIn - 1./2.);\n \}\n return glowGainOut;\n \}\n\n // Transformations from RGB to other color representations\n float rgb_2_hue( float3 rgb) \n \{\n // Returns a geometric hue angle in degrees (0-360) based on RGB values.\n // For neutral colors, hue is undefined and the function will return a quiet NaN value.\n float hue;\n if (rgb.x == rgb.y && rgb.y == rgb.z) \{\n hue = 0.; // RGB triplets where RGB are equal have an undefined hue\n \} else \{\n hue = (180./3.14159265359) * atan2( sqrt(3)*(rgb.y-rgb.z), 2*rgb.x-rgb.y-rgb.z);\n \}\n if (hue < 0.) hue = hue + 360.;\n return hue;\n \}\n\n float center_hue( float hue, float centerH) \{\n float hueCentered = hue - centerH;\n if (hueCentered < -180.) hueCentered = hueCentered + 360.;\n else if (hueCentered > 180.) hueCentered = hueCentered - 360.;\n return hueCentered;\n \}\n\n float cubic_basis_shaper( float x, float w) \{\n float M\[4]\[4] = \{ \{ -1./6, 3./6, -3./6, 1./6 \},\n \{ 3./6, -6./6, 3./6, 0./6 \},\n \{ -3./6, 0./6, 3./6, 0./6 \},\n \{ 1./6, 4./6, 1./6, 0./6 \} \};\n \n double knots\[5] = \{ -w/2.,\n -w/4.,\n 0.,\n w/4.,\n w/2. \};\n float y = 0;\n if ((x > knots\[0]) && (x < knots\[4])) \{ \n float knot_coord = (x - knots\[0]) * 4./w; \n int j = knot_coord;\n float t = knot_coord - j;\n float monomials\[4] = \{ t*t*t, t*t, t, 1. \};\n // (if/else structure required for compatibility with CTL < v1.5.)\n if ( j == 3) \{\n y = monomials\[0] * M\[0]\[0] + monomials\[1] * M\[1]\[0] + \n monomials\[2] * M\[2]\[0] + monomials\[3] * M\[3]\[0];\n \} else if ( j == 2) \{\n y = monomials\[0] * M\[0]\[1] + monomials\[1] * M\[1]\[1] + \n monomials\[2] * M\[2]\[1] + monomials\[3] * M\[3]\[1];\n \} else if ( j == 1) \{\n y = monomials\[0] * M\[0]\[2] + monomials\[1] * M\[1]\[2] + \n monomials\[2] * M\[2]\[2] + monomials\[3] * M\[3]\[2];\n \} else if ( j == 0) \{\n y = monomials\[0] * M\[0]\[3] + monomials\[1] * M\[1]\[3] + \n monomials\[2] * M\[2]\[3] + monomials\[3] * M\[3]\[3];\n \} else \{\n y = 0.0;\n \}\n \}\n return y * 3/2.;\n \}\n\n\n void process() \{\n float3 aces = float3(src().x, src().y, src().z);\n\n float saturation = rgb_2_saturation(aces);\n\n // --- Red modifier --- //\n float hue = rgb_2_hue( aces);\n float centeredHue = center_hue( hue, RRT_RED_HUE);\n float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH);\n\n if ( invert == 0 ) \{\n aces.x = aces.x + hueWeight * saturation * (RRT_RED_PIVOT - aces.x) * (1. - RRT_RED_SCALE);\n \} \n else \{ // invert red modifier: note that this is not mathematically perfect\n float minChan;\n if (centeredHue < 0) \{ // min_f3(aces) = aces\[1] (i.e. magenta-red)\n minChan = aces.y;\n \} else \{ // min_f3(aces) = aces\[2] (i.e. yellow-red)\n minChan = aces.z;\n \}\n float a = hueWeight * (1. - RRT_RED_SCALE) - 1.;\n float b = aces.x - hueWeight * (RRT_RED_PIVOT + minChan) * (1. - RRT_RED_SCALE);\n float c = hueWeight * RRT_RED_PIVOT * minChan * (1. - RRT_RED_SCALE);\n aces.x = ( -b - sqrt( float(b * b - 4. * a * c )) ) / ( 2. * a);\n \}\n\n //dst() = float4(aces.x, aces.y, aces.z, src().w);\n dst() = float4(hue/360.0, centeredHue/360.0, aces.x, hueWeight);\n \}\n\};"
rebuild ""
ACES_rrt_sweeteners_RRT_RED_SCALE 1
ACES_rrt_sweeteners_RRT_RED_PIVOT 1
ACES_rrt_sweeteners_RRT_RED_WIDTH 360
rebuild_finalise ""
name rrt_sweetener_red_modifier1
xpos 1967
ypos 462
}
Merge2 {
inputs 3+1
operation screen
name Merge2
xpos 1858
ypos 535
}
Group {
name SoftCompress1
label "direction: \[knob direction]"
xpos 1858
ypos 595
disable true
addUserKnob {20 SoftCompress}
addUserKnob {7 slope t "The softness of the compressing curve's slope. 0 is a clamp."}
slope 1
addUserKnob {7 threshold t "The minimum threshold. Values below this number will not be affected." R 0 2}
threshold 0.75
addUserKnob {7 limit t "The asymptotic maximum value. For example, the value that inf becomes." R 0 2}
limit 1
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name InputMask
xpos -590
ypos 806
number 1
}
Input {
inputs 0
name Input
xpos -810
ypos 494
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -776
ypos 546
}
set Nce8a300 [stack 0]
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 threshold
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : (pow(sl, 2) + 2 * sl * th - 2 * sl * r + pow(th, 2) - th * r + lim * r)/(th + lim - r)"
expr1 "g < th + sl ? g : (pow(sl, 2) + 2 * sl * th - 2 * sl * g + pow(th, 2) - th * g + lim * g)/(th + lim - g)"
expr2 "b < th + sl ? b : (pow(sl, 2) + 2 * sl * th - 2 * sl * b + pow(th, 2) - th * b + lim * b)/(th + lim - b)"
expr3 "a < th + sl ? a : (pow(sl, 2) + 2 * sl * th - 2 * sl * a + pow(th, 2) - th * a + lim * a)/(th + lim - a)"
name SoftCompress_inverse
xpos -702
ypos 636
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
push $Nce8a300
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 "min(threshold, limit)"
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : th + (-1 / ((r - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr1 "g < th + sl ? g : th + (-1 / ((g - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr2 "b < th + sl ? b : th + (-1 / ((b - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr3 "a < th + sl ? a : th + (-1 / ((a - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
name SoftCompress
xpos -921
ypos 639
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
Switch {
inputs 2
which {{parent.direction}}
name SwitchDirection
xpos -810
ypos 709
}
push $Nce8a300
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 546
}
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 810
}
NodeWrapper {
inputs 2+1
channels rgba
name NodeWrapper1
xpos -810
ypos 806
}
Output {
name Output
xpos -810
ypos 926
}
end_group
Fill {
name Fill1
xpos 1858
ypos 649
disable true
}
Gamma {
channels rgba
name Gamma1
xpos 1858
ypos 699
}
Expression {
expr0 r
expr1 g
expr2 b
expr3 "1/(wp-bp) * a - 1/(wp-bp) * bp"
name WhitepointBlackpoint3
xpos 1858
ypos 745
addUserKnob {20 User}
addUserKnob {7 wp R 0 2}
wp 0.48
addUserKnob {7 bp}
}
Clamp {
channels rgba
name Clamp1
xpos 1858
ypos 781
disable true
}
Merge2 {
operation stencil
bbox B
name Merge1
xpos 1858
ypos 866
}
push $Nc0e1360
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2258
ypos 402
}
set Nc8bdbd0 [stack 0]
Dot {
name Dot4
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2258
ypos 469
}
set Nc8c2b40 [stack 0]
Dot {
name Dot12
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2404
ypos 469
}
set Nc8c79a0 [stack 0]
Dot {
name Dot5
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2734
ypos 469
}
Dot {
name Dot13
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2734
ypos 565
}
set Nc225a80 [stack 0]
Expression {
expr3 "max(0, (r-g))/r"
name Expression4
label "magenta sat"
xpos 2700
ypos 610
}
push $Nc225a80
Expression {
expr3 "max(0, (g-b))/g"
name Expression10
label "green sat"
xpos 2911
ypos 610
}
push $Nc225a80
Expression {
expr3 "max(0, (r-b))/r"
name Expression7
label "yellow sat"
xpos 2808
ypos 610
}
push $Nc225a80
Expression {
temp_name0 w
temp_expr0 b
temp_name1 z
temp_expr1 r
expr3 "max(0, (w-z))/w"
name Expression9
label "blue sat"
xpos 2592
ypos 610
}
push $Nc8c79a0
Expression {
expr3 "max(0, (b-g))/b"
name Expression8
label "blue magenta sat"
xpos 2484
ypos 610
}
push $Nc8c79a0
Expression {
expr3 "max(0, (g-r))/g"
name Expression6
label "cyan sat"
xpos 2370
ypos 610
}
StickyNote {
inputs 0
name StickyNote1
tile_color 0x40454aff
label "<left><pre>\nUse sigmoid shaper hue keyer function from \nRRT red modifier to adjust hue angles independently"
note_font_size 18
xpos 1703
ypos 325
}
push $Nc8c2b40
Expression {
temp_name0 lum
temp_expr0 max(r,g,b)
temp_name1 minpx
temp_expr1 min(r,g,b)
temp_name2 sat
temp_expr2 (lum-minpx)/lum
expr0 0
expr1 0
expr2 0
expr3 sat
name SatMask
xpos 2224
ypos 611
}
push $Nc8bdbd0
Dot {
name Dot60
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2159
ypos 508
}
set Na087120 [stack 0]
Expression {
expr3 "(max( max(r,g,b), 1e-10) - max( min(r,g,b), 1e-10)) / max( max(r,g,b), 1e-2)"
name RGB_to_Saturation
xpos 2015
ypos 576
}
push $Na087120
Expression {
temp_name1 hue
temp_expr1 "( atan2( sqrt(3) * (g-b), 2 * r - g - b) / pi +1 ) / 2"
expr3 hue
name RGB_to_Hue
xpos 2125
ypos 576
}
ColorLookup {
inputs 0
lut {master {curve L 0 1 s0}
red {}
green {}
blue {}
alpha {}}
name ColorLookup2
label "smoothstep - \\n changes falloff, but doesn't really help"
xpos 1190
ypos 551
disable true
}
StickyNote {
inputs 0
name StickyNote2
tile_color 0x40454aff
label "<left><pre>\nUse different hue saturation masks to control different hue angles\nindependently. Might be better done in the desaturation algorithm"
note_font_size 18
xpos 2298
ypos 383
}
push $Nd3ace90
push $Nd3b1fe0
HueShift {
color {1 1 1}
hue_rotation -45
name HueShift1
xpos 1272
ypos 664
}
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 "max(r*weight.x, g*weight.y, b*weight.z)"
temp_name1 lum2
temp_expr1 (g+b)/2
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation4
label "cmy weighted"
xpos 1120
ypos 735
dope_sheet true
addUserKnob {20 User}
addUserKnob {13 weight}
weight {{parent.r_weight} {parent.g_weight} {parent.b_weight}}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
HueShift {
hue_rotation {{-parent.HueShift1.hue_rotation}}
name HueShift2
xpos 1272
ypos 822
}
push $Nd3ace90
push $Nd3b1fe0
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 "max(r*weight.x, g*weight.y, b*weight.z)"
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation1
label "rgb weighted"
xpos 730
ypos 741
dope_sheet true
addUserKnob {20 User}
addUserKnob {13 weight}
weight {{parent.r_weight} {parent.g_weight} {parent.b_weight}}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
Output {
name Output
xpos 730
ypos 927
}
StickyNote {
inputs 0
name StickyNote3
tile_color 0x40454aff
label "<left><pre>\nRotate hue 45 degrees before desat\nmakes rgb weights cmy weights\nI wonder how we could have both cmy + rgb weights?"
note_font_size 18
xpos 1249
ypos 711
}
end_group
Switch {
inputs 2
which 1
name Switch2
xpos 3700
ypos 110
disable true
}
Dot {
name Dot58
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3734
ypos 234
}
set Ncf0e990 [stack 0]
Group {
name OutOfGamut2
xpos 3275
ypos 230
}
Input {
inputs 0
name Input
xpos 706
ypos -120
}
Dot {
name Dot56
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 740
ypos -59
}
set Nabac500 [stack 0]
Expression {
expr3 "(r < 0 || g < 0 || b < 0) ? 1 : 0"
name Expression1
label "Out of Gamut"
xpos 596
ypos -20
}
Premult {
name Premult1
xpos 596
ypos 32
}
push $Nabac500
Fill {
color {0.18 0.18 0.18 1}
name Fill1
xpos 706
ypos -16
}
Merge2 {
inputs 2
bbox B
name Merge1
xpos 706
ypos 32
}
Output {
name Output1
xpos 706
ypos 152
}
end_group
push $Nf4560b0
push 0
push 0
push 0
push 0
push 0
push $Ncf0e990
Group {
name PlotChromaticity1
xpos 3700
ypos 317
addUserKnob {20 PlotGamut_tab l PlotGamut}
addUserKnob {6 plot_input l "&nbsp;<b>Plot Input Pixels" t "Enable plotting of the input pixels" +STARTLINE}
plot_input true
addUserKnob {41 input_gamut t "Set the gamut that the input colors are encoded in" T GamutToXYZ3.gamut}
addUserKnob {4 diagram t "Choose the type of chromaticity diagram" M {"CIE 1931 xy Chromaticity Diagram" "CIE 1976 u' v' Uniform Chromaticity Scale Diagram" ""}}
addUserKnob {4 plot_type l "plot type" t "Choose the type of plot rendering.\n\nBlinkScript uses a custom blinkscript plotting node which is very fast.\n\nPositionToPoints renders each pixels as a point in 3D space and renders it through a ScanlineRender node. Much slower and more buggy, but can be useful for visualizing the 3 dimensional aspect of the color data." M {BlinkScript "PositionToPoints + ScanlineRender"}}
addUserKnob {6 enable_sample_color l "enable sample color" t "Enable plotting of the sampled color below" +STARTLINE}
addUserKnob {41 sample_color l "sample color" t "sample and plot selected color" T SampleColor.color}
addUserKnob {26 ""}
addUserKnob {26 plot_dimensions_label l " " T "<b>Plot Dimensions"}
addUserKnob {7 right_margin l "right margin" R 1 1.5}
right_margin 1.1
addUserKnob {7 left_margin l "left margin" R 0 0.2}
left_margin 0.12
addUserKnob {41 output_format l format T Plot_Input.format}
addUserKnob {6 resample_input l "resample input" t "scale down input - can help speed up plotting for high resolution inputs." +STARTLINE}
addUserKnob {3 input_width l " " t "width to resample input to" -STARTLINE}
input_width 2048
addUserKnob {6 map_overlays_to_input_gamut l "map overlays to input gamut" t "This maps the overlays like the spectral locus, pointer's gamut, and the gamut overlay to the working gamut instead of keeping them as XYZ.\n\nFor example if the input gamut is ACEScg, these overlays will be mapped to that. Note that this can cause most of the overlays to be negative or highly saturated which might harm the visual appearance." +STARTLINE}
addUserKnob {26 ""}
addUserKnob {6 draw_axis l "&nbsp;&nbsp; <b> Coordinate Grid" t "Draw coordinate grid" +STARTLINE}
draw_axis true
addUserKnob {6 full_width_grid l "full width grid" t "Enable full width coordinate grid" +STARTLINE}
addUserKnob {41 plot_cie_xy_axis_color l "axis color" T Plot_SpectralLocus_and_Axis.plot_cie_xy_axis_color}
addUserKnob {41 plot_cie_xy_axis_hatch_color l "grid color" T Plot_SpectralLocus_and_Axis.plot_cie_xy_axis_hatch_color}
addUserKnob {26 ""}
addUserKnob {6 draw_spectral_locus l " &nbsp;&nbsp; <b> Spectral Locus" t "draw the spectrum locus: the boundary of color the human eye can see." +STARTLINE}
draw_spectral_locus true
addUserKnob {6 colorize_spectral_locus l "colorize spectral locus" +STARTLINE}
addUserKnob {41 spectral_locus_color l color T Fill2.color}
addUserKnob {26 ""}
addUserKnob {6 draw_gamut_overlay l " &nbsp;&nbsp; <b> Gamut Overlay" t "draw an overlay of a color gamut (choose gamut below)" +STARTLINE}
draw_gamut_overlay true
addUserKnob {41 gamut_overlay l gamut t "choose gamut to overlay" T GamutToXYZ_OVERLAY.gamut}
addUserKnob {4 style t "Choose the style to display the gamut plot" M {boundary dots grid}}
addUserKnob {4 distribution t "Which chromaticity space should the overlays be constructed in? \n\nYxy is familiar, but not very perceptually uniform.\n\nLu'v' is designed to be more perceptually uniform." -STARTLINE M {"CIE Yxy" "CIE Lu'v'"}}
addUserKnob {7 density t "Density of the grid or points if style is not boundary" R 10 100}
density 55
addUserKnob {7 opacity_gamut_overlay l opacity R 0.1 1}
opacity_gamut_overlay 0.5
addUserKnob {6 colorize_gamut_boundary l "colorize gamut boundary" t "use a constant color for the gamut overlay instead of the spectral boundary colors." +STARTLINE}
colorize_gamut_boundary true
addUserKnob {41 overlay_gamut_color l color t "gamut boundary fill color, if enabled." T Fill1.color}
addUserKnob {26 ""}
addUserKnob {6 enable_pointers_gamut l "&nbsp; <b>Pointers Gamut" t "Enable Pointer's gamut overlay" +STARTLINE}
addUserKnob {6 enable_pointer_samples l "enable samples" t "show the individual pointer gamut samples" +STARTLINE}
addUserKnob {6 colorize_pointers_gamut l "colorize pointers gamut" t "set the pointer's gamut colors to a constant" +STARTLINE}
addUserKnob {41 color T ColorizePointers.color}
}
BackdropNode {
inputs 0
name BackdropNode1
tile_color 0x222222ff
label "Draw Gamut"
note_font_size 42
xpos -2165
ypos -325
bdwidth 585
bdheight 1462
}
BackdropNode {
inputs 0
name BackdropNode2
tile_color 0x222222ff
label "Draw Spectral Locus"
note_font_size 42
xpos -955
ypos -321
bdwidth 582
bdheight 1458
}
BackdropNode {
inputs 0
name BackdropNode3
tile_color 0x222222ff
label "Plot Input Pixels"
note_font_size 42
xpos -222
ypos -633
bdwidth 797
bdheight 2562
}
BackdropNode {
inputs 0
name BackdropNode4
tile_color 0x202020ff
label "Pointer's Gamut"
note_font_size 48
xpos -1535
ypos -321
bdwidth 554
bdheight 1458
}
BackdropNode {
inputs 0
name BackdropNode5
tile_color 0x3a3a3aff
label "Sample Input Color"
note_font_size 42
xpos -237
ypos 114
bdwidth 415
bdheight 639
z_order 4
}
Camera2 {
inputs 0
display off
selectable false
translate {{0.5-parent.left_margin*0.3 x14 0.476000011} {0.5-parent.left_margin*0.3 x14 0.476000011} 3}
projection_mode orthographic
focal {{40/parent.right_margin}}
haperture 50
vaperture 18
far 10
name Camera1
xpos -708
ypos 1329
}
Input {
inputs 0
name Input
xpos 180
ypos -490
}
AddChannels {
name AddChannels1
xpos 180
ypos -424
}
Reformat {
type "to box"
box_width 2048
box_height {{rint(input.width/box_width*input.height)}}
box_fixed true
box_pixel_aspect {{input.pixel_aspect}}
filter impulse
name ResampleInput
xpos 180
ypos -370
disable {{!parent.resample_input}}
}
Dot {
name Dot7
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 214
ypos 244
}
set Nfcb9c40 [stack 0]
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 324
ypos 244
}
Group {
name GamutToXYZ3
label "\[value gamut] to XYZ\n"
xpos 290
ypos 392
addUserKnob {20 GamutToXYZ_tab l GamutToXYZ}
addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" Rec709 Rec2020 P3D60 P3D65 P3DCI ArriAlexaWideGamut "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB GoProProtune CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut ""}}
gamut ACEScg
addUserKnob {6 invert +STARTLINE}
addUserKnob {26 ""}
addUserKnob {26 chromaticity_coordinates_label l " " T "<b>Chromaticity Coordinates</b>"}
addUserKnob {41 rxy T ColorMatrix.rxy}
addUserKnob {41 gxy T ColorMatrix.gxy}
addUserKnob {41 bxy T ColorMatrix.bxy}
addUserKnob {41 wxy T ColorMatrix.wxy}
addUserKnob {41 matrix T ColorMatrix.matrix}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
ColorMatrix {
matrix {
{{curve(which) 1 0.9525524378 0.6624541879 0.7053968906 0.4123907983 0.6369580626 0.5049495697 0.4865709841 0.4451698363 0.6380076408 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481}}
{{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295}}
{{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375}}
}
invert {{parent.invert}}
name ColorMatrix
label "RGB to XYZ"
xpos -40
ypos 33
addUserKnob {20 Gamut}
addUserKnob {3 which}
which {{parent.gamut}}
addUserKnob {12 rxy +DISABLED}
rxy {{curve(which) 0 0.7347 0.713 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73} {curve(which) 0 0.2653 0.293 0.3177 0.33 0.292 0.32 0.32 0.32 0.313 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28}}
addUserKnob {12 gxy +DISABLED}
gxy {{curve(which) 0 0 0.165 0.18 0.3 0.17 0.265 0.265 0.265 0.221 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165} {curve(which) 0 1 0.83 0.9 0.6 0.797 0.69 0.69 0.69 0.848 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84}}
addUserKnob {12 bxy +DISABLED}
bxy {{curve(which) 0 0.0001 0.128 0.065 0.15 0.131 0.15 0.15 0.15 0.0861 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1} {curve(which) 0 -0.077 0.044 -0.0805 0.06 0.046 0.06 0.06 0.06 -0.102 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03}}
addUserKnob {12 wxy +DISABLED}
wxy {{curve(which) 0.33333 0.32168 0.32168 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127} {curve(which) 0.33333 0.33767 0.33767 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329}}
}
Output {
name Output
xpos -40
ypos 86
}
end_group
Colorspace {
colorspace_in CIE-XYZ
primary_in "Adobe (1998)"
colorspace_out CIE-Yxy
name Colorspace2
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos 290
ypos 440
}
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression4
label "CIE Yxy to CIELuv"
xpos 290
ypos 512
disable {{!parent.diagram}}
}
Dot {
name Dot13
label " Pos"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 324
ypos 618
}
set Nf015710 [stack 0]
push $Nfcb9c40
Dot {
name Dot16
label " Col"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 214
ypos 522
}
set Nf01a7f0 [stack 0]
Group {
inputs 2
name PlotPoints2
xpos 290
ypos 676
addUserKnob {20 User}
addUserKnob {41 detail l "point detail" T PositionToPoints1.detail}
addUserKnob {41 pointSize l "point size" T PositionToPoints1.pointSize}
}
Input {
inputs 0
name Inputpos
xpos 510
ypos 588
number 1
}
Input {
inputs 0
name Inputcol
xpos 400
ypos 590
}
add_layer {pos pos.red pos.green pos.blue pos.alpha}
ShuffleCopy {
inputs 2
alpha alpha2
black green
white blue
red2 red
green2 alpha
out2 pos
name ShuffleCopy1
label "\[value in] | \[value in2] -> \[value out]"
xpos 400
ypos 665
}
PositionToPoints2 {
display textured
render_mode textured
P_channel pos
detail 0.1
pointSize 2
name PositionToPoints1
xpos 400
ypos 742
}
Output {
name Output
xpos 404
ypos 880
}
end_group
Dot {
name Dot19
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 324
ypos 1266
}
Constant {
inputs 0
format "256 256 0 0 256 256 1 square_256"
name Constant6
xpos -1470
ypos -58
postage_stamp false
}
Reformat {
type "to box"
box_width 296
box_height 2
box_fixed true
name ReformatBox3
xpos -1470
ypos -9
addUserKnob {20 User}
addUserKnob {7 bits l "" +STARTLINE R 0 16}
bits 12
}
Ramp {
p0 {0 0}
p1 {{input.width} 0}
color {{input.width}}
name Ramp1
xpos -1470
ypos 38
}
ColorLookup {
lut {master {}
red {curve 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.31 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.397 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.483 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.569 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.655 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.741 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.828 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914 0.914}
green {curve 0.433 0.464 0.513 0.611 0.576 0.46 0.426 0.412 0.404 0.397 0.384 0.374 0.346 0.333 0.311 0.287 0.257 0.23 0.21 0.219 0.208 0.211 0.208 0.187 0.191 0.187 0.18 0.164 0.17 0.177 0.175 0.188 0.252 0.325 0.385 0.416 0.433 0.487 0.532 0.588 0.637 0.634 0.549 0.506 0.49 0.458 0.426 0.412 0.397 0.365 0.337 0.301 0.262 0.221 0.192 0.164 0.167 0.162 0.176 0.179 0.148 0.156 0.142 0.148 0.138 0.145 0.145 0.161 0.197 0.256 0.324 0.393 0.451 0.487 0.508 0.538 0.587 0.634 0.659 0.611 0.552 0.526 0.484 0.452 0.428 0.406 0.371 0.334 0.293 0.243 0.204 0.177 0.151 0.151 0.162 0.158 0.161 0.142 0.141 0.129 0.134 0.14 0.156 0.166 0.192 0.221 0.265 0.325 0.392 0.451 0.508 0.48 0.513 0.554 0.597 0.63 0.634 0.58 0.546 0.499 0.466 0.434 0.408 0.372 0.332 0.288 0.242 0.202 0.179 0.16 0.157 0.162 0.157 0.159 0.149 0.153 0.147 0.154 0.164 0.18 0.199 0.226 0.25 0.279 0.325 0.38 0.439 0.48 0.436 0.468 0.502 0.541 0.57 0.605 0.594 0.555 0.511 0.473 0.439 0.409 0.371 0.332 0.288 0.252 0.217 0.196 0.181 0.178 0.185 0.176 0.173 0.168 0.176 0.178 0.19 0.202 0.214 0.235 0.254 0.27 0.291 0.323 0.366 0.41 0.436 0.396 0.414 0.438 0.465 0.485 0.527 0.566 0.557 0.523 0.478 0.442 0.409 0.371 0.334 0.294 0.265 0.244 0.223 0.225 0.212 0.218 0.211 0.211 0.207 0.214 0.217 0.229 0.237 0.244 0.264 0.275 0.285 0.3 0.321 0.348 0.376 0.396 0.357 0.368 0.377 0.391 0.402 0.431 0.481 0.503 0.521 0.482 0.444 0.409 0.372 0.337 0.307 0.286 0.27 0.257 0.247 0.251 0.257 0.255 0.254 0.25 0.258 0.259 0.265 0.269 0.278 0.284 0.292 0.297 0.305 0.317 0.33 0.344 0.357 0.321 0.322 0.328 0.332 0.333 0.346 0.365 0.389 0.411 0.459 0.443 0.399 0.352 0.327 0.313 0.304 0.3 0.294 0.295 0.294 0.293 0.292 0.291 0.295 0.3 0.301 0.302 0.304 0.304 0.304 0.305 0.307 0.309 0.312 0.313 0.316 0.321}
blue {curve 0.26 0.281 0.298 0.306 0.342 0.365 0.39 0.381 0.392 0.416 0.413 0.43 0.448 0.446 0.433 0.425 0.419 0.394 0.362 0.328 0.305 0.298 0.286 0.247 0.26 0.219 0.199 0.168 0.178 0.14 0.11 0.084 0.104 0.158 0.18 0.225 0.26 0.235 0.26 0.28 0.298 0.327 0.372 0.395 0.417 0.43 0.435 0.455 0.488 0.479 0.521 0.522 0.515 0.49 0.436 0.383 0.331 0.295 0.282 0.258 0.219 0.208 0.179 0.168 0.141 0.129 0.106 0.094 0.095 0.112 0.127 0.165 0.199 0.235 0.226 0.258 0.28 0.298 0.316 0.361 0.399 0.427 0.446 0.461 0.482 0.52 0.521 0.553 0.563 0.573 0.524 0.454 0.389 0.33 0.295 0.266 0.247 0.214 0.195 0.168 0.178 0.142 0.14 0.128 0.129 0.126 0.131 0.144 0.167 0.199 0.226 0.238 0.266 0.289 0.31 0.329 0.351 0.395 0.428 0.453 0.475 0.494 0.533 0.542 0.568 0.584 0.576 0.53 0.451 0.385 0.331 0.299 0.266 0.245 0.22 0.206 0.184 0.174 0.167 0.166 0.166 0.173 0.172 0.165 0.172 0.187 0.208 0.238 0.258 0.28 0.3 0.321 0.343 0.362 0.391 0.427 0.458 0.482 0.503 0.546 0.554 0.573 0.582 0.546 0.499 0.431 0.375 0.33 0.304 0.275 0.254 0.234 0.225 0.212 0.209 0.206 0.203 0.21 0.215 0.212 0.204 0.208 0.214 0.231 0.258 0.277 0.294 0.31 0.328 0.348 0.372 0.397 0.427 0.462 0.487 0.51 0.544 0.558 0.559 0.556 0.503 0.444 0.402 0.355 0.329 0.309 0.289 0.275 0.26 0.254 0.245 0.245 0.241 0.238 0.249 0.249 0.245 0.241 0.242 0.246 0.258 0.277 0.295 0.305 0.315 0.327 0.339 0.359 0.39 0.421 0.461 0.491 0.515 0.54 0.546 0.522 0.478 0.429 0.393 0.368 0.345 0.325 0.313 0.303 0.295 0.286 0.284 0.279 0.277 0.274 0.277 0.277 0.28 0.276 0.273 0.274 0.279 0.285 0.295 0.311 0.314 0.316 0.32 0.323 0.331 0.346 0.367 0.397 0.468 0.513 0.494 0.425 0.388 0.372 0.348 0.336 0.331 0.326 0.32 0.316 0.314 0.312 0.309 0.321 0.32 0.319 0.305 0.317 0.316 0.316 0.315 0.316 0.317 0.319 0.321 0.311}
alpha {}}
name ColorLookup1
label "Pointers Samples Yxy\nSource: https://www.rit.edu/cos/colorscience/rc_useful_data.php"
xpos -1470
ypos 98
}
BlackOutside {
name BlackOutside2
xpos -1470
ypos 179
}
Crop {
box {0 0 {input.width} {height+1}}
reformat true
name Crop1
xpos -1470
ypos 227
}
Dot {
name Dot12
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -1436
ypos 282
}
Constant {
inputs 0
format "256 256 0 0 256 256 1 square_256"
name Constant1
xpos -1250
ypos -58
postage_stamp false
}
Reformat {
type "to box"
box_width 8000.731495
box_height 2
box_fixed true
name ReformatBox2
xpos -1250
ypos -10
addUserKnob {20 User}
addUserKnob {7 bits l "" +STARTLINE R 0 16}
bits 12
}
Ramp {
p0 {0 0}
p1 {{input.width} 0}
color {{input.width}}
name Ramp2
xpos -1250
ypos 38
}
ColorLookup {
lut {master {}
red {curve R 0.4830000103 x50 0.5045000315 0.5260000229 0.5475000143 0.5690000057 0.5904999971 0.6119999886 0.63349998 0.6549999714 0.6805312037 0.7087500095 0.7315937281 0.7409999967 0.7409999967 0.7409999967 0.7409999967 0.7409999967 0.75459373 0.7845000029 0.8144062757 0.8280000091 0.8280000091 0.8280000091 0.8280000091 0.8280000091 0.8009687662 0.74150002 0.6820312142 0.6549999714 0.6684374809 0.6980000138 0.7275624871 0.7409999967 0.7315937281 0.7087500095 0.6805312037 0.6549999714 0.629468739 0.6012499928 0.5784062743 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5555624962 0.5260000229 0.4964375198 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4964375198 0.5260000229 0.5555624962 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5690000057 0.5653046966 0.5555624962 0.5417890549 0.5260000229 0.5102109313 0.4964375198 0.4866953194 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4695625007 0.4400000274 0.4104375243 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.3970000148 0.4104375243 0.4400000274 0.4695625007 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103 0.4830000103}
green {curve R 0.6589999795 x50 0.6536288857 0.6479062438 0.6414804459 0.6340000033 0.6249843836 0.6147499681 0.6041406393 0.5939999819 0.5844687223 0.575124979 0.5659687519 0.5569999814 0.5484530926 0.5402500033 0.5319218636 0.5230000019 0.5131718516 0.5027499795 0.4922031164 0.4819999933 0.4722187519 0.4626249969 0.4532187581 0.4440000057 0.4351093769 0.4265000224 0.4178906381 0.4090000093 0.3997343779 0.3902499974 0.380640626 0.3709999919 0.3614374995 0.3518749774 0.3421249986 0.3319999874 0.321398437 0.3104375005 0.2992577851 0.2879999876 0.2764999866 0.2647500038 0.2531249821 0.2419999987 0.2312265635 0.2206875086 0.2108047009 0.202000007 0.1947187632 0.1886250079 0.1829687506 0.1770000011 0.1693515629 0.1608124971 0.1538671851 0.1509999931 0.1509999931 0.1509999931 0.1509999931 0.1509999931 0.1527187377 0.1564999968 0.1602812558 0.1620000005 0.1620000005 0.1620000005 0.1620000005 0.1620000005 0.1612187475 0.1595000029 0.1577812582 0.1570000052 0.1573124975 0.1579999924 0.1586875021 0.1589999944 0.1575781256 0.1543750018 0.1509843767 0.1490000039 0.1485625058 0.1484999955 0.1484375 0.1480000019 0.1467812508 0.1449999958 0.1432187557 0.1420000046 0.1415625066 0.1414999962 0.1414375007 0.1410000026 0.1397656202 0.1378750056 0.1357968748 0.1340000033 0.1323750019 0.1307500005 0.1295000017 0.1289999932 0.130031243 0.1324999928 0.1354687512 0.1379999965 0.1402187496 0.1424999982 0.1442812532 0.1449999958 0.1449999958 0.1449999958 0.1449999958 0.1449999958 0.1464921832 0.1503124982 0.1554765552 0.1609999985 0.1673984379 0.1749375015 0.1822578013 0.1879999936 0.1906718612 0.1913749874 0.1926406175 0.1969999969 0.2064140588 0.2199375033 0.2357421964 0.2520000041 0.2688750029 0.2871249914 0.3058125079 0.324000001 0.3417187631 0.359375 0.3765937686 0.3930000067 0.4082968831 0.4227499962 0.4368281364 0.451000005 0.4659531415 0.4812500179 0.4956718981 0.5080000162 0.5169296861 0.5234375 0.5297265649 0.5379999876 0.5491171479 0.5618124604 0.5751015544 0.5879999995 0.6009531021 0.6142500043 0.6266719103 0.6370000243 0.6447148919 0.6505312324 0.655082047 0.6589999795}
blue {curve R 0.3160000145 x50 0.3244570494 0.3330312669 0.3418398499 0.351000011 0.3607422113 0.3709374964 0.3811640739 0.3910000026 0.4003046751 0.4093124866 0.4181640446 0.4269999862 0.4359609187 0.4449374974 0.453695327 0.4620000124 0.4697890878 0.4771875143 0.4842422009 0.4909999967 0.4971874952 0.5028749704 0.5086249709 0.5149999857 0.5227031112 0.53125 0.5394218564 0.5460000038 0.5502656102 0.5530000329 0.5552343726 0.5580000281 0.561632812 0.5655625463 0.5694609284 0.5730000138 0.5765469074 0.5801249743 0.5828906298 0.5839999914 0.5838750005 0.5830000043 0.5806249976 0.5759999752 0.5682968497 0.5576249957 0.5446406007 0.5299999714 0.5128515363 0.4931874871 0.4729296863 0.4539999962 0.4368359447 0.420437485 0.4045703113 0.3889999986 0.3731718659 0.3573749959 0.3426406384 0.3300000131 0.3193906248 0.310375005 0.3034218848 0.298999995 0.2972500026 0.2969999909 0.2967499793 0.2949999869 0.2899531126 0.2821249962 0.2734843791 0.2660000026 0.2602812648 0.2552500069 0.2503437698 0.2450000048 0.2380000055 0.2300000042 0.2232500017 0.2199999988 0.2195625007 0.2194999903 0.2194374949 0.2189999968 0.2183593661 0.2176249921 0.2163281292 0.2140000015 0.2101874948 0.205249995 0.1999374926 0.1949999928 0.1904453039 0.185937494 0.1817109436 0.1780000031 0.1754062474 0.1736250073 0.1715312451 0.1679999977 0.1620937437 0.1546249986 0.147093758 0.1410000026 0.1372031271 0.1347499937 0.1324218661 0.1289999932 0.1237656176 0.1174999923 0.1112343743 0.1059999987 0.1021796837 0.09918750077 0.09660156071 0.09399999678 0.09089062363 0.0876249969 0.0850468725 0.08399999887 0.08524999768 0.0882499963 0.09187500179 0.09499999881 0.09706249833 0.09875000268 0.1008125022 0.1040000021 0.1084140688 0.1136875004 0.1198671907 0.1270000041 0.1355390698 0.145312503 0.1554296911 0.1650000066 0.1739453226 0.1826875061 0.1910859346 0.199000001 0.2061250061 0.2126249969 0.2190624923 0.2259999961 0.2338827997 0.2423124909 0.2505859137 0.2579999864 0.2642968595 0.26987499 0.2750156224 0.2800000012 0.2847812474 0.2892500162 0.2935937643 0.2980000079 0.3025000095 0.3070000112 0.3115000129 0.3160000145}
alpha {}}
name ColorLookup3
label "Pointer's Gamut Boundary Yxy\ninterpolated: incr 50 - 0 to 8000"
xpos -1250
ypos 98
}
BlackOutside {
name BlackOutside3
xpos -1250
ypos 179
}
Crop {
box {0 -1 {input.width} {height}}
reformat true
name Crop8
xpos -1250
ypos 228
}
Merge2 {
inputs 2
name Merge5
xpos -1250
ypos 278
disable {{!parent.enable_pointer_samples}}
}
BlackOutside {
name BlackOutside4
xpos -1250
ypos 325
}
Crop {
box {0 -1 {input.width} {height}}
reformat true
name Crop2
xpos -1250
ypos 367
}
Dot {
name Dot4
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -1216
ypos 402
}
Dot {
name Dot15
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -776
ypos 402
}
set Nc64ffb0 [stack 0]
Constant {
inputs 0
format "256 256 0 0 256 256 1 square_256"
name Constant5
xpos -700
ypos -122
postage_stamp false
}
Reformat {
type "to box"
box_width {{pow(2,bits)}}
box_height 2
box_fixed true
name ReformatBox1
label "\[value bits]bit"
xpos -700
ypos -80
addUserKnob {20 User}
addUserKnob {7 bits l "" +STARTLINE R 0 16}
bits 14
}
Ramp {
p0 {0 0}
p1 {{input.width} 0}
name Ramp3
xpos -700
ypos -26
}
set Nc7da7d0 [stack 0]
Dot {
name Dot9
note_font "Bitstream Vera Sans"
xpos -556
ypos -22
}
Expression {
expr0 r*-0.00132+0.00142
expr1 r*-0.565+0.737
expr2 r*-0.26+0.2637
expr3 1
name Expression1
label "line of purples"
xpos -590
ypos 16
}
Transform {
translate {13300 0}
scale {0.1 1}
filter impulse
name Transform1
note_font "Bitstream Vera Sans"
xpos -590
ypos 70
}
BlackOutside {
name BlackOutside1
xpos -590
ypos 118
}
Dot {
name Dot10
note_font "Bitstream Vera Sans"
xpos -556
ypos 194
}
push $Nc7da7d0
Expression {
temp_name0 start
temp_expr0 360
temp_name1 end
temp_expr1 830
channel0 {rgba.red rgba.green rgba.blue none}
expr0 r*(end-start)+start
channel1 none
channel2 none
expr3 1
name Expression2
label "360nm to 830nm"
xpos -700
ypos 16
}
ColorLookup {
lut {master {}
red {curve x360 0.0001298999996 C 0.0001458470069 0.0001638021058 0.0001840037003 0.0002066901943 0.0002321000065 0.0002607280039 0.0002930749906 0.0003293880145 0.0003699139925 0.0004148999869 0.0004641586856 0.000518986024 0.000581854023 0.0006552346749 0.0007416000008 0.0008450296009 0.0009645267855 0.001094948966 0.001231153961 0.001368000056 0.00150204997 0.001642327989 0.001802381943 0.001995756989 0.002236000029 0.00253538508 0.002892602934 0.003300829092 0.003753236029 0.004242999945 0.004762389231 0.005330048036 0.005978711881 0.00674111722 0.007650000043 0.008751372807 0.01002888009 0.01142170001 0.01286900975 0.01431000046 0.01570443064 0.01714744046 0.01878122054 0.02074800991 0.02318999916 0.02620735951 0.02978247963 0.03388091922 0.03846824169 0.04351000115 0.04899559915 0.05502260104 0.06171879917 0.06921199709 0.07762999833 0.08695811033 0.09717672318 0.1084062979 0.1207671985 0.1343799978 0.149358198 0.1653957069 0.1819830984 0.1986110061 0.2147700042 0.2301868051 0.2448796928 0.2587772906 0.271807909 0.2838999927 0.2949438095 0.3048965037 0.3137873113 0.3216454089 0.3285000026 0.3343513012 0.339210093 0.3431212902 0.3461295962 0.3482800126 0.3495998979 0.3501473963 0.3500129879 0.3492870033 0.3480600119 0.3463732898 0.3442623913 0.3418087959 0.3390941024 0.3361999989 0.3331977129 0.3300411105 0.3266356885 0.3228867948 0.3186999857 0.314025104 0.3088839948 0.3032903969 0.2972579002 0.2908000052 0.2839700878 0.2767213881 0.268917799 0.2604227066 0.2511000037 0.2408474982 0.2298512012 0.2184071988 0.2068115026 0.1953600049 0.1842135936 0.173327297 0.1626881063 0.152283296 0.1421000063 0.1321786046 0.1225695983 0.1132752001 0.1042978987 0.09564000368 0.08729954809 0.07930804044 0.07171776146 0.06458099186 0.05795000866 0.05186210945 0.04628152028 0.04115087911 0.0364128314 0.0320100002 0.0279172007 0.02414439991 0.02068700083 0.01754040085 0.01470000017 0.01216179039 0.009919960052 0.007967240177 0.006296345964 0.004900000058 0.003777173115 0.002945319982 0.002424879931 0.00223629293 0.002400000114 0.002925520064 0.003836560063 0.005174839869 0.006982080173 0.009300000034 0.01214949042 0.01553587988 0.01947752014 0.02399276942 0.02910000086 0.0348148495 0.04112016037 0.04798503965 0.05537860841 0.0632700026 0.07163500786 0.08046223968 0.08973996341 0.09945645183 0.1096000001 0.120167397 0.1311144978 0.1423678994 0.1538542062 0.1655000001 0.1772571057 0.1891400069 0.2011694014 0.2133657932 0.225749895 0.238320902 0.2510668039 0.2639921904 0.2771016955 0.2903999984 0.3038912117 0.3175725937 0.3314383924 0.3454827964 0.3596999943 0.3740839064 0.3886395991 0.4033783972 0.4183115065 0.4334498942 0.4487952888 0.4643360078 0.4800640047 0.4959712923 0.5120500922 0.5282958746 0.5446916223 0.5612093806 0.5778214931 0.5945000052 0.6112208962 0.6279758215 0.6447601914 0.6615697145 0.6783999801 0.6952391863 0.7120586038 0.7288283706 0.7455188036 0.7620999813 0.7785431743 0.7948256135 0.8109263778 0.8268247843 0.8424999714 0.857932508 0.8730816245 0.887894392 0.90231812 0.9162999988 0.9297994971 0.9427983761 0.9552776217 0.9672179222 0.9786000252 0.9893856049 0.9995487928 1.009089231 1.018006444 1.026299953 1.033982754 1.040985942 1.047188044 1.05246675 1.056699991 1.059794426 1.061799169 1.062806845 1.062909603 1.06219995 1.060735226 1.058443546 1.055224419 1.050976753 1.045600057 1.03903687 1.031360745 1.022666216 1.013047695 1.002599955 0.9913675189 0.9793313742 0.96649158 0.952847898 0.9383999705 0.9231939912 0.9072440267 0.890501976 0.8729199767 0.8544499278 0.8350840211 0.8149459958 0.7941859961 0.7729539871 0.7513999939 0.729583621 0.7075887918 0.6856021881 0.6638103724 0.6424000263 0.6215149164 0.6011137962 0.5811051726 0.5613976717 0.5418999791 0.5225995183 0.5035464168 0.4847435951 0.4661939144 0.4478999972 0.4298613071 0.4120979905 0.3946439922 0.3775332868 0.360799998 0.3444562852 0.3285168111 0.3130191863 0.2980011106 0.2834999859 0.2695448101 0.256118387 0.2431896031 0.2307271957 0.2187000066 0.2070970982 0.1959231943 0.1851707995 0.1748322994 0.1649000049 0.1553667039 0.1462299973 0.1374900043 0.1291466951 0.1212000027 0.1136396974 0.1064649969 0.09969043732 0.09333060682 0.08739999682 0.0819009617 0.07680428028 0.07207711786 0.06768663973 0.06360000372 0.05980684981 0.05628215894 0.05297103897 0.04981860891 0.04676999897 0.04378404841 0.04087536037 0.03807263821 0.03540461138 0.03290000185 0.03056419082 0.02838055976 0.02634483948 0.02445274964 0.02270000055 0.02108429 0.01959987916 0.01823732071 0.01698716916 0.01583999954 0.01479064021 0.01383132022 0.01294867974 0.01212919969 0.01135915983 0.01062935032 0.009938846342 0.009288421832 0.008678854443 0.008110916242 0.007582387887 0.007088745944 0.006627312861 0.006195407826 0.005790345836 0.005409826059 0.005052582826 0.004717512056 0.004403506871 0.004109457135 0.003833913011 0.003575748065 0.003334342036 0.003109074896 0.002899327083 0.002704347949 0.00252301991 0.0023541681 0.002196616028 0.002049189992 0.001910959953 0.001781438012 0.001660109963 0.00154645904 0.001439971034 0.001340041985 0.001246275031 0.001158470986 0.001076429966 0.0009999492904 0.0009287358262 0.0008624332258 0.0008007502765 0.0007433959981 0.0006900785957 0.0006405155873 0.0005945020821 0.0005518646212 0.0005124289892 0.0004760212905 0.0004424536019 0.0004115116899 0.0003829814086 0.0003566491068 0.0003323011042 0.0003097585868 0.0002888870949 0.0002695393923 0.0002515682136 0.0002348261041 0.0002191709937 0.0002045258007 0.0001908404956 0.0001780653984 0.0001661504939 0.0001550236047 0.0001446218957 0.000134909802 0.000125852006 0.0001174130011 0.0001095515036 0.0001022244978 9.539444727e-05 8.902390255e-05 8.307526878e-05 7.751269004e-05 7.231304335e-05 6.745778228e-05 6.292844046e-05 5.870651876e-05 5.477028026e-05 5.109918129e-05 4.767654173e-05 4.448567051e-05 4.150993846e-05 3.873324022e-05 3.61420316e-05 3.372352148e-05 3.146487143e-05 2.935325938e-05 2.73757305e-05 2.552433034e-05 2.379376019e-05 2.217869951e-05 2.067382957e-05 1.927226003e-05 1.796640026e-05 1.674990926e-05 1.56164806e-05 1.455976962e-05 1.357387009e-05 1.265436003e-05 1.17972304e-05 1.09984403e-05 1.025397978e-05 9.55964606e-06 8.912043995e-06 8.308357792e-06 7.745768926e-06 7.221456144e-06 6.732474958e-06 6.276422937e-06 5.851304195e-06 5.455117844e-06 5.085867997e-06 4.741466e-06 4.42023611e-06 4.12078316e-06 3.841716079e-06 3.581651981e-06 3.339127034e-06 3.112948889e-06 2.902120968e-06 2.705645102e-06 2.522524937e-06 2.351725925e-06 2.192414968e-06 2.043901986e-06 1.905497015e-06 1.776508952e-06 1.656214977e-06 1.544021984e-06 1.439439984e-06 1.341977054e-06 S 1.251141043e-06}
green {curve x360 3.916999958e-06 C 4.393581094e-06 4.929604074e-06 5.532136129e-06 6.20824494e-06 6.965000011e-06 7.813218872e-06 8.767336112e-06 9.839844097e-06 1.104323019e-05 1.238999994e-05 1.388640976e-05 1.555727977e-05 1.74429606e-05 1.958374924e-05 2.201999996e-05 2.483965e-05 2.804126052e-05 3.153103899e-05 3.521520921e-05 3.899999865e-05 4.282639929e-05 4.691459981e-05 5.158959902e-05 5.717639942e-05 6.399999984e-05 7.234421355e-05 8.221223834e-05 9.350816254e-05 0.0001061361036 0.000119999997 0.0001349840022 0.0001514920004 0.0001702080044 0.0001918159978 0.0002169999934 0.0002469067113 0.0002812400053 0.0003185200039 0.0003572666901 0.0003959999885 0.0004337147111 0.0004730240034 0.0005178760039 0.0005722186761 0.0006399999838 0.0007245599991 0.0008254999993 0.0009411600186 0.001069879974 0.001210000017 0.001362091047 0.001530752052 0.001720368047 0.001935323002 0.002180000069 0.002454800066 0.002764000092 0.003117799992 0.003526400076 0.00400000019 0.004546239972 0.005159319844 0.005829279777 0.006546160206 0.007300000172 0.008086507209 0.008908719756 0.009767680429 0.01066443045 0.01159999985 0.01257316954 0.01358272042 0.01462967973 0.01571509056 0.01683999971 0.0180073604 0.01921447925 0.02045392059 0.02171823941 0.02300000004 0.0242946092 0.02561024018 0.02695856988 0.02835124917 0.02979999967 0.03131083027 0.03288368136 0.03452112153 0.03622571006 0.03799999878 0.03984666988 0.04176799953 0.04376599938 0.0458426699 0.04800000042 0.05024367943 0.05257304013 0.05498056114 0.0574587211 0.05999999866 0.06260196865 0.06527751684 0.06804207712 0.0709110871 0.07389999926 0.07701600343 0.08026640117 0.08366680145 0.08723279834 0.09098000079 0.09491755068 0.09904584289 0.1033674031 0.1078846008 0.1125999987 0.1175319999 0.1226743981 0.1279927939 0.1334528029 0.1390199959 0.1446764022 0.1504693031 0.1564618945 0.1627177 0.1693000048 0.1762430966 0.1835581064 0.1912734956 0.1994179934 0.2080200016 0.2171199024 0.2267345041 0.2368571013 0.2474811971 0.2585999966 0.2701849043 0.2822938859 0.2950505018 0.3085780144 0.3230000138 0.3384020925 0.3546858132 0.3716985881 0.3892875016 0.4072999954 0.4256299138 0.4443095922 0.4633944035 0.4829395115 0.503000021 0.5235692859 0.5445119739 0.565689981 0.5869653225 0.6082000136 0.6293455958 0.6503068209 0.6708751917 0.6908423901 0.7099999785 0.7281851768 0.7454636097 0.7619693875 0.7778367996 0.793200016 0.8081104159 0.8224961758 0.8363068104 0.8494915962 0.8619999886 0.8738108277 0.8849623799 0.8954936266 0.9054431915 0.9148501158 0.9237347841 0.9320924282 0.9399225712 0.9472252131 0.9539999962 0.9602560997 0.9660074115 0.9712606072 0.9760224819 0.9803000093 0.9840924144 0.9874181747 0.9903128147 0.9928116202 0.9949501157 0.9967107773 0.9980983138 0.99911201 0.9997481704 1 0.9998567104 0.9993045926 0.9983255267 0.9968987107 0.9950000048 0.9926005006 0.9897425771 0.9864444137 0.9827240705 0.9786000252 0.9740837216 0.969171226 0.9638568163 0.9581348896 0.9520000219 0.9454504251 0.9384992123 0.9311627746 0.9234576225 0.9154000282 0.9070063829 0.8982772231 0.8892048001 0.8797816038 0.8700000048 0.8598613143 0.8493919969 0.838621974 0.8275812864 0.8162999749 0.8047947288 0.7930819988 0.7811920047 0.7691547275 0.7570000291 0.744754076 0.7324224114 0.7200036049 0.7074965239 0.6948999763 0.6822192073 0.6694716215 0.6566743851 0.6438447833 0.6309999824 0.6181554794 0.605314374 0.5924755931 0.5796378851 0.5667999983 0.5539610982 0.5411372185 0.528352797 0.5156322718 0.503000021 0.4904688001 0.4780304134 0.4656775892 0.4534032047 0.4411999881 0.4290800095 0.4170359969 0.4050320089 0.3930320144 0.3810000122 0.3689183891 0.3568271995 0.3447768092 0.3328176141 0.3210000098 0.3093380928 0.2978504002 0.2865935862 0.2756245136 0.2649999857 0.254763186 0.2448896021 0.2353343964 0.2260528058 0.2169999927 0.2081616074 0.1995487958 0.1911551952 0.1829743981 0.174999997 0.1672234982 0.1596464068 0.1522776037 0.1451258957 0.1381999999 0.1315003037 0.1250247955 0.1187791973 0.1127690971 0.1070000008 0.1014761999 0.09618864208 0.09112296253 0.08626484871 0.08160000294 0.07712063938 0.07282552123 0.06871008128 0.06476975977 0.06100000069 0.05739621073 0.05395504087 0.05067376047 0.04754965007 0.04458000138 0.04175871983 0.03908495978 0.03656383976 0.03420047835 0.03200000152 0.02996261045 0.0280766394 0.0263293609 0.02470804937 0.0231999997 0.02180076949 0.02050112002 0.01928107999 0.01812068932 0.01700000092 0.01590378955 0.01483718026 0.01381068025 0.01283477992 0.01192000043 0.01106830966 0.01027339045 0.00953331124 0.00884615723 0.008209999651 0.007623780984 0.007085423917 0.006591476034 0.006138484925 0.005723000038 0.005343059078 0.004995795898 0.004676403943 0.004380074795 0.004102000035 0.003838452976 0.00358909904 0.003354219021 0.003134093015 0.002928999951 0.002738138894 0.002559876069 0.002393244067 0.00223727501 0.002091000089 0.001953586936 0.001824580017 0.001703580027 0.001590186963 0.001484000008 0.00138449599 0.001291268039 0.001204092056 0.001122744055 0.001047000056 0.0009765896248 0.0009111088002 0.0008501331904 0.0007932384033 0.0007399999886 0.0006900827284 0.0006433100207 0.0005994960084 0.000558454718 0.0005200000014 0.0004839136091 0.0004500527866 0.0004183452111 0.0003887184139 0.0003611000138 0.0003353834909 0.0003114404099 0.0002891655895 0.0002684539068 0.0002492000058 0.0002313019068 0.0002146855986 0.0001992884063 0.0001850474946 0.0001718999993 0.0001597780938 0.0001486044057 0.0001383016061 0.000128792497 0.000119999997 0.0001118595028 0.0001043223965 9.73356e-05 9.084586782e-05 8.479999815e-05 7.914666639e-05 7.385799836e-05 6.89160006e-05 6.43026724e-05 5.999999848e-05 5.598186908e-05 5.222560139e-05 4.871840065e-05 4.544746844e-05 4.239999907e-05 3.956104047e-05 3.691512029e-05 3.44486798e-05 3.214816024e-05 2.999999924e-05 2.799124923e-05 2.611355922e-05 2.436024079e-05 2.272460915e-05 2.119999954e-05 1.977855027e-05 1.845285078e-05 1.721686931e-05 1.606459045e-05 1.498999973e-05 1.398728e-05 1.305155001e-05 1.217818044e-05 1.136254014e-05 1.059999977e-05 9.885877262e-06 9.217304068e-06 8.592362065e-06 8.009133126e-06 7.465700037e-06 6.959567145e-06 6.487995051e-06 6.048699106e-06 5.639396022e-06 5.257799785e-06 4.901770808e-06 4.569720204e-06 4.260194146e-06 3.971738806e-06 3.702899903e-06 3.4521629e-06 3.218302027e-06 3.000300012e-06 2.797138904e-06 2.60780007e-06 2.431220082e-06 2.266531055e-06 2.113012897e-06 1.969943014e-06 1.836599949e-06 1.71222996e-06 1.596228003e-06 1.488089993e-06 1.387314001e-06 1.293400032e-06 1.205820013e-06 1.124142955e-06 1.04800904e-06 9.770579936e-07 9.109299981e-07 8.492510233e-07 7.917209928e-07 7.380900229e-07 6.881099921e-07 6.415299936e-07 5.980900255e-07 5.575749924e-07 5.198079975e-07 4.846119737e-07 S 4.518099956e-07}
blue {curve x360 0.0006061000167 C 0.0006808792241 0.0007651455817 0.0008600124274 0.0009665928083 0.001086000004 0.001220586011 0.001372728962 0.001543579041 0.001734285965 0.001946000033 0.002177777002 0.002435809001 0.002731953049 0.00307806395 0.003486000001 0.00397522701 0.004540880211 0.005158320069 0.00580290705 0.00645000115 0.007083216216 0.007745488081 0.008501151577 0.009414544329 0.01054999046 0.01196580008 0.01365587022 0.01558804978 0.01773015037 0.02005000971 0.0225113593 0.02520287968 0.02827971987 0.03189703822 0.03621000051 0.04143771157 0.04750372097 0.05411988124 0.06099803001 0.06785000861 0.0744863227 0.08136156201 0.08915363997 0.09854047745 0.1102000028 0.1246133 0.1417016983 0.1613035053 0.1832568049 0.2073999941 0.2336920947 0.2626113892 0.2947745919 0.3307985067 0.3713000119 0.4162091017 0.4654642045 0.5196948051 0.5795302987 0.6456000209 0.7184838057 0.7967132926 0.8778458834 0.9594389796 1.039050102 1.115367293 1.188497066 1.258123279 1.323929548 1.385599971 1.442635179 1.494803548 1.542190313 1.58488071 1.622959971 1.656404853 1.685295939 1.709874511 1.730382085 1.747059941 1.760044575 1.76962328 1.776263714 1.780433416 1.782600045 1.782968163 1.781699777 1.77919817 1.775867105 1.772109985 1.768258929 1.76403904 1.758943796 1.752466321 1.744099975 1.733559489 1.720858097 1.705936909 1.688737154 1.669199944 1.647528648 1.623412728 1.596022248 1.564527988 1.528100014 1.486111403 1.439521551 1.389879942 1.338736176 1.287639976 1.237422347 1.187824249 1.138761044 1.090147972 1.041900039 0.994197607 0.9473472834 0.9014530778 0.8566192985 0.8129500747 0.7705172896 0.7294448018 0.6899135709 0.6521049142 0.6161999702 0.5823286176 0.5504161716 0.5203375816 0.4919672906 0.4651800096 0.4399245977 0.4161835909 0.3938821852 0.3729459047 0.3533000052 0.3348577917 0.3175520897 0.3013375103 0.2861686051 0.2720000148 0.2588171065 0.2464838028 0.234771803 0.2234532982 0.2123000026 0.2011691928 0.1901195943 0.1792254001 0.1685608029 0.1581999958 0.1481382996 0.1383758038 0.1289941967 0.1200750992 0.1116999984 0.1039047986 0.09666748345 0.08998271823 0.08384530991 0.07824999094 0.07320898771 0.06867816299 0.06456784159 0.06078834832 0.05725001171 0.05390435085 0.05074663833 0.04775276035 0.04489858821 0.04216000065 0.03950728104 0.03693563864 0.03445836157 0.03208871931 0.02983999997 0.02771181054 0.02569443919 0.02378715947 0.02198925056 0.02030000091 0.01871805079 0.01724036038 0.01586364023 0.01458461024 0.01339999959 0.01230723038 0.01130187977 0.01037792023 0.009529305622 0.008749999106 0.008035199717 0.007381599862 0.006785400212 0.006242800038 0.00574999908 0.005303599872 0.004899799824 0.004534199834 0.004202399869 0.003899999894 0.003623200115 0.003370600054 0.003141399939 0.002934799995 0.002749999054 0.002585199894 0.002438599942 0.00230939989 0.002196799964 0.002099999925 0.002017732942 0.00194820005 0.001889799954 0.001840932993 0.001799999969 0.001766267 0.001737799961 0.001711199991 0.001683066948 0.001650001039 0.001610132982 0.001564400038 0.0015136 0.001458532992 0.00139999995 0.001336666988 0.001270000008 0.001204999979 0.001146667055 0.001099999994 0.001068799989 0.001049399958 0.001035599969 0.001021199976 0.001000000047 0.0009686399717 0.0009299200028 0.0008868799778 0.0008425600245 0.0007999999798 0.0007609599852 0.0007236800157 0.0006859200075 0.0006454400136 0.0006000000285 0.0005478666862 0.000491600018 0.0004353999975 0.0003834666859 0.0003399999987 0.0003072533 0.0002831600141 0.0002654400014 0.0002518132969 0.0002399999939 0.0002295466984 0.000220639995 0.0002119599958 0.0002021866967 0.0001900000061 0.0001742133027 0.0001556399948 0.0001359599992 0.0001168532981 9.999999747e-05 8.613333193e-05 7.460000052e-05 6.500000018e-05 5.693333151e-05 4.999999146e-05 4.415999865e-05 3.948000085e-05 3.57200006e-05 3.264000043e-05 2.999999924e-05 2.765333011e-05 2.556000072e-05 2.36399992e-05 2.181333002e-05 1.999999949e-05 1.813333074e-05 1.619999966e-05 1.41999999e-05 1.213332962e-05 9.999999747e-06 7.733333405e-06 5.400000191e-06 3.200000037e-06 1.333332989e-06 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S 0}
alpha {}}
name ColorLookup2
label "CIE 1931 2 Degree Standard Observer\n360nm to 830nm"
xpos -700
ypos 74
}
Colorspace {
colorspace_in CIE-XYZ
primary_in "Adobe (1998)"
colorspace_out CIE-Yxy
name Colorspace5
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -700
ypos 136
}
Merge2 {
inputs 2
name Merge4
xpos -700
ypos 190
}
Expression {
expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r"
expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g"
expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b"
name ToeExpr1
label "increase brightness of line of purples"
xpos -700
ypos 227
dope_sheet true
addUserKnob {20 User}
addUserKnob {18 lift}
lift {0.08 0 0}
addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
lift_panelDropped true
addUserKnob {18 sole R 0 0.1}
sole {0 0 0}
addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN}
}
Crop {
box {0 0 16384 1}
name Crop10
xpos -700
ypos 279
}
Crop {
box {0 0 16384 3}
reformat true
name Crop9
xpos -700
ypos 305
disable {{!parent.enable_pointers_gamut}}
}
Fill {
color {0 0 0 1}
name Disable_SpectralLocus
xpos -700
ypos 337
disable {{parent.draw_spectral_locus}}
}
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -666
ypos 378
}
set Ne92ae80 [stack 0]
Dot {
name Dot5
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -556
ypos 378
}
Merge2 {
inputs 2
name Merge3
xpos -590
ypos 398
disable {{!parent.enable_pointers_gamut}}
}
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression5
label "CIE Yxy to CIELuv"
xpos -590
ypos 493
disable {{!parent.diagram}}
}
Dot {
name Dot11
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -556
ypos 609
}
set Nf273580 [stack 0]
push $Nc64ffb0
Colorspace {
colorspace_in CIE-Yxy
primary_in "Adobe (1998)"
colorspace_out CIE-XYZ
name Colorspace4
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -810
ypos 440
}
ColorMatrix {
matrix {
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
}
invert true
name ColorMatrix3
label "XYZ to working"
xpos -810
ypos 478
disable {{!map_overlays_to_input_gamut}}
}
Fill {
color {1 0.43 1 1}
unpremult rgba.alpha
name ColorizePointers
xpos -810
ypos 575
disable {{!parent.colorize_pointers_gamut x1 1}}
}
push $Ne92ae80
Colorspace {
colorspace_in CIE-Yxy
primary_in "Adobe (1998)"
colorspace_out CIE-XYZ
name Colorspace6
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -700
ypos 429
}
ColorMatrix {
matrix {
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
}
invert true
name ColorMatrix1
label "XYZ to working"
xpos -700
ypos 477
disable {{!map_overlays_to_input_gamut}}
}
Fill {
color {0 0.5 1 1}
unpremult rgba.alpha
name Fill2
xpos -700
ypos 528
disable {{!parent.colorize_spectral_locus}}
}
Merge2 {
inputs 2
name Merge6
xpos -700
ypos 581
disable {{!parent.enable_pointers_gamut}}
}
set Nc279f50 [stack 0]
Group {
inputs 2
name PlotPoints1
xpos -590
ypos 650
disable {{!(parent.draw_spectral_locus||parent.enable_pointers_gamut)}}
addUserKnob {20 User}
addUserKnob {41 detail l "point detail" T PositionToPoints1.detail}
addUserKnob {41 pointSize l "point size" T PositionToPoints1.pointSize}
}
Input {
inputs 0
name Inputpos
xpos 510
ypos 588
number 1
}
Input {
inputs 0
name Inputcol
xpos 400
ypos 590
}
ShuffleCopy {
inputs 2
alpha alpha2
black green
white blue
red2 red
green2 alpha
out2 pos
name ShuffleCopy1
label "\[value in] | \[value in2] -> \[value out]"
xpos 400
ypos 665
}
PositionToPoints2 {
display textured
render_mode textured
P_channel pos
detail 1
pointSize 1.5
name PositionToPoints1
xpos 400
ypos 742
}
Output {
name Output
xpos 404
ypos 880
}
end_group
Group {
inputs 0
name GamutGrid
xpos -2020
ypos 398
addUserKnob {20 GamutGrid}
addUserKnob {3 style}
style {{max(0,parent.style-1)}}
addUserKnob {3 distribution -STARTLINE}
distribution {{parent.distribution}}
addUserKnob {7 density R 10 150}
density {{parent.density}}
addUserKnob {26 ""}
addUserKnob {41 matrix T ColorMatrix.matrix}
addUserKnob {12 wxy}
wxy {{parent.GamutToXYZ_OVERLAY.wxy} {parent.GamutToXYZ_OVERLAY.wxy}}
}
ColorWheel {
inputs 0
format "512 512 0 0 512 512 1 square_512"
centerSaturation 1
fillFormat false
area {-170 -158 682 670}
name ColorWheel4
xpos -260
ypos 3
postage_stamp false
}
Crop {
box {0 0 512 512}
crop false
name Crop2
xpos -260
ypos 29
}
Reformat {
type scale
scale {{max(parent.density/50,0.25)}}
resize distort
filter impulse
pbb true
name Reformat3
note_font "Bitstream Vera Sans"
xpos -260
ypos 110
}
set Ncaa33c0 [stack 0]
push $Ncaa33c0
ContactSheet {
inputs 2
width {{width*columns}}
height {{height/pixel_aspect*rows}}
rows 1
columns 2
roworder TopBottom
name ContactSheet2
xpos -260
ypos 169
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -226
ypos 246
}
ColorWheel {
inputs 0
format "512 512 0 0 512 512 1 square_512"
fillFormat false
area {40 40 472 472}
name ColorWheel1
xpos -40
ypos -664
postage_stamp false
}
Reformat {
type scale
scale {{max(parent.density/50,0.25)}}
resize distort
filter impulse
pbb true
name Reformat1
note_font "Bitstream Vera Sans"
xpos -40
ypos -628
}
Crop {
box {0 0 {width} {height}}
reformat true
name Crop1
note_font "Bitstream Vera Sans"
xpos -40
ypos -602
}
Unpremult {
name Unpremult1
xpos -40
ypos -526
}
ColorMatrix {
matrix {
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
}
name ColorMatrix
label "RGB to XYZ"
xpos -40
ypos -415
}
Colorspace {
colorspace_in CIE-XYZ
colorspace_out CIE-Yxy
name Colorspace1
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -40
ypos -341
}
set Nb7434e0 [stack 0]
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -556
ypos -331
}
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression5
label "CIE Yxy to CIELuv"
xpos -590
ypos -304
disable {{!parent.distribution}}
}
Expression {
expr0 r
expr1 "(-(degrees(atan2(g-white.x, b-white.y))-180)+270)%360/360"
expr2 "hypot(g-white.x, b-white.y)"
expr3 a
name Expression3
xpos -590
ypos -261
cached true
addUserKnob {20 User}
addUserKnob {12 white}
white {{"parent.distribution ? 4*parent.wxy.x / ( -2 * parent.wxy.x + 12 * parent.wxy.y + 3) : parent.wxy"} {"parent.distribution ? 9*parent.wxy.y / ( -2*parent.wxy.x + 12*parent.wxy.y + 3) : parent.wxy"}}
}
set Nb76ed10 [stack 0]
Posterize {
channels rgb
Colors {{rint(parent.density/3*2)}}
name Posterize1
note_font "Bitstream Vera Sans"
xpos -590
ypos -194
}
set Nb6803a0 [stack 0]
push $Nb76ed10
Dot {
name Dot15
note_font "Bitstream Vera Sans"
xpos -446
ypos -257
}
Copy {
inputs 2
from0 rgba.blue
to0 rgba.blue
name Copy1
xpos -480
ypos -154
}
push $Nb6803a0
push $Nb76ed10
Dot {
name Dot16
note_font "Bitstream Vera Sans"
xpos -666
ypos -257
}
Copy {
inputs 2
from0 rgba.green
to0 rgba.green
name Copy2
xpos -700
ypos -153
}
ContactSheet {
inputs 2
width {{width*columns}}
height {{height/pixel_aspect*rows}}
rows 1
columns 2
center true
roworder TopBottom
name ContactSheet3
xpos -590
ypos -102
}
Expression {
expr0 r
expr1 cos(radians(g*360))*b+white.x
expr2 sin(radians(g*360))*b+white.y
expr3 a
name Expression19
xpos -590
ypos -57
cached true
addUserKnob {20 User}
addUserKnob {12 white}
white {{parent.Expression3.white} {parent.Expression3.white}}
}
Expression {
expr0 r
expr1 "9*g / ( 6*g - 16*b + 12)"
expr2 "4*b/ ( 6*g - 16*b + 12)"
name Expression2
label "CIELuv to CIE Yxy"
xpos -590
ypos -16
disable {{!parent.distribution}}
}
Colorspace {
colorspace_in CIE-Yxy
colorspace_out CIE-XYZ
name Colorspace2
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -590
ypos 31
}
ColorMatrix {
matrix {
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
}
invert true
name ColorMatrix1
label "XYZ to RGB"
xpos -590
ypos 81
}
Clamp {
channels rgba
maximum_enable false
name ClampMin2
xpos -590
ypos 119
}
Clamp {
channels {-rgba.red -rgba.green -rgba.blue rgba.alpha}
minimum 1
MinClampTo_enable true
MaxClampTo_enable true
name Clamp1
note_font "Bitstream Vera Sans"
xpos -590
ypos 156
}
Premult {
name Premult1
xpos -590
ypos 194
}
Merge2 {
inputs 2
operation under
bbox B
name Merge2
xpos -590
ypos 242
}
Shuffle {
alpha white
name Shuffle1
label "\[value in] -> \[value out]"
xpos -590
ypos 314
}
Dot {
name Dot3
label " GRID"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -556
ypos 378
}
push $Ncaa33c0
push $Nb7434e0
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression4
label "CIE Yxy to CIELuv"
xpos -40
ypos -304
disable {{!parent.distribution}}
}
Expression {
expr0 r
expr1 rint(g*Colors)/Colors
expr2 rint(b*Colors)/Colors
expr3 a
name Expression1
label rint
note_font "Bitstream Vera Sans"
xpos -40
ypos -233
addUserKnob {20 User}
addUserKnob {7 Colors R 1 256}
Colors {{parent.density}}
}
Expression {
expr0 r
expr1 "9*g / ( 6*g - 16*b + 12)"
expr2 "4*b/ ( 6*g - 16*b + 12)"
name Expression6
label "CIELuv to CIE Yxy"
xpos -40
ypos -184
disable {{!parent.distribution}}
}
Colorspace {
colorspace_in CIE-Yxy
colorspace_out CIE-XYZ
name Colorspace3
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -40
ypos -133
}
ColorMatrix {
matrix {
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
}
invert true
name ColorMatrix3
label "XYZ to RGB"
xpos -40
ypos -57
}
Clamp {
channels {-rgba.red -rgba.green -rgba.blue rgba.alpha}
minimum 1
MinClampTo_enable true
MaxClampTo_enable true
name Clamp4
note_font "Bitstream Vera Sans"
xpos -40
ypos -13
}
Premult {
name Premult2
xpos -40
ypos 34
}
Merge2 {
inputs 2
operation under
bbox B
name Merge1
xpos -40
ypos 110
}
Clamp {
channels rgba
maximum_enable false
name ClampMin1
xpos -40
ypos 175
}
Dot {
name Dot4
label " DOTS"
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 378
}
Switch {
inputs 2
which {{parent.style}}
name Switch1
xpos -257
ypos 483
}
ColorMatrix {
matrix {
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
{{parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix} {parent.parent.GamutToXYZ_OVERLAY.ColorMatrix.matrix}}
}
name ColorMatrix2
label "RGB to XYZ"
xpos -257
ypos 560
}
Output {
name Output
xpos -257
ypos 740
}
ColorWheel {
inputs 0
format "256 256 0 0 256 256 1 square_256"
area {40 40 472 472}
name ColorWheel2
xpos -37
ypos -705
postage_stamp false
}
end_group
ColorWheel {
inputs 0
format "256 256 0 0 256 256 1 square_256"
centerSaturation 1
name ColorWheel4
xpos -1910
ypos 254
postage_stamp false
}
Unpremult {
name Unpremult1
xpos -1910
ypos 302
}
Group {
name GamutToXYZ_OVERLAY
label "\[value gamut] to XYZ\n"
xpos -1910
ypos 344
addUserKnob {20 GamutToXYZ_tab l GamutToXYZ}
addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" Rec709 Rec2020 P3D60 P3D65 P3DCI ArriAlexaWideGamut "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB GoProProtune CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut ""}}
gamut ACEScg
addUserKnob {6 invert +STARTLINE}
addUserKnob {26 ""}
addUserKnob {26 chromaticity_coordinates_label l " " T "<b>Chromaticity Coordinates</b>"}
addUserKnob {41 rxy T ColorMatrix.rxy}
addUserKnob {41 gxy T ColorMatrix.gxy}
addUserKnob {41 bxy T ColorMatrix.bxy}
addUserKnob {41 wxy T ColorMatrix.wxy}
addUserKnob {41 matrix T ColorMatrix.matrix}
}
Input {
inputs 0
name Input
xpos -40
ypos -10
}
ColorMatrix {
matrix {
{{curve(which) 1 0.9525524378 0.6624541879 0.7053968906 0.4123907983 0.6369580626 0.5049495697 0.4865709841 0.4451698363 0.6380076408 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481}}
{{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295}}
{{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375}}
}
invert {{parent.invert}}
name ColorMatrix
label "RGB to XYZ"
xpos -40
ypos 29
addUserKnob {20 Gamut}
addUserKnob {3 which}
which {{parent.gamut}}
addUserKnob {12 rxy +DISABLED}
rxy {{curve(which) 0 0.7347 0.713 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73} {curve(which) 0 0.2653 0.293 0.3177 0.33 0.292 0.32 0.32 0.32 0.313 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28}}
addUserKnob {12 gxy +DISABLED}
gxy {{curve(which) 0 0 0.165 0.18 0.3 0.17 0.265 0.265 0.265 0.221 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165} {curve(which) 0 1 0.83 0.9 0.6 0.797 0.69 0.69 0.69 0.848 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84}}
addUserKnob {12 bxy +DISABLED}
bxy {{curve(which) 0 0.0001 0.128 0.065 0.15 0.131 0.15 0.15 0.15 0.0861 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1} {curve(which) 0 -0.077 0.044 -0.0805 0.06 0.046 0.06 0.06 0.06 -0.102 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03}}
addUserKnob {12 wxy +DISABLED}
wxy {{curve(which) 0.33333 0.32168 0.32168 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127} {curve(which) 0.33333 0.33767 0.33767 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329}}
}
Output {
name Output
xpos -40
ypos 89
}
end_group
Switch {
inputs 2
which {{parent.style}}
name Switch_Outline
xpos -1910
ypos 398
}
Dot {
name Dot14
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -1876
ypos 450
}
set Nba80040 [stack 0]
Colorspace {
colorspace_in CIE-XYZ
primary_in "Adobe (1998)"
colorspace_out CIE-Yxy
name Colorspace3
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -1800
ypos 440
}
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression3
label "CIE Yxy to CIELuv"
xpos -1800
ypos 512
disable {{!parent.diagram}}
}
Dot {
name Dot6
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -1766
ypos 570
}
set N10860ef0 [stack 0]
push $Nba80040
ColorMatrix {
matrix {
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
}
invert true
name ColorMatrix2
label "XYZ to working"
xpos -1910
ypos 471
disable {{!map_overlays_to_input_gamut}}
}
Fill {
color {1 0.5 0.1 1}
name Fill1
xpos -1910
ypos 521
disable {{!parent.colorize_gamut_boundary}}
}
set N108735c0 [stack 0]
Group {
inputs 2
name PlotPoints
xpos -1800
ypos 614
addUserKnob {20 User}
addUserKnob {41 detail l "point detail" T PositionToPoints1.detail}
addUserKnob {41 pointSize l "point size" T PositionToPoints1.pointSize}
}
Input {
inputs 0
name Inputpos
xpos 510
ypos 588
number 1
}
Input {
inputs 0
name Inputcol
xpos 400
ypos 590
}
ShuffleCopy {
inputs 2
alpha alpha2
black green
white blue
red2 red
green2 alpha
out2 pos
name ShuffleCopy1
label "\[value in] | \[value in2] -> \[value out]"
xpos 400
ypos 665
}
PositionToPoints2 {
display textured
render_mode textured
P_channel pos
detail 1
pointSize 1.5
name PositionToPoints1
xpos 400
ypos 742
}
Output {
name Output
xpos 404
ypos 880
}
end_group
Dot {
name Dot18
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -1766
ypos 1266
}
Scene {
inputs 3
name Scene1
xpos -580
ypos 1242
}
push $Nf015710
push $Nf01a7f0
BlinkScript {
inputs 2
recompileCount 2
ProgramGroup 1
KernelDescription "2 \"plot_cie_xy\" iterate pixelWise fc48d30b761944f4622c7e7cade9c548789bc618dc38d8ca992161542531f81f 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 3 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 3 \"padding\" 1 1 \"left_margin\" 1 1 \"process_input\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA=="
kernelSource "kernel plot_cie_xy : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessRandom, eEdgeClamped> col;\n Image<eRead, eAccessRandom, eEdgeClamped> Yxy;\n Image<eWrite, eAccessRandom> dst;\n\nparam:\n float padding;\n float left_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};"
useGPUIfAvailable false
vectorize false
rebuild ""
plot_cie_xy_padding {{"parent.diagram? parent.right_margin * 0.72 : parent.right_margin"}}
plot_cie_xy_left_margin {{parent.left_margin}}
plot_cie_xy_process_input {{parent.plot_input}}
format "2048 2048 0 0 2048 2048 1 square_2K"
specifiedFormat true
rebuild_finalise ""
name Plot_Input
xpos 180
ypos 608
}
set Nd686020 [stack 0]
Fill {
color 0
name Fill4
selected true
xpos -464
ypos 1353
hide_input true
}
ScanlineRender {
inputs 3
conservative_shader_sampling false
transparency false
ztest_enabled false
filter impulse
projection_mode orthographic
samples 0
shutteroffset centred
motion_vectors_type off
name ScanlineRender1
xpos -590
ypos 1382
}
Dot {
name Dot17
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -556
ypos 1482
}
push $N10860ef0
push $N108735c0
BlinkScript {
inputs 2
recompileCount 2
ProgramGroup 1
KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 3a854edac5c1c8e3a3d2801ec73798509e6e91ec7294287590bd8357a67964d1 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 5 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"antialias\" Bool 1 AA== \"process_input\" Bool 1 AA== \"add_samples\" Float 1 AAAAAA== 5 \"padding\" 1 1 \"left_margin\" 1 1 \"antialias\" 1 1 \"process_input\" 1 1 \"add_samples\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA=="
kernelSource "kernel plot_cie_xy : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessRandom, eEdgeClamped> col;\n Image<eRead, eAccessRandom, eEdgeClamped> Yxy;\n Image<eWrite, eAccessRandom> dst;\n\nparam:\n float padding;\n float left_margin;\n bool antialias;\n bool process_input;\n float add_samples;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = float(dst.bounds.height()/padding);\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void write(float posx, float posy, float4 color, float weight=1.0f) \{\n // Check if we are inside the bounds of the output image\n if ( dst.bounds.inside(posx, posy)) \{\n float4 dst_sample = (float4)dst(posx, posy);\n float4 out = dst_sample*add_samples + (color * weight);\n out.w = min(1.0f, out.w);\n dst(posx, posy) = out;\n \}\n \}\n \n void bilin(float2 tpos, float4 color) \{\n float2 p;\n p.x = tpos.x - floor(tpos.x);\n p.y = tpos.y - floor(tpos.y);\n float weights\[] = \{(1.0f-p.x)*(1.0f-p.y), p.x*(1.0f-p.y), (1.0f-p.x)*p.y, p.x*p.y\};\n int2 _position = int2(floor(tpos.x)-0,floor(tpos.y)-0);\n write(_position.x, _position.y, color, weights\[0]);\n write(_position.x+1, _position.y, color, weights\[1]);\n write(_position.x, _position.y+1, color, weights\[2]);\n write(_position.x+1, _position.y+1, color, weights\[3]);\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if (antialias) \{\n bilin(out_pos, bilinear(col, i, j));\n \} else \{\n // Remember there is a bug: no keyword arguments inside process()\n // write(out_pos.x, out_pos.y, col(i, j), 1.0f);\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{\n dst(out_pos.x, out_pos.y) = col(i, j);\n \}\n \}\n \}\n \}\n \}\n \}\n\};"
useGPUIfAvailable false
vectorize false
rebuild ""
plot_cie_xy_padding {{parent.Plot_Input.plot_cie_xy_padding}}
plot_cie_xy_left_margin {{parent.Plot_Input.plot_cie_xy_left_margin}}
plot_cie_xy_antialias true
plot_cie_xy_process_input true
plot_cie_xy_add_samples 0.5
format {{{parent.Plot_Input.format}}}
specifiedFormat true
rebuild_finalise ""
name Plot_Gamut
xpos -1910
ypos 604
}
Multiply {
channels rgba
value {{parent.opacity_gamut_overlay}}
name GamutOverlayOpacity
xpos -1910
ypos 686
disable true
}
FrameHold {
first_frame 1
name FrameHold2
xpos -1910
ypos 764
cached true
}
Dot {
name Dot8
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -1876
ypos 834
}
push $Nf273580
push $Nc279f50
BlinkScript {
inputs 2
recompileCount 5
ProgramGroup 1
KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 65751dc3c93d46b59ba922fda7175ada4e69018b6dd8c29c890f1487b4a4c5d0 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 9 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"draw_axes\" Bool 1 AA== \"grid_hatch_length\" Float 1 AAAAAA== \"axis_color\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"axis_hatch_color\" Float 4 AAAAAAAAAAAAAAAAAAAAAA== \"antialias\" Bool 1 AA== \"process_input\" Bool 1 AA== \"add_samples\" Float 1 AAAAAA== 9 \"padding\" 1 1 \"left_margin\" 1 1 \"draw_axes\" 1 1 \"grid_hatch_length\" 1 1 \"axis_color\" 4 1 \"axis_hatch_color\" 4 1 \"antialias\" 1 1 \"process_input\" 1 1 \"add_samples\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA=="
kernelSource "kernel plot_cie_xy : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessRandom, eEdgeClamped> col;\n Image<eRead, eAccessRandom, eEdgeClamped> Yxy;\n Image<eWrite, eAccessRandom> dst;\n\nparam:\n float padding;\n float left_margin;\n bool draw_axes;\n float grid_hatch_length;\n float4 axis_color;\n float4 axis_hatch_color;\n bool antialias;\n bool process_input;\n float add_samples;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = float(dst.bounds.height()/padding);\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void write(float posx, float posy, float4 color, float weight=1.0f) \{\n // Check if we are inside the bounds of the output image\n if ( dst.bounds.inside(posx, posy)) \{\n float4 dst_sample = (float4)dst(posx, posy);\n float4 out = dst_sample*add_samples + (color * weight);\n out.w = min(1.0f, out.w);\n dst(posx, posy) = out;\n \}\n \}\n \n void bilin(float2 tpos, float4 color) \{\n float2 p;\n p.x = tpos.x - floor(tpos.x);\n p.y = tpos.y - floor(tpos.y);\n float weights\[] = \{(1.0f-p.x)*(1.0f-p.y), p.x*(1.0f-p.y), (1.0f-p.x)*p.y, p.x*p.y\};\n int2 _position = int2(floor(tpos.x)-0,floor(tpos.y)-0);\n write(_position.x, _position.y, color, weights\[0]);\n write(_position.x+1, _position.y, color, weights\[1]);\n write(_position.x, _position.y+1, color, weights\[2]);\n write(_position.x+1, _position.y+1, color, weights\[3]);\n \}\n\n\n void draw_grid() \{\n // grid width in pixels. expresses a 0 to 1 range in CIE xy\n float grid_width = 1.0f * outsize + offset;\n // hatch interval gives us cross-hatching at specified interval in pixels. defaults to 0.1\n int hatch_int = int(round(grid_width - offset) * 0.1f);\n float hatchw = outsize * grid_hatch_length; // The width of the cross-hatch: 1% of grid width\n\n int hatch_ct = 0;\n for ( int i = offset; i < grid_width; i++ ) \{\n // draw vertical axis\n bilin( float2(offset, i), axis_color);\n // draw horizontal axis\n bilin( float2(i, offset), axis_color);\n // draw cross hatches at every \n if (hatch_ct == hatch_int) \{\n hatch_ct = 0;\n for ( int j = -outsize*0.01; j < hatchw; j++) \{\n bilin(float2(round(offset + j), i), axis_hatch_color);\n bilin(float2(i+ (offset-offset), round(offset + j)), axis_hatch_color);\n \}\n \}\n hatch_ct++;\n \}\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if (antialias) \{\n bilin(out_pos, bilinear(col, i, j));\n \} else \{\n // Remember there is a bug: no keyword arguments inside process()\n // write(out_pos.x, out_pos.y, col(i, j), 1.0f);\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{\n dst(out_pos.x, out_pos.y) = col(i, j);\n \}\n \}\n \}\n \}\n \}\n // Draw axes if enabled\n if (draw_axes) \{\n draw_grid();\n \}\n \}\n\};"
useGPUIfAvailable false
vectorize false
rebuild ""
plot_cie_xy_padding {{parent.Plot_Input.plot_cie_xy_padding}}
plot_cie_xy_left_margin {{parent.Plot_Input.plot_cie_xy_left_margin}}
plot_cie_xy_draw_axes {{parent.draw_axis}}
plot_cie_xy_grid_hatch_length {{"parent.full_width_grid ? 1 : 0.01"}}
plot_cie_xy_axis_color 0.1
plot_cie_xy_axis_hatch_color 0.02
plot_cie_xy_antialias true
plot_cie_xy_process_input {{"parent.draw_spectral_locus || parent.enable_pointers_gamut"}}
plot_cie_xy_add_samples 0.7
format {{{parent.Plot_Input.format}}}
specifiedFormat true
rebuild_finalise ""
name Plot_SpectralLocus_and_Axis
xpos -700
ypos 643
}
FrameHold {
first_frame 1
name FrameHold1
xpos -700
ypos 699
cached true
}
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -666
ypos 762
}
push $Nfcb9c40
Constant {
inputs 0
channels rgb
color {0 0 0 1}
format "256 256 0 0 256 256 1 square_256"
name Constant2
xpos 66
ypos 182
postage_stamp false
}
Switch {
inputs 2
which {{"\[exists parent.input0]"}}
name Switch1
xpos 66
ypos 240
}
Fill {
output rgb
color {1 0.00634765625 0.00634765625 0.00634765625}
name SampleColor
xpos -40
ypos 240
}
Fill {
output alpha
name Fill3
xpos -40
ypos 266
}
Reformat {
type "to box"
box_width 1
box_height {{box_width}}
box_fixed true
name ReformatBox
xpos -40
ypos 326
}
set Ncc5b2e0 [stack 0]
ColorMatrix {
matrix {
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
{{parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix} {parent.GamutToXYZ3.ColorMatrix.matrix}}
}
name ColorMatrix4
label "working to XYZ"
xpos -150
ypos 320
}
Colorspace {
colorspace_in CIE-XYZ
primary_in "Adobe (1998)"
colorspace_out CIE-Yxy
name Colorspace1
label "\[value colorspace_in] -> \[value colorspace_out]"
xpos -150
ypos 368
}
Expression {
expr0 r
expr1 "4*g / ( -2*g + 12*b + 3)"
expr2 "9*b / ( -2*g + 12*b + 3)"
name Expression6
label "CIE Yxy to CIELuv"
xpos -150
ypos 416
disable {{!parent.diagram}}
}
push $Ncc5b2e0
BlinkScript {
inputs 2
recompileCount 2
ProgramGroup 1
KernelDescription "2 \"plot_cie_xy\" iterate pixelWise fc48d30b761944f4622c7e7cade9c548789bc618dc38d8ca992161542531f81f 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 3 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 3 \"padding\" 1 1 \"left_margin\" 1 1 \"process_input\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA=="
kernelSource "kernel plot_cie_xy : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessRandom, eEdgeClamped> col;\n Image<eRead, eAccessRandom, eEdgeClamped> Yxy;\n Image<eWrite, eAccessRandom> dst;\n\nparam:\n float padding;\n float left_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};"
useGPUIfAvailable false
vectorize false
rebuild ""
plot_cie_xy_padding {{parent.Plot_Input.plot_cie_xy_padding}}
plot_cie_xy_left_margin {{parent.Plot_Input.plot_cie_xy_left_margin}}
plot_cie_xy_process_input true
format "2048 2048 0 0 2048 2048 1 square_2K"
specifiedFormat true
rebuild_finalise ""
name Plot_SampledColor
xpos -40
ypos 416
}
set Ndef9a40 [stack 0]
Dilate {
channels rgba
size 10
name Dilate2
label "\[value size]"
xpos -150
ypos 464
}
Laplacian {
channels rgba
size {{parent.Dilate1.size*2}}
name Laplacian1
xpos -150
ypos 502
}
Grade {
channels rgba
white 0
add {2 0 0 0}
white_clamp true
unpremult rgba.alpha
name Grade1
xpos -150
ypos 539
}
CCorrect {
contrast 2.6
name CCorrect2
xpos -150
ypos 590
}
push $Ndef9a40
Dilate {
channels rgba
size 4
name Dilate1
label "\[value size]"
xpos -40
ypos 487
}
Merge2 {
inputs 2
bbox B
name Merge8
xpos -40
ypos 590
}
Dot {
name Dot20
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -6
ypos 690
}
push $Nd686020
Merge2 {
inputs 2
bbox B
name Merge7
xpos 180
ypos 686
disable {{!parent.enable_sample_color}}
}
Merge2 {
inputs 2
name Merge1
xpos 180
ypos 758
disable {{"!parent.draw_spectral_locus && !parent.draw_axis"}}
}
Merge2 {
inputs 2
bbox B
name Merge2
xpos 180
ypos 830
disable {{!parent.draw_gamut_overlay}}
}
Blur {
channels rgba
size 1.5
name Blur1
label "poor man's antialiasing"
xpos 180
ypos 1136
}
Switch {
inputs 2
which {{parent.plot_type}}
name Switch_PlotType
xpos 180
ypos 1478
}
Output {
name Output
xpos 180
ypos 1641
}
end_group
Dot {
name Dot51
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 3734
ypos 420
}
set Nc6fcd30 [stack 0]
Dot {
name Dot70
xpos 3404
ypos -486
hide_input true
}
NoOp {
name GamutPlot
note_font_size 20
xpos 3370
ypos -447
}
push $Ncf0e990
Dot {
name Dot72
xpos 3294
ypos -486
hide_input true
addUserKnob {20 User}
addUserKnob {1 input_node}
input_node Dot58
}
NoOp {
name Mapped
note_font_size 20
xpos 3260
ypos -446
}
push $Nf447430
Dot {
name Dot74
xpos 3184
ypos -486
hide_input true
}
NoOp {
name UnMapped
note_font_size 20
xpos 3150
ypos -445
}
push $Nc6fcd30
Viewer {
inputs 10
frame 1
frame_range 52-52
center_fstop 0
colour_sample_bbox {0.41796875 -0.12109375 0.4189453125 -0.1201171875}
samplepoints {{-0.08984375 0.1059570312}
}
viewerProcess "Rec.709 (ACES)"
translate {-0.02300000004 0.04399999976}
rotate -90
name Viewer3
note_font "Bitstream Vera Sans"
xpos 3040
ypos -58
addUserKnob {20 Lock}
addUserKnob {6 lock_all_buffers l "lock all buffers" -STARTLINE}
addUserKnob {6 lock_buffer_1 l "lock buffer 1" +STARTLINE}
addUserKnob {6 lock_buffer_2 l "lock buffer 2" +STARTLINE}
addUserKnob {6 lock_buffer_3 l "lock buffer 3" +STARTLINE}
addUserKnob {6 lock_buffer_4 l "lock buffer 4" +STARTLINE}
addUserKnob {6 lock_buffer_5 l "lock buffer 5" +STARTLINE}
addUserKnob {6 lock_buffer_6 l "lock buffer 6" +STARTLINE}
addUserKnob {6 lock_buffer_7 l "lock buffer 7" +STARTLINE}
addUserKnob {6 lock_buffer_8 l "lock buffer 8" +STARTLINE}
addUserKnob {6 lock_buffer_9 l "lock buffer 9" +STARTLINE}
addUserKnob {6 lock_buffer_0 l "lock buffer 0" +STARTLINE}
}
StickyNote {
inputs 0
name StickyNote1
tile_color 0x40454aff
label "<left><pre><b>Saturation Adjust Method</b>\n 1). Click Calc Max Saturation \n 2). With core threshold at 0, \n increase desat to get all values in gamut\n 3). Bring core threshold / \"confidence gamut\" up as far as you can.\n You need to allow room for the transition between core and compressed area\n\n\n\nThis is a different method which is quite a bit simpler. It relies on a \nsaturation adjustment weighted by the brightest pixel in each color channel,\nmasked by a core gamut. The core gamut is calculated by a saturation key,\nwith a threshold. \n\nThe saturation key must include values above 1 as these values represent \nout of gamut pixel values. The farther they are out of gamut the higher above\n1 they will be. The Calc max saturation button finds the maximum value and sets\nthe max_sat knob to this.\n\nI feel like there might be potential with this approach, especially if there could be \nsome type of weightingin the desat operation so that one could shift the colors\nthat are brought into gamut towards cyan, yellow, magenta.\n\n\n"
note_font_size 18
xpos 4085
ypos -104
}
push $Nf44c2b0
Group {
name GamutCompress3
label "Saturation Adjust"
xpos 3480
ypos -57
addUserKnob {20 User}
addUserKnob {22 calc_max_sat l "Calculate Max Saturation" t "Calculate the max saturation of the input image. That is, how far out of gamut is the most offending pixel." T "n = nuke.thisNode()\nnuke.root().begin()\nn.begin()\nct = nuke.toNode('CT')\nnuke.execute(ct, nuke.frame(), nuke.frame())\nmaxpx = ct\['maxlumapixvalue'].getValue()\nmaxpx = max(1, maxpx\[0])\nn\['max_sat'].setValue(maxpx)" +STARTLINE}
addUserKnob {7 max_sat l "max sat" t "max saturation\ni.e. how far out of gamut is the worst pixel" R 1 1.5}
max_sat 1
addUserKnob {7 desat}
addUserKnob {7 core_threshold l "core threshold" t "core or \"confidence\" gamut threshold.\n\n1 is a clip. 0 is no confidence gamut."}
addUserKnob {20 weights_grp l weights n 1}
addUserKnob {7 r_weight}
r_weight 1
addUserKnob {7 g_weight}
g_weight 1
addUserKnob {7 b_weight}
b_weight 1
addUserKnob {20 endGroup n -1}
}
BackdropNode {
inputs 0
name BackdropNode1
tile_color 0x4c4c4c01
label "<left><font size=6><b>Other Failed Ideas</b></font>\n"
note_font_size 24
note_font_color 0x1e1e1eff
xpos 1639
ypos 214.8
bdwidth 1445
bdheight 880
}
Input {
inputs 0
name Input
xpos 730
ypos 313
}
Dot {
name Dot68
xpos 764
ypos 402
}
set Nc0c8dd0 [stack 0]
Dot {
name Dot70
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 984
ypos 402
}
set N96a6f40 [stack 0]
Expression {
temp_name0 lum
temp_expr0 "max(max(r,g,b), 1e-2)"
temp_name1 minpx
temp_expr1 min(r,g,b)
temp_name2 sat
temp_expr2 (lum-minpx)/lum
expr0 "lum == 0 ? 1 : sat"
expr1 "lum == 0 ? 1 : sat"
expr2 "lum == 0 ? 1 : sat"
expr3 "lum == 0 ? 1 : sat"
name Saturation3
xpos 950
ypos 439
}
set Nea84990 [stack 0]
Group {
name BlurPercent
tile_color 0xc4814dff
xpos 1081
ypos 439
addUserKnob {20 percentBlur l "Percent Blur"}
addUserKnob {41 channels T _BLUR_.channels}
addUserKnob {14 percent R 0 100}
percent 3
addUserKnob {41 filter T _BLUR_.filter}
addUserKnob {41 quality l "" -STARTLINE T _BLUR_.quality}
addUserKnob {41 crop l "crop to format" -STARTLINE T _BLUR_.crop}
addUserKnob {41 mix T _BLUR_.mix}
}
Input {
inputs 0
name Input
xpos 440
ypos -225
}
Blur {
channels rgba
size {{width/3*(percent/100) x1001 6.826666667e+10} {width/3*(percent/100)*(1/pixel_aspect)}}
crop false
name _BLUR_
xpos 440
ypos -153
addUserKnob {20 User}
addUserKnob {7 xpercent l xPercent R 0 100}
xpercent 25.5
addUserKnob {7 ypercent l yPercent R 0 100}
ypercent {{xpercent}}
}
Output {
name Output1
xpos 440
ypos -81
}
end_group
CurveTool {
operation "Max Luma Pixel"
ROI {0 0 {input.width} {input.height}}
autocropdata {0 0 {input.width} {input.height}}
maxlumapixdata {{curve x1 0 35 85 1431 2047 0 799 1807 3423 1777 5355 x18 3534 x24 2134 x34 1837 x35 1807 1813 x40 1843 x41 1843 1846 1681 1023 186} {curve x1 655 1028 320 849 0 1151 478 532 1795 1807 2565 x18 2750 x24 664 x34 526 x35 595 526 x40 526 x41 526 526 43 1023 303}}
maxlumapixvalue {{curve x1 1.434563994 1.409547567 4476280.5 1.143328071 1.060532331 1.110794544 1.057173729 0.9376456141 1.192092896 1.28297925 1.259831667 x18 1.060389042 x24 0.957698822 x34 1.041455269 x35 1.077255249 1.1039536 x40 1.091059685 x41 1.08315599 1.06418395 0.9758271575 1.161405921 1.209861159} {curve x1 1.434563994 1.409547567 4476280.5 1.143328071 1.060532331 1.110794544 1.057173729 0.9376456141 1.192092896 1.28297925 1.259831667 x18 1.060389042 x24 0.957698822 x34 1.041455269 x35 1.077255249 1.1039536 x40 1.091059685 x41 1.08315599 1.06418395 0.9758271575 1.161405921 1.209861159} {curve x1 1.434563994 1.409547567 4476280.5 1.143328071 1.060532331 1.110794544 1.057173729 0.9376456141 1.192092896 1.28297925 1.259831667 x18 1.060389042 x24 0.957698822 x34 1.041455269 x35 1.077255249 1.1039536 x40 1.091059685 x41 1.08315599 1.06418395 0.9758271575 1.161405921 1.209861159}}
minlumapixdata {{curve x1 1829 1025 685 1851 1131 99 2449 4069 1330 1807 3909 x18 2082 x24 1258 x34 91 x35 91 1501 x40 91 x41 91 1258 1258 519 522} {curve x1 609 1023 145 347 27 20 721 346 46 57 2553 x18 1969 x24 46 x34 46 x35 46 1030 x40 46 x41 46 46 46 395 395}}
minlumapixvalue {{curve x1 8.137147233e-05 0.2395722866 0.0030396441 0.151778549 0.5825394988 0.004060547333 0.07391577214 0.02645999752 0.6499049067 0.6279835701 0.5038699508 x18 0.3795001209 x24 0.5246937275 x34 0.5586354733 x35 0.6015037298 0.5296355486 x40 0.5670491457 x41 0.5622775555 0.5552452803 0.5526627302 0.04067442194 0.04791568592} {curve x1 8.137147233e-05 0.2395722866 0.0030396441 0.151778549 0.5825394988 0.004060547333 0.07391577214 0.02645999752 0.6499049067 0.6279835701 0.5038699508 x18 0.3795001209 x24 0.5246937275 x34 0.5586354733 x35 0.6015037298 0.5296355486 x40 0.5670491457 x41 0.5622775555 0.5552452803 0.5526627302 0.04067442194 0.04791568592} {curve x1 8.137147233e-05 0.2395722866 0.0030396441 0.151778549 0.5825394988 0.004060547333 0.07391577214 0.02645999752 0.6499049067 0.6279835701 0.5038699508 x18 0.3795001209 x24 0.5246937275 x34 0.5586354733 x35 0.6015037298 0.5296355486 x40 0.5670491457 x41 0.5622775555 0.5552452803 0.5526627302 0.04067442194 0.04791568592}}
name CT
xpos 1081
ypos 481
}
push $Nea84990
Expression {
expr3 a/pivot
name Remap
xpos 950
ypos 488
addUserKnob {20 User}
addUserKnob {7 pivot R 1 2}
pivot {{parent.max_sat}}
}
Expression {
expr3 1-a
name Complement2
xpos 950
ypos 535
}
Expression {
expr0 r
expr1 g
expr2 b
expr3 "1/(wp-bp) * a - 1/(wp-bp) * bp"
name WhitepointBlackpoint4
xpos 950
ypos 583
addUserKnob {20 User}
addUserKnob {7 wp R 0 2}
wp {{1-parent.core_threshold}}
addUserKnob {7 bp}
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 984
ypos 664
}
set Nbb21c50 [stack 0]
push $Nc0c8dd0
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 764
ypos 614
}
set Nbe3c5e0 [stack 0]
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 max(r,g,b)
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation
label max
xpos 840
ypos 741
dope_sheet true
addUserKnob {20 User}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
push $Nbb21c50
push $Nbe3c5e0
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 r*weight.x+g*weight.y+b*weight.z
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation2
label coefficients
xpos 950
ypos 741
dope_sheet true
addUserKnob {20 User}
addUserKnob {13 weight}
weight {0.1 0.7 0.2}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
push $N96a6f40
Dot {
name Dot61
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 1892
ypos 402
}
set Nbe3db00 [stack 0]
BlinkScript {
recompileCount 11
ProgramGroup 1
KernelDescription "2 \"ACES_rrt_sweeteners\" iterate pixelWise f8a9ce320f06d7e170d1557518df73160acb98a9d89a22f03ddd75c61a3f7f73 2 \"src\" Read Point \"dst\" Write Point 5 \"RRT_RED_SCALE\" Float 1 AAAAAA== \"RRT_RED_PIVOT\" Float 1 AAAAAA== \"RRT_RED_HUE\" Float 1 AAAAAA== \"RRT_RED_WIDTH\" Float 1 AAAAAA== \"invert\" Bool 1 AA== 5 \"RRT_RED_SCALE\" 1 1 \"RRT_RED_PIVOT\" 1 1 \"RRT_RED_HUE\" 1 1 \"RRT_RED_WIDTH\" 1 1 \"invert\" 1 1 0"
kernelSource "kernel ACES_rrt_sweeteners : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessPoint, eEdgeClamped> src;\n Image<eWrite> dst;\n\nparam:\n // User controllable parameters\n float RRT_RED_SCALE;\n float RRT_RED_PIVOT;\n float RRT_RED_HUE;\n float RRT_RED_WIDTH;\n bool invert;\n\n // // Red modifier constants\n // RRT_RED_SCALE = 0.82;\n // RRT_RED_PIVOT = 0.03;\n // RRT_RED_HUE = 0.;\n // RRT_RED_WIDTH = 135.;\n\n\n float min_f3(float3 a) \{\n return min( a.x, min( a.y, a.z));\n \}\n\n float max_f3(float3 a) \{\n return max( a.x, max( a.y, a.z));\n \}\n\n float rgb_2_saturation( float3 rgb ) \{\n return ( max( max_f3(rgb), 1e-10) - max( min_f3(rgb), 1e-10)) / max( max_f3(rgb), 1e-2);\n \}\n\n float sigmoid_shaper( float x) \{\n float t = max( float(1. - fabs( float(x / 2.))), float(0));\n float y = 1. + sign(float(x)) * (1. - t * t);\n return y / 2.;\n \}\n\n float rgb_2_yc( float3 rgb, float ycRadiusWeight) \{\n // keyword arguments don't work with blink.. ycRadiusWeight default if not specified was 1.75\n float r = rgb.x; \n float g = rgb.y; \n float b = rgb.z;\n float chroma = sqrt(float(b*(b-g)+g*(g-r)+r*(r-b)));\n return ( b + g + r + ycRadiusWeight * chroma) / 3.;\n \}\n\n // ------- Glow module functions\n float glow_fwd( float ycIn, float glowGainIn, float glowMid) \{\n float glowGainOut;\n if (ycIn <= 2./3. * glowMid) \{\n glowGainOut = glowGainIn;\n \} else if ( ycIn >= 2. * glowMid) \{\n glowGainOut = 0.;\n \} else \{\n glowGainOut = glowGainIn * (glowMid / ycIn - 1./2.);\n \}\n return glowGainOut;\n \}\n\n // Transformations from RGB to other color representations\n float rgb_2_hue( float3 rgb) \n \{\n // Returns a geometric hue angle in degrees (0-360) based on RGB values.\n // For neutral colors, hue is undefined and the function will return a quiet NaN value.\n float hue;\n if (rgb.x == rgb.y && rgb.y == rgb.z) \{\n hue = 0.; // RGB triplets where RGB are equal have an undefined hue\n \} else \{\n hue = (180./3.14159265359) * atan2( sqrt(3)*(rgb.y-rgb.z), 2*rgb.x-rgb.y-rgb.z);\n \}\n if (hue < 0.) hue = hue + 360.;\n return hue;\n \}\n\n float center_hue( float hue, float centerH) \{\n float hueCentered = hue - centerH;\n if (hueCentered < -180.) hueCentered = hueCentered + 360.;\n else if (hueCentered > 180.) hueCentered = hueCentered - 360.;\n return hueCentered;\n \}\n\n float cubic_basis_shaper( float x, float w) \{\n float M\[4]\[4] = \{ \{ -1./6, 3./6, -3./6, 1./6 \},\n \{ 3./6, -6./6, 3./6, 0./6 \},\n \{ -3./6, 0./6, 3./6, 0./6 \},\n \{ 1./6, 4./6, 1./6, 0./6 \} \};\n \n double knots\[5] = \{ -w/2.,\n -w/4.,\n 0.,\n w/4.,\n w/2. \};\n float y = 0;\n if ((x > knots\[0]) && (x < knots\[4])) \{ \n float knot_coord = (x - knots\[0]) * 4./w; \n int j = knot_coord;\n float t = knot_coord - j;\n float monomials\[4] = \{ t*t*t, t*t, t, 1. \};\n // (if/else structure required for compatibility with CTL < v1.5.)\n if ( j == 3) \{\n y = monomials\[0] * M\[0]\[0] + monomials\[1] * M\[1]\[0] + \n monomials\[2] * M\[2]\[0] + monomials\[3] * M\[3]\[0];\n \} else if ( j == 2) \{\n y = monomials\[0] * M\[0]\[1] + monomials\[1] * M\[1]\[1] + \n monomials\[2] * M\[2]\[1] + monomials\[3] * M\[3]\[1];\n \} else if ( j == 1) \{\n y = monomials\[0] * M\[0]\[2] + monomials\[1] * M\[1]\[2] + \n monomials\[2] * M\[2]\[2] + monomials\[3] * M\[3]\[2];\n \} else if ( j == 0) \{\n y = monomials\[0] * M\[0]\[3] + monomials\[1] * M\[1]\[3] + \n monomials\[2] * M\[2]\[3] + monomials\[3] * M\[3]\[3];\n \} else \{\n y = 0.0;\n \}\n \}\n return y * 3/2.;\n \}\n\n\n void process() \{\n float3 aces = float3(src().x, src().y, src().z);\n\n float saturation = rgb_2_saturation(aces);\n\n // --- Red modifier --- //\n float hue = rgb_2_hue( aces);\n float centeredHue = center_hue( hue, RRT_RED_HUE);\n float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH);\n\n if ( invert == 0 ) \{\n aces.x = aces.x + hueWeight * saturation * (RRT_RED_PIVOT - aces.x) * (1. - RRT_RED_SCALE);\n \} \n else \{ // invert red modifier: note that this is not mathematically perfect\n float minChan;\n if (centeredHue < 0) \{ // min_f3(aces) = aces\[1] (i.e. magenta-red)\n minChan = aces.y;\n \} else \{ // min_f3(aces) = aces\[2] (i.e. yellow-red)\n minChan = aces.z;\n \}\n float a = hueWeight * (1. - RRT_RED_SCALE) - 1.;\n float b = aces.x - hueWeight * (RRT_RED_PIVOT + minChan) * (1. - RRT_RED_SCALE);\n float c = hueWeight * RRT_RED_PIVOT * minChan * (1. - RRT_RED_SCALE);\n aces.x = ( -b - sqrt( float(b * b - 4. * a * c )) ) / ( 2. * a);\n \}\n\n //dst() = float4(aces.x, aces.y, aces.z, src().w);\n dst() = float4(hue/360.0, centeredHue/360.0, aces.x, hueWeight);\n \}\n\};"
rebuild ""
ACES_rrt_sweeteners_RRT_RED_SCALE 1
ACES_rrt_sweeteners_RRT_RED_PIVOT 1
ACES_rrt_sweeteners_RRT_RED_HUE {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_HUE+240}}
ACES_rrt_sweeteners_RRT_RED_WIDTH {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_WIDTH}}
rebuild_finalise ""
name rrt_sweetener_red_modifier3
xpos 1749
ypos 462
}
push 0
push $Nbe3db00
BlinkScript {
recompileCount 11
ProgramGroup 1
KernelDescription "2 \"ACES_rrt_sweeteners\" iterate pixelWise f8a9ce320f06d7e170d1557518df73160acb98a9d89a22f03ddd75c61a3f7f73 2 \"src\" Read Point \"dst\" Write Point 5 \"RRT_RED_SCALE\" Float 1 AAAAAA== \"RRT_RED_PIVOT\" Float 1 AAAAAA== \"RRT_RED_HUE\" Float 1 AAAAAA== \"RRT_RED_WIDTH\" Float 1 AAAAAA== \"invert\" Bool 1 AA== 5 \"RRT_RED_SCALE\" 1 1 \"RRT_RED_PIVOT\" 1 1 \"RRT_RED_HUE\" 1 1 \"RRT_RED_WIDTH\" 1 1 \"invert\" 1 1 0"
kernelSource "kernel ACES_rrt_sweeteners : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessPoint, eEdgeClamped> src;\n Image<eWrite> dst;\n\nparam:\n // User controllable parameters\n float RRT_RED_SCALE;\n float RRT_RED_PIVOT;\n float RRT_RED_HUE;\n float RRT_RED_WIDTH;\n bool invert;\n\n // // Red modifier constants\n // RRT_RED_SCALE = 0.82;\n // RRT_RED_PIVOT = 0.03;\n // RRT_RED_HUE = 0.;\n // RRT_RED_WIDTH = 135.;\n\n\n float min_f3(float3 a) \{\n return min( a.x, min( a.y, a.z));\n \}\n\n float max_f3(float3 a) \{\n return max( a.x, max( a.y, a.z));\n \}\n\n float rgb_2_saturation( float3 rgb ) \{\n return ( max( max_f3(rgb), 1e-10) - max( min_f3(rgb), 1e-10)) / max( max_f3(rgb), 1e-2);\n \}\n\n float sigmoid_shaper( float x) \{\n float t = max( float(1. - fabs( float(x / 2.))), float(0));\n float y = 1. + sign(float(x)) * (1. - t * t);\n return y / 2.;\n \}\n\n float rgb_2_yc( float3 rgb, float ycRadiusWeight) \{\n // keyword arguments don't work with blink.. ycRadiusWeight default if not specified was 1.75\n float r = rgb.x; \n float g = rgb.y; \n float b = rgb.z;\n float chroma = sqrt(float(b*(b-g)+g*(g-r)+r*(r-b)));\n return ( b + g + r + ycRadiusWeight * chroma) / 3.;\n \}\n\n // ------- Glow module functions\n float glow_fwd( float ycIn, float glowGainIn, float glowMid) \{\n float glowGainOut;\n if (ycIn <= 2./3. * glowMid) \{\n glowGainOut = glowGainIn;\n \} else if ( ycIn >= 2. * glowMid) \{\n glowGainOut = 0.;\n \} else \{\n glowGainOut = glowGainIn * (glowMid / ycIn - 1./2.);\n \}\n return glowGainOut;\n \}\n\n // Transformations from RGB to other color representations\n float rgb_2_hue( float3 rgb) \n \{\n // Returns a geometric hue angle in degrees (0-360) based on RGB values.\n // For neutral colors, hue is undefined and the function will return a quiet NaN value.\n float hue;\n if (rgb.x == rgb.y && rgb.y == rgb.z) \{\n hue = 0.; // RGB triplets where RGB are equal have an undefined hue\n \} else \{\n hue = (180./3.14159265359) * atan2( sqrt(3)*(rgb.y-rgb.z), 2*rgb.x-rgb.y-rgb.z);\n \}\n if (hue < 0.) hue = hue + 360.;\n return hue;\n \}\n\n float center_hue( float hue, float centerH) \{\n float hueCentered = hue - centerH;\n if (hueCentered < -180.) hueCentered = hueCentered + 360.;\n else if (hueCentered > 180.) hueCentered = hueCentered - 360.;\n return hueCentered;\n \}\n\n float cubic_basis_shaper( float x, float w) \{\n float M\[4]\[4] = \{ \{ -1./6, 3./6, -3./6, 1./6 \},\n \{ 3./6, -6./6, 3./6, 0./6 \},\n \{ -3./6, 0./6, 3./6, 0./6 \},\n \{ 1./6, 4./6, 1./6, 0./6 \} \};\n \n double knots\[5] = \{ -w/2.,\n -w/4.,\n 0.,\n w/4.,\n w/2. \};\n float y = 0;\n if ((x > knots\[0]) && (x < knots\[4])) \{ \n float knot_coord = (x - knots\[0]) * 4./w; \n int j = knot_coord;\n float t = knot_coord - j;\n float monomials\[4] = \{ t*t*t, t*t, t, 1. \};\n // (if/else structure required for compatibility with CTL < v1.5.)\n if ( j == 3) \{\n y = monomials\[0] * M\[0]\[0] + monomials\[1] * M\[1]\[0] + \n monomials\[2] * M\[2]\[0] + monomials\[3] * M\[3]\[0];\n \} else if ( j == 2) \{\n y = monomials\[0] * M\[0]\[1] + monomials\[1] * M\[1]\[1] + \n monomials\[2] * M\[2]\[1] + monomials\[3] * M\[3]\[1];\n \} else if ( j == 1) \{\n y = monomials\[0] * M\[0]\[2] + monomials\[1] * M\[1]\[2] + \n monomials\[2] * M\[2]\[2] + monomials\[3] * M\[3]\[2];\n \} else if ( j == 0) \{\n y = monomials\[0] * M\[0]\[3] + monomials\[1] * M\[1]\[3] + \n monomials\[2] * M\[2]\[3] + monomials\[3] * M\[3]\[3];\n \} else \{\n y = 0.0;\n \}\n \}\n return y * 3/2.;\n \}\n\n\n void process() \{\n float3 aces = float3(src().x, src().y, src().z);\n\n float saturation = rgb_2_saturation(aces);\n\n // --- Red modifier --- //\n float hue = rgb_2_hue( aces);\n float centeredHue = center_hue( hue, RRT_RED_HUE);\n float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH);\n\n if ( invert == 0 ) \{\n aces.x = aces.x + hueWeight * saturation * (RRT_RED_PIVOT - aces.x) * (1. - RRT_RED_SCALE);\n \} \n else \{ // invert red modifier: note that this is not mathematically perfect\n float minChan;\n if (centeredHue < 0) \{ // min_f3(aces) = aces\[1] (i.e. magenta-red)\n minChan = aces.y;\n \} else \{ // min_f3(aces) = aces\[2] (i.e. yellow-red)\n minChan = aces.z;\n \}\n float a = hueWeight * (1. - RRT_RED_SCALE) - 1.;\n float b = aces.x - hueWeight * (RRT_RED_PIVOT + minChan) * (1. - RRT_RED_SCALE);\n float c = hueWeight * RRT_RED_PIVOT * minChan * (1. - RRT_RED_SCALE);\n aces.x = ( -b - sqrt( float(b * b - 4. * a * c )) ) / ( 2. * a);\n \}\n\n //dst() = float4(aces.x, aces.y, aces.z, src().w);\n dst() = float4(hue/360.0, centeredHue/360.0, aces.x, hueWeight);\n \}\n\};"
rebuild ""
ACES_rrt_sweeteners_RRT_RED_SCALE 1
ACES_rrt_sweeteners_RRT_RED_PIVOT 1
ACES_rrt_sweeteners_RRT_RED_HUE {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_HUE+120}}
ACES_rrt_sweeteners_RRT_RED_WIDTH {{parent.rrt_sweetener_red_modifier1.ACES_rrt_sweeteners_RRT_RED_WIDTH}}
rebuild_finalise ""
name rrt_sweetener_red_modifier2
xpos 1858
ypos 464
}
push $Nbe3db00
BlinkScript {
recompileCount 12
ProgramGroup 1
KernelDescription "2 \"ACES_rrt_sweeteners\" iterate pixelWise 525953e4a603c811da0cfa6bf8fda5775d0803ca6090c445a640ce77d1fee80c 2 \"src\" Read Point \"dst\" Write Point 5 \"RRT_RED_SCALE\" Float 1 AAAAAA== \"RRT_RED_PIVOT\" Float 1 AAAAAA== \"RRT_RED_HUE\" Float 1 AAAAAA== \"RRT_RED_WIDTH\" Float 1 AAAAAA== \"invert\" Bool 1 AA== 5 \"RRT_RED_SCALE\" 1 1 \"RRT_RED_PIVOT\" 1 1 \"RRT_RED_HUE\" 1 1 \"RRT_RED_WIDTH\" 1 1 \"invert\" 1 1 0"
kernelSource "kernel ACES_rrt_sweeteners : public ImageComputationKernel<ePixelWise>\n\{\n Image<eRead, eAccessPoint, eEdgeClamped> src;\n Image<eWrite> dst;\n\nparam:\n // User controllable parameters\n float RRT_RED_SCALE;\n float RRT_RED_PIVOT;\n float RRT_RED_HUE;\n float RRT_RED_WIDTH;\n bool invert;\n\n // // Red modifier constants\n // RRT_RED_SCALE = 0.82;\n // RRT_RED_PIVOT = 0.03;\n // RRT_RED_HUE = 0.;\n // RRT_RED_WIDTH = 135.;\n\n\n float min_f3(float3 a) \{\n return min( a.x, min( a.y, a.z));\n \}\n\n float max_f3(float3 a) \{\n return max( a.x, max( a.y, a.z));\n \}\n\n float rgb_2_saturation( float3 rgb ) \{\n return ( max( max_f3(rgb), 1e-10) - max( min_f3(rgb), 1e-10)) / max( max_f3(rgb), 1e-2);\n \}\n\n float sigmoid_shaper( float x) \{\n float t = max( float(1. - fabs( float(x / 2.))), float(0));\n float y = 1. + sign(float(x)) * (1. - t * t);\n return y / 2.;\n \}\n\n float rgb_2_yc( float3 rgb, float ycRadiusWeight) \{\n // keyword arguments don't work with blink.. ycRadiusWeight default if not specified was 1.75\n float r = rgb.x; \n float g = rgb.y; \n float b = rgb.z;\n float chroma = sqrt(float(b*(b-g)+g*(g-r)+r*(r-b)));\n return ( b + g + r + ycRadiusWeight * chroma) / 3.;\n \}\n\n // ------- Glow module functions\n float glow_fwd( float ycIn, float glowGainIn, float glowMid) \{\n float glowGainOut;\n if (ycIn <= 2./3. * glowMid) \{\n glowGainOut = glowGainIn;\n \} else if ( ycIn >= 2. * glowMid) \{\n glowGainOut = 0.;\n \} else \{\n glowGainOut = glowGainIn * (glowMid / ycIn - 1./2.);\n \}\n return glowGainOut;\n \}\n\n // Transformations from RGB to other color representations\n float rgb_2_hue( float3 rgb) \n \{\n // Returns a geometric hue angle in degrees (0-360) based on RGB values.\n // For neutral colors, hue is undefined and the function will return a quiet NaN value.\n float hue;\n if (rgb.x == rgb.y && rgb.y == rgb.z) \{\n hue = 0.; // RGB triplets where RGB are equal have an undefined hue\n \} else \{\n hue = (180./3.14159265359) * atan2( sqrt(3)*(rgb.y-rgb.z), 2*rgb.x-rgb.y-rgb.z);\n \}\n if (hue < 0.) hue = hue + 360.;\n return hue;\n \}\n\n float center_hue( float hue, float centerH) \{\n float hueCentered = hue - centerH;\n if (hueCentered < -180.) hueCentered = hueCentered + 360.;\n else if (hueCentered > 180.) hueCentered = hueCentered - 360.;\n return hueCentered;\n \}\n\n float cubic_basis_shaper( float x, float w) \{\n float M\[4]\[4] = \{ \{ -1./6, 3./6, -3./6, 1./6 \},\n \{ 3./6, -6./6, 3./6, 0./6 \},\n \{ -3./6, 0./6, 3./6, 0./6 \},\n \{ 1./6, 4./6, 1./6, 0./6 \} \};\n \n double knots\[5] = \{ -w/2.,\n -w/4.,\n 0.,\n w/4.,\n w/2. \};\n float y = 0;\n if ((x > knots\[0]) && (x < knots\[4])) \{ \n float knot_coord = (x - knots\[0]) * 4./w; \n int j = knot_coord;\n float t = knot_coord - j;\n float monomials\[4] = \{ t*t*t, t*t, t, 1. \};\n // (if/else structure required for compatibility with CTL < v1.5.)\n if ( j == 3) \{\n y = monomials\[0] * M\[0]\[0] + monomials\[1] * M\[1]\[0] + \n monomials\[2] * M\[2]\[0] + monomials\[3] * M\[3]\[0];\n \} else if ( j == 2) \{\n y = monomials\[0] * M\[0]\[1] + monomials\[1] * M\[1]\[1] + \n monomials\[2] * M\[2]\[1] + monomials\[3] * M\[3]\[1];\n \} else if ( j == 1) \{\n y = monomials\[0] * M\[0]\[2] + monomials\[1] * M\[1]\[2] + \n monomials\[2] * M\[2]\[2] + monomials\[3] * M\[3]\[2];\n \} else if ( j == 0) \{\n y = monomials\[0] * M\[0]\[3] + monomials\[1] * M\[1]\[3] + \n monomials\[2] * M\[2]\[3] + monomials\[3] * M\[3]\[3];\n \} else \{\n y = 0.0;\n \}\n \}\n return y * 3/2.;\n \}\n\n\n void process() \{\n float3 aces = float3(src().x, src().y, src().z);\n\n float saturation = rgb_2_saturation(aces);\n\n // --- Red modifier --- //\n float hue = rgb_2_hue( aces);\n float centeredHue = center_hue( hue, RRT_RED_HUE);\n float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH);\n\n if ( invert == 0 ) \{\n aces.x = aces.x + hueWeight * saturation * (RRT_RED_PIVOT - aces.x) * (1. - RRT_RED_SCALE);\n \} \n else \{ // invert red modifier: note that this is not mathematically perfect\n float minChan;\n if (centeredHue < 0) \{ // min_f3(aces) = aces\[1] (i.e. magenta-red)\n minChan = aces.y;\n \} else \{ // min_f3(aces) = aces\[2] (i.e. yellow-red)\n minChan = aces.z;\n \}\n float a = hueWeight * (1. - RRT_RED_SCALE) - 1.;\n float b = aces.x - hueWeight * (RRT_RED_PIVOT + minChan) * (1. - RRT_RED_SCALE);\n float c = hueWeight * RRT_RED_PIVOT * minChan * (1. - RRT_RED_SCALE);\n aces.x = ( -b - sqrt( float(b * b - 4. * a * c )) ) / ( 2. * a);\n \}\n\n //dst() = float4(aces.x, aces.y, aces.z, src().w);\n dst() = float4(hue/360.0, centeredHue/360.0, aces.x, hueWeight);\n \}\n\};"
rebuild ""
ACES_rrt_sweeteners_RRT_RED_SCALE 1
ACES_rrt_sweeteners_RRT_RED_PIVOT 1
ACES_rrt_sweeteners_RRT_RED_WIDTH 360
rebuild_finalise ""
name rrt_sweetener_red_modifier1
xpos 1967
ypos 462
}
Merge2 {
inputs 3+1
operation screen
name Merge2
xpos 1858
ypos 535
}
Group {
name SoftCompress1
label "direction: \[knob direction]"
xpos 1858
ypos 595
disable true
addUserKnob {20 SoftCompress}
addUserKnob {7 slope t "The softness of the compressing curve's slope. 0 is a clamp."}
slope 1
addUserKnob {7 threshold t "The minimum threshold. Values below this number will not be affected." R 0 2}
threshold 0.75
addUserKnob {7 limit t "The asymptotic maximum value. For example, the value that inf becomes." R 0 2}
limit 1
addUserKnob {4 direction M {forward inverse}}
}
Input {
inputs 0
name InputMask
xpos -590
ypos 806
number 1
}
Input {
inputs 0
name Input
xpos -810
ypos 494
}
Dot {
name Dot1
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -776
ypos 546
}
set Nd014320 [stack 0]
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 threshold
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : (pow(sl, 2) + 2 * sl * th - 2 * sl * r + pow(th, 2) - th * r + lim * r)/(th + lim - r)"
expr1 "g < th + sl ? g : (pow(sl, 2) + 2 * sl * th - 2 * sl * g + pow(th, 2) - th * g + lim * g)/(th + lim - g)"
expr2 "b < th + sl ? b : (pow(sl, 2) + 2 * sl * th - 2 * sl * b + pow(th, 2) - th * b + lim * b)/(th + lim - b)"
expr3 "a < th + sl ? a : (pow(sl, 2) + 2 * sl * th - 2 * sl * a + pow(th, 2) - th * a + lim * a)/(th + lim - a)"
name SoftCompress_inverse
xpos -702
ypos 636
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
push $Nd014320
Expression {
temp_name0 sl
temp_expr0 "(1-slope)*(max(0, limit-threshold))"
temp_name1 th
temp_expr1 "min(threshold, limit)"
temp_name2 lim
temp_expr2 "max(0, (limit-threshold))"
expr0 "r < th + sl ? r : th + (-1 / ((r - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr1 "g < th + sl ? g : th + (-1 / ((g - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr2 "b < th + sl ? b : th + (-1 / ((b - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
expr3 "a < th + sl ? a : th + (-1 / ((a - th - sl) / (lim - sl) + 1) + 1) * (lim - sl) + sl"
name SoftCompress
xpos -921
ypos 639
addUserKnob {20 Params_tab l Params}
addUserKnob {7 slope}
slope {{parent.slope}}
addUserKnob {7 threshold R 0 25}
threshold {{parent.threshold}}
addUserKnob {7 limit R 0 25}
limit {{parent.limit}}
}
Switch {
inputs 2
which {{parent.direction}}
name SwitchDirection
xpos -810
ypos 709
}
push $Nd014320
Dot {
name Dot2
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 546
}
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos -996
ypos 810
}
NodeWrapper {
inputs 2+1
channels rgba
name NodeWrapper1
xpos -810
ypos 806
}
Output {
name Output
xpos -810
ypos 926
}
end_group
Fill {
name Fill1
xpos 1858
ypos 649
disable true
}
Gamma {
channels rgba
name Gamma1
xpos 1858
ypos 699
}
Expression {
expr0 r
expr1 g
expr2 b
expr3 "1/(wp-bp) * a - 1/(wp-bp) * bp"
name WhitepointBlackpoint3
xpos 1858
ypos 745
addUserKnob {20 User}
addUserKnob {7 wp R 0 2}
wp 0.48
addUserKnob {7 bp}
}
Clamp {
channels rgba
name Clamp1
xpos 1858
ypos 781
disable true
}
Merge2 {
operation stencil
bbox B
name Merge1
xpos 1858
ypos 866
}
push $Nbe3db00
Dot {
name Dot3
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2258
ypos 402
}
set Nd71b180 [stack 0]
Dot {
name Dot4
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2258
ypos 469
}
set Nd5817b0 [stack 0]
Dot {
name Dot12
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2404
ypos 469
}
set Nb0d4550 [stack 0]
Dot {
name Dot5
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2734
ypos 469
}
Dot {
name Dot13
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2734
ypos 565
}
set Ndeac620 [stack 0]
Expression {
expr3 "max(0, (r-g))/r"
name Expression4
label "magenta sat"
xpos 2700
ypos 610
}
push $Ndeac620
Expression {
expr3 "max(0, (g-b))/g"
name Expression10
label "green sat"
xpos 2911
ypos 610
}
push $Ndeac620
Expression {
expr3 "max(0, (r-b))/r"
name Expression7
label "yellow sat"
xpos 2808
ypos 610
}
push $Ndeac620
Expression {
temp_name0 w
temp_expr0 b
temp_name1 z
temp_expr1 r
expr3 "max(0, (w-z))/w"
name Expression9
label "blue sat"
xpos 2592
ypos 610
}
push $Nb0d4550
Expression {
expr3 "max(0, (b-g))/b"
name Expression8
label "blue magenta sat"
xpos 2484
ypos 610
}
push $Nb0d4550
Expression {
expr3 "max(0, (g-r))/g"
name Expression6
label "cyan sat"
xpos 2370
ypos 610
}
StickyNote {
inputs 0
name StickyNote1
tile_color 0x40454aff
label "<left><pre>\nUse sigmoid shaper hue keyer function from \nRRT red modifier to adjust hue angles independently"
note_font_size 18
xpos 1703
ypos 325
}
push $Nd5817b0
Expression {
temp_name0 lum
temp_expr0 max(r,g,b)
temp_name1 minpx
temp_expr1 min(r,g,b)
temp_name2 sat
temp_expr2 (lum-minpx)/lum
expr0 0
expr1 0
expr2 0
expr3 sat
name SatMask
xpos 2224
ypos 611
}
push $Nd71b180
Dot {
name Dot60
label " "
note_font "Helvetica Bold"
note_font_size 24
note_font_color 0xa5a5a501
xpos 2159
ypos 508
}
set Nea5f250 [stack 0]
Expression {
expr3 "(max( max(r,g,b), 1e-10) - max( min(r,g,b), 1e-10)) / max( max(r,g,b), 1e-2)"
name RGB_to_Saturation
xpos 2015
ypos 576
}
push $Nea5f250
Expression {
temp_name1 hue
temp_expr1 "( atan2( sqrt(3) * (g-b), 2 * r - g - b) / pi +1 ) / 2"
expr3 hue
name RGB_to_Hue
xpos 2125
ypos 576
}
ColorLookup {
inputs 0
lut {master {curve L 0 1 s0}
red {}
green {}
blue {}
alpha {}}
name ColorLookup2
label "smoothstep - \\n changes falloff, but doesn't really help"
xpos 1190
ypos 551
disable true
}
StickyNote {
inputs 0
name StickyNote2
tile_color 0x40454aff
label "<left><pre>\nUse different hue saturation masks to control different hue angles\nindependently. Might be better done in the desaturation algorithm"
note_font_size 18
xpos 2298
ypos 383
}
StickyNote {
inputs 0
name StickyNote3
tile_color 0x40454aff
label "<left><pre>\nRotate hue 45 degrees before desat\nmakes rgb weights cmy weights"
note_font_size 18
xpos 1255
ypos 713
}
push $Nbb21c50
push $Nbe3c5e0
HueShift {
color {1 1 1}
hue_rotation -45
name HueShift1
xpos 1272
ypos 664
}
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 "max(r*weight.x, g*weight.y, b*weight.z)"
temp_name1 lum2
temp_expr1 (g+b)/2
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation4
label weighted
xpos 1120
ypos 737
dope_sheet true
addUserKnob {20 User}
addUserKnob {13 weight}
weight {{parent.r_weight} {parent.g_weight} {parent.b_weight}}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
HueShift {
hue_rotation {{-parent.HueShift1.hue_rotation}}
name HueShift2
xpos 1272
ypos 822
}
push $Nbb21c50
push $Nbe3c5e0
Expression {
inputs 1+1
temp_name0 lum
temp_expr0 "max(r*weight.x, g*weight.y, b*weight.z)"
expr0 (r-lum)*saturation+lum
expr1 (g-lum)*saturation+lum
expr2 (b-lum)*saturation+lum
expr3 a
invert_mask true
name Saturation1
label weighted
xpos 730
ypos 741
dope_sheet true
addUserKnob {20 User}
addUserKnob {13 weight}
weight {{parent.r_weight} {parent.g_weight} {parent.b_weight}}
addUserKnob {7 saturation}
saturation {{1-parent.desat}}
}
Output {
name Output
xpos 730
ypos 927
}
end_group
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment