diff --git a/StdX_ACES/config_ANM_OCIOv1.ocio b/StdX_ACES/config_ANM_OCIOv1.ocio index 8836e98..713058e 100644 --- a/StdX_ACES/config_ANM_OCIOv1.ocio +++ b/StdX_ACES/config_ANM_OCIOv1.ocio @@ -50,7 +50,7 @@ displays: - ! {name: Filmic Look, colorspace: Output - sRGB, look: "LMT_gamut, LMT_filmic"} - ! {name: ACES - Gamut Compress, colorspace: Output - sRGB, look: LMT_gamut} - Rec.1886 / Rec.709 video: + Rec.1886 - Rec.709 video: - ! {name: Neutral Look, colorspace: Rec.709 - Look Neutral} - ! {name: Filmic Look, colorspace: Rec.709 - Look Filmic} - ! {name: Show Look, colorspace: Rec.709 - Look Show} @@ -58,8 +58,8 @@ displays: - ! {name: un-tone-mapped, colorspace: Un-tone-mapped - BT.1886/Rec.709 2.4} -active_displays: [sRGB monitor, sRGB - Gamut Compress, Rec.1886 / Rec.709 video] -active_views: [Neutral Look, Filmic Look, Show Look, ACES 1.0 SDR-video, ACES - Gamut Compress, un-tone-mapped, Raw, Log] +active_displays: [sRGB monitor, Rec.1886 - Rec.709 video] +active_views: [Neutral Look, Filmic Look, Show Look, ACES 1.0 SDR-video, un-tone-mapped, Raw, Log] looks: diff --git a/StdX_ACES/config_ANM_OCIOv2.ocio b/StdX_ACES/config_ANM_OCIOv2.ocio index eb82385..f19067f 100644 --- a/StdX_ACES/config_ANM_OCIOv2.ocio +++ b/StdX_ACES/config_ANM_OCIOv2.ocio @@ -24,6 +24,10 @@ roles: reference: Raw rendering: ACEScg scene_linear: ACEScg +# Nuke 8-bit default: # + matte_paint: Output - ACES 1.0 SDR-video (sRGB) +# Nuke 16-bit log default: # + texture_paint: ACEScct file_rules: @@ -52,16 +56,16 @@ displays: sRGB: - ! [Neutral Look, Filmic Look, Show Look, ACES 1.0 SDR-video, Un-tone-mapped, Log, Raw] - sRGB - Gamut Compress: - - ! {name: Neutral Look, view_transform: Neutral View, looks: LMT_gamut, display_colorspace: sRGB - Gamut Compress} - - ! {name: Filmic Look, view_transform: Filmic View, looks: LMT_gamut, display_colorspace: sRGB - Gamut Compress} - - ! {name: ACES 1.0 SDR-video, view_transform: ACES 1.0 SDR-video, looks: LMT_gamut, display_colorspace: sRGB - Gamut Compress} - - ! [Un-tone-mapped, Log, Raw] +# sRGB - Gamut Compress: +# - ! {name: Neutral Look, view_transform: Neutral View, looks: LMT_gamut, display_colorspace: sRGB - Gamut Compress} +# - ! {name: Filmic Look, view_transform: Filmic View, looks: LMT_gamut, display_colorspace: sRGB - Gamut Compress} +# - ! {name: ACES 1.0 SDR-video, view_transform: ACES 1.0 SDR-video, looks: LMT_gamut, display_colorspace: sRGB - Gamut Compress} +# - ! [Un-tone-mapped, Log, Raw] -# Gamma 2.2 / Rec.709: +# Gamma 2.2 - Rec.709: # - ! [Neutral Look, Filmic Look, Show Look, ACES 1.0 SDR-video, Un-tone-mapped, Log, Raw] - Rec.1886 / Rec.709 video: + Rec.1886 - Rec.709 video: - ! [Neutral Look, Filmic Look, Show Look, ACES 1.0 SDR-video, Un-tone-mapped, Log, Raw] @@ -128,7 +132,7 @@ looks: -inactive_colorspaces: [CIE-XYZ D65] +inactive_colorspaces: [CIE-XYZ D65, sRGB - Gamut Compress, Gamut Shaper, Gamma 2.2 - Rec.709, Rec.1886 - Rec.709 video, sRGB, Inverse sRGB Output, Premiere Pro - AP0 2.4 gamma, Premiere Pro - AP0 2.2 gamma, Premiere Pro - AP0 sRGB EOTF] @@ -192,7 +196,7 @@ colorspaces: - ! name: Gamut Shaper - family: File-io/Utility + family: Input/File-io equalitygroup: "" bitdepth: 32f description: | @@ -251,6 +255,7 @@ colorspaces: encoding: log to_scene_reference: ! {style: "ACEScc_to_ACES2065-1"} +# Extra # - ! name: Inverse sRGB Output family: Input/File-io @@ -300,12 +305,11 @@ colorspaces: allocation: uniform to_scene_reference: ! {gamma: 2.4, offset: 0.055} - # Cameras # - ! - name: ARRI LogC (v3-EI800) / AlexaWideGamut - family: Input/Camera + name: ARRI LogC (v3-EI800) - AlexaWideGamut + family: Input/Camera/ARRI description: | Alexa-v3-LogC-EI800 (no camera black) to ACES2065-1 (SUP v3 color science) isdata: false @@ -314,8 +318,8 @@ colorspaces: to_reference: ! {style: "ARRI_ALEXA-LOGC-EI800-AWG_to_ACES2065-1"} - ! - name: RED Log3G10 / REDWideGamutRGB - family: Input/Camera + name: RED Log3G10 - REDWideGamutRGB + family: Input/Camera/RED description: | RED Log3G10 / REDWideGamutRGB (no camera black) isdata: false @@ -324,8 +328,8 @@ colorspaces: to_reference: ! {style: "RED_LOG3G10-RWG_to_ACES2065-1"} - ! - name: Sony SLog3 / SGamut3 - family: Input/Camera + name: Sony SLog3 - SGamut3 + family: Input/Camera/Sony description: | Sony SLog3 / SGamut3 (no camera black) isdata: false @@ -333,13 +337,88 @@ colorspaces: encoding: log to_reference: ! {style: "SONY_SLOG3-SGAMUT3_to_ACES2065-1"} + - ! + name: Sony SLog3 - SGamut3Cine + family: Input/Camera/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Sony S-Log3 S-Gamut3.Cine to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_SGamut3Cine_to_ACES.a1.1.0 + isdata: false +# categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: SONY_SLOG3-SGAMUT3.CINE_to_ACES2065-1} + + - ! + name: Sony SLog3 - Venice SGamut3 + family: Input/Camera/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Sony S-Log3 S-Gamut3 for the Venice camera to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_Venice_SGamut3_to_ACES.a1.1.0 + isdata: false +# categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: SONY_SLOG3-SGAMUT3-VENICE_to_ACES2065-1} + + - ! + name: Sony SLog3 - Venice SGamut3Cine + family: Input/Camera/Sony + equalitygroup: "" + bitdepth: 32f + description: | + Convert Sony S-Log3 S-Gamut3.Cine for the Venice camera to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.SLog3_Venice_SGamut3Cine_to_ACES.a1.1.0 + isdata: false +# categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: SONY_SLOG3-SGAMUT3.CINE-VENICE_to_ACES2065-1} + + - ! + name: Canon CLog2 CGamut + family: Input/Camera/Canon + equalitygroup: "" + bitdepth: 32f + description: | + Convert Canon Log 2 Cinema Gamut to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.CLog2_CGamut_to_ACES.a1.1.0 + isdata: false +# categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: CANON_CLOG2-CGAMUT_to_ACES2065-1} + + - ! + name: Canon CLog3 CGamut + family: Input/Camera/Canon + equalitygroup: "" + bitdepth: 32f + description: | + Convert Canon Log 3 Cinema Gamut to ACES2065-1 + + ACEStransformID: urn:ampas:aces:transformId:v1.5:ACEScsc.Academy.CLog3_CGamut_to_ACES.a1.1.0 + isdata: false +# categories: [file-io] + encoding: log + allocation: uniform + to_scene_reference: ! {style: CANON_CLOG3-CGAMUT_to_ACES2065-1} + - ! name: Log film scan (ADX10) - family: Input/Camera + family: Input/Camera/Film description: | ADX10 Academy Density Encoding isdata: false - categories: [ file-io ] +# categories: [ file-io ] encoding: log to_reference: ! {style: "ADX10_to_ACES2065-1"} @@ -352,7 +431,7 @@ colorspaces: family: Output description: Output Neutral Look (sRGB display) isdata: false - categories: [ file-io ] +# categories: [ file-io ] encoding: sdr-video from_reference: ! {src: ACES2065-1, display: sRGB, view: "Neutral Look"} @@ -361,7 +440,7 @@ colorspaces: family: Output description: Output Neutral Look (sRGB display) isdata: false - categories: [ file-io ] +# categories: [ file-io ] encoding: sdr-video from_reference: ! {src: ACES2065-1, display: sRGB, view: "Filmic Look"} @@ -370,7 +449,7 @@ colorspaces: family: Output description: Output ACES 1.0 SDR-video (sRGB display) isdata: false - categories: [ file-io ] +# categories: [ file-io ] encoding: sdr-video from_reference: ! {src: ACES2065-1, display: sRGB, view: "ACES 1.0 SDR-video"} @@ -379,7 +458,7 @@ colorspaces: family: Output description: Output Show Look (sRGB display) isdata: false - categories: [ file-io ] +# categories: [ file-io ] encoding: sdr-video from_reference: ! {src: ACES2065-1, display: sRGB, view: "Show Look"} @@ -423,7 +502,7 @@ display_colorspaces: - ! {min_in_value: 0., min_out_value: 0., max_in_value: 1., max_out_value: 1.} - ! - name: Gamma 2.2 / Rec.709 + name: Gamma 2.2 - Rec.709 family: Output description: | Gamma 2.2 monitor with Rec.709 or sRGB primaries @@ -437,7 +516,7 @@ display_colorspaces: - ! {min_in_value: 0., min_out_value: 0., max_in_value: 1., max_out_value: 1.} - ! - name: Rec.1886 / Rec.709 video + name: Rec.1886 - Rec.709 video family: Output description: | Rec.709 broadcast monitor with Rec.1886 gamma (2.4) diff --git a/StdX_ACES/software/Nuke/ACES_ref_gamut_compress.gizmo b/StdX_ACES/software/Nuke/ACES_ref_gamut_compress.gizmo new file mode 100644 index 0000000..f22250a --- /dev/null +++ b/StdX_ACES/software/Nuke/ACES_ref_gamut_compress.gizmo @@ -0,0 +1,44 @@ +Gizmo { + name ACES_RGC_blink + label "\[value direction]" + selected true + xpos -244 + ypos -112 + addUserKnob {20 GamutCompress l "ACES Reference Gamut Compress (blinkscript)"} + addUserKnob {6 use_gpu l "use gpu" t "use gpu for blinkscript node" -STARTLINE} + use_gpu true + addUserKnob {4 direction M {forward inverse}} + addUserKnob {20 info_tab l Info} + addUserKnob {26 info_label l " " T "\n\nACES 1.3 Reference Gamut Compression
\nMaps out of gamut colors back into AP1.

