set cut_paste_input [stack 0] version 12.0 v8 push $cut_paste_input Dot { name Dot89 label " Input ACEScg" note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos 5034 ypos 474 } Dot { name Dot72 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos 5034 ypos 634 } Dot { name Dot76 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos 5034 ypos 754 } set N39778b50 [stack 0] Dot { name Dot77 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos 4914 ypos 754 } Group { name Log2Shaper8 selected true xpos 4880 ypos 790 addUserKnob {20 log2_to_lin_tab l "log2 to lin"} addUserKnob {35 presets l preset t "Presets for the exposure domain. \n\n48nits shaper small domain matches the log2 shaper used in the ACES 1.0.3 config. \n\nThe new 48nits shaper was expanded to match the acescc curve to reduce artifacts." M {"curve/48nits shaper" "knobs this \{mid_grey 0.18 min_exp -6.5 max_exp 6.5 label \"48nits shaper\"\}" "curve/48nits shaper acescc" "knobs this \{mid_grey 0.18 min_exp -7.246068811667588 max_exp 10.273931188332412 label \"48nits shaper acescc\"\}" "curve/LMT shaper" "knobs this \{mid_grey 0.18 min_exp -10 max_exp 6.5 label \"LMT shaper\"\}" "curve/108nits shaper" "knobs this \{mid_grey 0.18 min_exp -12 max_exp 8 label \"108nits shaper\"\}" "curve/1000nits shaper" "knobs this \{mid_grey 0.18 min_exp -12 max_exp 10 label \"1000nits shaper\"\}" "curve/2000nits shaper" "knobs this \{mid_grey 0.18 min_exp -12 max_exp 11 label \"2000nits shaper\"\}" "curve/4000nits shaper" "knobs this \{mid_grey 0.18 min_exp -12 max_exp 12 label \"4000nits shaper\"\}"}} addUserKnob {26 ""} addUserKnob {4 direction M {forward inverse}} direction inverse addUserKnob {4 negatives t "how to handle negative values.\n\nclamp does not modify the log curve near black. negative values will clip to 0.0\n\nlinear extension will multiply negatives with a linear extension below cut.\n\nreflect will compress or expand negative values with the mirror of the positive log function." -STARTLINE M {clamp "linear extension" reflect "" ""}} addUserKnob {26 graph_link l "" -STARTLINE T " graph"} addUserKnob {7 mid_grey l "mid grey" R 0.1 0.2} mid_grey 0.18 addUserKnob {7 min_exp l "min exp" R -12 0} min_exp -6.5 addUserKnob {7 max_exp l "max exp" R 0 12} max_exp 8 addUserKnob {7 cut t "Transition from log curve to linear extension at cut value." R 0 0.1} cut 0.005 } Input { inputs 0 name Input xpos -40 ypos -82 } Dot { name Dot xpos -6 ypos -6 } set N397942e0 [stack 0] Dot { name Dot2 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos 104 ypos 42 } set N39798f60 [stack 0] Expression { expr0 r>=c?(log(r/mid_grey)/log(2)-min_exp)/(max_exp-min_exp):(r>-c&&r=c?(log(g/mid_grey)/log(2)-min_exp)/(max_exp-min_exp):(g>-c&&g=c?(log(b/mid_grey)/log(2)-min_exp)/(max_exp-min_exp):(b>-c&&b=c?(log(r/mid_grey)/log(2)-min_exp)/(max_exp-min_exp):s*(r-c)+offset expr1 g>=c?(log(g/mid_grey)/log(2)-min_exp)/(max_exp-min_exp):s*(g-c)+offset expr2 b>=c?(log(b/mid_grey)/log(2)-min_exp)/(max_exp-min_exp):s*(b-c)+offset channel3 none name lin_to_log_extension xpos 180 ypos 86 } push $N39798f60 Expression { expr0 "r > 1e-12 ? (log( r / mid_grey)/log(2) - min_exp) / (max_exp - min_exp) : 0" expr1 "g > 0 ? (log( g / mid_grey)/log(2) - min_exp) / (max_exp - min_exp) : 0" expr2 "b > 0 ? (log( b / mid_grey)/log(2) - min_exp) / (max_exp - min_exp) : 0" name lin_to_log_clamp xpos 70 ypos 86 } Switch { inputs 3 which {{parent.negatives}} name switch_negatives1 note_font Helvetica xpos 70 ypos 159 } push $N397942e0 Dot { name Dot1 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -116 ypos 42 } set N397d3130 [stack 0] Expression { expr0 r>=o?pow(2,(r*(max_exp-min_exp)+min_exp))*mid_grey:(r=-o+2*r0)?(r-o)/s+c:-(pow(2,(-r+2*r0)*(max_exp-min_exp)+min_exp))*mid_grey expr1 g>=o?pow(2,(g*(max_exp-min_exp)+min_exp))*mid_grey:(g=-o+2*r0)?(g-o)/s+c:-(pow(2,(-g+2*r0)*(max_exp-min_exp)+min_exp))*mid_grey expr2 b>=o?pow(2,(b*(max_exp-min_exp)+min_exp))*mid_grey:(b=-o+2*r0)?(b-o)/s+c:-(pow(2,(-b+2*r0)*(max_exp-min_exp)+min_exp))*mid_grey channel3 none name log_to_lin_reflect xpos -150 ypos 86 addUserKnob {20 User} addUserKnob {7 c l cut R 0 0.2} c {{max(1e-8,cut)}} addUserKnob {7 o l offset} o {{(log(c/mid_grey)/log(2)-min_exp)/(max_exp-min_exp)}} addUserKnob {7 s l slope} s {{1/(log(2)*c*(max_exp-min_exp))}} addUserKnob {7 r0 l root t "zero crossing for linear segment"} r0 {{-c*s+o}} addUserKnob {7 add} } push $N397d3130 Expression { temp_name0 c temp_expr0 max(1e-8,cut) temp_name1 offset temp_expr1 (log(c/mid_grey)/log(2)-min_exp)/(max_exp-min_exp) temp_name2 s temp_expr2 1/(log(2)*c*(max_exp-min_exp)) expr0 r>=offset?pow(2,(r*(max_exp-min_exp)+min_exp))*mid_grey:(r-offset)/s+c expr1 g>=offset?pow(2,(g*(max_exp-min_exp)+min_exp))*mid_grey:(g-offset)/s+c expr2 b>=offset?pow(2,(b*(max_exp-min_exp)+min_exp))*mid_grey:(b-offset)/s+c channel3 none name log_to_lin_extension xpos -260 ypos 86 } push $N397d3130 Expression { expr0 "pow(2, ( r * (max_exp - min_exp) + min_exp)) * mid_grey" expr1 "pow(2, ( g * (max_exp - min_exp) + min_exp)) * mid_grey" expr2 "pow(2, ( b * (max_exp - min_exp) + min_exp)) * mid_grey" name log_to_lin_clamp xpos -370 ypos 86 } Switch { inputs 3 which {{parent.negatives}} name switch_negatives note_font Helvetica xpos -150 ypos 159 } Switch { inputs 2 which {{parent.direction}} name switch_direction xpos -40 ypos 206 } Output { name Output xpos -40 ypos 278 } end_group Expression { channel0 rgba expr0 max(r,g,b) channel1 none channel2 none name MaxRGB note_font Helvetica selected true xpos 4880 ypos 831 } Keyer { operation "red keyer" range {0.5163758491 1 1 1} name Keyer5 note_font Helvetica selected true xpos 4880 ypos 865 } Dot { name Dot97 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos 4914 ypos 914 } push $N39778b50 Group { name Colorspace_JzAzBz7 selected true xpos 5000 ypos 790 addUserKnob {20 JzAzBz_tab l JzAzBz} addUserKnob {41 gamut T GamutToXYZ.gamut} addUserKnob {6 JChE t "Output JChE: Lightness, Chroma, hue angle, and perceptual color diffence deltaE" +STARTLINE} addUserKnob {35 const_d_presets l "" +STARTLINE M {"const d/JzAzBz" "knobs this \{d -0.56\}" "const d/CAM16-UCS" "knobs this \{d 0\}" "const d/IPT" "knobs this \{d -0.64\}" "const d/ICtCp" "knobs this \{d 1.1\}"}} addUserKnob {7 d l "" t "the d constant which can can be adjusted to tune the lightness predictors to different colorspaces:\ndefault: -0.56\nCAM16-UCS: 0\nIPT: -0.64\nICtCp: 1.1" -STARTLINE R -1 1} d -0.56 addUserKnob {7 L_p t "Luminance for ST2084 eotf" R 48 1000} L_p 100 addUserKnob {6 domain_range_scale l "domain range scale" +STARTLINE} domain_range_scale true addUserKnob {4 direction M {forward inverse}} } Input { inputs 0 name Input xpos -40 ypos -490 } Dot { name Dot1 xpos -6 ypos -446 } set N39842940 [stack 0] Dot { name Dot2 xpos 114 ypos -446 } Expression { temp_name0 d_0 temp_expr0 1.6295499532821565e-11 expr0 ((r+d_0)/(1+d-d*(r+d_0))) expr1 g expr2 b name Expression4 label Iz note_font Helvetica xpos 80 ypos -335 } ColorMatrix { matrix { {{parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix}} {{parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix}} {{parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix}} } invert true name ColorMatrix4 label IZAZBZ_TO_LMS_P note_font Helvetica xpos 80 ypos -295 } Group { name eotf_ST2084_ note_font Helvetica xpos 80 ypos -249 disable {{!parent.domain_range_scale}} addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 m_1} m_1 {{2610/4096*(1/4)}} addUserKnob {7 m_2} m_2 {{1.7*2523/2**5}} addUserKnob {7 c_1} c_1 {{3424/4096}} addUserKnob {7 c_2} c_2 {{2413/4096*32}} addUserKnob {7 c_3} c_3 {{2392/4096*32}} addUserKnob {7 L_p R 0 10000} L_p {{parent.L_p}} } Input { inputs 0 name Input xpos -40 ypos -290 } Expression { expr0 "pow(r, 1/m_2)" expr1 "pow(g, 1/m_2)" expr2 "pow(b, 1/m_2)" name Expression1 label V_p note_font Helvetica xpos -40 ypos -255 } Expression { expr0 pow(((r-c_1)/(c_2-c_3*r)),1/m_1)*L_p expr1 pow(((g-c_1)/(c_2-c_3*g)),1/m_1)*L_p expr2 pow(((b-c_1)/(c_2-c_3*b)),1/m_1)*L_p name Expression2 label C note_font Helvetica xpos -40 ypos -215 } Output { name Output xpos -40 ypos -170 } end_group ColorMatrix { matrix { {{parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix}} {{parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix}} {{parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix}} } invert true name ColorMatrix5 label LMS_TO_XYZ note_font Helvetica xpos 80 ypos -215 } Expression { expr0 (r+(1.15-1)*b)/1.15 expr1 (g+(0.66-1)*((r+(1.15-1)*b)/1.15))/0.66 expr2 b name Expression2 label "X_p Y_p Z" note_font Helvetica xpos 80 ypos -175 } ColorMatrix { matrix { {{parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix}} {{parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix}} {{parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix}} } invert true name ColorMatrix3 label "\[if \{\[value invert]\} \{return \"XYZ to \[value GamutToXYZ.gamut]\"\} else \{return \"\[value gamut] to XYZ\"\}]\n\n" note_font Helvetica xpos 80 ypos -95 } push $N39842940 Group { name GamutToXYZ label "\[if \{\[value invert]\} \{return \"XYZ to \[value gamut]\"\} else \{return \"\[value gamut] to XYZ\"\}]\n\n" xpos -40 ypos -416 addUserKnob {20 GamutToXYZ_lite_tab l GamutToXYZ_lite} addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" "DaVinci WG" Rec709 Rec2020 P3D60 P3D65 P3DCI "Arri AlexaWideGamut" REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB "GoPro Protune Native" CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut "DJI D-Gamut" "Fujifilm F-Gamut" BMDFilmV1 BMD4kFilmV1 BMD4kFilmV3 BMD46kFilmV1 BMD46kFilmV3 BMDWideGamutV4 "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB RusselRGB SharpRGB AppleRGB BestRGB}} gamut ACEScg addUserKnob {6 invert +STARTLINE} addUserKnob {26 ""} addUserKnob {26 chromaticity_coordinates_label l " " T "Chromaticity Coordinates"} 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} } 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.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654 0.6481720209 0.6369580626 0.6390493512 0.6141571999 0.3724023998 0.60689044 0.4017650783 0.6065810919 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.7015837431 0.8156226277 0.4496616423 0.6318944097} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277 0.1940581352 0.1446169019 0.1578372866 0.2825684249 0.4324877858 0.2193847299 0.4560420811 0.2203479856 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.1554162204 0.04716260359 0.3162561059 0.2053879201} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481 0.108225815 0.1688809693 0.1516760886 0.05183707923 0.1436725408 0.124180764 0.09264881909 0.123526901 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.09979832917 0.1372147948 0.1845382005 0.1270133406}} {{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333 0.2830046713 0.2627002299 0.1743051857 0.2365771234 0.1383759677 0.1973138005 0.1721783578 0.2680045366 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.3152042925 0.3790788651 0.2446159422 0.2276017666} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759 0.8131960034 0.6779980659 0.951146543 0.8896810412 0.911518693 0.943950057 0.8553914428 0.8326833844 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.6648360491 0.5769088268 0.6720442176 0.7383946776} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295 -0.09620071948 0.05930171534 -0.1254517138 -0.1262581497 -0.04989464581 -0.1412638426 -0.02756982669 -0.1006879359 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 0.01995966583 0.04401229322 0.08333983272 0.0340035744}} {{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643 -0.01825834997 0 -0.11669112 -0.02325225808 -0.1602820009 -0.1427432895 -0.10720893 -0.02941203304 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 0 -0.01229703799 0.02518104948 0} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091 -0.08316776901 0.0280726999 -0.5518454909 -0.4897170365 -0.171635136 -0.4278847873 0.07809129357 -0.08659287542 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 0.04317118227 0.01672476344 0.1411857158 0.01001892332} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375 1.190483928 1.060985088 1.745692492 1.590125084 1.409072995 1.65968585 1.118175387 1.205062628 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 0.8782252669 0.9955722094 0.9226909876 0.8150856495}} } invert {{parent.invert}} name ColorMatrix label "RGB to XYZ" xpos -40 ypos 32 addUserKnob {20 Gamut} addUserKnob {3 which} which {{parent.gamut}} addUserKnob {12 rxy} rxy {{curve(which) 1 0.7347 0.713 0.8 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73 0.71 0.708 0.9173 0.7422 1.0625 0.9175 0.8608 0.7177 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.69 0.6898 0.625 0.7351916376} {curve(which) 0 0.2653 0.293 0.3177 0.313 0.33 0.292 0.32 0.32 0.32 0.313 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28 0.31 0.292 0.2502 0.2859 0.3948 0.2983 0.3689 0.3171 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.31 0.3206 0.34 0.2648083624}} addUserKnob {12 gxy} gxy {{curve(which) 0 0 0.165 0.18 0.1682 0.3 0.17 0.265 0.265 0.265 0.221 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165 0.21 0.17 0.2833 0.414 0.3689 0.2983 0.3282 0.228 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.18 0.0736 0.28 0.2153361345} {curve(which) 1 1 0.83 0.9 0.9877 0.6 0.797 0.69 0.69 0.69 0.848 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84 0.88 0.797 1.7072 1.3035 0.7775 1.2835 0.6156 0.8616 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.77 0.9003 0.595 0.7741596639}} addUserKnob {12 bxy} bxy {{curve(which) 0 0.0001 0.128 0.065 0.079 0.15 0.131 0.15 0.15 0.15 0.0861 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1 0.09 0.131 0.0856 0.0342 0.0956 0.0756 0.0783 0.1006 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.1 0.1166 0.155 0.1301229508} {curve(which) 0 -0.077 0.044 -0.0805 -0.1155 0.06 0.046 0.06 0.06 0.06 -0.102 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03 -0.08 0.046 -0.0708 -0.0833 -0.0332 -0.086 -0.0233 -0.082 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 0.02 0.0374 0.07 0.03483606557}} addUserKnob {12 wxy} wxy {{curve(which) 0.33333333 0.32168 0.32168 0.3127 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127 0.3135 0.3135 0.3135 0.3127 0.3127 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.33243 0.33333333 0.3127 0.3457} {curve(which) 0.33333333 0.33767 0.33767 0.329 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329 0.329 0.329 0.3305 0.3305 0.3305 0.329 0.329 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.34744 0.33333333 0.329 0.3585}} } Output { name Output xpos -40 ypos 86 } end_group Expression { expr0 1.15*r-(1.15-1)*b expr1 0.66*g-(0.66-1)*r expr2 b name Expression3 label "X_p Y_p Z" note_font Helvetica xpos -40 ypos -335 } ColorMatrix { matrix { {0.41478972 0.579999 0.014648} {-0.20151 1.120649 0.0531008} {-0.0166008 0.2648 0.6684799} } name ColorMatrix6 label XYZ_TO_LMS note_font Helvetica xpos -40 ypos -295 } Group { name eotf_inverse_ST2084_ note_font Helvetica xpos -40 ypos -249 disable {{!parent.domain_range_scale}} addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 m_1} m_1 {{2610/4096*(1/4)}} addUserKnob {7 m_2} m_2 {{1.7*2523/2**5}} addUserKnob {7 c_1} c_1 {{3424/4096}} addUserKnob {7 c_2} c_2 {{2413/4096*32}} addUserKnob {7 c_3} c_3 {{2392/4096*32}} addUserKnob {7 L_p R 0 10000} L_p {{parent.L_p}} } Input { inputs 0 name Input xpos -40 ypos -290 } Expression { expr0 "pow(r/L_p, m_1)" expr1 "pow(g/L_p, m_1)" expr2 "pow(b/L_p, m_1)" name Expression4 label Y_p note_font Helvetica xpos -40 ypos -255 } Expression { expr0 "pow((c_1+c_2*r)/(c_3*r+1), m_2)" expr1 "pow((c_1+c_2*g)/(c_3*g+1), m_2)" expr2 "pow((c_1+c_2*b)/(c_3*b+1), m_2)" name Expression8 label N note_font Helvetica xpos -40 ypos -215 } Output { name Output xpos -40 ypos -170 } end_group ColorMatrix { matrix { {0.5 0.5 0} {3.524 -4.066708 0.542708} {0.199076 1.096799 -1.295875} } name ColorMatrix2 label LMS_P_TO_IZAZBZ note_font Helvetica xpos -40 ypos -215 } Expression { temp_name0 d_0 temp_expr0 1.6295499532821565e-11 expr0 r*(1+d)/(1+d*r)-d_0 expr1 g expr2 b name Expression1 label Jz note_font Helvetica xpos -40 ypos -175 } Switch { inputs 2 which {{parent.direction}} name SwitchDirection note_font Helvetica xpos -40 ypos -49 } Output { name Output xpos -40 ypos 42 } end_group Group { name GamutCompress6 label "extreme saturation compress" note_font Helvetica selected true xpos 5000 ypos 847 disable true addUserKnob {20 GamutCompress_tab l GamutCompress} addUserKnob {78 blue n 2} blue {0.1 0.15} addUserKnob {78 yellow n 2} yellow {0.1 0.15} addUserKnob {78 green n 2} green {0.1 0.15} addUserKnob {78 red n 2} red {0.1 0.15} } Input { inputs 0 name Input label "\[value number]" xpos -40 ypos -10 } Dot { name Dot2 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -6 ypos 74 } set N26d0ae70 [stack 0] Expression { channel0 {rgba.red -rgba.green -rgba.blue none} expr0 r(-Az is red, +Az is yellow, -Bz is green +Bz is blue)." note_font Helvetica note_font_size 14 xpos -156 ypos 24 } end_group Multiply { inputs 1+1 channels {-rgba.red rgba.green rgba.blue -rgba.alpha} value 0 name Multiply4 label "scale AzBz" note_font Helvetica selected true xpos 5000 ypos 905 } Group { name Colorspace_JzAzBz8 selected true xpos 5000 ypos 950 addUserKnob {20 JzAzBz_tab l JzAzBz} addUserKnob {41 gamut T GamutToXYZ.gamut} addUserKnob {6 JChE t "Output JChE: Lightness, Chroma, hue angle, and perceptual color diffence deltaE" +STARTLINE} addUserKnob {35 const_d_presets l "" +STARTLINE M {"const d/JzAzBz" "knobs this \{d -0.56\}" "const d/CAM16-UCS" "knobs this \{d 0\}" "const d/IPT" "knobs this \{d -0.64\}" "const d/ICtCp" "knobs this \{d 1.1\}"}} addUserKnob {7 d l "" t "the d constant which can can be adjusted to tune the lightness predictors to different colorspaces:\ndefault: -0.56\nCAM16-UCS: 0\nIPT: -0.64\nICtCp: 1.1" -STARTLINE R -1 1} d {-0.56} addUserKnob {7 L_p t "Luminance for ST2084 eotf" R 48 1000} L_p {{parent.Colorspace_JzAzBz7.L_p}} addUserKnob {6 domain_range_scale l "domain range scale" +STARTLINE} domain_range_scale true addUserKnob {4 direction M {forward inverse}} direction inverse } Input { inputs 0 name Input xpos -40 ypos -490 } Dot { name Dot1 xpos -6 ypos -446 } set N39a7d7e0 [stack 0] Dot { name Dot2 xpos 114 ypos -446 } Expression { temp_name0 d_0 temp_expr0 1.6295499532821565e-11 expr0 ((r+d_0)/(1+d-d*(r+d_0))) expr1 g expr2 b name Expression4 label Iz note_font Helvetica xpos 80 ypos -335 } ColorMatrix { matrix { {{parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix}} {{parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix}} {{parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix} {parent.ColorMatrix2.matrix}} } invert true name ColorMatrix4 label IZAZBZ_TO_LMS_P note_font Helvetica xpos 80 ypos -295 } Group { name eotf_ST2084_ note_font Helvetica xpos 80 ypos -249 disable {{!parent.domain_range_scale}} addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 m_1} m_1 {{2610/4096*(1/4)}} addUserKnob {7 m_2} m_2 {{1.7*2523/2**5}} addUserKnob {7 c_1} c_1 {{3424/4096}} addUserKnob {7 c_2} c_2 {{2413/4096*32}} addUserKnob {7 c_3} c_3 {{2392/4096*32}} addUserKnob {7 L_p R 0 10000} L_p {{parent.L_p}} } Input { inputs 0 name Input xpos -40 ypos -290 } Expression { expr0 "pow(r, 1/m_2)" expr1 "pow(g, 1/m_2)" expr2 "pow(b, 1/m_2)" name Expression1 label V_p note_font Helvetica xpos -40 ypos -255 } Expression { expr0 pow(((r-c_1)/(c_2-c_3*r)),1/m_1)*L_p expr1 pow(((g-c_1)/(c_2-c_3*g)),1/m_1)*L_p expr2 pow(((b-c_1)/(c_2-c_3*b)),1/m_1)*L_p name Expression2 label C note_font Helvetica xpos -40 ypos -215 } Output { name Output xpos -40 ypos -170 } end_group ColorMatrix { matrix { {{parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix}} {{parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix}} {{parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix} {parent.ColorMatrix6.matrix}} } invert true name ColorMatrix5 label LMS_TO_XYZ note_font Helvetica xpos 80 ypos -215 } Expression { expr0 (r+(1.15-1)*b)/1.15 expr1 (g+(0.66-1)*((r+(1.15-1)*b)/1.15))/0.66 expr2 b name Expression2 label "X_p Y_p Z" note_font Helvetica xpos 80 ypos -175 } ColorMatrix { matrix { {{parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix}} {{parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix}} {{parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix} {parent.GamutToXYZ.ColorMatrix.matrix}} } invert true name ColorMatrix3 label "\[if \{\[value invert]\} \{return \"XYZ to \[value GamutToXYZ.gamut]\"\} else \{return \"\[value gamut] to XYZ\"\}]\n\n" note_font Helvetica xpos 80 ypos -95 } push $N39a7d7e0 Group { name GamutToXYZ label "\[if \{\[value invert]\} \{return \"XYZ to \[value gamut]\"\} else \{return \"\[value gamut] to XYZ\"\}]\n\n" xpos -40 ypos -416 addUserKnob {20 GamutToXYZ_lite_tab l GamutToXYZ_lite} addUserKnob {4 gamut t "Choose gamut" M {XYZ ACES ACEScg "Filmlight E-Gamut" "DaVinci WG" Rec709 Rec2020 P3D60 P3D65 P3DCI "Arri AlexaWideGamut" REDDRAGONcolor REDDRAGONcolor2 REDcolor REDcolor2 REDcolor3 REDcolor4 REDWideGamutRGB "GoPro Protune Native" CanonCinemaGamut SonySGamut SonySGamut3Cine PanasonicVGamut "DJI D-Gamut" "Fujifilm F-Gamut" BMDFilmV1 BMD4kFilmV1 BMD4kFilmV3 BMD46kFilmV1 BMD46kFilmV3 BMDWideGamutV4 "AdobeRGB\t" AdobeWideGamutRGB ROMM RIMM ERIMM ProPhotoRGB RusselRGB SharpRGB AppleRGB BestRGB}} gamut ACEScg addUserKnob {6 invert +STARTLINE} addUserKnob {26 ""} addUserKnob {26 chromaticity_coordinates_label l " " T "Chromaticity Coordinates"} 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} } 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.5070186853 0.4462202489 0.4300414324 0.4581649601 0.4878340662 0.4517004192 0.7352752686 0.5022571683 0.7160496712 0.7064827085 0.5990839601 0.6796444654 0.6481720209 0.6369580626 0.6390493512 0.6141571999 0.3724023998 0.60689044 0.4017650783 0.6065810919 0.5766690373 0.7165006995 0.797760427 0.797760427 0.797760427 0.7976718545 0.7015837431 0.8156226277 0.4496616423 0.6318944097} {curve(which) 0 0 0.1340042055 0.1640413404 0.3575843275 0.1446169019 0.2646814585 0.2656676769 0.2771343887 0.2147038579 0.3587769568 0.3157556653 0.3700728714 0.3832037449 0.3432727158 0.3178463876 0.06860940903 0.2929667532 0.1296834797 0.1288010478 0.2489254922 0.1522114277 0.1940581352 0.1446169019 0.1578372866 0.2825684249 0.4324877858 0.2193847299 0.4560420811 0.2203479856 0.1855582297 0.1010205746 0.1351858526 0.1351858526 0.1351858526 0.1351878047 0.1554162204 0.04716260359 0.3162561059 0.2053879201} {curve(which) 0 9.367863095e-05 0.1561876982 0.08101774752 0.180480808 0.1688809693 0.1830150485 0.1982172877 0.1722826511 0.09774444997 0.0868505761 0.190669477 0.152531758 0.1112773567 0.1215386018 0.1830992699 0.1465712637 0.1552320272 0.1047228053 0.1151721701 0.1024464965 0.1186000481 0.108225815 0.1688809693 0.1516760886 0.05183707923 0.1436725408 0.124180764 0.09264881909 0.123526901 0.1882286519 0.1467743814 0.03134934977 0.03134934977 0.03134934977 0.03133957833 0.09979832917 0.1372147948 0.1845382005 0.1270133406}} {{curve(which) 0 0.3439664543 0.2722287476 0.2801307142 0.2126390189 0.2627002299 0.237623319 0.2289745659 0.209491685 0.2919537723 0.2207257152 0.1942579001 0.2022213936 0.1694435924 0.2289056629 0.2119505703 0.2866941094 0.1387997568 0.2612613738 0.2709796727 0.2150758505 0.2606855333 0.2830046713 0.2627002299 0.1743051857 0.2365771234 0.1383759677 0.1973138005 0.1721783578 0.2680045366 0.2973450124 0.258728236 0.2880711257 0.2880711257 0.2880711257 0.2880405784 0.3152042925 0.3790788651 0.2446159422 0.2276017666} {curve(which) 1 0.7281661034 0.6740817428 0.8202066422 0.7151686549 0.6779980659 0.6891706586 0.6917385459 0.7215952873 0.8238410354 0.839184761 0.7385566831 0.7585275769 0.8648257852 0.7808576822 0.7230190039 0.8429791331 0.910841465 0.8696421385 0.786606431 0.8850684762 0.7748944759 0.8131960034 0.6779980659 0.951146543 0.8896810412 0.911518693 0.943950057 0.8553914428 0.8326833844 0.6273635626 0.7246823311 0.7118432522 0.7118432522 0.7118432522 0.7118694782 0.6648360491 0.5769088268 0.6720442176 0.7383946776} {curve(which) 0 -0.07213255018 0.05368951708 -0.1003373638 0.07219231874 0.05930171534 0.07320601493 0.07928691059 0.06891305745 -0.1157948226 -0.05991046131 0.06718540192 0.03925102949 -0.03426937759 -0.009763340466 0.06503042579 -0.1296732277 -0.04964122549 -0.1309035122 -0.05758608505 -0.1001443192 -0.03558001295 -0.09620071948 0.05930171534 -0.1254517138 -0.1262581497 -0.04989464581 -0.1412638426 -0.02756982669 -0.1006879359 0.07529145479 0.01658944227 8.565396274e-05 8.565396274e-05 8.565396274e-05 8.991353388e-05 0.01995966583 0.04401229322 0.08333983272 0.0340035744}} {{curve(which) 0 -3.863927134e-08 -0.005574660841 -0.1037815213 0.01933082007 0 0 0 0 0.0027982709 -0.0544523783 -0.04792318866 -0.0176958181 -0.1061859056 -0.02100777067 -0.01945115253 -0.07968087494 0.07801423222 -0.009676366113 -0.009677864611 -0.03206583485 -0.009310216643 -0.01825834997 0 -0.11669112 -0.02325225808 -0.1602820009 -0.1427432895 -0.10720893 -0.02941203304 0.02703136392 -2.906408625e-08 -3.236030111e-08 -3.236030111e-08 -3.236030111e-08 0 0 -0.01229703799 0.02518104948 0} {curve(which) 0 0 0.004060741514 -0.07290724665 0.1191947311 0.0280726999 0.0449459292 0.04511339962 0.04706057906 -0.06703422964 -0.0003228379355 -0.0002844714036 0.08768811822 0.02554347552 0.01782695204 0.01650637016 -0.3473432064 -0.3148325086 -0.2364816219 0.004600019194 -0.02765839547 -0.004612449091 -0.08316776901 0.0280726999 -0.5518454909 -0.4897170365 -0.171635136 -0.4278847873 0.07809129357 -0.08659287542 0.07068887353 0.05121183768 1.2621717e-08 1.2621717e-08 1.2621717e-08 -1.262213711e-08 0.04317118227 0.01672476344 0.1411857158 0.01001892332} {curve(which) 1 1.008825183 1.010339141 1.265746474 0.950532198 1.060985088 0.9638792276 1.043944359 0.9073553085 1.153293729 1.063571215 1.057001948 0.9388025999 1.089437366 1.01197505 1.011739731 1.51608181 1.325875998 1.335215807 1.094135642 1.148782015 1.102980375 1.190483928 1.060985088 1.745692492 1.590125084 1.409072995 1.65968585 1.118175387 1.205062628 0.9913375378 0.7738927603 0.8251045942 0.8251045942 0.8251045942 0.8248898983 0.8782252669 0.9955722094 0.9226909876 0.8150856495}} } invert {{parent.invert}} name ColorMatrix label "RGB to XYZ" xpos -40 ypos 32 addUserKnob {20 Gamut} addUserKnob {3 which} which {{parent.gamut}} addUserKnob {12 rxy} rxy {{curve(which) 1 0.7347 0.713 0.8 0.8 0.64 0.708 0.68 0.68 0.68 0.684 0.7530442228 0.7530444911 0.6997470013 0.8786825105 0.7011810359 0.7011805919 0.780308 0.69848046 0.74 0.73 0.766 0.73 0.71 0.708 0.9173 0.7422 1.0625 0.9175 0.8608 0.7177 0.64 0.7347 0.7347 0.7347 0.7347 0.734699 0.69 0.6898 0.625 0.7351916376} {curve(which) 0 0.2653 0.293 0.3177 0.313 0.33 0.292 0.32 0.32 0.32 0.313 0.3278305767 0.3278310295 0.3290469303 0.3249640074 0.3290141556 0.3290136991 0.304253 0.19302645 0.27 0.28 0.275 0.28 0.31 0.292 0.2502 0.2859 0.3948 0.2983 0.3689 0.3171 0.33 0.2653 0.2653 0.2653 0.2653 0.265301 0.31 0.3206 0.34 0.2648083624}} addUserKnob {12 gxy} gxy {{curve(which) 0 0 0.165 0.18 0.1682 0.3 0.17 0.265 0.265 0.265 0.221 0.2995702285 0.2995704905 0.304264039 0.3008887144 0.3006003047 0.3006003955 0.121595 0.32955538 0.17 0.14 0.225 0.165 0.21 0.17 0.2833 0.414 0.3689 0.2983 0.3282 0.228 0.21 0.1152 0.1596 0.1596 0.1596 0.159597 0.18 0.0736 0.28 0.2153361345} {curve(which) 1 1 0.83 0.9 0.9877 0.6 0.797 0.69 0.69 0.69 0.848 0.700699322 0.7006994156 0.6236411451 0.6790547558 0.6837888343 0.6837888243 1.493994 1.02459662 1.14 0.855 0.8 0.84 0.88 0.797 1.7072 1.3035 0.7775 1.2835 0.6156 0.8616 0.71 0.8264 0.8404 0.8404 0.8404 0.840403 0.77 0.9003 0.595 0.7741596639}} addUserKnob {12 bxy} bxy {{curve(which) 0 0.0001 0.128 0.065 0.079 0.15 0.131 0.15 0.15 0.15 0.0861 0.07964206674 0.1450115843 0.1349139613 0.09539869461 0.1081544556 0.1453319462 0.095612 0.10844263 0.08 0.1 0.089 0.1 0.09 0.131 0.0856 0.0342 0.0956 0.0756 0.0783 0.1006 0.15 0.1566 0.0366 0.0366 0.0366 0.036598 0.1 0.1166 0.155 0.1301229508} {curve(which) 0 -0.077 0.044 -0.0805 -0.1155 0.06 0.046 0.06 0.06 0.06 -0.102 -0.05493795109 0.05109712509 0.03471744128 -0.02937932683 -0.008688175787 0.05161680362 -0.084589 -0.03467857 -0.1 -0.05 -0.087 -0.03 -0.08 0.046 -0.0708 -0.0833 -0.0332 -0.086 -0.0233 -0.082 0.06 0.0177 0.0001 0.0001 0.0001 0.000105 0.02 0.0374 0.07 0.03483606557}} addUserKnob {12 wxy} wxy {{curve(which) 0.33333333 0.32168 0.32168 0.3127 0.3127 0.3127 0.3127 0.32168 0.3127 0.314 0.3127 0.3216831877 0.3216832104 0.3216832894 0.3216832894 0.3216832104 0.3216832894 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127 0.3127 0.3135 0.3135 0.3135 0.3127 0.3127 0.3127 0.3127 0.3457 0.3457 0.3457 0.3457 0.345704 0.33243 0.33333333 0.3127 0.3457} {curve(which) 0.33333333 0.33767 0.33767 0.329 0.329 0.329 0.329 0.33767 0.329 0.351 0.329 0.337673316 0.3376736101 0.3376734472 0.3376734472 0.3376736101 0.3376734472 0.329 0.329 0.329 0.329 0.329 0.329 0.329 0.329 0.3305 0.3305 0.3305 0.329 0.329 0.329 0.329 0.3585 0.3585 0.3585 0.3585 0.35854 0.34744 0.33333333 0.329 0.3585}} } Output { name Output xpos -40 ypos 86 } end_group Expression { expr0 1.15*r-(1.15-1)*b expr1 0.66*g-(0.66-1)*r expr2 b name Expression3 label "X_p Y_p Z" note_font Helvetica xpos -40 ypos -335 } ColorMatrix { matrix { {0.41478972 0.579999 0.014648} {-0.20151 1.120649 0.0531008} {-0.0166008 0.2648 0.6684799} } name ColorMatrix6 label XYZ_TO_LMS note_font Helvetica xpos -40 ypos -295 } Group { name eotf_inverse_ST2084_ note_font Helvetica xpos -40 ypos -249 disable {{!parent.domain_range_scale}} addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 m_1} m_1 {{2610/4096*(1/4)}} addUserKnob {7 m_2} m_2 {{1.7*2523/2**5}} addUserKnob {7 c_1} c_1 {{3424/4096}} addUserKnob {7 c_2} c_2 {{2413/4096*32}} addUserKnob {7 c_3} c_3 {{2392/4096*32}} addUserKnob {7 L_p R 0 10000} L_p {{parent.L_p}} } Input { inputs 0 name Input xpos -40 ypos -290 } Expression { expr0 "pow(r/L_p, m_1)" expr1 "pow(g/L_p, m_1)" expr2 "pow(b/L_p, m_1)" name Expression4 label Y_p note_font Helvetica xpos -40 ypos -255 } Expression { expr0 "pow((c_1+c_2*r)/(c_3*r+1), m_2)" expr1 "pow((c_1+c_2*g)/(c_3*g+1), m_2)" expr2 "pow((c_1+c_2*b)/(c_3*b+1), m_2)" name Expression8 label N note_font Helvetica xpos -40 ypos -215 } Output { name Output xpos -40 ypos -170 } end_group ColorMatrix { matrix { {0.5 0.5 0} {3.524 -4.066708 0.542708} {0.199076 1.096799 -1.295875} } name ColorMatrix2 label LMS_P_TO_IZAZBZ note_font Helvetica xpos -40 ypos -215 } Expression { temp_name0 d_0 temp_expr0 1.6295499532821565e-11 expr0 r*(1+d)/(1+d*r)-d_0 expr1 g expr2 b name Expression1 label Jz note_font Helvetica xpos -40 ypos -175 } Switch { inputs 2 which {{parent.direction}} name SwitchDirection note_font Helvetica xpos -40 ypos -49 } Output { name Output xpos -40 ypos 42 } end_group Dot { name Dot73 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos 5034 ypos 1114 } Group { name ToneScale29 note_font Helvetica selected true xpos 5000 ypos 1148 addUserKnob {20 ToneScale} addUserKnob {4 norm M {none luminance "max rgb" "weighted power" "" ""}} norm "weighted power" addUserKnob {35 weight_presets l "" +STARTLINE M {weights/basic "knobs this \{nmult 1.0 weights \{1 1 1\} pow 4\}" weights/yellow "knobs this \{nmult 0.83743219 weights \{1.22 1.2 0.58\} pow 5\}" "" "" ""}} addUserKnob {78 weights l "" -STARTLINE n 3} weights {1.22 1.2 0.58} addUserKnob {7 nmult l mult R 0.1 1} nmult 0.83743219 addUserKnob {3 pow l power -STARTLINE} pow 5 addUserKnob {4 direction t "Apply tonescale in forward or inverse direction" M {forward inverse}} addUserKnob {26 ""} addUserKnob {26 display_label l " " T "Single Stage Tone Scale"} addUserKnob {35 presets l "" t "display output presets." +STARTLINE M {luminance/SDR "knobs this \{lum \{0.02 4.8 48\} override_ssts_params 0\}" "luminance/P3D65 ST2084 108nits 7.2nits" "knobs this \{lum \{0.0001 7.2 108\} override_ssts_params 0\}" "luminance/P3D65 ST2084 1000nits 15nits" "knobs this \{lum \{0.0001 15 1000\} override_ssts_params 0\}" "luminance/P3D65 ST2084 2000nits 15nits" "knobs this \{lum \{0.0001 15 2000\} override_ssts_params 0\}" "luminance/P3D65 ST2084 2000nits 15nits" "knobs this \{lum \{0.0001 15 2000\} override_ssts_params 0\}" "luminance/P3D65 ST2084 4000nits 15nits" "knobs this \{lum \{0.0001 15 4000\} override_ssts_params 0\}" luminance/Rec2020_HLG_1000nits_15nits "knobs this \{lum \{0.0001 15 1000\} override_ssts_params 0\}" luminance/Rec2020_ST2084_1000nits_15nits "knobs this \{lum \{0.0001 15 1000\} override_ssts_params 0\}" luminance/Rec2020_ST2084_2000nits_15nits "knobs this \{lum \{0.0001 15 2000\} override_ssts_params 0\}" luminance/Rec2020_ST2084_4000nits_15nits "knobs this \{lum \{0.0001 15 4000\} override_ssts_params 0\}" luminance/OCES "knobs this \{lum \{0.0001 4.8 10000\} override_ssts_params 0\}" ""}} addUserKnob {78 lum l "" t "SSTS Display Luminance: \ny_min y_mid y_max\n\nAccording to Zach Lewis's ACES_OT\nhttps://gist.github.com/zachlewis/786c0be941868644c993fde1c3515c2c\n\nStandard Cinema: \n0.02 4.8 48\nDolby Cinema: \n0.0001 7.2 108\nDolby Pulsar: \n0.005 15 4000\nDolby PRR-4220: \n0.005 10 600\nSony BVM-X300: \n0.0001 10 1000\nACES OCES: \n0.0001 4.8 10000\n\n" -STARTLINE n 3} lum {0.02 4.8 48} addUserKnob {35 presets_ssts_param l "" t "If you want to override the default SSTS parameters and play around, here are some useful starting points." +STARTLINE M {presets/default "knobs this \{override_ssts_params 0 pctLow 0.35 pctHigh 0.89 slope \{0 1.55 0.\}\}" presets/sdr "knobs this \{override_ssts_params 1 pctLow 0.35 pctHigh 0.89 slope \{0.1 1.6 0.01\}\}" presets/high "knobs this \{override_ssts_params 1 pctLow 0.2 pctHigh 0.89 slope \{0.28 1.75 0.01\}\}" presets/med "knobs this \{override_ssts_params 1 pctLow 0.40 pctHigh 0.89 slope \{0.38 1.3 0.01\}\}" presets/med-low "knobs this \{override_ssts_params 1 pctLow 0.40 pctHigh 0.80 slope \{0.38 1.42 0.01\}\}" presets/low "knobs this \{override_ssts_params 1 pctLow 0.40 pctHigh 0.80 slope \{0.38 1.2 0.01\}\}" "" "" "" "" ""}} addUserKnob {6 override_ssts_params l "customize ssts params" t "Enable overrides of SSTS params.\n\nOtherwise the values will be calculated automatically by the algorithm." -STARTLINE} addUserKnob {6 use_c9 l "use c9" +STARTLINE} addUserKnob {7 exposure R -5 5} addUserKnob {7 pctLow l knee} pctLow 0.35 addUserKnob {7 pctHigh l shoulder} pctHigh 0.89 addUserKnob {78 slope n 3} slope {0 1.55 0} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x232323ff label "Norm\n\n\n\n" note_font Helvetica note_font_size 25 note_font_color 0xffffffff xpos -553 ypos -53 bdwidth 522 bdheight 275 z_order -10 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x232323ff label "Forward\n\n\n\n" note_font Helvetica note_font_size 25 note_font_color 0xffffffff xpos -413 ypos 228 bdwidth 385 bdheight 442 z_order -10 } BackdropNode { inputs 0 name BackdropNode3 tile_color 0x23232301 label "Inverse\n\n\n\n\n\n\n\n" note_font Helvetica note_font_size 25 note_font_color 0xffffffff xpos 16 ypos 229 bdwidth 354 bdheight 446 z_order -10 } Input { inputs 0 name Input xpos -40 ypos -170 } Dot { name Dot1 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -6 ypos 34 } set N277a2b30 [stack 0] Dot { name Dot10 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -6 ypos 514 } set N277a7ac0 [stack 0] push $N277a2b30 Dot { name Dot2 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -126 ypos 34 } Dot { name Dot12 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -246 ypos 34 } set N277b18b0 [stack 0] Dot { name Dot3 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -366 ypos 34 } set N277b6780 [stack 0] Dot { name Dot11 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -486 ypos 34 } Expression { temp_name0 m temp_expr0 1e-8 temp_name1 mx temp_expr1 max(r,g,b) temp_name2 p1 temp_expr2 parent.pow temp_name3 p2 temp_expr3 parent.pow-1 channel0 rgb expr0 (fabs(r)SSTS Display Luminance: \ny_min y_mid y_max\n\nAccording to Zach Lewis's ACES_OT\nhttps://gist.github.com/zachlewis/786c0be941868644c993fde1c3515c2c\n\nStandard Cinema: \n0.02 4.8 48\nDolby Cinema: \n0.0001 7.2 108\nDolby Pulsar: \n0.005 15 4000\nDolby PRR-4220: \n0.005 10 600\nSony BVM-X300: \n0.0001 10 1000\nACES OCES: \n0.0001 4.8 10000\n\n" n 3} lum {{parent.lum} 4.8 {parent.lum}} addUserKnob {6 override_ssts_params l "override ssts params" t "Enable overrides of SSTS params.\n\nOtherwise the values will be calculated automatically by the algorithm." +STARTLINE} override_ssts_params {{parent.ACES_SSTS.AcesSSTSKernel_override_curve_params}} addUserKnob {7 exposure R -5 5} exposure {{parent.exposure}} addUserKnob {7 knee} knee {{parent.pctLow}} addUserKnob {7 shoulder} shoulder {{parent.pctHigh}} addUserKnob {78 slope n 3} slope {{parent.slope} {parent.slope} {parent.slope}} addUserKnob {20 TsParams_tab l TsParams} addUserKnob {7 expShift R -4 4} expShift {{"override_ssts_params ? exposure : 0"}} addUserKnob {13 minPoint t "x; // ACES\ny; // luminance\nz; // slope"} minPoint {{"pow(2, log(0.18*pow(2, MIN_STOP_RRT+((MIN_STOP_SDR-MIN_STOP_RRT)/(log10(MIN_LUM_SDR)-log10(MIN_LUM_RRT)))*(log10(minPoint.y)-log10(MIN_LUM_RRT))))/log(2)-expShift)"} {lum.0} {override_ssts_params?slope.0:0}} addUserKnob {13 midPoint t "x; // ACES\ny; // luminance\nz; // slope"} midPoint {{"pow(2, ((log(0.18)/log(2)-expShift)))"} {lum.1} {override_ssts_params?slope.1:1.55}} addUserKnob {13 maxPoint t "x; // ACES\ny; // luminance\nz; // slope"} maxPoint {{"pow(2, log(0.18*pow(2, (MAX_STOP_SDR+(MAX_STOP_RRT-MAX_STOP_SDR)/(log10(MAX_LUM_RRT)-log10(MAX_LUM_SDR))*(log10(maxPoint.y)-log10(MAX_LUM_SDR)))))/log(2)-expShift)"} {lum.2} {override_ssts_params?slope.2:0}} addUserKnob {7 knotIncLow} knotIncLow {{"(log10(midPoint.x) - log10(minPoint.x)) / 3.0"}} addUserKnob {7 knotIncHigh} knotIncHigh {{"(log10(maxPoint.x) - log10(midPoint.x)) / 3.0"}} addUserKnob {7 pctLow} pctLow {{0.18+(0.35-0.18)/(MIN_STOP_SDR-MIN_STOP_RRT)*(log(minPoint.x/0.18)/log(2)-MIN_STOP_RRT)}} addUserKnob {7 pctHigh} pctHigh {{0.89+(0.90-0.89)/(MAX_STOP_SDR-MAX_STOP_RRT)*(log(maxPoint.x/0.89)/log(2)-MAX_STOP_RRT)}} addUserKnob {78 coefsLow n 5} coefsLow {{"(minPoint.z * (log10(minPoint.x)-0.5*knotIncLow)) + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x))"} {"(minPoint.z * (log10(minPoint.x)+0.5*knotIncLow)) + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x))"} {log10(minPoint.y)+pctLow*(log10(midPoint.y)-log10(minPoint.y))} {"(midPoint.z * (log10(midPoint.x)-0.5*knotIncLow)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {"(midPoint.z * (log10(midPoint.x)+0.5*knotIncLow)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"}} addUserKnob {78 coefsHigh n 5} coefsHigh {{"(midPoint.z * (log10(midPoint.x)-0.5*knotIncHigh)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {"(midPoint.z * (log10(midPoint.x)+0.5*knotIncHigh)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {log10(midPoint.y)+pctHigh*(log10(maxPoint.y)-log10(midPoint.y))} {"(maxPoint.z * (log10(maxPoint.x)-0.5*knotIncHigh)) + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x))"} {"(maxPoint.z * (log10(maxPoint.x)+0.5*knotIncHigh)) + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x))"}} addUserKnob {7 KNOT_INC_LOW} KNOT_INC_LOW {{"(log10(midPoint.x) - log10(minPoint.x)) / (N_KNOTS_LOW - 1)"}} addUserKnob {7 KNOT_INC_HIGH} KNOT_INC_HIGH {{"(log10(maxPoint.x) - log10(midPoint.x)) / (N_KNOTS_HIGH - 1)"}} addUserKnob {78 KNOT_Y_LOW n 4} KNOT_Y_LOW {{"(coefsLow.0 + coefsLow.1) / 2"} {"(coefsLow.1 + coefsLow.2) / 2"} {"(coefsLow.2 + coefsLow.3) / 2"} {"(coefsLow.3 + coefsLow.4) / 2"}} addUserKnob {78 KNOT_Y_HIGH n 4} KNOT_Y_HIGH {{"(coefsHigh.0 + coefsHigh.1) / 2"} {"(coefsHigh.1 + coefsHigh.2) / 2"} {"(coefsHigh.2 + coefsHigh.3) / 2"} {"(coefsHigh.3 + coefsHigh.4) / 2"}} addUserKnob {20 Constants_tab l const} addUserKnob {3 N_KNOTS_LOW} N_KNOTS_LOW 4 addUserKnob {3 N_KNOTS_HIGH} N_KNOTS_HIGH 4 addUserKnob {7 MIN_STOP_SDR R -20 20} MIN_STOP_SDR -6.5 addUserKnob {7 MAX_STOP_SDR R -20 20} MAX_STOP_SDR 6.5 addUserKnob {7 MIN_STOP_RRT R -20 20} MIN_STOP_RRT -15 addUserKnob {7 MAX_STOP_RRT R -20 20} MAX_STOP_RRT 18 addUserKnob {7 MIN_LUM_SDR R 0 0.1} MIN_LUM_SDR 0.02 addUserKnob {7 MAX_LUM_SDR R 0 100} MAX_LUM_SDR 48 addUserKnob {7 MIN_LUM_RRT R 0 0.1} MIN_LUM_RRT 0.0001 addUserKnob {7 MAX_LUM_RRT R 0 10000} MAX_LUM_RRT 10000 } Input { inputs 0 name Input xpos -1030 ypos -634 } Dot { name Dot25 label " " xpos -996 ypos -318 } set N2783c8e0 [stack 0] Dot { name Dot26 label " " xpos -996 ypos 1506 } push $N2783c8e0 Dot { name Dot4 label " " xpos -886 ypos -318 } set N27646450 [stack 0] Dot { name Dot5 label " " xpos -776 ypos -318 } set N2764b130 [stack 0] Dot { name Dot2 label " " xpos -666 ypos -318 } set N2764ff50 [stack 0] Dot { name Dot3 label " " xpos -556 ypos -318 } set N27654df0 [stack 0] Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "logr <= log10(minPoint.y)" expr1 "logg <= log10(minPoint.y)" expr2 "logb <= log10(minPoint.y)" name segment_bottom xpos -590 ypos -202 } Dot { name Dot1 label " " xpos -556 ypos 162 } push $N27654df0 Dot { name Dot7 label " " xpos -336 ypos -318 } set N2766cc90 [stack 0] Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" channel0 {rgba.red -rgba.green -rgba.blue none} expr0 log10(minPoint.x) expr1 log10(minPoint.x) expr2 log10(minPoint.x) expr3 1 name Expression xpos -370 ypos -202 } Merge2 { inputs 2 operation multiply also_merge all name Multiply3 xpos -370 ypos 158 } Dot { name Dot27 label " " xpos -336 ypos 786 } push $N2764ff50 Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "( logr > log10(minPoint.y) ) && ( logr <= log10(midPoint.y) )" expr1 "( logg > log10(minPoint.y) ) && ( logg <= log10(midPoint.y) )" expr2 "( logb > log10(minPoint.y) ) && ( logb <= log10(midPoint.y) )" name segment_low xpos -700 ypos -202 } Dot { name Dot22 label " " xpos -666 ypos 354 } push $N2766cc90 Dot { name Dot9 label " " xpos -6 ypos -318 } set N276a8390 [stack 0] Dot { name Dot6 label " " xpos -6 ypos -174 } set N276ad120 [stack 0] Dot { name Dot8 label " " xpos 214 ypos -174 } set N276b1f70 [stack 0] Dot { name Dot13 label " " xpos 434 ypos -174 } Dot { name Dot19 xpos 434 ypos -78 } set N276bbd20 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(b, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_LOW.0) && (logy <= KNOT_Y_LOW.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_LOW.1) && (logy <= KNOT_Y_LOW.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_LOW.2) && (logy <= KNOT_Y_LOW.3)" expr0 "low ? coefsLow.0 : mid ? coefsLow.1 : coefsLow.2" expr1 "low ? coefsLow.1 : mid ? coefsLow.2 : coefsLow.3" expr2 "low ? coefsLow.2 : mid ? coefsLow.3 : coefsLow.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow5 xpos 290 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low5 xpos 290 ypos -34 } push $N276bbd20 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bb, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy5 xpos 400 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b)/(-sqrt(g*g - 4*r*b)-g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 "log10(minPoint.x) + (t +j) * KNOT_INC_LOW" expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals4 xpos 400 ypos 14 addUserKnob {20 User} addUserKnob {7 knotIncLow} knotIncLow {{parent.knotIncLow}} addUserKnob {13 min l Min} min {{parent.min.x} {parent.min.y} {parent.minSlope}} } push 0 push $N276ad120 Dot { name Dot10 xpos -6 ypos -78 } set N276f8540 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_LOW.0) && (logy <= KNOT_Y_LOW.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_LOW.1) && (logy <= KNOT_Y_LOW.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_LOW.2) && (logy <= KNOT_Y_LOW.3)" expr0 "low ? coefsLow.0 : mid ? coefsLow.1 : coefsLow.2" expr1 "low ? coefsLow.1 : mid ? coefsLow.2 : coefsLow.3" expr2 "low ? coefsLow.2 : mid ? coefsLow.3 : coefsLow.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow xpos -150 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low xpos -150 ypos -34 } push $N276f8540 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Br, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy xpos -40 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b)/(-sqrt(g*g - 4*r*b)-g)" expr0 "log10(minPoint.x) + (t +j) * KNOT_INC_LOW" channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals xpos -40 ypos 14 addUserKnob {20 User} addUserKnob {7 knotIncLow} knotIncLow {{parent.knotIncLow}} addUserKnob {13 min l Min} min {{parent.min.x} {parent.min.y} {parent.minSlope}} } push $N276b1f70 Dot { name Dot18 xpos 214 ypos -78 } set N27734b00 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(g, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_LOW.0) && (logy <= KNOT_Y_LOW.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_LOW.1) && (logy <= KNOT_Y_LOW.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_LOW.2) && (logy <= KNOT_Y_LOW.3)" expr0 "low ? coefsLow.0 : mid ? coefsLow.1 : coefsLow.2" expr1 "low ? coefsLow.1 : mid ? coefsLow.2 : coefsLow.3" expr2 "low ? coefsLow.2 : mid ? coefsLow.3 : coefsLow.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow4 xpos 70 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low4 xpos 70 ypos -34 } push $N27734b00 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bg, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy4 xpos 180 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b)/(-sqrt(g*g - 4*r*b)-g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 "log10(minPoint.x) + (t +j) * KNOT_INC_LOW" channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals5 xpos 180 ypos 14 addUserKnob {20 User} addUserKnob {7 knotIncLow} knotIncLow {{parent.knotIncLow}} addUserKnob {13 min l Min} min {{parent.min.x} {parent.min.y} {parent.minSlope}} } Merge2 { inputs 3+1 operation plus bbox B name Merge2 xpos 180 ypos 134 } Merge2 { inputs 2 operation multiply also_merge all name Multiply1 xpos 180 ypos 350 } Dot { name Dot28 label " " xpos 214 ypos 786 } push 0 push $N2764b130 Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "( logr >= log10(midPoint.y) ) && ( logr < log10(maxPoint.y) )" expr1 "( logg >= log10(midPoint.y) ) && ( logg < log10(maxPoint.y) )" expr2 "( logb >= log10(midPoint.y) ) && ( logb < log10(maxPoint.y) )" name segment_high xpos -810 ypos -202 } Dot { name Dot23 label " " xpos -776 ypos 474 } push $N276a8390 Dot { name Dot14 label " " xpos 764 ypos -318 } set N275a9e90 [stack 0] Dot { name Dot15 label " " xpos 764 ypos -174 } set N275aec20 [stack 0] Dot { name Dot17 label " " xpos 984 ypos -174 } set N275b3a70 [stack 0] Dot { name Dot20 label " " xpos 1204 ypos -174 } Dot { name Dot16 xpos 1204 ypos -78 } set N275bd710 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(b, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_HIGH.0) && (logy <= KNOT_Y_HIGH.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_HIGH.1) && (logy <= KNOT_Y_HIGH.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_HIGH.2) && (logy <= KNOT_Y_HIGH.3)" expr0 "low ? coefsHigh.0 : mid ? coefsHigh.1 : coefsHigh.2" expr1 "low ? coefsHigh.1 : mid ? coefsHigh.2 : coefsHigh.3" expr2 "low ? coefsHigh.2 : mid ? coefsHigh.3 : coefsHigh.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow3 xpos 1060 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low3 xpos 1060 ypos -34 } push $N275bd710 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bb, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy3 xpos 1170 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b) / (-sqrt(g*g - 4*r*b) - g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 "log10(midPoint.x) + (t +j) * KNOT_INC_HIGH" expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals3 xpos 1170 ypos 14 } push 0 push $N275aec20 Dot { name Dot11 xpos 764 ypos -78 } set N275f85f0 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_HIGH.0) && (logy <= KNOT_Y_HIGH.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_HIGH.1) && (logy <= KNOT_Y_HIGH.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_HIGH.2) && (logy <= KNOT_Y_HIGH.3)" expr0 "low ? coefsHigh.0 : mid ? coefsHigh.1 : coefsHigh.2" expr1 "low ? coefsHigh.1 : mid ? coefsHigh.2 : coefsHigh.3" expr2 "low ? coefsHigh.2 : mid ? coefsHigh.3 : coefsHigh.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow1 xpos 620 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low1 xpos 620 ypos -34 } push $N275f85f0 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Br, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy1 xpos 730 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b) / (-sqrt(g*g - 4*r*b) - g)" expr0 "log10(midPoint.x) + (t +j) * KNOT_INC_HIGH" channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals1 xpos 730 ypos 14 } push $N275b3a70 Dot { name Dot12 xpos 984 ypos -78 } set N276337a0 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(g, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_HIGH.0) && (logy <= KNOT_Y_HIGH.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_HIGH.1) && (logy <= KNOT_Y_HIGH.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_HIGH.2) && (logy <= KNOT_Y_HIGH.3)" expr0 "low ? coefsHigh.0 : mid ? coefsHigh.1 : coefsHigh.2" expr1 "low ? coefsHigh.1 : mid ? coefsHigh.2 : coefsHigh.3" expr2 "low ? coefsHigh.2 : mid ? coefsHigh.3 : coefsHigh.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow2 xpos 840 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low2 xpos 840 ypos -34 } push $N276337a0 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bg, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy2 xpos 950 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b) / (-sqrt(g*g - 4*r*b) - g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 "log10(midPoint.x) + (t +j) * KNOT_INC_HIGH" channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals2 xpos 950 ypos 14 } Merge2 { inputs 3+1 operation plus bbox B output rgb name Merge1 xpos 950 ypos 134 } Merge2 { inputs 2 operation multiply also_merge all name Multiply2 xpos 950 ypos 470 } Dot { name Dot29 label " " xpos 984 ypos 786 } push $N27646450 Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "logr >= log10(maxPoint.y) ? 1 : 0" expr1 "logg >= log10(maxPoint.y) ? 1 : 0" expr2 "logb >= log10(maxPoint.y) ? 1 : 0" name segment_peak xpos -920 ypos -202 } Dot { name Dot24 label " " xpos -886 ypos 618 } push $N275a9e90 Dot { name Dot21 label " " xpos 1534 ypos -318 } Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" channel0 {rgba.red -rgba.green -rgba.blue none} expr0 log10(maxPoint.x) expr1 log10(maxPoint.x) expr2 log10(maxPoint.x) expr3 1 name proc_low1 label Expression xpos 1500 ypos -208 } Merge2 { inputs 2 operation multiply also_merge all name Multiply4 xpos 1500 ypos 614 } Merge2 { inputs 4+1 operation plus bbox B output rgb name Merge3 xpos 510 ypos 1118 } Expression { channel0 {rgba.red -rgba.green -rgba.blue none} expr0 pow(10,r) expr1 pow(10,g) expr2 pow(10,b) name Expression13 xpos 510 ypos 1238 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 510 ypos 1496 } Output { name Output1 xpos 510 ypos 1814 } end_group MergeExpression { inputs 2 expr0 Ar==0?0:Br/Ar expr1 Ag==0?0:Bg/Ag expr2 Ab==0?0:Bb/Ab name MergeDivideReverse1 xpos 200 ypos 430 disable {{!parent.norm}} } Merge2 { inputs 2 operation multiply bbox B Achannels rgb Bchannels rgb output rgb name Merge1 note_font Helvetica xpos 200 ypos 511 disable {{!parent.norm}} } Dot { name Dot9 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos 234 ypos 634 } push $N277a7ac0 push $N277f3110 Dot { name Dot7 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -126 ypos 274 } Dot { name Dot13 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -126 ypos 314 } set N275256a0 [stack 0] push $N275256a0 Dot { name Dot14 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -246 ypos 314 } set N2752a5a0 [stack 0] Group { name ssts xpos -280 ypos 350 addUserKnob {20 ssts_tab l ssts} addUserKnob {26 display_label l " " T "Display Settings"} addUserKnob {78 lum l luminance t "SSTS Display Luminance: \ny_min y_mid y_max\n\nAccording to Zach Lewis's ACES_OT\nhttps://gist.github.com/zachlewis/786c0be941868644c993fde1c3515c2c\n\nStandard Cinema: \n0.02 4.8 48\nDolby Cinema: \n0.0001 7.2 108\nDolby Pulsar: \n0.005 15 4000\nDolby PRR-4220: \n0.005 10 600\nSony BVM-X300: \n0.0001 10 1000\nACES OCES: \n0.0001 4.8 10000\n\n" n 3} lum {{parent.lum} {parent.lum} {parent.lum}} addUserKnob {6 override_ssts_params l "override ssts params" t "Enable overrides of SSTS params.\n\nOtherwise the values will be calculated automatically by the algorithm." +STARTLINE} override_ssts_params {{parent.override_ssts_params}} addUserKnob {7 exposure R -5 5} exposure {{parent.exposure}} addUserKnob {7 knee} knee {{parent.pctLow}} addUserKnob {7 shoulder} shoulder {{parent.pctHigh}} addUserKnob {78 slope n 3} slope {{parent.slope} {parent.slope} {parent.slope}} addUserKnob {20 TsParams_tab l TsParams} addUserKnob {7 mid_lum l "mid lum" R 0 20} mid_lum {{parent.lum.1}} addUserKnob {7 expShift R -4 4} expShift {{"(parent.override_ssts_params ? exposure : 0) + (mid_lum<= 4.8 ? 0 : \[sample parent.expShift r 0 0] )"}} addUserKnob {13 minPoint t "x; // ACES\ny; // luminance\nz; // slope"} minPoint {{"pow(2, log(0.18*pow(2, MIN_STOP_RRT+((MIN_STOP_SDR-MIN_STOP_RRT)/(log10(MIN_LUM_SDR)-log10(MIN_LUM_RRT)))*(log10(minPoint.y)-log10(MIN_LUM_RRT))))/log(2)-expShift)"} {lum.0} {override_ssts_params?slope.0:0}} addUserKnob {13 midPoint t "x; // ACES\ny; // luminance\nz; // slope"} midPoint {{"pow(2, ((log(0.18)/log(2)-expShift)))"} 4.8 {override_ssts_params?slope.1:1.55}} addUserKnob {13 maxPoint t "x; // ACES\ny; // luminance\nz; // slope"} maxPoint {{"pow(2, log(0.18*pow(2, (MAX_STOP_SDR + (MAX_STOP_RRT-MAX_STOP_SDR) / (log10(MAX_LUM_RRT)-log10(MAX_LUM_SDR)) * (log10(maxPoint.y)-log10(MAX_LUM_SDR)))))/log(2)-expShift)"} {lum.2} {override_ssts_params?slope.2:0}} addUserKnob {7 knotIncLow} knotIncLow {{"(log10(midPoint.x) - log10(minPoint.x)) / 3.0"}} addUserKnob {7 knotIncHigh} knotIncHigh {{"(log10(maxPoint.x) - log10(midPoint.x)) / 3.0"}} addUserKnob {7 pctLow} pctLow {{0.18+(0.35-0.18)/(MIN_STOP_SDR-MIN_STOP_RRT)*(log(minPoint.x/0.18)/log(2)-MIN_STOP_RRT)}} addUserKnob {7 pctHigh} pctHigh {{0.89+(0.90-0.89)/(MAX_STOP_SDR-MAX_STOP_RRT)*(log(maxPoint.x/0.89)/log(2)-MAX_STOP_RRT)}} addUserKnob {78 coefsLow n 5} coefsLow {{"(minPoint.z * (log10(minPoint.x)-0.5*knotIncLow)) + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x))"} {"(minPoint.z * (log10(minPoint.x)+0.5*knotIncLow)) + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x))"} {log10(minPoint.y)+pctLow*(log10(midPoint.y)-log10(minPoint.y))} {"(midPoint.z * (log10(midPoint.x)-0.5*knotIncLow)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {"(midPoint.z * (log10(midPoint.x)+0.5*knotIncLow)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"}} addUserKnob {78 coefsHigh n 5} coefsHigh {{"(midPoint.z * (log10(midPoint.x)-0.5*knotIncHigh)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {"(midPoint.z * (log10(midPoint.x)+0.5*knotIncHigh)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {log10(midPoint.y)+pctHigh*(log10(maxPoint.y)-log10(midPoint.y))} {"(maxPoint.z * (log10(maxPoint.x)-0.5*knotIncHigh)) + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x))"} {"(maxPoint.z * (log10(maxPoint.x)+0.5*knotIncHigh)) + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x))"}} addUserKnob {20 Constants_tab l const} addUserKnob {3 N_KNOTS_LOW} N_KNOTS_LOW 4 addUserKnob {3 N_KNOTS_HIGH} N_KNOTS_HIGH 4 addUserKnob {7 MIN_STOP_SDR R -20 20} MIN_STOP_SDR -6.5 addUserKnob {7 MAX_STOP_SDR R -20 20} MAX_STOP_SDR 6.5 addUserKnob {7 MIN_STOP_RRT R -20 20} MIN_STOP_RRT -15 addUserKnob {7 MAX_STOP_RRT R -20 20} MAX_STOP_RRT 18 addUserKnob {7 MIN_LUM_SDR R 0 0.1} MIN_LUM_SDR 0.02 addUserKnob {7 MAX_LUM_SDR R 0 100} MAX_LUM_SDR 48 addUserKnob {7 MIN_LUM_RRT R 0 0.1} MIN_LUM_RRT 0.0001 addUserKnob {7 MAX_LUM_RRT R 0 10000} MAX_LUM_RRT 10000 } Input { inputs 0 name Input xpos -1030 ypos -634 } Dot { name Dot25 label " " xpos -996 ypos -318 } set N27349e50 [stack 0] Dot { name Dot26 label " " xpos -996 ypos 1506 } push $N27349e50 Dot { name Dot4 label " " xpos -886 ypos -318 } set N273538f0 [stack 0] Dot { name Dot5 label " " xpos -776 ypos -318 } set N27358680 [stack 0] Dot { name Dot2 label " " xpos -666 ypos -318 } set N2735d4a0 [stack 0] Dot { name Dot3 label " " xpos -556 ypos -318 } set N27362340 [stack 0] Expression { temp_name0 logr temp_expr0 "log10( max(r, 5.96046448e-08 ))" temp_name1 logg temp_expr1 "log10( max(g, 5.96046448e-08 ))" temp_name2 logb temp_expr2 "log10( max(b, 5.96046448e-08 ))" expr0 "logr <= log10(minPoint.x)" expr1 "logg <= log10(minPoint.x)" expr2 "logb <= log10(minPoint.x)" name segment_bottom xpos -590 ypos -178 } Dot { name Dot1 label " " xpos -556 ypos 162 } push $N27362340 Dot { name Dot7 label " " xpos -336 ypos -318 } set N2737a430 [stack 0] Expression { temp_name0 logr temp_expr0 "log10( max(r, 5.96046448e-08 ))" temp_name1 logg temp_expr1 "log10( max(g, 5.96046448e-08 ))" temp_name2 logb temp_expr2 "log10( max(b, 5.96046448e-08 ))" channel0 {rgba.red -rgba.green -rgba.blue none} expr0 "logr * minPoint.z + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x) )" expr1 "logg * minPoint.z + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x) )" expr2 "logb* minPoint.z + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x) )" expr3 1 name Expression xpos -370 ypos -178 } Merge2 { inputs 2 operation multiply also_merge all name Multiply3 xpos -370 ypos 158 } Dot { name Dot27 label " " xpos -336 ypos 786 } push $N2735d4a0 Expression { temp_name0 logr temp_expr0 "log10( max(r, 5.96046448e-08 ))" temp_name1 logg temp_expr1 "log10( max(g, 5.96046448e-08 ))" temp_name2 logb temp_expr2 "log10( max(b, 5.96046448e-08 ))" expr0 "( logr > log10(minPoint.x) ) * ( logr < log10(midPoint.x) )" expr1 "( logg > log10(minPoint.x) ) * ( logg < log10(midPoint.x) )" expr2 "( logb > log10(minPoint.x) ) * ( logb < log10(midPoint.x) )" name segment_low xpos -700 ypos -178 } Dot { name Dot22 label " " xpos -666 ypos 354 } push $N2737a430 Dot { name Dot9 label " " xpos -6 ypos -318 } set N273b5920 [stack 0] Dot { name Dot6 label " " xpos -6 ypos -198 } set N273ba6b0 [stack 0] Dot { name Dot8 label " " xpos 214 ypos -198 } set N273bf500 [stack 0] Dot { name Dot13 label " " xpos 434 ypos -198 } Dot { name Dot12 label " " xpos 434 ypos -78 } set N273c91a0 [stack 0] Expression { temp_name0 logx temp_expr0 "(log10( max(b, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_LOW-1) * (logx-log10(minPoint.x))/(log10(midPoint.x)-log10(minPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 "j == 0 ? coefsLow.0 : j == 1 ? coefsLow.1 : j == 2 ? coefsLow.2 :j == 3 ? coefsLow.3 : j == 4 ? coefsLow.4 : 0" expr1 "j == 0 ? coefsLow.1 : j == 1 ? coefsLow.2 : j == 2 ? coefsLow.3 :j == 3 ? coefsLow.4 : j == 4 ? coefsLow.4 : 0" expr2 "j == 0 ? coefsLow.2 : j == 1 ? coefsLow.3 : j == 2 ? coefsLow.4 :j == 3 ? coefsLow.4 : j == 4 ? coefsLow.4 : 0" name Expression5 xpos 290 ypos -34 } ColorMatrix { matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name ColorMatrix3 label "mult_f3_f33( cf, M)" xpos 290 ypos 8 } push $N273c91a0 Expression { temp_name0 logx temp_expr0 "(log10( max(b, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_LOW-1) * (logx-log10(minPoint.x))/(log10(midPoint.x)-log10(minPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 t*t expr1 t expr2 1 expr3 1 name Expression6 xpos 400 ypos -34 } MergeExpression { inputs 2 channel0 {rgba.red -rgba.green -rgba.blue none} expr0 0 expr1 0 expr2 (Ar*Br)+(Ag*Bg)+(Ab*Bb) name dot_f3_f2 label "logy = dot_f3_f3( monomials, mult_f3_f33( cf, M))" xpos 400 ypos 8 } push 0 push $N273bf500 Dot { name Dot11 label " " xpos 214 ypos -78 } set N27403f80 [stack 0] Expression { temp_name0 logx temp_expr0 "(log10( max(g, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_LOW-1) * (logx-log10(minPoint.x))/(log10(midPoint.x)-log10(minPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 "j == 0 ? coefsLow.0 : j == 1 ? coefsLow.1 : j == 2 ? coefsLow.2 :j == 3 ? coefsLow.3 : j == 4 ? coefsLow.4 : 0" expr1 "j == 0 ? coefsLow.1 : j == 1 ? coefsLow.2 : j == 2 ? coefsLow.3 :j == 3 ? coefsLow.4 : j == 4 ? coefsLow.4 : 0" expr2 "j == 0 ? coefsLow.2 : j == 1 ? coefsLow.3 : j == 2 ? coefsLow.4 :j == 3 ? coefsLow.4 : j == 4 ? coefsLow.4 : 0" name Expression3 xpos 70 ypos -34 } ColorMatrix { matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name ColorMatrix1 label "mult_f3_f33( cf, M)" xpos 70 ypos 8 } push $N27403f80 Expression { temp_name0 logx temp_expr0 "(log10( max(g, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_LOW-1) * (logx-log10(minPoint.x))/(log10(midPoint.x)-log10(minPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 t*t expr1 t expr2 1 expr3 1 name Expression4 xpos 180 ypos -34 } MergeExpression { inputs 2 channel0 {rgba.red -rgba.green -rgba.blue none} expr0 0 expr1 (Ar*Br)+(Ag*Bg)+(Ab*Bb) expr2 0 name dot_f3_f7 label "logy = dot_f3_f3( monomials, mult_f3_f33( cf, M))" xpos 180 ypos 8 } push $N273ba6b0 Dot { name Dot10 label " " xpos -6 ypos -78 } set N2743f200 [stack 0] Expression { temp_name0 logx temp_expr0 "(log10( max(r, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_LOW-1) * (logx-log10(minPoint.x))/(log10(midPoint.x)-log10(minPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 "j == 0 ? coefsLow.0 : j == 1 ? coefsLow.1 : j == 2 ? coefsLow.2 :j == 3 ? coefsLow.3 : j == 4 ? coefsLow.4 : 0" expr1 "j == 0 ? coefsLow.1 : j == 1 ? coefsLow.2 : j == 2 ? coefsLow.3 :j == 3 ? coefsLow.4 : j == 4 ? coefsLow.4 : 0" expr2 "j == 0 ? coefsLow.2 : j == 1 ? coefsLow.3 : j == 2 ? coefsLow.4 :j == 3 ? coefsLow.4 : j == 4 ? coefsLow.4 : 0" name Expression1 xpos -150 ypos -34 } ColorMatrix { matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name ColorMatrix2 label "mult_f3_f33( cf, M)" xpos -150 ypos 8 } push $N2743f200 Expression { temp_name0 logx temp_expr0 "(log10( max(r, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_LOW-1) * (logx-log10(minPoint.x))/(log10(midPoint.x)-log10(minPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 t*t expr1 t expr2 1 expr3 1 name Expression2 xpos -40 ypos -34 } MergeExpression { inputs 2 channel0 {rgba.red -rgba.green -rgba.blue none} expr0 (Ar*Br)+(Ag*Bg)+(Ab*Bb) expr1 0 expr2 0 name dot_f3_f1 label "logy = dot_f3_f3( monomials, mult_f3_f33( cf, M))" xpos -40 ypos 8 } Merge2 { inputs 3+1 operation plus bbox B output rgb name Merge1 xpos 180 ypos 158 } Merge2 { inputs 2 operation multiply also_merge all name Multiply1 xpos 180 ypos 350 } Dot { name Dot28 label " " xpos 214 ypos 786 } push 0 push $N27358680 Expression { temp_name0 logr temp_expr0 "log10( max(r, 5.96046448e-08 ))" temp_name1 logg temp_expr1 "log10( max(g, 5.96046448e-08 ))" temp_name2 logb temp_expr2 "log10( max(b, 5.96046448e-08 ))" expr0 "( logr >= log10(midPoint.x) ) * ( logr < log10(maxPoint.x) )" expr1 "( logg >= log10(midPoint.x) ) * ( logg < log10(maxPoint.x) )" expr2 "( logb >= log10(midPoint.x) ) * ( logb < log10(maxPoint.x) )" name segment_high xpos -810 ypos -178 } Dot { name Dot23 label " " xpos -776 ypos 474 } push $N273b5920 Dot { name Dot14 label " " xpos 764 ypos -318 } set N272b36f0 [stack 0] Dot { name Dot15 label " " xpos 764 ypos -198 } set N272b8480 [stack 0] Dot { name Dot17 label " " xpos 984 ypos -198 } set N272bd2d0 [stack 0] Dot { name Dot20 label " " xpos 1204 ypos -198 } Dot { name Dot19 label " " xpos 1204 ypos -78 } set N272c6f70 [stack 0] Expression { temp_name0 logx temp_expr0 "(log10( max(b, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_HIGH-1) * (logx-log10(midPoint.x))/(log10(maxPoint.x)-log10(midPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 "j == 0 ? coefsHigh.0 : j == 1 ? coefsHigh.1 : j == 2 ? coefsHigh.2 :j == 3 ? coefsHigh.3 : j == 4 ? coefsHigh.4 : 0" expr1 "j == 0 ? coefsHigh.1 : j == 1 ? coefsHigh.2 : j == 2 ? coefsHigh.3 :j == 3 ? coefsHigh.4 : j == 4 ? coefsHigh.4 : 0" expr2 "j == 0 ? coefsHigh.2 : j == 1 ? coefsHigh.3 : j == 2 ? coefsHigh.4 :j == 3 ? coefsHigh.4 : j == 4 ? coefsHigh.4 : 0" expr3 j name Expression11 xpos 1060 ypos -34 } ColorMatrix { matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name ColorMatrix6 label "mult_f3_f33( cf, M)" xpos 1060 ypos 8 } push $N272c6f70 Expression { temp_name0 logx temp_expr0 "(log10( max(b, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_HIGH-1) * (logx-log10(midPoint.x))/(log10(maxPoint.x)-log10(midPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 t*t expr1 t expr2 1 expr3 1 name Expression12 xpos 1170 ypos -34 } MergeExpression { inputs 2 channel0 {rgba.red -rgba.green -rgba.blue none} expr0 0 expr1 0 expr2 (Ar*Br)+(Ag*Bg)+(Ab*Bb) name dot_f3_f6 label "logy = dot_f3_f3( monomials, mult_f3_f33( cf, M))" xpos 1170 ypos 8 } push 0 push $N272bd2d0 Dot { name Dot18 label " " xpos 984 ypos -78 } set N27302230 [stack 0] Expression { temp_name0 logx temp_expr0 "(log10( max(g, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_HIGH-1) * (logx-log10(midPoint.x))/(log10(maxPoint.x)-log10(midPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 "j == 0 ? coefsHigh.0 : j == 1 ? coefsHigh.1 : j == 2 ? coefsHigh.2 :j == 3 ? coefsHigh.3 : j == 4 ? coefsHigh.4 : 0" expr1 "j == 0 ? coefsHigh.1 : j == 1 ? coefsHigh.2 : j == 2 ? coefsHigh.3 :j == 3 ? coefsHigh.4 : j == 4 ? coefsHigh.4 : 0" expr2 "j == 0 ? coefsHigh.2 : j == 1 ? coefsHigh.3 : j == 2 ? coefsHigh.4 :j == 3 ? coefsHigh.4 : j == 4 ? coefsHigh.4 : 0" expr3 j name Expression9 xpos 840 ypos -34 } ColorMatrix { matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name ColorMatrix5 label "mult_f3_f33( cf, M)" xpos 840 ypos 8 } push $N27302230 Expression { temp_name0 logx temp_expr0 "(log10( max(g, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_HIGH-1) * (logx-log10(midPoint.x))/(log10(maxPoint.x)-log10(midPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 t*t expr1 t expr2 1 expr3 1 name Expression10 xpos 950 ypos -34 } MergeExpression { inputs 2 channel0 {rgba.red -rgba.green -rgba.blue none} expr0 0 expr1 (Ar*Br)+(Ag*Bg)+(Ab*Bb) expr2 0 name dot_f3_f5 label "logy = dot_f3_f3( monomials, mult_f3_f33( cf, M))" xpos 950 ypos 8 } push $N272b8480 Dot { name Dot16 label " " xpos 764 ypos -78 } set N2733d510 [stack 0] Expression { temp_name0 logx temp_expr0 "(log10( max(r, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_HIGH-1) * (logx-log10(midPoint.x))/(log10(maxPoint.x)-log10(midPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 "j == 0 ? coefsHigh.0 : j == 1 ? coefsHigh.1 : j == 2 ? coefsHigh.2 :j == 3 ? coefsHigh.3 : j == 4 ? coefsHigh.4 : 0" expr1 "j == 0 ? coefsHigh.1 : j == 1 ? coefsHigh.2 : j == 2 ? coefsHigh.3 :j == 3 ? coefsHigh.4 : j == 4 ? coefsHigh.4 : 0" expr2 "j == 0 ? coefsHigh.2 : j == 1 ? coefsHigh.3 : j == 2 ? coefsHigh.4 :j == 3 ? coefsHigh.4 : j == 4 ? coefsHigh.4 : 0" expr3 j name Expression7 xpos 620 ypos -34 } ColorMatrix { matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name ColorMatrix4 label "mult_f3_f33( cf, M)" xpos 620 ypos 8 } push $N2733d510 Expression { temp_name0 logx temp_expr0 "(log10( max(r, 5.96046448e-08 )))" temp_name1 knot_coord temp_expr1 "(N_KNOTS_HIGH-1) * (logx-log10(midPoint.x))/(log10(maxPoint.x)-log10(midPoint.x))" temp_name2 j temp_expr2 int(knot_coord) temp_name3 t temp_expr3 "knot_coord - j" expr0 t*t expr1 t expr2 1 expr3 1 name Expression8 xpos 730 ypos -34 } MergeExpression { inputs 2 channel0 {rgba.red -rgba.green -rgba.blue none} expr0 (Ar*Br)+(Ag*Bg)+(Ab*Bb) expr1 0 expr2 0 name dot_f3_f4 label "logy = dot_f3_f3( monomials, mult_f3_f33( cf, M))" xpos 730 ypos 8 } Merge2 { inputs 3+1 operation plus bbox B output rgb name Merge2 xpos 950 ypos 158 } Merge2 { inputs 2 operation multiply also_merge all name Multiply2 xpos 950 ypos 470 } Dot { name Dot29 label " " xpos 984 ypos 786 } push $N273538f0 Expression { temp_name0 logr temp_expr0 "log10( max(r, 5.96046448e-08 ))" temp_name1 logg temp_expr1 "log10( max(g, 5.96046448e-08 ))" temp_name2 logb temp_expr2 "log10( max(b, 5.96046448e-08 ))" expr0 "logr >= log10(maxPoint.x) ? 1 : 0" expr1 "logg >= log10(maxPoint.x) ? 1 : 0" expr2 "logb >= log10(maxPoint.x) ? 1 : 0" name segment_peak xpos -920 ypos -178 } Dot { name Dot24 label " " xpos -886 ypos 618 } push $N272b36f0 Dot { name Dot21 label " " xpos 1534 ypos -318 } Expression { temp_name0 logr temp_expr0 "log10( max(r, 5.96046448e-08 ))" temp_name1 logg temp_expr1 "log10( max(g, 5.96046448e-08 ))" temp_name2 logb temp_expr2 "log10( max(b, 5.96046448e-08 ))" channel0 {rgba.red -rgba.green -rgba.blue none} expr0 "logr * maxPoint.z + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x) )" expr1 "logg * maxPoint.z + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x) )" expr2 "logb* maxPoint.z + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x) )" expr3 1 name proc_low1 label Expression xpos 1500 ypos -160 } Merge2 { inputs 2 operation multiply also_merge all name Multiply4 xpos 1500 ypos 614 } Dot { name Dot30 xpos 1534 ypos 810 } Merge2 { inputs 4+1 operation plus bbox B output rgb name Merge3 xpos 510 ypos 1118 } Expression { channel0 {rgba.red -rgba.green -rgba.blue none} expr0 pow(10,r) expr1 pow(10,g) expr2 pow(10,b) name Expression13 xpos 510 ypos 1238 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 510 ypos 1496 } Output { name Output1 xpos 510 ypos 1814 } end_group Expression { expr0 "(r - Ymin) / (Ymax - Ymin)" expr1 "(g - Ymin) / (Ymax - Ymin)" expr2 "(b - Ymin) / (Ymax - Ymin)" expr3 1 name Y_2_linCV_f3_ xpos -280 ypos 390 addUserKnob {20 Luminance} addUserKnob {7 Ymin R 0.0001 0.02} Ymin {{parent.lum.0}} addUserKnob {7 Ymax R 48 10000} Ymax {{parent.lum.2}} } MergeExpression { inputs 2 expr0 Ar==0?0:Br/Ar expr1 Ag==0?0:Bg/Ag expr2 Ab==0?0:Bb/Ab name MergeDivideReverse xpos -160 ypos 453 disable {{!parent.norm}} } Merge2 { inputs 2 operation multiply bbox B Achannels rgb Bchannels rgb output rgb name Merge2 note_font Helvetica xpos -160 ypos 511 disable {{!parent.norm}} } Dot { name Dot4 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -126 ypos 634 } Switch { inputs 2 which {{parent.direction}} name SwitchDirection note_font Helvetica xpos -40 ypos 791 } Output { name Output xpos -40 ypos 910 } push $N2752a5a0 Reformat { type "to box" box_width 4 box_height 4 box_fixed true name Reformat1 note_font Helvetica xpos -400 ypos 311 } Fill { output rgb color {{parent.ssts.mid_lum}} name Fill1 note_font Helvetica xpos -400 ypos 351 } Group { name inv_ssts1 xpos -400 ypos 390 addUserKnob {20 ssts_tab l ssts} addUserKnob {78 lum l luminance t "SSTS Display Luminance: \ny_min y_mid y_max\n\nAccording to Zach Lewis's ACES_OT\nhttps://gist.github.com/zachlewis/786c0be941868644c993fde1c3515c2c\n\nStandard Cinema: \n0.02 4.8 48\nDolby Cinema: \n0.0001 7.2 108\nDolby Pulsar: \n0.005 15 4000\nDolby PRR-4220: \n0.005 10 600\nSony BVM-X300: \n0.0001 10 1000\nACES OCES: \n0.0001 4.8 10000\n\n" n 3} lum {{parent.lum} 4.8 {parent.lum}} addUserKnob {6 override_ssts_params l "override ssts params" t "Enable overrides of SSTS params.\n\nOtherwise the values will be calculated automatically by the algorithm." +STARTLINE} override_ssts_params {{parent.ACES_SSTS.AcesSSTSKernel_override_curve_params}} addUserKnob {7 exposure R -5 5} exposure {{parent.exposure}} addUserKnob {7 knee} knee {{parent.pctLow}} addUserKnob {7 shoulder} shoulder {{parent.pctHigh}} addUserKnob {78 slope n 3} slope {{parent.slope} {parent.slope} {parent.slope}} addUserKnob {20 TsParams_tab l TsParams} addUserKnob {7 expShift R -4 4} expShift {{"override_ssts_params ? exposure : 0"}} addUserKnob {13 minPoint t "x; // ACES\ny; // luminance\nz; // slope"} minPoint {{"pow(2, log(0.18*pow(2, MIN_STOP_RRT+((MIN_STOP_SDR-MIN_STOP_RRT)/(log10(MIN_LUM_SDR)-log10(MIN_LUM_RRT)))*(log10(minPoint.y)-log10(MIN_LUM_RRT))))/log(2)-expShift)"} {lum.0} {override_ssts_params?slope.0:0}} addUserKnob {13 midPoint t "x; // ACES\ny; // luminance\nz; // slope"} midPoint {{"pow(2, ((log(0.18)/log(2)-expShift)))"} {lum.1} {override_ssts_params?slope.1:1.55}} addUserKnob {13 maxPoint t "x; // ACES\ny; // luminance\nz; // slope"} maxPoint {{"pow(2, log(0.18*pow(2, (MAX_STOP_SDR+(MAX_STOP_RRT-MAX_STOP_SDR)/(log10(MAX_LUM_RRT)-log10(MAX_LUM_SDR))*(log10(maxPoint.y)-log10(MAX_LUM_SDR)))))/log(2)-expShift)"} {lum.2} {override_ssts_params?slope.2:0}} addUserKnob {7 knotIncLow} knotIncLow {{"(log10(midPoint.x) - log10(minPoint.x)) / 3.0"}} addUserKnob {7 knotIncHigh} knotIncHigh {{"(log10(maxPoint.x) - log10(midPoint.x)) / 3.0"}} addUserKnob {7 pctLow} pctLow {{0.18+(0.35-0.18)/(MIN_STOP_SDR-MIN_STOP_RRT)*(log(minPoint.x/0.18)/log(2)-MIN_STOP_RRT)}} addUserKnob {7 pctHigh} pctHigh {{0.89+(0.90-0.89)/(MAX_STOP_SDR-MAX_STOP_RRT)*(log(maxPoint.x/0.89)/log(2)-MAX_STOP_RRT)}} addUserKnob {78 coefsLow n 5} coefsLow {{"(minPoint.z * (log10(minPoint.x)-0.5*knotIncLow)) + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x))"} {"(minPoint.z * (log10(minPoint.x)+0.5*knotIncLow)) + ( log10(minPoint.y) - minPoint.z * log10(minPoint.x))"} {log10(minPoint.y)+pctLow*(log10(midPoint.y)-log10(minPoint.y))} {"(midPoint.z * (log10(midPoint.x)-0.5*knotIncLow)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {"(midPoint.z * (log10(midPoint.x)+0.5*knotIncLow)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"}} addUserKnob {78 coefsHigh n 5} coefsHigh {{"(midPoint.z * (log10(midPoint.x)-0.5*knotIncHigh)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {"(midPoint.z * (log10(midPoint.x)+0.5*knotIncHigh)) + ( log10(midPoint.y) - midPoint.z * log10(midPoint.x))"} {log10(midPoint.y)+pctHigh*(log10(maxPoint.y)-log10(midPoint.y))} {"(maxPoint.z * (log10(maxPoint.x)-0.5*knotIncHigh)) + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x))"} {"(maxPoint.z * (log10(maxPoint.x)+0.5*knotIncHigh)) + ( log10(maxPoint.y) - maxPoint.z * log10(maxPoint.x))"}} addUserKnob {7 KNOT_INC_LOW} KNOT_INC_LOW {{"(log10(midPoint.x) - log10(minPoint.x)) / (N_KNOTS_LOW - 1)"}} addUserKnob {7 KNOT_INC_HIGH} KNOT_INC_HIGH {{"(log10(maxPoint.x) - log10(midPoint.x)) / (N_KNOTS_HIGH - 1)"}} addUserKnob {78 KNOT_Y_LOW n 4} KNOT_Y_LOW {{"(coefsLow.0 + coefsLow.1) / 2"} {"(coefsLow.1 + coefsLow.2) / 2"} {"(coefsLow.2 + coefsLow.3) / 2"} {"(coefsLow.3 + coefsLow.4) / 2"}} addUserKnob {78 KNOT_Y_HIGH n 4} KNOT_Y_HIGH {{"(coefsHigh.0 + coefsHigh.1) / 2"} {"(coefsHigh.1 + coefsHigh.2) / 2"} {"(coefsHigh.2 + coefsHigh.3) / 2"} {"(coefsHigh.3 + coefsHigh.4) / 2"}} addUserKnob {20 Constants_tab l const} addUserKnob {3 N_KNOTS_LOW} N_KNOTS_LOW 4 addUserKnob {3 N_KNOTS_HIGH} N_KNOTS_HIGH 4 addUserKnob {7 MIN_STOP_SDR R -20 20} MIN_STOP_SDR -6.5 addUserKnob {7 MAX_STOP_SDR R -20 20} MAX_STOP_SDR 6.5 addUserKnob {7 MIN_STOP_RRT R -20 20} MIN_STOP_RRT -15 addUserKnob {7 MAX_STOP_RRT R -20 20} MAX_STOP_RRT 18 addUserKnob {7 MIN_LUM_SDR R 0 0.1} MIN_LUM_SDR 0.02 addUserKnob {7 MAX_LUM_SDR R 0 100} MAX_LUM_SDR 48 addUserKnob {7 MIN_LUM_RRT R 0 0.1} MIN_LUM_RRT 0.0001 addUserKnob {7 MAX_LUM_RRT R 0 10000} MAX_LUM_RRT 10000 } Input { inputs 0 name Input xpos -1030 ypos -634 } Dot { name Dot25 label " " xpos -996 ypos -318 } set N270835b0 [stack 0] Dot { name Dot26 label " " xpos -996 ypos 1506 } push $N270835b0 Dot { name Dot4 label " " xpos -886 ypos -318 } set N2708d050 [stack 0] Dot { name Dot5 label " " xpos -776 ypos -318 } set N27091de0 [stack 0] Dot { name Dot2 label " " xpos -666 ypos -318 } set N27096c00 [stack 0] Dot { name Dot3 label " " xpos -556 ypos -318 } set N2709baa0 [stack 0] Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "logr <= log10(minPoint.y)" expr1 "logg <= log10(minPoint.y)" expr2 "logb <= log10(minPoint.y)" name segment_bottom xpos -590 ypos -202 } Dot { name Dot1 label " " xpos -556 ypos 162 } push $N2709baa0 Dot { name Dot7 label " " xpos -336 ypos -318 } set N270b3940 [stack 0] Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" channel0 {rgba.red -rgba.green -rgba.blue none} expr0 log10(minPoint.x) expr1 log10(minPoint.x) expr2 log10(minPoint.x) expr3 1 name Expression xpos -370 ypos -202 } Merge2 { inputs 2 operation multiply also_merge all name Multiply3 xpos -370 ypos 158 } Dot { name Dot27 label " " xpos -336 ypos 786 } push $N27096c00 Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "( logr > log10(minPoint.y) ) && ( logr <= log10(midPoint.y) )" expr1 "( logg > log10(minPoint.y) ) && ( logg <= log10(midPoint.y) )" expr2 "( logb > log10(minPoint.y) ) && ( logb <= log10(midPoint.y) )" name segment_low xpos -700 ypos -202 } Dot { name Dot22 label " " xpos -666 ypos 354 } push $N270b3940 Dot { name Dot9 label " " xpos -6 ypos -318 } set N270ef040 [stack 0] Dot { name Dot6 label " " xpos -6 ypos -174 } set N270f3dd0 [stack 0] Dot { name Dot8 label " " xpos 214 ypos -174 } set N270f8c20 [stack 0] Dot { name Dot13 label " " xpos 434 ypos -174 } Dot { name Dot19 xpos 434 ypos -78 } set N271028c0 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(b, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_LOW.0) && (logy <= KNOT_Y_LOW.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_LOW.1) && (logy <= KNOT_Y_LOW.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_LOW.2) && (logy <= KNOT_Y_LOW.3)" expr0 "low ? coefsLow.0 : mid ? coefsLow.1 : coefsLow.2" expr1 "low ? coefsLow.1 : mid ? coefsLow.2 : coefsLow.3" expr2 "low ? coefsLow.2 : mid ? coefsLow.3 : coefsLow.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow5 xpos 290 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low5 xpos 290 ypos -34 } push $N271028c0 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bb, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy5 xpos 400 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b)/(-sqrt(g*g - 4*r*b)-g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 "log10(minPoint.x) + (t +j) * KNOT_INC_LOW" expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals4 xpos 400 ypos 14 addUserKnob {20 User} addUserKnob {7 knotIncLow} knotIncLow {{parent.knotIncLow}} addUserKnob {13 min l Min} min {{parent.min.x} {parent.min.y} {parent.minSlope}} } push 0 push $N270f3dd0 Dot { name Dot10 xpos -6 ypos -78 } set N2713f0e0 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_LOW.0) && (logy <= KNOT_Y_LOW.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_LOW.1) && (logy <= KNOT_Y_LOW.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_LOW.2) && (logy <= KNOT_Y_LOW.3)" expr0 "low ? coefsLow.0 : mid ? coefsLow.1 : coefsLow.2" expr1 "low ? coefsLow.1 : mid ? coefsLow.2 : coefsLow.3" expr2 "low ? coefsLow.2 : mid ? coefsLow.3 : coefsLow.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow xpos -150 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low xpos -150 ypos -34 } push $N2713f0e0 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Br, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy xpos -40 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b)/(-sqrt(g*g - 4*r*b)-g)" expr0 "log10(minPoint.x) + (t +j) * KNOT_INC_LOW" channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals xpos -40 ypos 14 addUserKnob {20 User} addUserKnob {7 knotIncLow} knotIncLow {{parent.knotIncLow}} addUserKnob {13 min l Min} min {{parent.min.x} {parent.min.y} {parent.minSlope}} } push $N270f8c20 Dot { name Dot18 xpos 214 ypos -78 } set N26f7b800 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(g, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_LOW.0) && (logy <= KNOT_Y_LOW.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_LOW.1) && (logy <= KNOT_Y_LOW.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_LOW.2) && (logy <= KNOT_Y_LOW.3)" expr0 "low ? coefsLow.0 : mid ? coefsLow.1 : coefsLow.2" expr1 "low ? coefsLow.1 : mid ? coefsLow.2 : coefsLow.3" expr2 "low ? coefsLow.2 : mid ? coefsLow.3 : coefsLow.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow4 xpos 70 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low4 xpos 70 ypos -34 } push $N26f7b800 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bg, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy4 xpos 180 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b)/(-sqrt(g*g - 4*r*b)-g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 "log10(minPoint.x) + (t +j) * KNOT_INC_LOW" channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals5 xpos 180 ypos 14 addUserKnob {20 User} addUserKnob {7 knotIncLow} knotIncLow {{parent.knotIncLow}} addUserKnob {13 min l Min} min {{parent.min.x} {parent.min.y} {parent.minSlope}} } Merge2 { inputs 3+1 operation plus bbox B name Merge2 xpos 180 ypos 134 } Merge2 { inputs 2 operation multiply also_merge all name Multiply1 xpos 180 ypos 350 } Dot { name Dot28 label " " xpos 214 ypos 786 } push 0 push $N27091de0 Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "( logr >= log10(midPoint.y) ) && ( logr < log10(maxPoint.y) )" expr1 "( logg >= log10(midPoint.y) ) && ( logg < log10(maxPoint.y) )" expr2 "( logb >= log10(midPoint.y) ) && ( logb < log10(maxPoint.y) )" name segment_high xpos -810 ypos -202 } Dot { name Dot23 label " " xpos -776 ypos 474 } push $N270ef040 Dot { name Dot14 label " " xpos 764 ypos -318 } set N26ff0b70 [stack 0] Dot { name Dot15 label " " xpos 764 ypos -174 } set N26ff5900 [stack 0] Dot { name Dot17 label " " xpos 984 ypos -174 } set N26ffa750 [stack 0] Dot { name Dot20 label " " xpos 1204 ypos -174 } Dot { name Dot16 xpos 1204 ypos -78 } set N270043f0 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(b, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_HIGH.0) && (logy <= KNOT_Y_HIGH.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_HIGH.1) && (logy <= KNOT_Y_HIGH.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_HIGH.2) && (logy <= KNOT_Y_HIGH.3)" expr0 "low ? coefsHigh.0 : mid ? coefsHigh.1 : coefsHigh.2" expr1 "low ? coefsHigh.1 : mid ? coefsHigh.2 : coefsHigh.3" expr2 "low ? coefsHigh.2 : mid ? coefsHigh.3 : coefsHigh.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow3 xpos 1060 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low3 xpos 1060 ypos -34 } push $N270043f0 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bb, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy3 xpos 1170 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b) / (-sqrt(g*g - 4*r*b) - g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 "log10(midPoint.x) + (t +j) * KNOT_INC_HIGH" expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals3 xpos 1170 ypos 14 } push 0 push $N26ff5900 Dot { name Dot11 xpos 764 ypos -78 } set N2703f2d0 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_HIGH.0) && (logy <= KNOT_Y_HIGH.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_HIGH.1) && (logy <= KNOT_Y_HIGH.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_HIGH.2) && (logy <= KNOT_Y_HIGH.3)" expr0 "low ? coefsHigh.0 : mid ? coefsHigh.1 : coefsHigh.2" expr1 "low ? coefsHigh.1 : mid ? coefsHigh.2 : coefsHigh.3" expr2 "low ? coefsHigh.2 : mid ? coefsHigh.3 : coefsHigh.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow1 xpos 620 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low1 xpos 620 ypos -34 } push $N2703f2d0 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Br, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy1 xpos 730 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b) / (-sqrt(g*g - 4*r*b) - g)" expr0 "log10(midPoint.x) + (t +j) * KNOT_INC_HIGH" channel1 {-rgba.red rgba.green -rgba.blue none} expr1 0 channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals1 xpos 730 ypos 14 } push $N26ffa750 Dot { name Dot12 xpos 984 ypos -78 } set N26e7a4a0 [stack 0] Expression { temp_name0 logy temp_expr0 "log10( max(g, 1e-10 ))" temp_name1 low temp_expr1 "(logy > KNOT_Y_HIGH.0) && (logy <= KNOT_Y_HIGH.1)" temp_name2 mid temp_expr2 "(logy > KNOT_Y_HIGH.1) && (logy <= KNOT_Y_HIGH.2)" temp_name3 high temp_expr3 "(logy > KNOT_Y_HIGH.2) && (logy <= KNOT_Y_HIGH.3)" expr0 "low ? coefsHigh.0 : mid ? coefsHigh.1 : coefsHigh.2" expr1 "low ? coefsHigh.1 : mid ? coefsHigh.2 : coefsHigh.3" expr2 "low ? coefsHigh.2 : mid ? coefsHigh.3 : coefsHigh.4" expr3 "low ? 0 : mid ? 1 : high ? 2 : 0" name inv_cfLow2 xpos 840 ypos -82 } ColorMatrix { channels {rgba.red rgba.green rgba.blue -rgba.alpha} matrix { {0.5 -1 0.5} {-1 1 0} {0.5 0.5 0} } name inv_basis_low2 xpos 840 ypos -34 } push $N26e7a4a0 MergeExpression { inputs 2 temp_name0 logy temp_expr0 "log10(max(Bg, 1e-10))" expr0 Ar expr1 Ag expr2 Ab-logy expr3 Aa name c_minus_logy2 xpos 950 ypos -34 } Expression { temp_name0 j temp_expr0 a temp_name1 d temp_expr1 "sqrt(g*g - 4*r*b)" temp_name2 t temp_expr2 "(2.*b) / (-sqrt(g*g - 4*r*b) - g)" expr0 0 channel1 {-rgba.red rgba.green -rgba.blue none} expr1 "log10(midPoint.x) + (t +j) * KNOT_INC_HIGH" channel2 {-rgba.red -rgba.green rgba.blue none} expr2 0 expr3 1 maskChannelInput -rgba.alpha unpremult -rgba.alpha name inv_knot_vals2 xpos 950 ypos 14 } Merge2 { inputs 3+1 operation plus bbox B output rgb name Merge1 xpos 950 ypos 134 } Merge2 { inputs 2 operation multiply also_merge all name Multiply2 xpos 950 ypos 470 } Dot { name Dot29 label " " xpos 984 ypos 786 } push $N2708d050 Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" expr0 "logr >= log10(maxPoint.y) ? 1 : 0" expr1 "logg >= log10(maxPoint.y) ? 1 : 0" expr2 "logb >= log10(maxPoint.y) ? 1 : 0" name segment_peak xpos -920 ypos -202 } Dot { name Dot24 label " " xpos -886 ypos 618 } push $N26ff0b70 Dot { name Dot21 label " " xpos 1534 ypos -318 } Expression { temp_name0 logr temp_expr0 "log10( max(r, 1e-10 ))" temp_name1 logg temp_expr1 "log10( max(g, 1e-10 ))" temp_name2 logb temp_expr2 "log10( max(b, 1e-10 ))" channel0 {rgba.red -rgba.green -rgba.blue none} expr0 log10(maxPoint.x) expr1 log10(maxPoint.x) expr2 log10(maxPoint.x) expr3 1 name proc_low1 label Expression xpos 1500 ypos -208 } Merge2 { inputs 2 operation multiply also_merge all name Multiply4 xpos 1500 ypos 614 } Merge2 { inputs 4+1 operation plus bbox B output rgb name Merge3 xpos 510 ypos 1118 } Expression { channel0 {rgba.red -rgba.green -rgba.blue none} expr0 pow(10,r) expr1 pow(10,g) expr2 pow(10,b) name Expression13 xpos 510 ypos 1238 } Copy { inputs 2 from0 rgba.alpha to0 rgba.alpha name Copy1 xpos 510 ypos 1496 } Output { name Output1 xpos 510 ypos 1814 } end_group Expression { channel0 rgb expr0 log(r)/log(2)-log(0.18)/log(2) name expShift note_font Helvetica xpos -400 ypos 431 } end_group ColorMatrix { matrix { {1.705079317 -0.6242337823 -0.08084625006} {-0.1297003478 1.138468742 -0.008767957799} {-0.0241663754 -0.1246140897 1.148780584} } name ColorMatrix18 label "ACEScg to Rec709" note_font Helvetica selected true xpos 5000 ypos 1185 } Clamp { channels rgba name Clamp5 note_font Helvetica selected true xpos 5000 ypos 1231 } Group { name DisplayEOTF23 note_font Helvetica selected true xpos 5000 ypos 1271 addUserKnob {20 DisplayEOTF_tab l DisplayEOTF} addUserKnob {4 eotf l EOTF t "Electrical to Optical Transfer Function of the monitor." M {sRGB BT.1886 "Gamma 2.2" "Gamma 2.4" "Gamma 2.6" DCDM "ST-2084 (PQ)" HLG Linear "" ""}} eotf BT.1886 addUserKnob {6 legal_range -STARTLINE} addUserKnob {35 presets l "" t "display output presets." +STARTLINE M {luminance/SDR "knobs this \{lum \{0.02 4.8 48\}\}" "luminance/P3D65 ST2084 108nits 7.2nits" "knobs this \{lum \{0.0001 7.2 108\}\}" "luminance/P3D65 ST2084 1000nits 15nits" "knobs this \{lum \{0.0001 15 1000\}\}" "luminance/P3D65 ST2084 2000nits 15nits" "knobs this \{lum \{0.0001 15 2000\}\}" "luminance/P3D65 ST2084 2000nits 15nits" "knobs this \{lum \{0.0001 15 2000\}\}" "luminance/P3D65 ST2084 4000nits 15nits" "knobs this \{lum \{0.0001 15 4000\}\}" luminance/Rec2020_HLG_1000nits_15nits "knobs this \{lum \{0.0001 15 1000\}\}" luminance/Rec2020_ST2084_1000nits_15nits "knobs this \{lum \{0.0001 15 1000\}\}" luminance/Rec2020_ST2084_2000nits_15nits "knobs this \{lum \{0.0001 15 2000\}\}" luminance/Rec2020_ST2084_4000nits_15nits "knobs this \{lum \{0.0001 15 4000\}\}"}} addUserKnob {78 lum l "" t "SSTS Display Luminance: \ny_min y_mid y_max\n\nAccording to Zach Lewis's ACES_OT\nhttps://gist.github.com/zachlewis/786c0be941868644c993fde1c3515c2c\n\nStandard Cinema: \n0.02 4.8 48\nDolby Cinema: \n0.0001 7.2 108\nDolby Pulsar: \n0.005 15 4000\nDolby PRR-4220: \n0.005 10 600\nSony BVM-X300: \n0.0001 10 1000\nACES OCES: \n0.0001 4.8 10000\n\n" -STARTLINE n 3} lum {{parent.ToneScale29.lum} {parent.ToneScale29.lum} {parent.ToneScale29.lum}} } BackdropNode { inputs 0 name Electrical_Optical_Transfer_Function tile_color 0x151515ff label "ACESlib.OutputTransforms.ctl : 185\n// EOTF" note_font_size 12 xpos -1215 ypos 270 bdwidth 3391 bdheight 740 z_order -10 } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x272727ff label "HDR EOTFs" note_font_size 42 xpos 1225 ypos 331 bdwidth 910 bdheight 617 z_order -5 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x272727ff label "SDR EOTFs" note_font_size 42 xpos -319 ypos 332 bdwidth 1545 bdheight 616 z_order -5 } BackdropNode { inputs 0 name Output_Legal_Range tile_color 0x272727ff label "ACESlib.OutputTransforms.ctl : 216\n" note_font_size 12 xpos -519 ypos 1432 bdwidth 318 bdheight 176 } Input { inputs 0 name Input xpos -400 ypos 150 } Dot { name Dot1 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos -366 ypos 474 } set N26d95480 [stack 0] push $N26d95480 Dot { name Dot3 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos -126 ypos 474 } set N26d9a4f0 [stack 0] Dot { name Dot4 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 114 ypos 474 } set N26d9f3c0 [stack 0] Dot { name Dot6 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 354 ypos 474 } set N26da42c0 [stack 0] Dot { name Dot18 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 594 ypos 474 } set N26da91c0 [stack 0] Dot { name Dot20 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 834 ypos 474 } set N26dae100 [stack 0] Dot { name Dot25 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 1074 ypos 474 } set N26db3000 [stack 0] Dot { name Dot24 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 1434 ypos 474 } Dot { name Dot2 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 1434 ypos 554 } set N26dbce00 [stack 0] Expression { expr0 "r * (Ymax - Ymin) + Ymin" expr1 "g * (Ymax - Ymin) + Ymin" expr2 "b * (Ymax - Ymin) + Ymin" name linCV_2_Y_f3_hdr label "stretch_black = True" xpos 1280 ypos 584 addUserKnob {20 Luminance} addUserKnob {7 Ymin R 0.0001 0.02} addUserKnob {7 Ymax R 48 10000} Ymax {{parent.lum.2}} } push $N26dbce00 Expression { expr0 "r * (Ymax - Ymin) + Ymin" expr1 "g * (Ymax - Ymin) + Ymin" expr2 "b * (Ymax - Ymin) + Ymin" name linCV_2_Y_f3_hdr2 label "stretch_black = False" xpos 1400 ypos 584 addUserKnob {20 Luminance} addUserKnob {7 Ymin R 0.0001 0.02} Ymin {{parent.lum.0}} addUserKnob {7 Ymax R 48 10000} Ymax {{parent.lum.2}} } Switch { inputs 2 which {{parent.stretch_black}} name StretchBlacks_Switch xpos 1400 ypos 670 } Clamp { channels rgb maximum 65535 name clamp_f3__ xpos 1400 ypos 750 } Expression { temp_name0 Lm_r temp_expr0 "pow((r / pq_C), pq_m1)" temp_name1 Lm_g temp_expr1 "pow((g / pq_C), pq_m1)" temp_name2 Lm_b temp_expr2 "pow((b / pq_C), pq_m1)" expr0 "pow(( pq_c1 + pq_c2 * Lm_r ) / ( 1.0 + pq_c3 * Lm_r ), pq_m2)" expr1 "pow(( pq_c1 + pq_c2 * Lm_g ) / ( 1.0 + pq_c3 * Lm_g ), pq_m2)" expr2 "pow(( pq_c1 + pq_c2 * Lm_b ) / ( 1.0 + pq_c3 * Lm_b ), pq_m2)" name Y_2_ST2084_ label "ACESlib.OutputTransforms.ctl : 243 \nACESlib.Utilities_Color.ctl : 425" xpos 1400 ypos 818 addUserKnob {20 SMPTE_ST2084-2014_Constants_tab l "Constants from SMPTE ST 2084-2014"} addUserKnob {7 pq_m1 t " ( 2610.0 / 4096.0 ) / 4.0;" +DISABLED R 0 100} pq_m1 0.1593017578 addUserKnob {7 pq_m2 t " ( 2523.0 / 4096.0 ) * 128.0;" +DISABLED R 0 100} pq_m2 78.84375 addUserKnob {7 pq_c1 t " 3424.0 / 4096.0 or pq_c3 - pq_c2 + 1.0;" +DISABLED R 0 100} pq_c1 0.8359375 addUserKnob {7 pq_c2 t " ( 2413.0 / 4096.0 ) * 32.0;" +DISABLED R 0 100} pq_c2 18.8515625 addUserKnob {7 pq_c3 t " ( 2392.0 / 4096.0 ) * 32.0;" +DISABLED R 0 100} pq_c3 18.6875 addUserKnob {7 pq_C +DISABLED R 0 100} pq_C 10000 } set N26df6930 [stack 0] Dot { name Dot5 label " " note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 1794 ypos 474 } Expression { temp_name0 Np_r temp_expr0 "pow( r, 1.0 / pq_m2 )" temp_name1 Np_g temp_expr1 "pow( g, 1.0 / pq_m2 )" temp_name2 Np_b temp_expr2 "pow( b, 1.0 / pq_m2 )" expr0 "r < 0 ? 0 : pow((Np_r - pq_c1) / ( pq_c2 - pq_c3 * Np_r ), 1.0/pq_m1) * pq_C" expr1 "g < 0 ? 0 : pow((Np_g - pq_c1) / ( pq_c2 - pq_c3 * Np_g ), 1.0/pq_m1) * pq_C" expr2 "b < 0 ? 0 : pow((Np_b - pq_c1) / ( pq_c2 - pq_c3 * Np_b ), 1.0/pq_m1) * pq_C" name ST2084_2_Y_f3_ label "ACESlib.Utilities_Color.ctl : 408\n// Converts from the non-linear perceptually quantized space to linear cd/m^2" xpos 1760 ypos 538 addUserKnob {20 SMPTE_ST2084-2014_Constants_tab l "Constants from SMPTE ST 2084-2014"} addUserKnob {7 pq_m1 t " ( 2610.0 / 4096.0 ) / 4.0;" +DISABLED R 0 100} pq_m1 0.1593017578 addUserKnob {7 pq_m2 t " ( 2523.0 / 4096.0 ) * 128.0;" +DISABLED R 0 100} pq_m2 78.84375 addUserKnob {7 pq_c1 t " 3424.0 / 4096.0 or pq_c3 - pq_c2 + 1.0;" +DISABLED R 0 100} pq_c1 0.8359375 addUserKnob {7 pq_c2 t " ( 2413.0 / 4096.0 ) * 32.0;" +DISABLED R 0 100} pq_c2 18.8515625 addUserKnob {7 pq_c3 t " ( 2392.0 / 4096.0 ) * 32.0;" +DISABLED R 0 100} pq_c3 18.6875 addUserKnob {7 pq_C +DISABLED R 0 100} pq_C 10000 } Expression { temp_name0 Y_d temp_expr0 "0.2627*r + 0.6780*g + 0.0593*b" expr0 "Y_d == 0 ? 0 : pow( (Y_d-c_beta)/c_alpha, (1-c_gamma)/c_gamma) * ((r-c_beta)/c_alpha)" expr1 "Y_d == 0 ? 0 : pow( (Y_d-c_beta)/c_alpha, (1-c_gamma)/c_gamma) * ((g-c_beta)/c_alpha)" expr2 "Y_d == 0 ? 0 : pow( (Y_d-c_beta)/c_alpha, (1-c_gamma)/c_gamma) * ((b-c_beta)/c_alpha)" name ST2084_2_HLG_1000nits_f3_3 label "ACESlib.Utilities_Color.ctl : 469\n// HLG Inverse EOTF (i.e. HLG inverse OOTF followed by the HLG OETF)\n// HLG Inverse OOTF (display linear to scene linear)" xpos 1760 ypos 652 addUserKnob {20 Constants_tab l Constants} addUserKnob {7 L_w +DISABLED} L_w 1000 addUserKnob {7 L_b +DISABLED} addUserKnob {7 c_alpha +DISABLED} c_alpha {{L_w-L_b}} addUserKnob {7 c_beta +DISABLED} c_beta {{L_b}} addUserKnob {7 c_gamma +DISABLED} c_gamma 1.2 } Expression { channel0 {rgba.red -rgba.green -rgba.blue none} expr0 "r <= 1.0/12 ? sqrt(3.0*r) : c_a * log(12.0 * r - c_b) + c_c" expr1 "g <= 1.0/12 ? sqrt(3.0*g) : c_a * log(12.0 * g- c_b) + c_c" expr2 "b <= 1.0/12 ? sqrt(3.0*b) : c_a * log(12.0 * b - c_b) + c_c" name ST2084_2_HLG_1000nits_f3_ label "ACESlib.Utilities_Color.ctl : 493\n// HLG OETF (scene linear to non-linear signal value)" xpos 1760 ypos 778 addUserKnob {20 Constants_tab l Constants} addUserKnob {7 c_a +DISABLED} c_a 0.17883277 addUserKnob {7 c_b t 1.-4.*a +DISABLED} c_b 0.28466892 addUserKnob {7 c_c t 0.5-a*log(4.*a) +DISABLED} c_c 0.55991073 } Dot { name Dot17 label " HLG" note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 1794 ypos 914 } push $N26df6930 Dot { name Dot27 label " PQ" note_font "Helvetica Bold" note_font_size 24 note_font_color 0xa5a5a501 xpos 1434 ypos 914 } push $N26db3000 Expression { expr0 "pow( (48./52.37) * r, 1./2.6)" expr1 "pow( (48./52.37) * g, 1./2.6)" expr2 "pow( (48./52.37) * b, 1./2.6)" expr3 1 name dcdm_encode xpos 1040 ypos 590 } Dot { name Dot10 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos 1074 ypos 914 } push $N26dae100 Expression { expr0 pow(r,1/gamma) expr1 pow(g,1/gamma) expr2 pow(b,1/gamma) name pow_f3_gamma_26_ label "ACESlib.Utilities_Color.ctl : 260\n// Gamma 2.6" xpos 800 ypos 578 addUserKnob {20 Gamma_tab l Gamma} addUserKnob {7 gamma R 0 4} gamma 2.6 } Dot { name Dot11 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos 834 ypos 914 } push $N26da91c0 Expression { expr0 pow(r,1/gamma) expr1 pow(g,1/gamma) expr2 pow(b,1/gamma) name pow_f3_gamma_24_ label "ACESlib.Utilities_Color.ctl : 260\n// Gamma 2.4" xpos 560 ypos 578 addUserKnob {20 Gamma_tab l Gamma} addUserKnob {7 gamma R 0 4} gamma 2.4 } Dot { name Dot12 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos 594 ypos 914 } push $N26da42c0 Expression { expr0 pow(r,1/gamma) expr1 pow(g,1/gamma) expr2 pow(b,1/gamma) name pow_f3_gamma_22_ label "ACESlib.Utilities_Color.ctl : 260\n// Gamma 2.2" xpos 320 ypos 578 addUserKnob {20 Gamma_tab l Gamma} addUserKnob {7 gamma R 0 4} gamma 2.2 } Dot { name Dot8 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos 354 ypos 914 } push $N26d9f3c0 Expression { temp_name0 c_a temp_expr0 "pow( pow( Lw, 1./gamma) - pow( Lb, 1./gamma), gamma)" temp_name1 c_b temp_expr1 "pow( Lb, 1./gamma) / ( pow( Lw, 1./gamma) - pow( Lb, 1./gamma))" expr0 "pow( max( r / c_a, 0.), 1.0/gamma) - c_b" expr1 "pow( max( g / c_a, 0.), 1.0/gamma) - c_b" expr2 "pow( max( b / c_a, 0.), 1.0/gamma) - c_b" name bt1886_r_f3 label "ACESlib.Utilities_Color.ctl : 301\n// The reference EOTF specified in Rec. ITU-R BT.1886\n// L = a(max\[(V+b),0])^g" xpos 80 ypos 572 addUserKnob {20 Luminance} addUserKnob {7 Lw R 48 10000} Lw 1 addUserKnob {7 Lb R 0.0001 0.02} addUserKnob {7 gamma R 1 4} gamma 2.4 } Dot { name Dot9 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos 114 ypos 914 } push $N26d9a4f0 Expression { temp_name0 yb temp_expr0 "pow( offs * gamma / ( ( gamma - 1.0) * ( 1.0 + offs)), gamma)" temp_name1 rs temp_expr1 "pow( ( gamma - 1.0) / offs, gamma - 1.0) * pow( ( 1.0 + offs) / gamma, gamma)" expr0 "r >= yb ? ( 1.0 + offs) * pow( r, 1.0 / gamma) - offs : r * rs" expr1 "g >= yb ? ( 1.0 + offs) * pow( g, 1.0 / gamma) - offs : g * rs" expr2 "b >= yb ? ( 1.0 + offs) * pow( b, 1.0 / gamma) - offs : b * rs" name moncurve_r_f3_ label "ACESlib.Utilities_Color.ctl : 260\nmoncurve_r with gamma of 2.4 and offset of 0.055 matches the EOTF found in IEC 61966-2-1:1999 (sRGB)" xpos -160 ypos 578 addUserKnob {20 Luminance} addUserKnob {7 gamma R 0 4} gamma 2.4 addUserKnob {7 offs} offs 0.055 } Dot { name Dot7 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff xpos -126 ypos 914 } Switch { inputs 9 which {{parent.eotf}} name EOTF_Switch xpos -400 ypos 1270 } Expression { temp_name0 REFBLACK temp_expr0 "64 / 1023" temp_name1 REFWHITE temp_expr1 "940 / 1023" expr0 "r * ( REFWHITE - REFBLACK) + REFBLACK" expr1 "g * ( REFWHITE - REFBLACK) + REFBLACK" expr2 "b * ( REFWHITE - REFBLACK) + REFBLACK" name fullRange_to_smpteRange_f3_ label "ACESlib.OutputTransforms.ctl : 216" xpos -400 ypos 1504 disable {{!parent.legal_range}} } Output { name Output xpos -400 ypos 1670 } end_group