set cut_paste_input [stack 0] BackdropNode { inputs 0 name BackdropNode25 tile_color 0x163a51ff label "Michaelis-Menten Spring Dual-Contrast\n\nTonescale Model Selects\nhttps://colab.research.google.com/drive/10C3HvDuoAhYad1qOG2r0v8fGR-5VdpO5" note_font Helvetica note_font_size 48 note_font_color 0xffffffff selected true xpos -16893 ypos -3465 bdwidth 1596 bdheight 1627 z_order 20 } BackdropNode { inputs 0 name BackdropNode26 tile_color 0x163a51ff label "Piecewise Linear-Hyperbolic Tonescale\n\nTonescale Model Selects\nhttps://colab.research.google.com/drive/10C3HvDuoAhYad1qOG2r0v8fGR-5VdpO5" note_font Helvetica note_font_size 48 note_font_color 0xffffffff selected true xpos -15081 ypos -3473 bdwidth 1596 bdheight 1627 z_order 20 } BackdropNode { inputs 0 name BackdropNode27 tile_color 0x163a51ff label "Michaelis-Menten Spring\n\nTonescale Model Selects\nhttps://colab.research.google.com/drive/10C3HvDuoAhYad1qOG2r0v8fGR-5VdpO5" note_font Helvetica note_font_size 48 note_font_color 0xffffffff selected true xpos -13200 ypos -3483 bdwidth 1596 bdheight 1627 z_order 20 } BackdropNode { inputs 0 name BackdropNode28 tile_color 0x616161ff label "LMT\n" note_font Helvetica note_font_size 34.2 note_font_color 0xffffffff selected true xpos -12722 ypos -2668 bdwidth 145 bdheight 149 z_order 30 } BackdropNode { inputs 0 name BackdropNode29 tile_color 0x616161ff label "LMT\n" note_font Helvetica note_font_size 34.2 note_font_color 0xffffffff selected true xpos -12392 ypos -2623 bdwidth 145 bdheight 149 z_order 30 } push $cut_paste_input Dot { name Dot176 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos -16176 ypos -3198 } set N41e40f00 [stack 0] Dot { name Dot175 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos -16176 ypos -2838 } set N60dbab00 [stack 0] Fill { output {rgba.red rgba.green rgba.blue none} color {{parent.Tonescale_MMDCSpring1.Lp/100}} name Fill30 label White note_font Helvetica selected true xpos -16100 ypos -2751 } Expression { temp_name0 n temp_expr0 max(r,g,b) temp_name1 nt temp_expr1 (n+sqrt(n*(4*fl+n)))/2 temp_name2 s temp_expr2 s0/((s1/nt)**(1/p)-1)/n expr0 r*s expr1 g*s expr2 b*s expr3 a*s name Tonescale_MMDCSpring_Inverse3 selected true xpos -16100 ypos -2602 addUserKnob {20 Params} addUserKnob {7 p R 1 1.4} p {{parent.Tonescale_MMDCSpring1.p}} addUserKnob {7 fl R 0 0.02} fl {{parent.Tonescale_MMDCSpring1.fl}} addUserKnob {7 s1 R 1 40} s1 {{parent.Tonescale_MMDCSpring1.s1}} addUserKnob {7 s0 R 0 4} s0 {{parent.Tonescale_MMDCSpring1.s0}} } Expression { temp_name0 n temp_expr0 max(r,g,b) temp_name1 sc temp_expr1 s0*n**p temp_name2 lxc temp_expr2 nx1?(_m*(n-x1)+y1)/n:(_a*pow(n,p)+_b)/n temp_name2 si temp_expr2 n>y1?((_m*x1-y1+n)/_m)/n:pow((n-_b)/_a,1/p)/n temp_name3 s temp_expr3 nx1?(_m*(n-x1)+y1)/n:(_a*pow(n,p)+_b)/n temp_name2 si temp_expr2 n>y1?((_m*x1-y1+n)/_m)/n:pow((n-_b)/_a,1/p)/n temp_name3 s temp_expr3 nNote:\n\"sRGB Encoding\" is the ~2.2 power piecewise sRGB encoding function specified in the sRGB specification.\n\"sRGB Display\" is the 2.2 power function display EOTF specified in the sRGB specification." M {None "sRGB Encoding" "sRGB Display" BT.1886 "Gamma 2.6" PQ HLG "" ""}} eotf PQ } Input { inputs 0 name Input xpos 400 ypos -130 } set Nda043200 [stack 0] Expression { temp_name0 Yd temp_expr0 0.2627*r+0.6780*g+0.0593*b expr0 r*pow(Yd,(1-_g)/_g) expr1 g*pow(Yd,(1-_g)/_g) expr2 b*pow(Yd,(1-_g)/_g) name HLG_InverseOOTF xpos 1060 ypos -58 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 _g t "Gamma: Extended model for gamma variation according to peak display luminance and surround luminance: BT.2390-8 p32" R 0 2} _g {{1.2*pow(1.111,log(Lw/1000)/log(2))*pow(0.98,log(max(1e-6,Lamb)/5)/log(2))}} addUserKnob {7 Lw R 600 4000} Lw 1000 addUserKnob {7 Lamb t "ambient luminance level in nits" R 0 200} Lamb 5 } Expression { expr0 r<=1/12?sqrt(3*r):_a*log(12*r-_b)+_c expr1 g<=1/12?sqrt(3*g):_a*log(12*g-_b)+_c expr2 b<=1/12?sqrt(3*b):_a*log(12*b-_b)+_c name HLG_OETF xpos 1060 ypos -34 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 _a t alpha} _a 0.17883277 addUserKnob {7 _b t beta} _b {{1-4*_a}} addUserKnob {7 _c} _c {{0.5-_a*log(4*_a)}} } push $Nda043200 Expression { temp_name0 rp temp_expr0 pow(r,m_1) temp_name1 gp temp_expr1 pow(g,m_1) temp_name2 bp temp_expr2 pow(b,m_1) expr0 pow((c_1+c_2*rp)/(1+c_3*rp),m_2) expr1 pow((c_1+c_2*gp)/(1+c_3*gp),m_2) expr2 pow((c_1+c_2*bp)/(1+c_3*bp),m_2) name ST2084_InverseEOTF xpos 950 ypos -58 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 m_1} m_1 {{2610/4096*(1/4)}} addUserKnob {7 m_2} m_2 {{2523/4096*128}} addUserKnob {7 c_1} c_1 {{107/128}} addUserKnob {7 c_2} c_2 {{2413/128}} addUserKnob {7 c_3} c_3 {{2392/128}} } push $Nda043200 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power2 label "\[value p]" xpos 840 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.6 } push $Nda043200 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power1 label "\[value p]" xpos 730 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.4 } push $Nda043200 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power label "\[value p]" xpos 620 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.2 } push $Nda043200 Expression { temp_name0 c temp_expr0 0.0031308 temp_name1 p temp_expr1 2.4 temp_name2 o temp_expr2 0.055 temp_name3 m temp_expr3 12.92 expr0 r>c?(1+o)*r**(1/p)-o:m*r expr1 g>c?(1+o)*g**(1/p)-o:m*g expr2 b>c?(1+o)*b**(1/p)-o:m*b name sRGB_Encoding2 note_font Helvetica xpos 510 ypos -57 } push $Nda043200 Switch { inputs 7 which {{eotf}} name SwitchInverseEOTF xpos 400 ypos 110 } Output { name Output xpos 400 ypos 182 } end_group Group { name PlotScanline17 selected true xpos -14450 ypos -2026 addUserKnob {20 Params} addUserKnob {41 p l pos T PlotScanline_.p} addUserKnob {41 mx l max T PlotScanline_.mx} addUserKnob {41 mn l min T PlotScanline_.mn} addUserKnob {7 os l oversample t "antialias by scaling up then scaling down (slower)" R 1 2} os 1 } Input { inputs 0 name Input xpos 180 ypos 614 } Reformat { type scale scale {{os}} filter notch name ReformatUp xpos 180 ypos 663 disable true } Expression { temp_name0 h temp_expr0 height/(mx-mn) expr0 y==floor((r(x,p)-mn)*h)?1:y==floor(h*-mn)&&!(x%12)?4:y==floor(h-h*mn)&&!(x%12)?4:0 expr1 y==floor((g(x,p)-mn)*h)?1:0 expr2 y==floor((b(x,p)-mn)*h)?1:0 name PlotScanline_ xpos 180 ypos 689 addUserKnob {20 Params} addUserKnob {7 p l pos R 0 2048} p 1 addUserKnob {7 mx l max R 1 4} mx 1 addUserKnob {7 mn l min R -0.2 0} } Reformat { type scale scale {{1/parent.ReformatUp.scale}} filter notch name ReformatDown xpos 180 ypos 711 disable true } Blur { channels rgba size {{1.6-(os-1)*1.6}} name Blur1 xpos 180 ypos 737 } Output { name Output xpos 180 ypos 782 } end_group push $N732bdd00 Dot { name Dot184 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos -12656 ypos -2742 } Expression { temp_name0 p0 temp_expr0 max(r,g,b)**2-3*_m*w temp_name1 p1 temp_expr1 2*max(r,g,b)**2+27*w-9*_m*w temp_name2 p2 temp_expr2 pow(sqrt(max(r,g,b)**2*p1*p1-4*p0*p0*p0)/2+max(r,g,b)*p1/2,1/3) temp_name3 s temp_expr3 invert?((max(r,g,b)**2-3*_m*w)/(3*p2)+p2/3+max(r,g,b)/3)/max(r,g,b):(max(r,g,b)**2+_m*w)/(max(r,g,b)**2+w) expr0 r*s expr1 g*s expr2 b*s name expr_ShadowContrast21 selected true xpos -12690 ypos -2603 addUserKnob {20 Params} addUserKnob {7 _m} _m 0.8 addUserKnob {7 w R 0 0.01} w 0.005 addUserKnob {6 invert +STARTLINE} } Expression { temp_name0 n temp_expr0 max(r,g,b) temp_name1 sf temp_expr1 n>x1?(_m*(n-x1)+y1)/n:(_a*pow(n,p)+_b)/n temp_name2 si temp_expr2 n>y1?((_m*x1-y1+n)/_m)/n:pow((n-_b)/_a,1/p)/n temp_name3 s temp_expr3 nNote:\n\"sRGB Encoding\" is the ~2.2 power piecewise sRGB encoding function specified in the sRGB specification.\n\"sRGB Display\" is the 2.2 power function display EOTF specified in the sRGB specification." M {None "sRGB Encoding" "sRGB Display" BT.1886 "Gamma 2.6" PQ HLG "" ""}} eotf PQ } Input { inputs 0 name Input xpos 400 ypos -130 } set Ne9abdd00 [stack 0] Expression { temp_name0 Yd temp_expr0 0.2627*r+0.6780*g+0.0593*b expr0 r*pow(Yd,(1-_g)/_g) expr1 g*pow(Yd,(1-_g)/_g) expr2 b*pow(Yd,(1-_g)/_g) name HLG_InverseOOTF xpos 1060 ypos -58 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 _g t "Gamma: Extended model for gamma variation according to peak display luminance and surround luminance: BT.2390-8 p32" R 0 2} _g {{1.2*pow(1.111,log(Lw/1000)/log(2))*pow(0.98,log(max(1e-6,Lamb)/5)/log(2))}} addUserKnob {7 Lw R 600 4000} Lw 1000 addUserKnob {7 Lamb t "ambient luminance level in nits" R 0 200} Lamb 5 } Expression { expr0 r<=1/12?sqrt(3*r):_a*log(12*r-_b)+_c expr1 g<=1/12?sqrt(3*g):_a*log(12*g-_b)+_c expr2 b<=1/12?sqrt(3*b):_a*log(12*b-_b)+_c name HLG_OETF xpos 1060 ypos -34 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 _a t alpha} _a 0.17883277 addUserKnob {7 _b t beta} _b {{1-4*_a}} addUserKnob {7 _c} _c {{0.5-_a*log(4*_a)}} } push $Ne9abdd00 Expression { temp_name0 rp temp_expr0 pow(r,m_1) temp_name1 gp temp_expr1 pow(g,m_1) temp_name2 bp temp_expr2 pow(b,m_1) expr0 pow((c_1+c_2*rp)/(1+c_3*rp),m_2) expr1 pow((c_1+c_2*gp)/(1+c_3*gp),m_2) expr2 pow((c_1+c_2*bp)/(1+c_3*bp),m_2) name ST2084_InverseEOTF xpos 950 ypos -58 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 m_1} m_1 {{2610/4096*(1/4)}} addUserKnob {7 m_2} m_2 {{2523/4096*128}} addUserKnob {7 c_1} c_1 {{107/128}} addUserKnob {7 c_2} c_2 {{2413/128}} addUserKnob {7 c_3} c_3 {{2392/128}} } push $Ne9abdd00 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power2 label "\[value p]" xpos 840 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.6 } push $Ne9abdd00 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power1 label "\[value p]" xpos 730 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.4 } push $Ne9abdd00 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power label "\[value p]" xpos 620 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.2 } push $Ne9abdd00 Expression { temp_name0 c temp_expr0 0.0031308 temp_name1 p temp_expr1 2.4 temp_name2 o temp_expr2 0.055 temp_name3 m temp_expr3 12.92 expr0 r>c?(1+o)*r**(1/p)-o:m*r expr1 g>c?(1+o)*g**(1/p)-o:m*g expr2 b>c?(1+o)*b**(1/p)-o:m*b name sRGB_Encoding2 note_font Helvetica xpos 510 ypos -57 } push $Ne9abdd00 Switch { inputs 7 which {{eotf}} name SwitchInverseEOTF xpos 400 ypos 110 } Output { name Output xpos 400 ypos 182 } end_group Group { name PlotScanline18 selected true xpos -12690 ypos -1978 addUserKnob {20 Params} addUserKnob {41 p l pos T PlotScanline_.p} addUserKnob {41 mx l max T PlotScanline_.mx} addUserKnob {41 mn l min T PlotScanline_.mn} addUserKnob {7 os l oversample t "antialias by scaling up then scaling down (slower)" R 1 2} os 1 } Input { inputs 0 name Input xpos 180 ypos 614 } Reformat { type scale scale {{os}} filter notch name ReformatUp xpos 180 ypos 663 disable true } Expression { temp_name0 h temp_expr0 height/(mx-mn) expr0 y==floor((r(x,p)-mn)*h)?1:y==floor(h*-mn)&&!(x%12)?4:y==floor(h-h*mn)&&!(x%12)?4:0 expr1 y==floor((g(x,p)-mn)*h)?1:0 expr2 y==floor((b(x,p)-mn)*h)?1:0 name PlotScanline_ xpos 180 ypos 689 addUserKnob {20 Params} addUserKnob {7 p l pos R 0 2048} p 1 addUserKnob {7 mx l max R 1 4} mx 1 addUserKnob {7 mn l min R -0.2 0} } Reformat { type scale scale {{1/parent.ReformatUp.scale}} filter notch name ReformatDown xpos 180 ypos 711 disable true } Blur { channels rgba size {{1.6-(os-1)*1.6}} name Blur1 xpos 180 ypos 737 } Output { name Output xpos 180 ypos 782 } end_group push $N60dbab00 Dot { name Dot172 note_font "Helvetica Bold" note_font_size 24 note_font_color 0xff selected true xpos -16396 ypos -2838 } Expression { temp_name0 n temp_expr0 max(r,g,b) temp_name1 sc temp_expr1 s0*n**p temp_name2 lxc temp_expr2 nNote:\n\"sRGB Encoding\" is the ~2.2 power piecewise sRGB encoding function specified in the sRGB specification.\n\"sRGB Display\" is the 2.2 power function display EOTF specified in the sRGB specification." M {None "sRGB Encoding" "sRGB Display" BT.1886 "Gamma 2.6" PQ HLG "" ""}} eotf PQ } Input { inputs 0 name Input xpos 400 ypos -130 } set N602ec100 [stack 0] Expression { temp_name0 Yd temp_expr0 0.2627*r+0.6780*g+0.0593*b expr0 r*pow(Yd,(1-_g)/_g) expr1 g*pow(Yd,(1-_g)/_g) expr2 b*pow(Yd,(1-_g)/_g) name HLG_InverseOOTF xpos 1060 ypos -58 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 _g t "Gamma: Extended model for gamma variation according to peak display luminance and surround luminance: BT.2390-8 p32" R 0 2} _g {{1.2*pow(1.111,log(Lw/1000)/log(2))*pow(0.98,log(max(1e-6,Lamb)/5)/log(2))}} addUserKnob {7 Lw R 600 4000} Lw 1000 addUserKnob {7 Lamb t "ambient luminance level in nits" R 0 200} Lamb 5 } Expression { expr0 r<=1/12?sqrt(3*r):_a*log(12*r-_b)+_c expr1 g<=1/12?sqrt(3*g):_a*log(12*g-_b)+_c expr2 b<=1/12?sqrt(3*b):_a*log(12*b-_b)+_c name HLG_OETF xpos 1060 ypos -34 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 _a t alpha} _a 0.17883277 addUserKnob {7 _b t beta} _b {{1-4*_a}} addUserKnob {7 _c} _c {{0.5-_a*log(4*_a)}} } push $N602ec100 Expression { temp_name0 rp temp_expr0 pow(r,m_1) temp_name1 gp temp_expr1 pow(g,m_1) temp_name2 bp temp_expr2 pow(b,m_1) expr0 pow((c_1+c_2*rp)/(1+c_3*rp),m_2) expr1 pow((c_1+c_2*gp)/(1+c_3*gp),m_2) expr2 pow((c_1+c_2*bp)/(1+c_3*bp),m_2) name ST2084_InverseEOTF xpos 950 ypos -58 addUserKnob {20 CONSTANTS_tab l CONSTANTS} addUserKnob {7 m_1} m_1 {{2610/4096*(1/4)}} addUserKnob {7 m_2} m_2 {{2523/4096*128}} addUserKnob {7 c_1} c_1 {{107/128}} addUserKnob {7 c_2} c_2 {{2413/128}} addUserKnob {7 c_3} c_3 {{2392/128}} } push $N602ec100 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power2 label "\[value p]" xpos 840 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.6 } push $N602ec100 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power1 label "\[value p]" xpos 730 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.4 } push $N602ec100 Expression { expr0 r**(1/p) expr1 g**(1/p) expr2 b**(1/p) name power label "\[value p]" xpos 620 ypos -64 addUserKnob {20 Params_tab l Params} addUserKnob {7 p l power R 0.2 2} p 2.2 } push $N602ec100 Expression { temp_name0 c temp_expr0 0.0031308 temp_name1 p temp_expr1 2.4 temp_name2 o temp_expr2 0.055 temp_name3 m temp_expr3 12.92 expr0 r>c?(1+o)*r**(1/p)-o:m*r expr1 g>c?(1+o)*g**(1/p)-o:m*g expr2 b>c?(1+o)*b**(1/p)-o:m*b name sRGB_Encoding2 note_font Helvetica xpos 510 ypos -57 } push $N602ec100 Switch { inputs 7 which {{eotf}} name SwitchInverseEOTF xpos 400 ypos 110 } Output { name Output xpos 400 ypos 182 } end_group Group { name PlotScanline15 selected true xpos -16430 ypos -2074 addUserKnob {20 Params} addUserKnob {41 p l pos T PlotScanline_.p} addUserKnob {41 mx l max T PlotScanline_.mx} addUserKnob {41 mn l min T PlotScanline_.mn} addUserKnob {7 os l oversample t "antialias by scaling up then scaling down (slower)" R 1 2} os 1 } Input { inputs 0 name Input xpos 180 ypos 614 } Reformat { type scale scale {{os}} filter notch name ReformatUp xpos 180 ypos 663 disable true } Expression { temp_name0 h temp_expr0 height/(mx-mn) expr0 y==floor((r(x,p)-mn)*h)?1:y==floor(h*-mn)&&!(x%12)?4:y==floor(h-h*mn)&&!(x%12)?4:0 expr1 y==floor((g(x,p)-mn)*h)?1:0 expr2 y==floor((b(x,p)-mn)*h)?1:0 name PlotScanline_ xpos 180 ypos 689 addUserKnob {20 Params} addUserKnob {7 p l pos R 0 2048} p 1 addUserKnob {7 mx l max R 1 4} mx 1 addUserKnob {7 mn l min R -0.2 0} } Reformat { type scale scale {{1/parent.ReformatUp.scale}} filter notch name ReformatDown xpos 180 ypos 711 disable true } Blur { channels rgba size {{1.6-(os-1)*1.6}} name Blur1 xpos 180 ypos 737 } Output { name Output xpos 180 ypos 782 } end_group