Input image data is expected to be ACEScg.\n

Based on:
https://github.com/ampas/aces-dev/blob/dev/transforms/ctl/lmt/LMT.Academy.GamutCompress.ctl"} +} + Input { + inputs 0 + name Input + xpos -40 + ypos -10 + } + AddChannels { + name AddChannels + xpos -40 + ypos 40 + } + BlinkScript { + recompileCount 34 + ProgramGroup 1 + KernelDescription "2 \"GamutCompression\" iterate pixelWise 73c19a90997539f78bd63416346b872f79d9dbc3bc18da77d6bb4c62a2df7287 2 \"src\" Read Point \"dst\" Write Point 1 \"invert\" Bool 1 AA== 1 \"invert\" 1 1 3 \"thr\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA== \"lim\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA== \"p\" Float 1 1 AAAAAA==" + kernelSource "kernel GamutCompression : public ImageComputationKernel \{\n Image src;\n Image dst;\n\n param:\n bool invert;\n\n local:\n float3 thr;\n float3 lim;\n float p;\n\n void init() \{\n // thr is the percentage of the core gamut to preserve\n thr = float3(0.815f, 0.803f, 0.88f);\n\n // lim is the max distance from the gamut boundary that will be compressed\n lim = float3(1.147f, 1.264f, 1.312f);\n\n // Aggressiveness of the compression curve\n p = 1.2f;\n \}\n\n // calculate compressed distance\n float compress(float x, float l, float t) \{\n float cx, s;\n if (x < t) \{\n cx = x;\n \} else \{\n // power(p) compression function plot https://www.desmos.com/calculator/54aytu7hek\n if (l < 1.0001) \{\n return x; // disable compression, avoid nan\n \}\n s = (l-t)/pow(pow((1.0f-t)/(l-t),-p)-1.0f,1.0f/p); // calc y=1 intersect\n if (invert == 0) \{\n cx = t+s*((x-t)/s)/(pow(1.0f+pow((x-t)/s,p),1.0f/p)); // compress\n \} else \{\n if (x > (t + s)) \{\n cx = x; // avoid singularity\n \} else \{\n cx = t+s*pow(-(pow((x-t)/s,p)/(pow((x-t)/s,p)-1.0f)),1.0f/p); // uncompress\n \}\n \}\n \}\n return cx;\n \}\n\n\n void process(int2 pos) \{\n // source pixels\n SampleType(src) rgba = src();\n float3 rgb = float3(rgba.x, rgba.y, rgba.z);\n\n // achromatic axis \n float ach = max(rgb.x, max(rgb.y, rgb.z));\n\n // distance from the achromatic axis for each color component aka inverse rgb ratios\n // distance is normalized by achromatic, so that 1.0f is at gamut boundary, avoid 0 div\n float3 dist = ach == 0 ? float3(0.0f, 0.0f, 0.0f) : (ach-rgb)/fabs(ach);\n\n // compress distance with parameterized shaper function\n float3 cdist;\n cdist = float3(\n compress(dist.x, lim.x, thr.x),\n compress(dist.y, lim.y, thr.y),\n compress(dist.z, lim.z, thr.z));\n\n // recalculate rgb from compressed distance and achromatic\n // effectively this scales each color component relative to achromatic axis by the compressed distance\n float3 crgb = ach-cdist*fabs(ach);\n\n // write to output\n dst() = float4(crgb.x, crgb.y, crgb.z, rgba.w);\n \}\n\};" + useGPUIfAvailable {{parent.use_gpu x1 0}} + rebuild "" + GamutCompression_invert {{parent.direction}} + rebuild_finalise "" + name GamutCompress + selected true + xpos -40 + ypos 100 + } + Output { + name Output + xpos -40 + ypos 172 + } +end_group diff --git a/StdX_ACES/software/Nuke/GamutCompress.nk b/StdX_ACES/software/Nuke/GamutCompress.nk deleted file mode 100644 index 08dd411..0000000 --- a/StdX_ACES/software/Nuke/GamutCompress.nk +++ /dev/null @@ -1,305 +0,0 @@ -#! C:/Program Files/Nuke12.2v4/nuke-12.2.4.dll -nx -version 12.2 v4 -define_window_layout_xml { - - - - - - - - - - - - - - - - - - - - - - - - - - - -} -Root { - inputs 0 - name "D:/OneDrive - Academy of Art University/D/Z/UNIVERSAL/aces_1.2/software/Nuke/GamutCompress.nk" - format "2048 1556 0 0 2048 1556 1 2K_Super_35(full-ap)" - proxy_type scale - proxy_format "1024 778 0 0 1024 778 1 1K_Super_35(full-ap)" - colorManagement Nuke - customOCIOConfigPath "D:/OneDrive - Academy of Art University/D/Z/UNIVERSAL/aces_1.2/config_ANM_OCIOv1.ocio" - workingSpaceLUT linear - monitorLut sRGB - int8Lut sRGB - int16Lut sRGB - logLut Cineon - floatLut linear -} -Group { - inputs 0 - name GamutCompressCombo - label "\[value direction]" - selected true - xpos -237 - ypos -82 - addUserKnob {20 GamutCompress} - addUserKnob {4 power_select l power t "Select the exponent value for the compression function" M {1.0 1.1 1.2 1.3 ""}} - power_select 1.2 - addUserKnob {4 direction M {forward inverse}} - addUserKnob {4 method M {"Blink (GPU)" "Blink (CPU)" "Pure Nuke"}} - method "Blink (CPU)" - addUserKnob {20 info_tab l Info} - addUserKnob {26 info_label l " " T "\n\nGamutCompress
\nmaps out of gamut colors back into gamut.\n

Documentation"} - addUserKnob {26 about_label l " " T "\n
\nAbout
\nWritten by Jed Smith
with help from the ACES Gamut Mapping VWG"} -} - Input { - inputs 0 - name Input - xpos -40 - ypos -274 - } - Dot { - name Dot4 - xpos -6 - ypos -174 - } -set Nb9afb000 [stack 0] - Dot { - name Dot2 - xpos -226 - ypos -174 - } - Expression { - channel0 {rgba.red rgba.green rgba.blue none} - expr0 max(r,g,b) - name achromatic - xpos -260 - ypos -130 - } -set Nb9afa800 [stack 0] - Dot { - name Dot1 - xpos -226 - ypos -78 - } -set Nb9afa400 [stack 0] - Dot { - name Dot3 - xpos -226 - ypos 234 - } -push $Nb9afa400 - Expression { - expr0 abs(r) - expr1 abs(g) - expr2 abs(b) - name abs - xpos -167 - ypos -81 - } -set Nb9af9c00 [stack 0] - Dot { - name Dot7 - xpos -133 - ypos 185 - } -push $Nb9afa800 -push $Nb9afb000 - Merge2 { - inputs 2 - operation minus - bbox B - Achannels rgb - Bchannels rgb - output rgb - name Merge1 - xpos -40 - ypos -130 - } -push $Nb9af9c00 - Merge2 { - inputs 2 - operation divide - bbox B - Achannels rgb - Bchannels rgb - output rgb - name Merge2 - xpos -40 - ypos -82 - } - Group { - name compress - xpos -40 - ypos 62 - addUserKnob {20 compress} - addUserKnob {18 threshold R 0.4 1} - threshold {0.815 0.803 0.88} - addUserKnob {6 threshold_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} - addUserKnob {7 power R 1 3} - power {{"1 + parent.power_select * 0.1"}} - addUserKnob {7 cyan} - cyan 0.147 - addUserKnob {7 magenta} - magenta 0.264 - addUserKnob {7 yellow} - yellow 0.312 - addUserKnob {26 ""} - addUserKnob {26 ""} - addUserKnob {6 invert +STARTLINE} - invert {{parent.direction}} - } - Input { - inputs 0 - name Input - xpos -40 - ypos -130 - } - Dot { - name Dot2 - xpos -6 - ypos -30 - } -set Nb9af8800 [stack 0] - Dot { - name Dot1 - xpos 434 - ypos -30 - } - Expression { - expr0 (rthr.r+s.r)?r:thr.r+s.r*pow(-(pow((r-thr.r)/s.r,p)/(pow((r-thr.r)/s.r,p)-1)),1/p) - expr1 (gthr.g+s.g)?g:thr.g+s.g*pow(-(pow((g-thr.g)/s.g,p)/(pow((g-thr.g)/s.g,p)-1)),1/p) - expr2 (bthr.b+s.b)?b:thr.b+s.b*pow(-(pow((b-thr.b)/s.b,p)/(pow((b-thr.b)/s.b,p)-1)),1/p) - name uncompress_power - xpos 400 - ypos 50 - addUserKnob {20 Params_tab l Params} - addUserKnob {18 thr} - thr {{min(0.9999,parent.threshold)} {min(0.9999,parent.threshold)} {min(0.9999,parent.threshold)}} - addUserKnob {6 thr_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} - addUserKnob {18 lim} - lim {{parent.cyan+1} {parent.magenta+1} {parent.yellow+1}} - addUserKnob {6 lim_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} - addUserKnob {18 s} - s {{(lim-thr)/pow(pow((1-thr)/(lim-thr),-p)-1,1/p)} {(lim-thr)/pow(pow((1-thr)/(lim-thr),-p)-1,1/p)} {(lim-thr)/pow(pow((1-thr)/(lim-thr),-p)-1,1/p)}} - addUserKnob {6 s_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} - addUserKnob {7 p R 1 5} - p {{parent.power}} - } -push $Nb9af8800 - Dot { - name Dot6 - xpos -446 - ypos -30 - } - Expression { - expr0 (r \{\n Image src;\n Image dst;\n\n param:\n float3 threshold;\n float p;\n float cyan;\n float magenta;\n float yellow;\n float p_Height;\n bool invert;\n bool overlay;\n\n local:\n float3 thr;\n float3 lim;\n\n void init() \{\n // thr is the percentage of the core gamut to preserve\n thr = float3(min(0.9999f, threshold.x), min(0.9999f, threshold.y), min(0.9999f, threshold.z));\n\n // lim is the max distance from the gamut boundary that will be compressed\n // 0 is a no-op, 1 will compress colors from a distance of 2.0 from achromatic to the gamut boundary\n lim = float3(cyan+1.0f, magenta+1.0f, yellow+1.0f);\n \}\n\n // calculate compressed distance\n float compress(float x, float l, float t) \{\n float cx, s;\n if (x < t) \{\n cx = x;\n \} else \{\n // power(p) compression function plot https://www.desmos.com/calculator/54aytu7hek\n if (l < 1.0001) \{\n return x; // disable compression, avoid nan\n \}\n s = (l-t)/pow(pow((1.0f-t)/(l-t),-p)-1.0f,1.0f/p); // calc y=1 intersect\n if (invert == 0) \{\n cx = t+s*((x-t)/s)/(pow(1.0f+pow((x-t)/s,p),1.0f/p)); // compress\n \} else \{\n if (x > (t + s)) \{\n cx = x; // avoid singularity\n \} else \{\n cx = t+s*pow(-(pow((x-t)/s,p)/(pow((x-t)/s,p)-1.0f)),1.0f/p); // uncompress\n \}\n \}\n \}\n return cx;\n \}\n\n\n void process(int2 pos) \{\n // source pixels\n SampleType(src) rgba = src();\n float3 rgb = float3(rgba.x, rgba.y, rgba.z);\n\n // normalised pixel coordinates\n float2 fpos = float2((float)pos.x / dst.bounds.width(), (float)pos.y / p_Height);\n\n // achromatic axis \n float ach = max(rgb.x, max(rgb.y, rgb.z));\n\n // distance from the achromatic axis for each color component aka inverse rgb ratios\n // distance is normalized by achromatic, so that 1.0f is at gamut boundary, avoid 0 div\n float3 dist = ach == 0 ? float3(0.0f, 0.0f, 0.0f) : (ach-rgb)/fabs(ach);\n\n // compress distance with user controlled parameterized shaper function\n float sat;\n float3 csat, cdist;\n cdist = float3(\n compress(dist.x, lim.x, thr.x),\n compress(dist.y, lim.y, thr.y),\n compress(dist.z, lim.z, thr.z));\n\n // recalculate rgb from compressed distance and achromatic\n // effectively this scales each color component relative to achromatic axis by the compressed distance\n float3 crgb = ach-cdist*fabs(ach);\n\n // Graph overlay method based on one by Paul Dore\n // https://github.com/baldavenger/DCTLs/tree/master/ACES%20TOOLS\n if (overlay) \{\n float3 cramp = float3(\n compress(2.0f * fpos.x, lim.x, thr.x),\n compress(2.0f * fpos.x, lim.y, thr.y),\n compress(2.0f * fpos.x, lim.z, thr.z));\n bool overlay_r = fabs(2.0f * fpos.y - cramp.x) < 0.004f || fabs(fpos.y - 0.5f) < 0.0005f ? true : false;\n bool overlay_g = fabs(2.0f * fpos.y - cramp.y) < 0.004f || fabs(fpos.y - 0.5f) < 0.0005f ? true : false;\n bool overlay_b = fabs(2.0f * fpos.y - cramp.z) < 0.004f || fabs(fpos.y - 0.5f) < 0.0005f ? true : false;\n crgb.x = overlay_g || overlay_b ? 1.0f : crgb.x;\n crgb.y = overlay_b || overlay_r ? 1.0f : crgb.y;\n crgb.z = overlay_r || overlay_g ? 1.0f : crgb.z;\n \}\n\n // write to output\n dst() = float4(crgb.x, crgb.y, crgb.z, rgba.w);\n \}\n\};" - useGPUIfAvailable {{"parent.method == 0"}} - vectorize false - rebuild "" - GamutCompression_threshold {0.815 0.803 0.88} - GamutCompression_p {{"1 + parent.power_select * 0.1"}} - GamutCompression_cyan 0.147 - GamutCompression_magenta 0.264 - GamutCompression_yellow 0.312 - GamutCompression_p_Height {{height}} - GamutCompression_invert {{parent.direction}} - rebuild_finalise "" - name GamutCompress - xpos 168 - ypos 262 - } - Switch { - inputs 2 - which {{"parent.method == 2"}} - name Switch1 - xpos -40 - ypos 266 - } - Output { - name Output - xpos -40 - ypos 302 - } -end_group -Viewer { - frame 1 - frame_range 1-100 - viewerProcess None - name Viewer1 - xpos -40 - ypos -9 -}