#! /Applications/Nuke11.2v3/Nuke11.2v3.app/Contents/MacOS/libnuke-11.2.3.dylib -nx version 11.2 v3 define_window_layout_xml { } Root { inputs 0 name /Users/matthias/Workspace/ampas/aces_gamut_vwg/nuke/model_default_values_visualisation_v03.nk frame 2 last_frame 56 lock_range true format "2048 1556 0 0 2048 1556 1 2K_Super_35_full_ap" proxy_type scale proxy_format "640 480 0 0 640 480 1 PC_Video" colorManagement Nuke workingSpaceLUT linear monitorLut sRGB int8Lut sRGB int16Lut sRGB logLut Cineon floatLut linear addUserKnob {20 GMS l "Global MotionBlur Settings"} addUserKnob {20 TGC l "Transform Global Control" n 1} addUserKnob {7 motionblur t "reference the motionblur setting on the Transform node" R 0 4} motionblur 1 addUserKnob {7 shutter R 0 4} shutter 0.5 addUserKnob {22 batchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nif n\['motionblur'].hasExpression():\n\tn\['motionblur'].clearAnimated()\n\tn\['motionblur'].setValue(n\['msamplert'].value())\nelse:\n\tn\['msamplert'].setValue(n\['motionblur'].value())\n\tn\['motionblur'].setValue(n\['msamplert'].value())\n\nn\['t_ind'].setValue('Interactive ON - Batch ON')" +STARTLINE} addUserKnob {22 batchoninteractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblur'].hasExpression() is False:\n\tvaluemb = n\['motionblur'].value()\n\tn\['msamplert'].setValue(valuemb)\nn\['motionblur'].clearAnimated()\nn\['motionblur'].setExpression(\"!\$gui ? \[knob root.msamplert] : 0\")\nn\['t_ind'].setValue(\"Interactive OFF - Batch ON\")"} addUserKnob {22 batchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblur'].hasExpression():\n\tn\['motionblur'].clearAnimated()\nn\['motionblur'].setExpression(\"0\")\n#n\['motionblur'].setValue(0)\nn\['t_ind'].setValue(\"Interactive OFF - Batch OFF\")"} addUserKnob {7 msamplert l INVISIBLE -STARTLINE +INVISIBLE} msamplert 1 addUserKnob {1 t_ind l status:} t_ind "Interactive ON - Batch ON" addUserKnob {20 endGroup n -1} addUserKnob {20 RRGC l "Roto Render Global Control" n 1} addUserKnob {6 motionBlur t "toggle motionBlur button on RotoRenders on or off\n" +STARTLINE} motionBlur true addUserKnob {6 motionBlurAllCrvs t "toggle motionBlurAllCrvs on/off" +STARTLINE} motionBlurAllCrvs true addUserKnob {7 shutterAngle R 0 360} shutterAngle 180 addUserKnob {7 shutterStart R -180 180} shutterStart -90 addUserKnob {7 motionBlurSteps R 0 2} motionBlurSteps 15 addUserKnob {22 rrbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nn\['motionBlur'].clearAnimated()\nn\['motionBlurAllCrvs'].clearAnimated()\nn\['motionBlur'].setValue(1)\nn\['motionBlurAllCrvs'].setValue(1)\nn\['rr_ind'].setValue(\"Interactive ON - Batch ON\")" +STARTLINE} addUserKnob {22 rrbatchointeractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nn\['motionBlur'].setExpression(\"!\$gui ? 1: 0\")\nn\['motionBlurAllCrvs'].setExpression(\"!\$gui ? 1: 0\")\nn\['rr_ind'].setValue(\"Interactive OFF - Batch ON\")"} addUserKnob {22 rrbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nn\['motionBlur'].clearAnimated()\nn\['motionBlur'].setValue(0)\nn\['motionBlurAllCrvs'].clearAnimated()\nn\['motionBlurAllCrvs'].setValue(0)\nn\['rr_ind'].setValue(\"Interactive OFF - Batch OFF\")"} addUserKnob {1 rr_ind l status:} rr_ind "Interactive ON - Batch ON" addUserKnob {20 endGroup_2 l endGroup n -1} addUserKnob {20 C3dGC l "Card3D Global Control" n 1} addUserKnob {7 motionblurc3d l motionblur R 0 4} motionblurc3d 1 addUserKnob {7 shutterc3d l shutter R 0 2} shutterc3d 0.5 addUserKnob {22 c3dbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nif n\['motionblurc3d'].hasExpression():\n\tn\['motionblurc3d'].clearAnimated()\n\tn\['motionblurc3d'].setValue(n\['msamplerc3d'].value())\nelse:\n\tn\['msamplerc3d'].setValue(n\['motionblurc3d'].value())\n\tn\['motionblurc3d'].setValue(n\['msamplerc3d'].value())\n\tn\['c3d_ind'].setValue(\"Interactive ON - Batch ON\")" +STARTLINE} addUserKnob {22 crdbatchoninteractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblurc3d'].hasExpression() is False:\n\tvaluemb = n\['motionblurc3d'].value()\n\tprint \"foo\", n\['msamplerc3d'].value()\n\tif n\['motionblurc3d'].value() != 0:\n\t\tn\['msamplerc3d'].setValue(valuemb)\n\tn\['motionblurc3d'].setExpression(\"!\$gui ? \[knob root.msamplerc3d] : 0\")\nn\['c3d_ind'].setValue(\"Interactive OFF - Batch ON\")\n\n"} addUserKnob {22 c3dbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nif n\['motionblurc3d'].hasExpression():\n\tn\['motionblurc3d'].clearAnimated()\nelse:\n\tn\['msamplerc3d'].setValue(n\['motionblurc3d'].value())\nn\['motionblurc3d'].setExpression(\"0\")\nn\['c3d_ind'].setValue(\"Interactive OFF - Batch OFF\")"} addUserKnob {7 msamplerc3d l INVISIBLE +INVISIBLE} msamplerc3d 1 addUserKnob {1 c3d_ind l status:} c3d_ind "Interactive ON - Batch ON" addUserKnob {20 endGroup_3 l endGroup n -1} addUserKnob {20 sr l "Scanline Render" n 1} addUserKnob {7 prescan_samples l samples R 0 50} prescan_samples 5 addUserKnob {7 batch_samples l "batch samples" R 0 50} batch_samples 5 addUserKnob {7 scan_shutter l shutter} scan_shutter 0.5 addUserKnob {22 srbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nif n\['scan_samples'].hasExpression():\n n\['scan_samples'].clearAnimated()\nif n\['prescan_samples'].hasExpression():\n\tn\['prescan_samples'].clearAnimated()\n\tn\['prescan_samples'].setValue(n\['scan_sampler'].value())\nelse:\n\tn\['scan_sampler'].setValue(n\['prescan_samples'].value())\n\n\nif n\['batch_samples'].hasExpression():\n\tn\['batch_samples'].clearAnimated()\n\tn\['batch_samples'].setValue(n\['batch_sampler'].value())\nelse:\n\tn\['batch_sampler'].setValue(n\['batch_samples'].value())\n\n\nn\['batch_samples'].setValue(n\['batch_sampler'].value())\nn\['prescan_samples'].setValue(n\['scan_sampler'].value())\nn\['scan_samples'].setExpression(\"\$gui ? %s : %s\" % (\"root.prescan_samples\",\"root.batch_samples\" ))\nn\['sr_ind'].setValue(\"Interactive ON - Batch ON\")\n" +STARTLINE} addUserKnob {22 srbatchoninteractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\n\nif n\['prescan_samples'].hasExpression():\n\tn\['prescan_samples'].clearAnimated()\n\tn\['prescan_samples'].setExpression(\"0\")\nelse:\n\tn\['scan_sampler'].setValue(n\['prescan_samples'].value())\n\tn\['prescan_samples'].setExpression(\"0\")\n\nif n\['batch_samples'].hasExpression():\n\tn\['batch_samples'].clearAnimated()\nelse:\n\tn\['batch_sampler'].setValue(n\['batch_samples'].value())\n\nn\['batch_samples'].setValue(n\['batch_sampler'].value())\nn\['scan_samples'].setExpression(\"!\$gui ? root.batch_samples : root.prescan_samples\")\nn\['sr_ind'].setValue(\"Interactive OFF - Batch ON\")"} addUserKnob {22 srbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nif n\['prescan_samples'].hasExpression() is False:\n\tn\['scan_sampler'].setValue(n\['prescan_samples'].value())\n\nif n\['batch_samples'].hasExpression() is False:\n\tn\['batch_sampler'].setValue(n\['batch_samples'].value())\n\nn\['scan_samples'].setExpression(\"!\$gui ? root.batch_samples : root.prescan_samples\")\nn\['prescan_samples'].setExpression(\"0\")\nn\['batch_samples'].setExpression(\"0\")\n\nn\['sr_ind'].setValue(\"Interactive OFF - Batch OFF\")"} addUserKnob {7 scan_sampler l INVISIBLE -STARTLINE +INVISIBLE} scan_sampler 10 addUserKnob {7 scan_samples l INVISIBLE -STARTLINE +INVISIBLE} scan_samples {{"\$gui ? root.prescan_samples : root.batch_samples"}} addUserKnob {7 batch_sampler l INVISIBLE -STARTLINE +INVISIBLE} batch_sampler 10 addUserKnob {1 sr_ind l status:} sr_ind "Interactive ON - Batch ON" addUserKnob {20 endGroup_4 l endGroup n -1} addUserKnob {20 rn l "Roto Node Global Control" n 1} addUserKnob {6 rotoMotionBlur_on l motionblur t "toggle motionBlur button on Roto nodes on or off\n" +STARTLINE} rotoMotionBlur_on true addUserKnob {7 rotoMotionBlur_samples l "motionblur samples" t "Sets the number of motion blur samples" R 0 4} rotoMotionBlur_samples 1 addUserKnob {7 rotoMotionBlur_shutter l "motionblur shutter" t "This sets how long the shutter should be open. The value is in frames, so 0.5 is half a frame" R 0 2} rotoMotionBlur_shutter 0.5 addUserKnob {4 rotoShutterOffsetType l "shutter offset type" t "The value of this controls how the shutter behaves with respect to the current frame value" M {centred start end custom}} addUserKnob {7 rotoShutterOffset l "shutter offset" t "If the \"shutter offset type\" is set to 'custom', this parameter is used to set the time the shutter opens by adding it to the current frame. \nValues are in frames, so -0.5 would open the shutter half a frame before the current frame" R -1 1} addUserKnob {22 rnbatchoninteractiveon l " Int ON - Batch ON" T "n = nuke.thisNode()\nn\['rotoMotionBlur_on'].clearAnimated()\nn\['rotoMotionBlur_on'].setValue(1)\nn\['rn_ind'].setValue(\"Interactive ON - Batch ON\")" +STARTLINE} addUserKnob {22 rnbatchointeractiveoff l " Int OFF - Batch ON" -STARTLINE T "n = nuke.thisNode()\nn\['rotoMotionBlur_on'].setExpression(\"!\$gui ? 1: 0\")\nn\['rn_ind'].setValue(\"Interactive OFF - Batch ON\")"} addUserKnob {22 rnbatchoffinteractiveoff l " Int OFF - Batch OFF" -STARTLINE T "n = nuke.thisNode()\nn\['rotoMotionBlur_on'].clearAnimated()\nn\['rotoMotionBlur_on'].setValue(0)\nn\['rn_ind'].setValue(\"Interactive OFF - Batch OFF\")"} addUserKnob {1 rn_ind l status:} rn_ind "Interactive ON - Batch ON" addUserKnob {20 endGroup_5 l endGroup n -1} } BackdropNode { inputs 0 name BackdropNode1 tile_color 0x424242ff label "Distance Limit" note_font_size 64 xpos 11015 ypos 118 bdwidth 1241 bdheight 1008 z_order -1 } BackdropNode { inputs 0 name BackdropNode2 tile_color 0x424242ff label Threshold note_font_size 64 xpos 9674 ypos 118 bdwidth 1240 bdheight 1018 z_order -1 } BackdropNode { inputs 0 name BackdropNode3 label "convert to distance\nfrom gamut boundary\n(i.e. from achromatic - 1)" xpos 11170 ypos 638 bdwidth 358 bdheight 353 } BackdropNode { inputs 0 name BackdropNode4 label "convert to distance\nfrom achromatic axis" xpos 9751 ypos 393 bdwidth 354 bdheight 310 } BackdropNode { inputs 0 name BackdropNode5 label "ACES ColorChecker values\nfrom ACES TB-2014-004 (Annex B)\nconverted to ACEScg" xpos 9753 ypos 231 bdwidth 351 bdheight 152 } BackdropNode { inputs 0 name BackdropNode6 label "Plot vendor gamuts\nand inverse compression\nof ACEScg boundary" xpos 11761 ypos 499 bdwidth 426 bdheight 587 } BackdropNode { inputs 0 name BackdropNode7 label "Plot threshold boundary\nand ColorChecker chip chromaticities" xpos 10135 ypos 226 bdwidth 711 bdheight 866 } Group { inputs 0 name ACESColorChecker1 note_font "Bitstream Vera Sans" xpos 9915 ypos 283 } Constant { inputs 0 color {0.03745 0.03766 0.03895 1} format "512 512 0 0 512 512 1 square_512" name Constant25 label "Black\n" note_font "Bitstream Vera Sans" xpos 509 ypos 165 } Constant { inputs 0 color {0.09467 0.0952 0.09637 1} format "512 512 0 0 512 512 1 square_512" name Constant24 label "Neutral 3.5\n" note_font "Bitstream Vera Sans" xpos 413 ypos 167 } Constant { inputs 0 color {0.20253 0.20243 0.20287 1} format "512 512 0 0 512 512 1 square_512" name Constant26 label "Neutral 5\n" note_font "Bitstream Vera Sans" xpos 316 ypos 167 } Constant { inputs 0 color {0.35346 0.35337 0.35391 1} format "512 512 0 0 512 512 1 square_512" name Constant23 label "Neutral 6.5\n" note_font "Bitstream Vera Sans" xpos 220 ypos 166 } Constant { inputs 0 color {0.57356 0.57256 0.57169 1} format "512 512 0 0 512 512 1 square_512" name Constant22 label "Neutral 8\n" note_font "Bitstream Vera Sans" xpos 124 ypos 168 } Constant { inputs 0 color {0.86653 0.86792 0.85818 1} format "512 512 0 0 512 512 1 square_512" name Constant21 label "White\n" note_font "Bitstream Vera Sans" xpos 29 ypos 169 } Constant { inputs 0 color {0.149 0.23377 0.35939 1} format "512 512 0 0 512 512 1 square_512" name Constant19 label "Cyan\n" note_font "Bitstream Vera Sans" xpos 507 ypos 83 } Constant { inputs 0 color {0.30904 0.14818 0.27426 1} format "512 512 0 0 512 512 1 square_512" name Constant18 label "Magenta\n" note_font "Bitstream Vera Sans" xpos 411 ypos 85 } Constant { inputs 0 color {0.58921 0.53944 0.09157 1} format "512 512 0 0 512 512 1 square_512" name Constant20 label "Yellow\n" note_font "Bitstream Vera Sans" xpos 314 ypos 85 } Constant { inputs 0 color {0.21743 0.0707 0.0513 1} format "512 512 0 0 512 512 1 square_512" name Constant17 label "Red\n" note_font "Bitstream Vera Sans" xpos 218 ypos 84 } Constant { inputs 0 color {0.15366 0.25692 0.09071 1} format "512 512 0 0 512 512 1 square_512" name Constant16 label "Green\n" note_font "Bitstream Vera Sans" xpos 122 ypos 86 } Constant { inputs 0 color {0.08731 0.07443 0.27274 1} format "512 512 0 0 512 512 1 square_512" name Constant15 label "Blue\n" note_font "Bitstream Vera Sans" xpos 25 ypos 86 } Constant { inputs 0 color {0.48657 0.36686 0.08061 1} format "512 512 0 0 512 512 1 square_512" name Constant13 label "Orange Yellow\n" note_font "Bitstream Vera Sans" xpos 508 ypos -1 } Constant { inputs 0 color {0.34877 0.43655 0.10613 1} format "512 512 0 0 512 512 1 square_512" name Constant12 label "Yellow Green\n" note_font "Bitstream Vera Sans" xpos 412 ypos 1 } Constant { inputs 0 color {0.0931 0.06347 0.13525 1} format "512 512 0 0 512 512 1 square_512" name Constant14 label "Purple\n" note_font "Bitstream Vera Sans" xpos 315 ypos 1 } Constant { inputs 0 color {0.30203 0.13752 0.12758 1} format "512 512 0 0 512 512 1 square_512" name Constant11 label "Moderate Red\n" note_font "Bitstream Vera Sans" xpos 219 } Constant { inputs 0 color {0.13822 0.13037 0.33703 1} format "512 512 0 0 512 512 1 square_512" name Constant10 label "Purplish Blue\n" note_font "Bitstream Vera Sans" xpos 123 ypos 2 } Constant { inputs 0 color {0.38607 0.22744 0.05777 1} format "512 512 0 0 512 512 1 square_512" name Constant9 label "Orange\n" note_font "Bitstream Vera Sans" selected true xpos 26 ypos 2 } Constant { inputs 0 color {0.32283 0.46208 0.40606 1} format "512 512 0 0 512 512 1 square_512" name Constant8 label "Bluish Green\n" note_font "Bitstream Vera Sans" xpos 508 ypos -89 } Constant { inputs 0 color {0.26684 0.24604 0.40932 1} format "512 512 0 0 512 512 1 square_512" name Constant7 label "Blue Flower\n" note_font "Bitstream Vera Sans" xpos 412 ypos -87 } Constant { inputs 0 color {0.10901 0.13511 0.06493 1} format "512 512 0 0 512 512 1 square_512" name Constant6 label "Foliage\n" note_font "Bitstream Vera Sans" xpos 315 ypos -87 } Constant { inputs 0 color {0.18476 0.20398 0.31311 1} format "512 512 0 0 512 512 1 square_512" name Constant4 label "Blue Sky\n" note_font "Bitstream Vera Sans" xpos 219 ypos -88 } Constant { inputs 0 color {0.40003 0.31916 0.23737 1} format "512 512 0 0 512 512 1 square_512" name Constant3 label "Light Skin\n" note_font "Bitstream Vera Sans" xpos 123 ypos -86 } Constant { inputs 0 color {0.11877 0.08709 0.05895 1} format "512 512 0 0 512 512 1 square_512" name Constant2 label "Dark Skin\n" note_font "Bitstream Vera Sans" xpos 26 ypos -86 } ContactSheet { inputs 24 width 1920 height 1280 rows 4 columns 6 roworder TopBottom name ContactSheet1 note_font "Bitstream Vera Sans" xpos 253 ypos 343 } Output { name Output1 xpos 253 ypos 443 } end_group Reformat { type scale scale 0.1 filter Impulse name Reformat2 xpos 9915 ypos 307 } ColorMatrix { matrix { {1.451439316 -0.2365107469 -0.2149285693} {-0.0765537734 1.1762297 -0.0996759264} {0.0083161484 -0.0060324498 0.9977163014} } name ColorMatrix1 label "ACES2065-1 -> ACEScg" xpos 9915 ypos 331 } Dot { name Dot45 xpos 9949 ypos 441 } set Nf0f595c0 [stack 0] Dot { name Dot46 xpos 9837 ypos 441 } Expression { channel0 {rgba.red rgba.green rgba.blue none} expr0 max(r,g,b) name achromatic4 xpos 9803 ypos 476 } set Nf0f5dd60 [stack 0] push $Nf0f595c0 Merge2 { inputs 2 operation minus bbox B Achannels rgb Bchannels rgb output rgb name Merge30 xpos 9915 ypos 476 } push $Nf0f5dd60 Expression { expr0 abs(r) expr1 abs(g) expr2 abs(b) name abs3 xpos 9803 ypos 525 } Merge2 { inputs 2 operation divide bbox B Achannels rgb Bchannels rgb output rgb name Merge31 xpos 9915 ypos 525 } StickyNote { inputs 0 name StickyNote1 label "Canon CinemaGamut primaries were\nderived from the published daylight ACES IDT\nso primary chromaticities will need to be\n\"taken with a grain of salt\" here" note_font_size 12 xpos 11819 ypos 429 } Constant { inputs 0 channels rgb color {0.814599 0.802943 0.879638 0.9999999404} format "2048 2048 0 0 2048 2048 1 square_2K" name Constant6 label "Sampled MAX(R,G,B)\nis used as threshold" xpos 9918 ypos 582 } Group { inputs 0 name Group2 label "Gamut Boundary" xpos 11380 ypos 332 } Constant { inputs 0 channels rgb format "256 256 0 0 256 256 1 square_256" name Constant3 xpos 430 ypos 180 } Ramp { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} p0 {0 {input.height/2}} p1 {{input.width-1} {input.height/2}} name Ramp1 xpos 430 ypos 252 } Ramp { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} p0 {{input.width/2} 0} p1 {{input.width/2} {input.height-1}} name Ramp2 xpos 430 ypos 276 } Multiply { value {{1/input.height} {(input.height-1)/input.height} 1 1} name Multiply5 xpos 430 ypos 300 } Expression { expr0 r+g expr1 1 expr2 1 name Expression1 xpos 430 ypos 332 } Colorspace { colorspace_in HSV name Colorspace1 selected true xpos 430 ypos 356 } Output { name Output1 xpos 430 ypos 380 } end_group set Nec359400 [stack 0] Group { name FreeformGamut5 label "Canon\nCinemaGamut (daylight)" xpos 11713 ypos 441 addUserKnob {20 Primaries} addUserKnob {26 inputPrimaries -STARTLINE T ""} addUserKnob {41 white T FromMatrix.white} addUserKnob {41 red T FromMatrix.red} addUserKnob {41 green T FromMatrix.green} addUserKnob {41 blue T FromMatrix.blue} addUserKnob {26 ""} addUserKnob {41 outputColorspace T ColorMatrix3.gamut} addUserKnob {6 inverse -STARTLINE} addUserKnob {26 ""} addUserKnob {6 showPlot +STARTLINE} addUserKnob {20 plotSettings n 1} plotSettings 0 addUserKnob {7 plotScale R 0 2} plotScale 0.5 addUserKnob {12 plotOffset} plotOffset {409.6 409.6} addUserKnob {20 endGroup n -1} addUserKnob {20 Matrices} addUserKnob {41 rgbToXyzMatrix T ColorMatrix1.matrix} addUserKnob {26 ""} addUserKnob {41 cat T ColorMatrix4.cat} addUserKnob {26 ""} addUserKnob {41 xyzToRgbMatrix T ColorMatrix2.matrix} } Constant { inputs 0 format "1 1 0 0 1 1 1 1_pixel" name Constant1 xpos -1301 ypos 69 } ColorMatrix { matrix { {{red.x/red.y} {green.x/green.y} {blue.x/blue.y}} {1 1 1} {{(1-red.x-red.y)/red.y} {(1-green.x-green.y)/green.y} {(1-blue.x-blue.y)/blue.y}} } name FromMatrix label FromParimaries xpos -1301 ypos 167 addUserKnob {20 User} addUserKnob {12 white} white {0.3127 0.329} addUserKnob {12 red} red {0.74 0.27} addUserKnob {12 green} green {0.17 1.14} addUserKnob {12 blue} blue {0.08 -0.1} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Reformat { format "2048 2048 0 0 2048 2048 1 square_2k" resize distort filter Impulse name Reformat1 xpos -1301 ypos 291 } Shuffle { red black green black blue black alpha black name Shuffle2 label "\[value in]-->\[value out]" xpos -1301 ypos 331 } Transform { translate {{parent.plotOffset.x} {parent.plotOffset.y}} scale {{parent.plotScale}} black_outside false name Transform1 xpos -1301 ypos 363 } ColorWheel { inputs 0 format "512 512 0 0 512 512 1 square_512" centerSaturation 1 name ColorWheel4 xpos -554 ypos -58 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } name ColorMatrix1 label Input_to_XYZ xpos -554 ypos 53 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } set Cf0fd49e0 [stack 0] set Nf0fd49e0 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace4 xpos -434 ypos 109 } push $Nf0fd49e0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos -554 ypos 93 } Multiply { value {1 0 0 1} name Multiply4 xpos -554 ypos 117 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.plotScale}} plot_cie_xy_left_margin {{parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos -554 ypos 159 cached true } Dilate { size 1 name Dilate1 xpos -554 ypos 232 } set Nf0dd3020 [stack 0] push $Nf0dd3020 ShuffleCopy { inputs 2 alpha alpha2 name ShuffleCopy1 xpos -554 ypos 314 } Group { inputs 0 name PlanckianLocus xpos -1030 ypos 256 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 temperature} addUserKnob {7 start -STARTLINE R 1000 100000} start 1000 addUserKnob {7 end R 1000 100000} end 100000 } Constant { inputs 0 channels rgb format "1620 2 0 0 1620 2 1 visible_spectrum_quarter nm" name bg1 xpos 507 ypos -50 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf0dface0 [stack 0] Rectangle { area {{"(log10(parent.start)-3)/2 * width"} 0 {"(log10(parent.end)-3)/2 * width"} {height}} name Rectangle7 xpos 289 ypos 130 } push $Nf0dface0 Ramp { p0 {0 1} p1 {1619 1} name Ramp4 xpos 507 ypos 55 } Multiply { value {405 405 405 2} name Multiply4 xpos 507 ypos 81 } Add { value {375 375 375 3} name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Expression { expr0 r expr1 g expr2 b expr3 pow(10,a) name Expression1 xpos 507 ypos 181 } BlinkScript { ProgramGroup 1 KernelDescription "1 \"CCT2XYZ\" iterate pixelWise 1e5106c0628b69d1e3286f708ff894031c5f2cc6dcce2f5b6f5a0f9b492ad4d3 2 \"input\" Read Random \"dst\" Write Point 0" kernelSource "// this kernel assumes the following in it's input:\n// an image with a width of 1620 pixels - representing 405 nm range in quarter-nm steps\n// RGB channel : CIE XYZ colour matching functions from 375nm to 780nm\n// Alpha channel : colour temperature in kelvin\n\nkernel CCT2XYZ : public ImageComputationKernel\n\{\n\tImage input; //the input image\n\tImage dst; //the output image\n\n\t//The kernel function is run at every pixel to produce the output.\n\tvoid process(int2 pos)\n\t\{\n \tSampleType(input) in = input(pos.x, pos.y);\n \tSampleType(input) cmf;\n \tfloat kelvin = in.w;\n \tint cmfY = 1;\n\t\tfloat3 ret = float3(0.f);\n\n\t\tfloat C1 = 2.0 * 3.141592653589793 * 6.626176 * 2.99792458 * 2.99792458;\n\t\tfloat C2 = (6.626176 * 2.99792458) / 1.380662;\n\n\t\t\n\t\tfor(int cmfX = 0; cmfX < input.bounds.width(); cmfX += 1)\n\t\t\{\n\t\t\tfloat nm = float(cmfX) / 4.f + 375.f;\n\t\t\tfloat dWavelengthM = nm * 1.0e-3; // * 1.0e-6\n\t\t\tfloat dWavelengthM5 = pow(dWavelengthM, 5.f); // * 1.0e-30\n\t\t\tfloat expArg = C2 / (kelvin * dWavelengthM * 1.0e-3);\n\t\t\tfloat blackbody = C1 / (dWavelengthM5 * 1.0e-12 * ( exp(expArg) - 1.0)); // -12 = -30 - (-18)\n\n\t\t\tcmf = input(cmfX, cmfY);\n\n\t\t\tret.x += (blackbody * cmf.x);\n\t\t\tret.y += (blackbody * cmf.y);\n\t\t\tret.z += (blackbody * cmf.z);\n\n\t\t\}\n\n\n\n\n\n\n\t\tret.x /= ret.y;\n\t\tret.z /= ret.y;\n\t\tret.y = 1.f;\n\n\t\tSampleType(input) out = in;\n\n\t\tout.x = ret.x;\n\t\tout.y = ret.y;\n\t\tout.z = ret.z;\n\n\t\tdst() = out;\n\t\}\n\};\n\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 507 ypos 219 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 267 } set Nf3f00f30 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 419 } push $Nf3f00f30 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 378 } Multiply { value {0 0 0 1} name Multiply1 xpos 640 ypos 404 } push $Nf3f00f30 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 362 } Expression { temp_name0 max temp_expr0 max(r,g,b) expr0 "r / max" expr1 "g / max" expr2 "b / max" name Expression2 xpos 507 ypos 386 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 462 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 578 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 616 } Output { name Output1 xpos 569 ypos 690 } end_group push 0 Group { inputs 0 name SpectralLocus2 xpos -914 ypos 254 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} addUserKnob {41 plotColorSpace T Switch3.which} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf3f49820 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf3f4e140 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf3f49820 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf3f4e140 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf3fcdaf0 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf3fcdaf0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf3fcdaf0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos -806 ypos 230 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf4842700 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf484a110 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf484a110 push $Nf4842700 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf486f410 [stack 0] push $Nf486f410 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf4876e20 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf4876e20 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos -806 ypos 254 } Merge2 { inputs 4+1 name Merge2 xpos -875 ypos 314 } Merge2 { inputs 2 operation plus name Merge1 xpos -875 ypos 363 } Input { inputs 0 name Input1 xpos 122 ypos -140 } Dot { name Dot2 xpos 156 ypos 11 } set Nf48ca0f0 [stack 0] Dot { name Dot4 xpos 266 ypos 11 } ColorMatrix { matrix { {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} } name ColorMatrix5 label "output to XYZ" xpos 232 ypos 84 } set Nf48cecb0 [stack 0] ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } name ColorMatrix8 label "CAT Matrix\nforward" xpos 350 ypos 79 } Multiply { value {{whiteInLMS.r/whiteOutLMS.r} {whiteInLMS.g/whiteOutLMS.g} {whiteInLMS.b/whiteOutLMS.b} 1} name Multiply3 label "Scale White" xpos 350 ypos 121 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix9 label "CAT Matrix\ninverse" xpos 350 ypos 163 } push $Nf48cecb0 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch4 xpos 232 ypos 172 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } invert true name ColorMatrix6 label "XYZ to Input" xpos 232 ypos 213 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Dot { name Dot5 xpos 266 ypos 272 } push $Nf48ca0f0 Dot { name Dot1 xpos 46 ypos 11 } clone $Cf0fd49e0 { xpos 12 ypos 74 selected false } set Nf49021a0 [stack 0] ColorMatrix { matrix { {{"\[python (1, 1, 0.8951, 0.7328)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.2664, 0.4296)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.1614, -0.1624)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, -0.7502, -0.7036)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.7135, 1.6975)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.0367, 0.0061)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, 0.0389, 0.003)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.0685, 0.0136)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.0296, 0.9834)\\\[\[numvalue cat]\\]]"}} } name ColorMatrix4 label "CAT Matrix\n\[value cat]\n\[python ('forward', 'inverse')\\\[\[numvalue invert]\\]]" xpos -113 ypos 64 addUserKnob {20 User} addUserKnob {4 cat M {None "XYZ Scaling" Bradford CAT02}} cat CAT02 } Multiply { value {{whiteOutLMS.r/whiteInLMS.r} {whiteOutLMS.g/whiteInLMS.g} {whiteOutLMS.b/whiteInLMS.b} 1} name Multiply2 label "Scale White" xpos -113 ypos 116 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix7 label "CAT Matrix\ninverse" xpos -113 ypos 158 } push $Nf49021a0 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch2 xpos 12 ypos 167 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to output" note_font "Bitstream Vera Sans" xpos 12 ypos 210 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut ACEScg } Dot { name Dot3 xpos 46 ypos 272 } Switch { inputs 2 which {{parent.inverse}} name Switch3 xpos 126 ypos 269 } Switch { inputs 2 which {{parent.showPlot}} name Switch1 xpos 126 ypos 363 } Output { name Output1 xpos 126 ypos 434 } ColorMatrix { inputs 0 matrix { {{(FromMatrix.matrix.4*FromMatrix.matrix.8-FromMatrix.matrix.7*FromMatrix.matrix.5)/FromMatrix.determinant} {(FromMatrix.matrix.7*FromMatrix.matrix.2-FromMatrix.matrix.1*FromMatrix.matrix.8)/FromMatrix.determinant} {(FromMatrix.matrix.1*FromMatrix.matrix.5-FromMatrix.matrix.4*FromMatrix.matrix.2)/FromMatrix.determinant}} {{(FromMatrix.matrix.5*FromMatrix.matrix.6-FromMatrix.matrix.8*FromMatrix.matrix.3)/FromMatrix.determinant} {(FromMatrix.matrix.8*FromMatrix.matrix.0-FromMatrix.matrix.2*FromMatrix.matrix.6)/FromMatrix.determinant} {(FromMatrix.matrix.2*FromMatrix.matrix.3-FromMatrix.matrix.5*FromMatrix.matrix.0)/FromMatrix.determinant}} {{(FromMatrix.matrix.3*FromMatrix.matrix.7-FromMatrix.matrix.6*FromMatrix.matrix.4)/FromMatrix.determinant} {(FromMatrix.matrix.6*FromMatrix.matrix.1-FromMatrix.matrix.0*FromMatrix.matrix.7)/FromMatrix.determinant} {(FromMatrix.matrix.0*FromMatrix.matrix.4-FromMatrix.matrix.3*FromMatrix.matrix.1)/FromMatrix.determinant}} } name FromMatrixInverse label FromParimaries-1 xpos -1169 ypos 165 addUserKnob {20 User} addUserKnob {13 white} white {{FromMatrix.white.x/FromMatrix.white.y} 1 {(1-FromMatrix.white.x-FromMatrix.white.y)/FromMatrix.white.y}} addUserKnob {18 S} S {{matrix.0*white.x+matrix.1*white.y+matrix.2*white.z} {matrix.3*white.x+matrix.4*white.y+matrix.5*white.z} {matrix.6*white.x+matrix.7*white.y+matrix.8*white.z}} addUserKnob {6 S_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { inputs 0 matrix { {{(ColorMatrix1.matrix.4*ColorMatrix1.matrix.8-ColorMatrix1.matrix.7*ColorMatrix1.matrix.5)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.7*ColorMatrix1.matrix.2-ColorMatrix1.matrix.1*ColorMatrix1.matrix.8)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.1*ColorMatrix1.matrix.5-ColorMatrix1.matrix.4*ColorMatrix1.matrix.2)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.5*ColorMatrix1.matrix.6-ColorMatrix1.matrix.8*ColorMatrix1.matrix.3)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.8*ColorMatrix1.matrix.0-ColorMatrix1.matrix.2*ColorMatrix1.matrix.6)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.2*ColorMatrix1.matrix.3-ColorMatrix1.matrix.5*ColorMatrix1.matrix.0)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.3*ColorMatrix1.matrix.7-ColorMatrix1.matrix.6*ColorMatrix1.matrix.4)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.6*ColorMatrix1.matrix.1-ColorMatrix1.matrix.0*ColorMatrix1.matrix.7)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.0*ColorMatrix1.matrix.4-ColorMatrix1.matrix.3*ColorMatrix1.matrix.1)/ColorMatrix1.determinant}} } name ColorMatrix2 label XYZ_to_Input note_font "Bitstream Vera Sans" xpos -435 ypos 52 } end_group push $Nec359400 Group { name FreeformGamut4 label "Panasonic\nV-Gamut" xpos 11601 ypos 440 addUserKnob {20 Primaries} addUserKnob {26 inputPrimaries -STARTLINE T ""} addUserKnob {41 white T FromMatrix.white} addUserKnob {41 red T FromMatrix.red} addUserKnob {41 green T FromMatrix.green} addUserKnob {41 blue T FromMatrix.blue} addUserKnob {26 ""} addUserKnob {41 outputColorspace T ColorMatrix3.gamut} addUserKnob {6 inverse -STARTLINE} addUserKnob {26 ""} addUserKnob {6 showPlot +STARTLINE} addUserKnob {20 plotSettings n 1} plotSettings 0 addUserKnob {7 plotScale R 0 2} plotScale 0.5 addUserKnob {12 plotOffset} plotOffset {409.6 409.6} addUserKnob {20 endGroup n -1} addUserKnob {20 Matrices} addUserKnob {41 rgbToXyzMatrix T ColorMatrix1.matrix} addUserKnob {26 ""} addUserKnob {41 cat T ColorMatrix4.cat} addUserKnob {26 ""} addUserKnob {41 xyzToRgbMatrix T ColorMatrix2.matrix} } Constant { inputs 0 format "1 1 0 0 1 1 1 1_pixel" name Constant1 xpos -1301 ypos 69 } ColorMatrix { matrix { {{red.x/red.y} {green.x/green.y} {blue.x/blue.y}} {1 1 1} {{(1-red.x-red.y)/red.y} {(1-green.x-green.y)/green.y} {(1-blue.x-blue.y)/blue.y}} } name FromMatrix label FromParimaries xpos -1301 ypos 167 addUserKnob {20 User} addUserKnob {12 white} white {0.3127 0.329} addUserKnob {12 red} red {0.73 0.28} addUserKnob {12 green} green {0.165 0.84} addUserKnob {12 blue} blue {0.1 -0.03} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Reformat { format "2048 2048 0 0 2048 2048 1 square_2k" resize distort filter Impulse name Reformat1 xpos -1301 ypos 291 } Shuffle { red black green black blue black alpha black name Shuffle2 label "\[value in]-->\[value out]" xpos -1301 ypos 331 } Transform { translate {{parent.plotOffset.x} {parent.plotOffset.y}} scale {{parent.plotScale}} black_outside false name Transform1 xpos -1301 ypos 363 } ColorWheel { inputs 0 format "512 512 0 0 512 512 1 square_512" centerSaturation 1 name ColorWheel4 xpos -554 ypos -58 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } name ColorMatrix1 label Input_to_XYZ xpos -554 ypos 53 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } set Cf4976e70 [stack 0] set Nf4976e70 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace4 xpos -434 ypos 109 } push $Nf4976e70 Shuffle { red white green white blue white alpha white name Shuffle1 xpos -554 ypos 93 } Multiply { value {1 0 0 1} name Multiply4 xpos -554 ypos 117 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.plotScale}} plot_cie_xy_left_margin {{parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos -554 ypos 159 cached true } Dilate { size 1 name Dilate1 xpos -554 ypos 232 } set Nf499d200 [stack 0] push $Nf499d200 ShuffleCopy { inputs 2 alpha alpha2 name ShuffleCopy1 xpos -554 ypos 314 } Group { inputs 0 name PlanckianLocus xpos -1030 ypos 256 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 temperature} addUserKnob {7 start -STARTLINE R 1000 100000} start 1000 addUserKnob {7 end R 1000 100000} end 100000 } Constant { inputs 0 channels rgb format "1620 2 0 0 1620 2 1 visible_spectrum_quarter nm" name bg1 xpos 507 ypos -50 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf49af060 [stack 0] Rectangle { area {{"(log10(parent.start)-3)/2 * width"} 0 {"(log10(parent.end)-3)/2 * width"} {height}} name Rectangle7 xpos 289 ypos 130 } push $Nf49af060 Ramp { p0 {0 1} p1 {1619 1} name Ramp4 xpos 507 ypos 55 } Multiply { value {405 405 405 2} name Multiply4 xpos 507 ypos 81 } Add { value {375 375 375 3} name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Expression { expr0 r expr1 g expr2 b expr3 pow(10,a) name Expression1 xpos 507 ypos 181 } BlinkScript { ProgramGroup 1 KernelDescription "1 \"CCT2XYZ\" iterate pixelWise 1e5106c0628b69d1e3286f708ff894031c5f2cc6dcce2f5b6f5a0f9b492ad4d3 2 \"input\" Read Random \"dst\" Write Point 0" kernelSource "// this kernel assumes the following in it's input:\n// an image with a width of 1620 pixels - representing 405 nm range in quarter-nm steps\n// RGB channel : CIE XYZ colour matching functions from 375nm to 780nm\n// Alpha channel : colour temperature in kelvin\n\nkernel CCT2XYZ : public ImageComputationKernel\n\{\n\tImage input; //the input image\n\tImage dst; //the output image\n\n\t//The kernel function is run at every pixel to produce the output.\n\tvoid process(int2 pos)\n\t\{\n \tSampleType(input) in = input(pos.x, pos.y);\n \tSampleType(input) cmf;\n \tfloat kelvin = in.w;\n \tint cmfY = 1;\n\t\tfloat3 ret = float3(0.f);\n\n\t\tfloat C1 = 2.0 * 3.141592653589793 * 6.626176 * 2.99792458 * 2.99792458;\n\t\tfloat C2 = (6.626176 * 2.99792458) / 1.380662;\n\n\t\t\n\t\tfor(int cmfX = 0; cmfX < input.bounds.width(); cmfX += 1)\n\t\t\{\n\t\t\tfloat nm = float(cmfX) / 4.f + 375.f;\n\t\t\tfloat dWavelengthM = nm * 1.0e-3; // * 1.0e-6\n\t\t\tfloat dWavelengthM5 = pow(dWavelengthM, 5.f); // * 1.0e-30\n\t\t\tfloat expArg = C2 / (kelvin * dWavelengthM * 1.0e-3);\n\t\t\tfloat blackbody = C1 / (dWavelengthM5 * 1.0e-12 * ( exp(expArg) - 1.0)); // -12 = -30 - (-18)\n\n\t\t\tcmf = input(cmfX, cmfY);\n\n\t\t\tret.x += (blackbody * cmf.x);\n\t\t\tret.y += (blackbody * cmf.y);\n\t\t\tret.z += (blackbody * cmf.z);\n\n\t\t\}\n\n\n\n\n\n\n\t\tret.x /= ret.y;\n\t\tret.z /= ret.y;\n\t\tret.y = 1.f;\n\n\t\tSampleType(input) out = in;\n\n\t\tout.x = ret.x;\n\t\tout.y = ret.y;\n\t\tout.z = ret.z;\n\n\t\tdst() = out;\n\t\}\n\};\n\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 507 ypos 219 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 267 } set Nf49dd620 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 419 } push $Nf49dd620 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 378 } Multiply { value {0 0 0 1} name Multiply1 xpos 640 ypos 404 } push $Nf49dd620 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 362 } Expression { temp_name0 max temp_expr0 max(r,g,b) expr0 "r / max" expr1 "g / max" expr2 "b / max" name Expression2 xpos 507 ypos 386 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 462 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 578 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 616 } Output { name Output1 xpos 569 ypos 690 } end_group push 0 Group { inputs 0 name SpectralLocus2 xpos -914 ypos 254 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} addUserKnob {41 plotColorSpace T Switch3.which} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf4a29ef0 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf4a2e810 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf4a29ef0 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf4a2e810 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf4aae1c0 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf4aae1c0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf4aae1c0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos -806 ypos 230 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf3c683b0 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf3c6fdc0 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf3c6fdc0 push $Nf3c683b0 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf3c950c0 [stack 0] push $Nf3c950c0 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf3c9cad0 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf3c9cad0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos -806 ypos 254 } Merge2 { inputs 4+1 name Merge2 xpos -875 ypos 314 } Merge2 { inputs 2 operation plus name Merge1 xpos -875 ypos 363 } Input { inputs 0 name Input1 xpos 122 ypos -140 } Dot { name Dot2 xpos 156 ypos 11 } set Nf3cefda0 [stack 0] Dot { name Dot4 xpos 266 ypos 11 } ColorMatrix { matrix { {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} } name ColorMatrix5 label "output to XYZ" xpos 232 ypos 84 } set Nf3cf4960 [stack 0] ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } name ColorMatrix8 label "CAT Matrix\nforward" xpos 350 ypos 79 } Multiply { value {{whiteInLMS.r/whiteOutLMS.r} {whiteInLMS.g/whiteOutLMS.g} {whiteInLMS.b/whiteOutLMS.b} 1} name Multiply3 label "Scale White" xpos 350 ypos 121 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix9 label "CAT Matrix\ninverse" xpos 350 ypos 163 } push $Nf3cf4960 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch4 xpos 232 ypos 172 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } invert true name ColorMatrix6 label "XYZ to Input" xpos 232 ypos 213 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Dot { name Dot5 xpos 266 ypos 272 } push $Nf3cefda0 Dot { name Dot1 xpos 46 ypos 11 } clone $Cf4976e70 { xpos 12 ypos 74 selected false } set Nf4b27f30 [stack 0] ColorMatrix { matrix { {{"\[python (1, 1, 0.8951, 0.7328)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.2664, 0.4296)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.1614, -0.1624)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, -0.7502, -0.7036)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.7135, 1.6975)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.0367, 0.0061)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, 0.0389, 0.003)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.0685, 0.0136)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.0296, 0.9834)\\\[\[numvalue cat]\\]]"}} } name ColorMatrix4 label "CAT Matrix\n\[value cat]\n\[python ('forward', 'inverse')\\\[\[numvalue invert]\\]]" xpos -113 ypos 64 addUserKnob {20 User} addUserKnob {4 cat M {None "XYZ Scaling" Bradford CAT02}} cat CAT02 } Multiply { value {{whiteOutLMS.r/whiteInLMS.r} {whiteOutLMS.g/whiteInLMS.g} {whiteOutLMS.b/whiteInLMS.b} 1} name Multiply2 label "Scale White" xpos -113 ypos 116 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix7 label "CAT Matrix\ninverse" xpos -113 ypos 158 } push $Nf4b27f30 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch2 xpos 12 ypos 167 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to output" note_font "Bitstream Vera Sans" xpos 12 ypos 210 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut ACEScg } Dot { name Dot3 xpos 46 ypos 272 } Switch { inputs 2 which {{parent.inverse}} name Switch3 xpos 126 ypos 269 } Switch { inputs 2 which {{parent.showPlot}} name Switch1 xpos 126 ypos 363 } Output { name Output1 xpos 126 ypos 434 } ColorMatrix { inputs 0 matrix { {{(FromMatrix.matrix.4*FromMatrix.matrix.8-FromMatrix.matrix.7*FromMatrix.matrix.5)/FromMatrix.determinant} {(FromMatrix.matrix.7*FromMatrix.matrix.2-FromMatrix.matrix.1*FromMatrix.matrix.8)/FromMatrix.determinant} {(FromMatrix.matrix.1*FromMatrix.matrix.5-FromMatrix.matrix.4*FromMatrix.matrix.2)/FromMatrix.determinant}} {{(FromMatrix.matrix.5*FromMatrix.matrix.6-FromMatrix.matrix.8*FromMatrix.matrix.3)/FromMatrix.determinant} {(FromMatrix.matrix.8*FromMatrix.matrix.0-FromMatrix.matrix.2*FromMatrix.matrix.6)/FromMatrix.determinant} {(FromMatrix.matrix.2*FromMatrix.matrix.3-FromMatrix.matrix.5*FromMatrix.matrix.0)/FromMatrix.determinant}} {{(FromMatrix.matrix.3*FromMatrix.matrix.7-FromMatrix.matrix.6*FromMatrix.matrix.4)/FromMatrix.determinant} {(FromMatrix.matrix.6*FromMatrix.matrix.1-FromMatrix.matrix.0*FromMatrix.matrix.7)/FromMatrix.determinant} {(FromMatrix.matrix.0*FromMatrix.matrix.4-FromMatrix.matrix.3*FromMatrix.matrix.1)/FromMatrix.determinant}} } name FromMatrixInverse label FromParimaries-1 xpos -1169 ypos 165 addUserKnob {20 User} addUserKnob {13 white} white {{FromMatrix.white.x/FromMatrix.white.y} 1 {(1-FromMatrix.white.x-FromMatrix.white.y)/FromMatrix.white.y}} addUserKnob {18 S} S {{matrix.0*white.x+matrix.1*white.y+matrix.2*white.z} {matrix.3*white.x+matrix.4*white.y+matrix.5*white.z} {matrix.6*white.x+matrix.7*white.y+matrix.8*white.z}} addUserKnob {6 S_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { inputs 0 matrix { {{(ColorMatrix1.matrix.4*ColorMatrix1.matrix.8-ColorMatrix1.matrix.7*ColorMatrix1.matrix.5)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.7*ColorMatrix1.matrix.2-ColorMatrix1.matrix.1*ColorMatrix1.matrix.8)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.1*ColorMatrix1.matrix.5-ColorMatrix1.matrix.4*ColorMatrix1.matrix.2)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.5*ColorMatrix1.matrix.6-ColorMatrix1.matrix.8*ColorMatrix1.matrix.3)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.8*ColorMatrix1.matrix.0-ColorMatrix1.matrix.2*ColorMatrix1.matrix.6)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.2*ColorMatrix1.matrix.3-ColorMatrix1.matrix.5*ColorMatrix1.matrix.0)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.3*ColorMatrix1.matrix.7-ColorMatrix1.matrix.6*ColorMatrix1.matrix.4)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.6*ColorMatrix1.matrix.1-ColorMatrix1.matrix.0*ColorMatrix1.matrix.7)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.0*ColorMatrix1.matrix.4-ColorMatrix1.matrix.3*ColorMatrix1.matrix.1)/ColorMatrix1.determinant}} } name ColorMatrix2 label XYZ_to_Input note_font "Bitstream Vera Sans" xpos -435 ypos 52 } end_group push $Nec359400 Group { name FreeformGamut3 label "Blackmagic Design\nBMDWide v4" xpos 11495 ypos 444 addUserKnob {20 Primaries} addUserKnob {26 inputPrimaries -STARTLINE T ""} addUserKnob {41 white T FromMatrix.white} addUserKnob {41 red T FromMatrix.red} addUserKnob {41 green T FromMatrix.green} addUserKnob {41 blue T FromMatrix.blue} addUserKnob {26 ""} addUserKnob {41 outputColorspace T ColorMatrix3.gamut} addUserKnob {6 inverse -STARTLINE} addUserKnob {26 ""} addUserKnob {6 showPlot +STARTLINE} addUserKnob {20 plotSettings n 1} plotSettings 0 addUserKnob {7 plotScale R 0 2} plotScale 0.5 addUserKnob {12 plotOffset} plotOffset {409.6 409.6} addUserKnob {20 endGroup n -1} addUserKnob {20 Matrices} addUserKnob {41 rgbToXyzMatrix T ColorMatrix1.matrix} addUserKnob {26 ""} addUserKnob {41 cat T ColorMatrix4.cat} addUserKnob {26 ""} addUserKnob {41 xyzToRgbMatrix T ColorMatrix2.matrix} } Constant { inputs 0 format "1 1 0 0 1 1 1 1_pixel" name Constant1 xpos -1301 ypos 69 } ColorMatrix { matrix { {{red.x/red.y} {green.x/green.y} {blue.x/blue.y}} {1 1 1} {{(1-red.x-red.y)/red.y} {(1-green.x-green.y)/green.y} {(1-blue.x-blue.y)/blue.y}} } name FromMatrix label FromParimaries xpos -1301 ypos 167 addUserKnob {20 User} addUserKnob {12 white} white {0.3127 0.329} addUserKnob {12 red} red {0.7177 0.3171} addUserKnob {12 green} green {0.228 0.8616} addUserKnob {12 blue} blue {0.1006 -0.082} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Reformat { format "2048 2048 0 0 2048 2048 1 square_2k" resize distort filter Impulse name Reformat1 xpos -1301 ypos 291 } Shuffle { red black green black blue black alpha black name Shuffle2 label "\[value in]-->\[value out]" xpos -1301 ypos 331 } Transform { translate {{parent.plotOffset.x} {parent.plotOffset.y}} scale {{parent.plotScale}} black_outside false name Transform1 xpos -1301 ypos 363 } ColorWheel { inputs 0 format "512 512 0 0 512 512 1 square_512" centerSaturation 1 name ColorWheel4 xpos -554 ypos -58 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } name ColorMatrix1 label Input_to_XYZ xpos -554 ypos 53 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } set Cf4b9cc00 [stack 0] set Nf4b9cc00 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace4 xpos -434 ypos 109 } push $Nf4b9cc00 Shuffle { red white green white blue white alpha white name Shuffle1 xpos -554 ypos 93 } Multiply { value {1 0 0 1} name Multiply4 xpos -554 ypos 117 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.plotScale}} plot_cie_xy_left_margin {{parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos -554 ypos 159 cached true } Dilate { size 1 name Dilate1 xpos -554 ypos 232 } set Nf4bc2f90 [stack 0] push $Nf4bc2f90 ShuffleCopy { inputs 2 alpha alpha2 name ShuffleCopy1 xpos -554 ypos 314 } Group { inputs 0 name PlanckianLocus xpos -1030 ypos 256 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 temperature} addUserKnob {7 start -STARTLINE R 1000 100000} start 1000 addUserKnob {7 end R 1000 100000} end 100000 } Constant { inputs 0 channels rgb format "1620 2 0 0 1620 2 1 visible_spectrum_quarter nm" name bg1 xpos 507 ypos -50 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf4bd4df0 [stack 0] Rectangle { area {{"(log10(parent.start)-3)/2 * width"} 0 {"(log10(parent.end)-3)/2 * width"} {height}} name Rectangle7 xpos 289 ypos 130 } push $Nf4bd4df0 Ramp { p0 {0 1} p1 {1619 1} name Ramp4 xpos 507 ypos 55 } Multiply { value {405 405 405 2} name Multiply4 xpos 507 ypos 81 } Add { value {375 375 375 3} name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Expression { expr0 r expr1 g expr2 b expr3 pow(10,a) name Expression1 xpos 507 ypos 181 } BlinkScript { ProgramGroup 1 KernelDescription "1 \"CCT2XYZ\" iterate pixelWise 1e5106c0628b69d1e3286f708ff894031c5f2cc6dcce2f5b6f5a0f9b492ad4d3 2 \"input\" Read Random \"dst\" Write Point 0" kernelSource "// this kernel assumes the following in it's input:\n// an image with a width of 1620 pixels - representing 405 nm range in quarter-nm steps\n// RGB channel : CIE XYZ colour matching functions from 375nm to 780nm\n// Alpha channel : colour temperature in kelvin\n\nkernel CCT2XYZ : public ImageComputationKernel\n\{\n\tImage input; //the input image\n\tImage dst; //the output image\n\n\t//The kernel function is run at every pixel to produce the output.\n\tvoid process(int2 pos)\n\t\{\n \tSampleType(input) in = input(pos.x, pos.y);\n \tSampleType(input) cmf;\n \tfloat kelvin = in.w;\n \tint cmfY = 1;\n\t\tfloat3 ret = float3(0.f);\n\n\t\tfloat C1 = 2.0 * 3.141592653589793 * 6.626176 * 2.99792458 * 2.99792458;\n\t\tfloat C2 = (6.626176 * 2.99792458) / 1.380662;\n\n\t\t\n\t\tfor(int cmfX = 0; cmfX < input.bounds.width(); cmfX += 1)\n\t\t\{\n\t\t\tfloat nm = float(cmfX) / 4.f + 375.f;\n\t\t\tfloat dWavelengthM = nm * 1.0e-3; // * 1.0e-6\n\t\t\tfloat dWavelengthM5 = pow(dWavelengthM, 5.f); // * 1.0e-30\n\t\t\tfloat expArg = C2 / (kelvin * dWavelengthM * 1.0e-3);\n\t\t\tfloat blackbody = C1 / (dWavelengthM5 * 1.0e-12 * ( exp(expArg) - 1.0)); // -12 = -30 - (-18)\n\n\t\t\tcmf = input(cmfX, cmfY);\n\n\t\t\tret.x += (blackbody * cmf.x);\n\t\t\tret.y += (blackbody * cmf.y);\n\t\t\tret.z += (blackbody * cmf.z);\n\n\t\t\}\n\n\n\n\n\n\n\t\tret.x /= ret.y;\n\t\tret.z /= ret.y;\n\t\tret.y = 1.f;\n\n\t\tSampleType(input) out = in;\n\n\t\tout.x = ret.x;\n\t\tout.y = ret.y;\n\t\tout.z = ret.z;\n\n\t\tdst() = out;\n\t\}\n\};\n\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 507 ypos 219 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 267 } set Nf4c073c0 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 419 } push $Nf4c073c0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 378 } Multiply { value {0 0 0 1} name Multiply1 xpos 640 ypos 404 } push $Nf4c073c0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 362 } Expression { temp_name0 max temp_expr0 max(r,g,b) expr0 "r / max" expr1 "g / max" expr2 "b / max" name Expression2 xpos 507 ypos 386 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 462 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 578 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 616 } Output { name Output1 xpos 569 ypos 690 } end_group push 0 Group { inputs 0 name SpectralLocus2 xpos -914 ypos 254 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} addUserKnob {41 plotColorSpace T Switch3.which} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf4c4fcb0 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf4c545d0 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf4c4fcb0 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf4c545d0 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf4cd3f80 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf4cd3f80 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf4cd3f80 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos -806 ypos 230 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf3e41e70 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf3e49880 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf3e49880 push $Nf3e41e70 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf3e6eb80 [stack 0] push $Nf3e6eb80 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf3e76590 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf3e76590 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos -806 ypos 254 } Merge2 { inputs 4+1 name Merge2 xpos -875 ypos 314 } Merge2 { inputs 2 operation plus name Merge1 xpos -875 ypos 363 } Input { inputs 0 name Input1 xpos 122 ypos -140 } Dot { name Dot2 xpos 156 ypos 11 } set Nf3ec9a60 [stack 0] Dot { name Dot4 xpos 266 ypos 11 } ColorMatrix { matrix { {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} } name ColorMatrix5 label "output to XYZ" xpos 232 ypos 84 } set Nf3ece620 [stack 0] ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } name ColorMatrix8 label "CAT Matrix\nforward" xpos 350 ypos 79 } Multiply { value {{whiteInLMS.r/whiteOutLMS.r} {whiteInLMS.g/whiteOutLMS.g} {whiteInLMS.b/whiteOutLMS.b} 1} name Multiply3 label "Scale White" xpos 350 ypos 121 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix9 label "CAT Matrix\ninverse" xpos 350 ypos 163 } push $Nf3ece620 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch4 xpos 232 ypos 172 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } invert true name ColorMatrix6 label "XYZ to Input" xpos 232 ypos 213 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Dot { name Dot5 xpos 266 ypos 272 } push $Nf3ec9a60 Dot { name Dot1 xpos 46 ypos 11 } clone $Cf4b9cc00 { xpos 12 ypos 74 selected false } set Nf4e01b80 [stack 0] ColorMatrix { matrix { {{"\[python (1, 1, 0.8951, 0.7328)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.2664, 0.4296)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.1614, -0.1624)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, -0.7502, -0.7036)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.7135, 1.6975)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.0367, 0.0061)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, 0.0389, 0.003)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.0685, 0.0136)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.0296, 0.9834)\\\[\[numvalue cat]\\]]"}} } name ColorMatrix4 label "CAT Matrix\n\[value cat]\n\[python ('forward', 'inverse')\\\[\[numvalue invert]\\]]" xpos -113 ypos 64 addUserKnob {20 User} addUserKnob {4 cat M {None "XYZ Scaling" Bradford CAT02}} cat Bradford } Multiply { value {{whiteOutLMS.r/whiteInLMS.r} {whiteOutLMS.g/whiteInLMS.g} {whiteOutLMS.b/whiteInLMS.b} 1} name Multiply2 label "Scale White" xpos -113 ypos 116 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix7 label "CAT Matrix\ninverse" xpos -113 ypos 158 } push $Nf4e01b80 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch2 xpos 12 ypos 167 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to output" note_font "Bitstream Vera Sans" xpos 12 ypos 210 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut ACEScg } Dot { name Dot3 xpos 46 ypos 272 } Switch { inputs 2 which {{parent.inverse}} name Switch3 xpos 126 ypos 269 } Switch { inputs 2 which {{parent.showPlot}} name Switch1 xpos 126 ypos 363 } Output { name Output1 xpos 126 ypos 434 } ColorMatrix { inputs 0 matrix { {{(FromMatrix.matrix.4*FromMatrix.matrix.8-FromMatrix.matrix.7*FromMatrix.matrix.5)/FromMatrix.determinant} {(FromMatrix.matrix.7*FromMatrix.matrix.2-FromMatrix.matrix.1*FromMatrix.matrix.8)/FromMatrix.determinant} {(FromMatrix.matrix.1*FromMatrix.matrix.5-FromMatrix.matrix.4*FromMatrix.matrix.2)/FromMatrix.determinant}} {{(FromMatrix.matrix.5*FromMatrix.matrix.6-FromMatrix.matrix.8*FromMatrix.matrix.3)/FromMatrix.determinant} {(FromMatrix.matrix.8*FromMatrix.matrix.0-FromMatrix.matrix.2*FromMatrix.matrix.6)/FromMatrix.determinant} {(FromMatrix.matrix.2*FromMatrix.matrix.3-FromMatrix.matrix.5*FromMatrix.matrix.0)/FromMatrix.determinant}} {{(FromMatrix.matrix.3*FromMatrix.matrix.7-FromMatrix.matrix.6*FromMatrix.matrix.4)/FromMatrix.determinant} {(FromMatrix.matrix.6*FromMatrix.matrix.1-FromMatrix.matrix.0*FromMatrix.matrix.7)/FromMatrix.determinant} {(FromMatrix.matrix.0*FromMatrix.matrix.4-FromMatrix.matrix.3*FromMatrix.matrix.1)/FromMatrix.determinant}} } name FromMatrixInverse label FromParimaries-1 xpos -1169 ypos 165 addUserKnob {20 User} addUserKnob {13 white} white {{FromMatrix.white.x/FromMatrix.white.y} 1 {(1-FromMatrix.white.x-FromMatrix.white.y)/FromMatrix.white.y}} addUserKnob {18 S} S {{matrix.0*white.x+matrix.1*white.y+matrix.2*white.z} {matrix.3*white.x+matrix.4*white.y+matrix.5*white.z} {matrix.6*white.x+matrix.7*white.y+matrix.8*white.z}} addUserKnob {6 S_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { inputs 0 matrix { {{(ColorMatrix1.matrix.4*ColorMatrix1.matrix.8-ColorMatrix1.matrix.7*ColorMatrix1.matrix.5)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.7*ColorMatrix1.matrix.2-ColorMatrix1.matrix.1*ColorMatrix1.matrix.8)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.1*ColorMatrix1.matrix.5-ColorMatrix1.matrix.4*ColorMatrix1.matrix.2)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.5*ColorMatrix1.matrix.6-ColorMatrix1.matrix.8*ColorMatrix1.matrix.3)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.8*ColorMatrix1.matrix.0-ColorMatrix1.matrix.2*ColorMatrix1.matrix.6)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.2*ColorMatrix1.matrix.3-ColorMatrix1.matrix.5*ColorMatrix1.matrix.0)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.3*ColorMatrix1.matrix.7-ColorMatrix1.matrix.6*ColorMatrix1.matrix.4)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.6*ColorMatrix1.matrix.1-ColorMatrix1.matrix.0*ColorMatrix1.matrix.7)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.0*ColorMatrix1.matrix.4-ColorMatrix1.matrix.3*ColorMatrix1.matrix.1)/ColorMatrix1.determinant}} } name ColorMatrix2 label XYZ_to_Input note_font "Bitstream Vera Sans" xpos -435 ypos 52 } end_group push $Nec359400 Group { name FreeformGamut1 label "Sony\nVenice SGamut3" xpos 11380 ypos 444 addUserKnob {20 Primaries} addUserKnob {26 inputPrimaries -STARTLINE T ""} addUserKnob {41 white T FromMatrix.white} addUserKnob {41 red T FromMatrix.red} addUserKnob {41 green T FromMatrix.green} addUserKnob {41 blue T FromMatrix.blue} addUserKnob {26 ""} addUserKnob {41 outputColorspace T ColorMatrix3.gamut} addUserKnob {6 inverse -STARTLINE} addUserKnob {26 ""} addUserKnob {6 showPlot +STARTLINE} addUserKnob {20 plotSettings n 1} plotSettings 0 addUserKnob {7 plotScale R 0 2} plotScale 0.5 addUserKnob {12 plotOffset} plotOffset {409.6 409.6} addUserKnob {20 endGroup n -1} addUserKnob {20 Matrices} addUserKnob {41 rgbToXyzMatrix T ColorMatrix1.matrix} addUserKnob {26 ""} addUserKnob {41 cat T ColorMatrix4.cat} addUserKnob {26 ""} addUserKnob {41 xyzToRgbMatrix T ColorMatrix2.matrix} } Constant { inputs 0 format "1 1 0 0 1 1 1 1_pixel" name Constant1 xpos -1301 ypos 69 } ColorMatrix { matrix { {{red.x/red.y} {green.x/green.y} {blue.x/blue.y}} {1 1 1} {{(1-red.x-red.y)/red.y} {(1-green.x-green.y)/green.y} {(1-blue.x-blue.y)/blue.y}} } name FromMatrix label FromParimaries xpos -1301 ypos 167 addUserKnob {20 User} addUserKnob {12 white} white {0.3127 0.329} addUserKnob {12 red} red {0.7404642643 0.2793643748} addUserKnob {12 green} green {0.08924114542 0.8938095286} addUserKnob {12 blue} blue {0.1104882367 -0.05257933308} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Reformat { format "2048 2048 0 0 2048 2048 1 square_2k" resize distort filter Impulse name Reformat1 xpos -1301 ypos 291 } Shuffle { red black green black blue black alpha black name Shuffle2 label "\[value in]-->\[value out]" xpos -1301 ypos 331 } Transform { translate {{parent.plotOffset.x} {parent.plotOffset.y}} scale {{parent.plotScale}} black_outside false name Transform1 xpos -1301 ypos 363 } ColorWheel { inputs 0 format "512 512 0 0 512 512 1 square_512" centerSaturation 1 name ColorWheel4 xpos -554 ypos -58 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } name ColorMatrix1 label Input_to_XYZ xpos -554 ypos 53 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } set Cf4e76890 [stack 0] set Nf4e76890 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace4 xpos -434 ypos 109 } push $Nf4e76890 Shuffle { red white green white blue white alpha white name Shuffle1 xpos -554 ypos 93 } Multiply { value {1 0 0 1} name Multiply4 xpos -554 ypos 117 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.plotScale}} plot_cie_xy_left_margin {{parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos -554 ypos 159 cached true } Dilate { size 1 name Dilate1 xpos -554 ypos 232 } set Nf4e9cc20 [stack 0] push $Nf4e9cc20 ShuffleCopy { inputs 2 alpha alpha2 name ShuffleCopy1 xpos -554 ypos 314 } Group { inputs 0 name PlanckianLocus xpos -1030 ypos 256 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 temperature} addUserKnob {7 start -STARTLINE R 1000 100000} start 1000 addUserKnob {7 end R 1000 100000} end 100000 } Constant { inputs 0 channels rgb format "1620 2 0 0 1620 2 1 visible_spectrum_quarter nm" name bg1 xpos 507 ypos -50 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf4eaea80 [stack 0] Rectangle { area {{"(log10(parent.start)-3)/2 * width"} 0 {"(log10(parent.end)-3)/2 * width"} {height}} name Rectangle7 xpos 289 ypos 130 } push $Nf4eaea80 Ramp { p0 {0 1} p1 {1619 1} name Ramp4 xpos 507 ypos 55 } Multiply { value {405 405 405 2} name Multiply4 xpos 507 ypos 81 } Add { value {375 375 375 3} name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Expression { expr0 r expr1 g expr2 b expr3 pow(10,a) name Expression1 xpos 507 ypos 181 } BlinkScript { ProgramGroup 1 KernelDescription "1 \"CCT2XYZ\" iterate pixelWise 1e5106c0628b69d1e3286f708ff894031c5f2cc6dcce2f5b6f5a0f9b492ad4d3 2 \"input\" Read Random \"dst\" Write Point 0" kernelSource "// this kernel assumes the following in it's input:\n// an image with a width of 1620 pixels - representing 405 nm range in quarter-nm steps\n// RGB channel : CIE XYZ colour matching functions from 375nm to 780nm\n// Alpha channel : colour temperature in kelvin\n\nkernel CCT2XYZ : public ImageComputationKernel\n\{\n\tImage input; //the input image\n\tImage dst; //the output image\n\n\t//The kernel function is run at every pixel to produce the output.\n\tvoid process(int2 pos)\n\t\{\n \tSampleType(input) in = input(pos.x, pos.y);\n \tSampleType(input) cmf;\n \tfloat kelvin = in.w;\n \tint cmfY = 1;\n\t\tfloat3 ret = float3(0.f);\n\n\t\tfloat C1 = 2.0 * 3.141592653589793 * 6.626176 * 2.99792458 * 2.99792458;\n\t\tfloat C2 = (6.626176 * 2.99792458) / 1.380662;\n\n\t\t\n\t\tfor(int cmfX = 0; cmfX < input.bounds.width(); cmfX += 1)\n\t\t\{\n\t\t\tfloat nm = float(cmfX) / 4.f + 375.f;\n\t\t\tfloat dWavelengthM = nm * 1.0e-3; // * 1.0e-6\n\t\t\tfloat dWavelengthM5 = pow(dWavelengthM, 5.f); // * 1.0e-30\n\t\t\tfloat expArg = C2 / (kelvin * dWavelengthM * 1.0e-3);\n\t\t\tfloat blackbody = C1 / (dWavelengthM5 * 1.0e-12 * ( exp(expArg) - 1.0)); // -12 = -30 - (-18)\n\n\t\t\tcmf = input(cmfX, cmfY);\n\n\t\t\tret.x += (blackbody * cmf.x);\n\t\t\tret.y += (blackbody * cmf.y);\n\t\t\tret.z += (blackbody * cmf.z);\n\n\t\t\}\n\n\n\n\n\n\n\t\tret.x /= ret.y;\n\t\tret.z /= ret.y;\n\t\tret.y = 1.f;\n\n\t\tSampleType(input) out = in;\n\n\t\tout.x = ret.x;\n\t\tout.y = ret.y;\n\t\tout.z = ret.z;\n\n\t\tdst() = out;\n\t\}\n\};\n\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 507 ypos 219 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 267 } set Nf4edd040 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 419 } push $Nf4edd040 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 378 } Multiply { value {0 0 0 1} name Multiply1 xpos 640 ypos 404 } push $Nf4edd040 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 362 } Expression { temp_name0 max temp_expr0 max(r,g,b) expr0 "r / max" expr1 "g / max" expr2 "b / max" name Expression2 xpos 507 ypos 386 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 462 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 578 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 616 } Output { name Output1 xpos 569 ypos 690 } end_group push 0 Group { inputs 0 name SpectralLocus2 xpos -914 ypos 254 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} addUserKnob {41 plotColorSpace T Switch3.which} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf4f29990 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf4f2e2b0 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf4f29990 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf4f2e2b0 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf4fadc60 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf4fadc60 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf4fadc60 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos -806 ypos 230 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf5022630 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf502a040 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf502a040 push $Nf5022630 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf504f340 [stack 0] push $Nf504f340 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf5056d50 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf5056d50 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos -806 ypos 254 } Merge2 { inputs 4+1 name Merge2 xpos -875 ypos 314 } Merge2 { inputs 2 operation plus name Merge1 xpos -875 ypos 363 } Input { inputs 0 name Input1 xpos 122 ypos -140 } Dot { name Dot2 xpos 156 ypos 11 } set Nf50aa020 [stack 0] Dot { name Dot4 xpos 266 ypos 11 } ColorMatrix { matrix { {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} } name ColorMatrix5 label "output to XYZ" xpos 232 ypos 84 } set Nf50aebe0 [stack 0] ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } name ColorMatrix8 label "CAT Matrix\nforward" xpos 350 ypos 79 } Multiply { value {{whiteInLMS.r/whiteOutLMS.r} {whiteInLMS.g/whiteOutLMS.g} {whiteInLMS.b/whiteOutLMS.b} 1} name Multiply3 label "Scale White" xpos 350 ypos 121 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix9 label "CAT Matrix\ninverse" xpos 350 ypos 163 } push $Nf50aebe0 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch4 xpos 232 ypos 172 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } invert true name ColorMatrix6 label "XYZ to Input" xpos 232 ypos 213 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Dot { name Dot5 xpos 266 ypos 272 } push $Nf50aa020 Dot { name Dot1 xpos 46 ypos 11 } clone $Cf4e76890 { xpos 12 ypos 74 selected false } set Nf50de140 [stack 0] ColorMatrix { matrix { {{"\[python (1, 1, 0.8951, 0.7328)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.2664, 0.4296)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.1614, -0.1624)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, -0.7502, -0.7036)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.7135, 1.6975)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.0367, 0.0061)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, 0.0389, 0.003)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.0685, 0.0136)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.0296, 0.9834)\\\[\[numvalue cat]\\]]"}} } name ColorMatrix4 label "CAT Matrix\n\[value cat]\n\[python ('forward', 'inverse')\\\[\[numvalue invert]\\]]" xpos -113 ypos 64 addUserKnob {20 User} addUserKnob {4 cat M {None "XYZ Scaling" Bradford CAT02}} cat CAT02 } Multiply { value {{whiteOutLMS.r/whiteInLMS.r} {whiteOutLMS.g/whiteInLMS.g} {whiteOutLMS.b/whiteInLMS.b} 1} name Multiply2 label "Scale White" xpos -113 ypos 116 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix7 label "CAT Matrix\ninverse" xpos -113 ypos 158 } push $Nf50de140 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch2 xpos 12 ypos 167 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to output" note_font "Bitstream Vera Sans" xpos 12 ypos 210 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut ACEScg } Dot { name Dot3 xpos 46 ypos 272 } Switch { inputs 2 which {{parent.inverse}} name Switch3 xpos 126 ypos 269 } Switch { inputs 2 which {{parent.showPlot}} name Switch1 xpos 126 ypos 363 } Output { name Output1 xpos 126 ypos 434 } ColorMatrix { inputs 0 matrix { {{(FromMatrix.matrix.4*FromMatrix.matrix.8-FromMatrix.matrix.7*FromMatrix.matrix.5)/FromMatrix.determinant} {(FromMatrix.matrix.7*FromMatrix.matrix.2-FromMatrix.matrix.1*FromMatrix.matrix.8)/FromMatrix.determinant} {(FromMatrix.matrix.1*FromMatrix.matrix.5-FromMatrix.matrix.4*FromMatrix.matrix.2)/FromMatrix.determinant}} {{(FromMatrix.matrix.5*FromMatrix.matrix.6-FromMatrix.matrix.8*FromMatrix.matrix.3)/FromMatrix.determinant} {(FromMatrix.matrix.8*FromMatrix.matrix.0-FromMatrix.matrix.2*FromMatrix.matrix.6)/FromMatrix.determinant} {(FromMatrix.matrix.2*FromMatrix.matrix.3-FromMatrix.matrix.5*FromMatrix.matrix.0)/FromMatrix.determinant}} {{(FromMatrix.matrix.3*FromMatrix.matrix.7-FromMatrix.matrix.6*FromMatrix.matrix.4)/FromMatrix.determinant} {(FromMatrix.matrix.6*FromMatrix.matrix.1-FromMatrix.matrix.0*FromMatrix.matrix.7)/FromMatrix.determinant} {(FromMatrix.matrix.0*FromMatrix.matrix.4-FromMatrix.matrix.3*FromMatrix.matrix.1)/FromMatrix.determinant}} } name FromMatrixInverse label FromParimaries-1 xpos -1169 ypos 165 addUserKnob {20 User} addUserKnob {13 white} white {{FromMatrix.white.x/FromMatrix.white.y} 1 {(1-FromMatrix.white.x-FromMatrix.white.y)/FromMatrix.white.y}} addUserKnob {18 S} S {{matrix.0*white.x+matrix.1*white.y+matrix.2*white.z} {matrix.3*white.x+matrix.4*white.y+matrix.5*white.z} {matrix.6*white.x+matrix.7*white.y+matrix.8*white.z}} addUserKnob {6 S_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { inputs 0 matrix { {{(ColorMatrix1.matrix.4*ColorMatrix1.matrix.8-ColorMatrix1.matrix.7*ColorMatrix1.matrix.5)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.7*ColorMatrix1.matrix.2-ColorMatrix1.matrix.1*ColorMatrix1.matrix.8)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.1*ColorMatrix1.matrix.5-ColorMatrix1.matrix.4*ColorMatrix1.matrix.2)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.5*ColorMatrix1.matrix.6-ColorMatrix1.matrix.8*ColorMatrix1.matrix.3)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.8*ColorMatrix1.matrix.0-ColorMatrix1.matrix.2*ColorMatrix1.matrix.6)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.2*ColorMatrix1.matrix.3-ColorMatrix1.matrix.5*ColorMatrix1.matrix.0)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.3*ColorMatrix1.matrix.7-ColorMatrix1.matrix.6*ColorMatrix1.matrix.4)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.6*ColorMatrix1.matrix.1-ColorMatrix1.matrix.0*ColorMatrix1.matrix.7)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.0*ColorMatrix1.matrix.4-ColorMatrix1.matrix.3*ColorMatrix1.matrix.1)/ColorMatrix1.determinant}} } name ColorMatrix2 label XYZ_to_Input note_font "Bitstream Vera Sans" xpos -435 ypos 52 } end_group push $Nec359400 Group { name FreeformGamut2 label "Sony\nSGamut/SGamut3" xpos 11280 ypos 442 addUserKnob {20 Primaries} addUserKnob {26 inputPrimaries -STARTLINE T ""} addUserKnob {41 white T FromMatrix.white} addUserKnob {41 red T FromMatrix.red} addUserKnob {41 green T FromMatrix.green} addUserKnob {41 blue T FromMatrix.blue} addUserKnob {26 ""} addUserKnob {41 outputColorspace T ColorMatrix3.gamut} addUserKnob {6 inverse -STARTLINE} addUserKnob {26 ""} addUserKnob {6 showPlot +STARTLINE} addUserKnob {20 plotSettings n 1} plotSettings 0 addUserKnob {7 plotScale R 0 2} plotScale 0.5 addUserKnob {12 plotOffset} plotOffset {409.6 409.6} addUserKnob {20 endGroup n -1} addUserKnob {20 Matrices} addUserKnob {41 rgbToXyzMatrix T ColorMatrix1.matrix} addUserKnob {26 ""} addUserKnob {41 cat T ColorMatrix4.cat} addUserKnob {26 ""} addUserKnob {41 xyzToRgbMatrix T ColorMatrix2.matrix} } Constant { inputs 0 format "1 1 0 0 1 1 1 1_pixel" name Constant1 xpos -1301 ypos 69 } ColorMatrix { matrix { {{red.x/red.y} {green.x/green.y} {blue.x/blue.y}} {1 1 1} {{(1-red.x-red.y)/red.y} {(1-green.x-green.y)/green.y} {(1-blue.x-blue.y)/blue.y}} } name FromMatrix label FromParimaries xpos -1301 ypos 167 addUserKnob {20 User} addUserKnob {12 white} white {0.3127 0.329} addUserKnob {12 red} red {0.73 0.28} addUserKnob {12 green} green {0.14 0.855} addUserKnob {12 blue} blue {0.1 -0.05} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Reformat { format "2048 2048 0 0 2048 2048 1 square_2k" resize distort filter Impulse name Reformat1 xpos -1301 ypos 291 } Shuffle { red black green black blue black alpha black name Shuffle2 label "\[value in]-->\[value out]" xpos -1301 ypos 331 } Transform { translate {{parent.plotOffset.x} {parent.plotOffset.y}} scale {{parent.plotScale}} black_outside false name Transform1 xpos -1301 ypos 363 } ColorWheel { inputs 0 format "512 512 0 0 512 512 1 square_512" centerSaturation 1 name ColorWheel4 xpos -554 ypos -58 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } name ColorMatrix1 label Input_to_XYZ xpos -554 ypos 53 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } set Cf5156f40 [stack 0] set Nf5156f40 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace4 xpos -434 ypos 109 } push $Nf5156f40 Shuffle { red white green white blue white alpha white name Shuffle1 xpos -554 ypos 93 } Multiply { value {1 0 0 1} name Multiply4 xpos -554 ypos 117 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.plotScale}} plot_cie_xy_left_margin {{parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos -554 ypos 159 cached true } Dilate { size 1 name Dilate1 xpos -554 ypos 232 } set Nf517d2d0 [stack 0] push $Nf517d2d0 ShuffleCopy { inputs 2 alpha alpha2 name ShuffleCopy1 xpos -554 ypos 314 } Group { inputs 0 name PlanckianLocus xpos -1030 ypos 256 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 temperature} addUserKnob {7 start -STARTLINE R 1000 100000} start 1000 addUserKnob {7 end R 1000 100000} end 100000 } Constant { inputs 0 channels rgb format "1620 2 0 0 1620 2 1 visible_spectrum_quarter nm" name bg1 xpos 507 ypos -50 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf518f130 [stack 0] Rectangle { area {{"(log10(parent.start)-3)/2 * width"} 0 {"(log10(parent.end)-3)/2 * width"} {height}} name Rectangle7 xpos 289 ypos 130 } push $Nf518f130 Ramp { p0 {0 1} p1 {1619 1} name Ramp4 xpos 507 ypos 55 } Multiply { value {405 405 405 2} name Multiply4 xpos 507 ypos 81 } Add { value {375 375 375 3} name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Expression { expr0 r expr1 g expr2 b expr3 pow(10,a) name Expression1 xpos 507 ypos 181 } BlinkScript { ProgramGroup 1 KernelDescription "1 \"CCT2XYZ\" iterate pixelWise 1e5106c0628b69d1e3286f708ff894031c5f2cc6dcce2f5b6f5a0f9b492ad4d3 2 \"input\" Read Random \"dst\" Write Point 0" kernelSource "// this kernel assumes the following in it's input:\n// an image with a width of 1620 pixels - representing 405 nm range in quarter-nm steps\n// RGB channel : CIE XYZ colour matching functions from 375nm to 780nm\n// Alpha channel : colour temperature in kelvin\n\nkernel CCT2XYZ : public ImageComputationKernel\n\{\n\tImage input; //the input image\n\tImage dst; //the output image\n\n\t//The kernel function is run at every pixel to produce the output.\n\tvoid process(int2 pos)\n\t\{\n \tSampleType(input) in = input(pos.x, pos.y);\n \tSampleType(input) cmf;\n \tfloat kelvin = in.w;\n \tint cmfY = 1;\n\t\tfloat3 ret = float3(0.f);\n\n\t\tfloat C1 = 2.0 * 3.141592653589793 * 6.626176 * 2.99792458 * 2.99792458;\n\t\tfloat C2 = (6.626176 * 2.99792458) / 1.380662;\n\n\t\t\n\t\tfor(int cmfX = 0; cmfX < input.bounds.width(); cmfX += 1)\n\t\t\{\n\t\t\tfloat nm = float(cmfX) / 4.f + 375.f;\n\t\t\tfloat dWavelengthM = nm * 1.0e-3; // * 1.0e-6\n\t\t\tfloat dWavelengthM5 = pow(dWavelengthM, 5.f); // * 1.0e-30\n\t\t\tfloat expArg = C2 / (kelvin * dWavelengthM * 1.0e-3);\n\t\t\tfloat blackbody = C1 / (dWavelengthM5 * 1.0e-12 * ( exp(expArg) - 1.0)); // -12 = -30 - (-18)\n\n\t\t\tcmf = input(cmfX, cmfY);\n\n\t\t\tret.x += (blackbody * cmf.x);\n\t\t\tret.y += (blackbody * cmf.y);\n\t\t\tret.z += (blackbody * cmf.z);\n\n\t\t\}\n\n\n\n\n\n\n\t\tret.x /= ret.y;\n\t\tret.z /= ret.y;\n\t\tret.y = 1.f;\n\n\t\tSampleType(input) out = in;\n\n\t\tout.x = ret.x;\n\t\tout.y = ret.y;\n\t\tout.z = ret.z;\n\n\t\tdst() = out;\n\t\}\n\};\n\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 507 ypos 219 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 267 } set Nf51bd6f0 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 419 } push $Nf51bd6f0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 378 } Multiply { value {0 0 0 1} name Multiply1 xpos 640 ypos 404 } push $Nf51bd6f0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 362 } Expression { temp_name0 max temp_expr0 max(r,g,b) expr0 "r / max" expr1 "g / max" expr2 "b / max" name Expression2 xpos 507 ypos 386 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 462 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 578 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 616 } Output { name Output1 xpos 569 ypos 690 } end_group push 0 Group { inputs 0 name SpectralLocus2 xpos -914 ypos 254 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} addUserKnob {41 plotColorSpace T Switch3.which} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf5209fd0 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf520e8f0 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf5209fd0 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf520e8f0 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf528e2a0 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf528e2a0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf528e2a0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos -806 ypos 230 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf5322970 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf532a380 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf532a380 push $Nf5322970 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf534f680 [stack 0] push $Nf534f680 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf5357090 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf5357090 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos -806 ypos 254 } Merge2 { inputs 4+1 name Merge2 xpos -875 ypos 314 } Merge2 { inputs 2 operation plus name Merge1 xpos -875 ypos 363 } Input { inputs 0 name Input1 xpos 122 ypos -140 } Dot { name Dot2 xpos 156 ypos 11 } set Nf53aa360 [stack 0] Dot { name Dot4 xpos 266 ypos 11 } ColorMatrix { matrix { {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} } name ColorMatrix5 label "output to XYZ" xpos 232 ypos 84 } set Nf53aef20 [stack 0] ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } name ColorMatrix8 label "CAT Matrix\nforward" xpos 350 ypos 79 } Multiply { value {{whiteInLMS.r/whiteOutLMS.r} {whiteInLMS.g/whiteOutLMS.g} {whiteInLMS.b/whiteOutLMS.b} 1} name Multiply3 label "Scale White" xpos 350 ypos 121 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix9 label "CAT Matrix\ninverse" xpos 350 ypos 163 } push $Nf53aef20 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch4 xpos 232 ypos 172 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } invert true name ColorMatrix6 label "XYZ to Input" xpos 232 ypos 213 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Dot { name Dot5 xpos 266 ypos 272 } push $Nf53aa360 Dot { name Dot1 xpos 46 ypos 11 } clone $Cf5156f40 { xpos 12 ypos 74 selected false } set Nf53de480 [stack 0] ColorMatrix { matrix { {{"\[python (1, 1, 0.8951, 0.7328)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.2664, 0.4296)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.1614, -0.1624)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, -0.7502, -0.7036)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.7135, 1.6975)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.0367, 0.0061)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, 0.0389, 0.003)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.0685, 0.0136)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.0296, 0.9834)\\\[\[numvalue cat]\\]]"}} } name ColorMatrix4 label "CAT Matrix\n\[value cat]\n\[python ('forward', 'inverse')\\\[\[numvalue invert]\\]]" xpos -113 ypos 64 addUserKnob {20 User} addUserKnob {4 cat M {None "XYZ Scaling" Bradford CAT02}} cat CAT02 } Multiply { value {{whiteOutLMS.r/whiteInLMS.r} {whiteOutLMS.g/whiteInLMS.g} {whiteOutLMS.b/whiteInLMS.b} 1} name Multiply2 label "Scale White" xpos -113 ypos 116 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix7 label "CAT Matrix\ninverse" xpos -113 ypos 158 } push $Nf53de480 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch2 xpos 12 ypos 167 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to output" note_font "Bitstream Vera Sans" xpos 12 ypos 210 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut ACEScg } Dot { name Dot3 xpos 46 ypos 272 } Switch { inputs 2 which {{parent.inverse}} name Switch3 xpos 126 ypos 269 } Switch { inputs 2 which {{parent.showPlot}} name Switch1 xpos 126 ypos 363 } Output { name Output1 xpos 126 ypos 434 } ColorMatrix { inputs 0 matrix { {{(FromMatrix.matrix.4*FromMatrix.matrix.8-FromMatrix.matrix.7*FromMatrix.matrix.5)/FromMatrix.determinant} {(FromMatrix.matrix.7*FromMatrix.matrix.2-FromMatrix.matrix.1*FromMatrix.matrix.8)/FromMatrix.determinant} {(FromMatrix.matrix.1*FromMatrix.matrix.5-FromMatrix.matrix.4*FromMatrix.matrix.2)/FromMatrix.determinant}} {{(FromMatrix.matrix.5*FromMatrix.matrix.6-FromMatrix.matrix.8*FromMatrix.matrix.3)/FromMatrix.determinant} {(FromMatrix.matrix.8*FromMatrix.matrix.0-FromMatrix.matrix.2*FromMatrix.matrix.6)/FromMatrix.determinant} {(FromMatrix.matrix.2*FromMatrix.matrix.3-FromMatrix.matrix.5*FromMatrix.matrix.0)/FromMatrix.determinant}} {{(FromMatrix.matrix.3*FromMatrix.matrix.7-FromMatrix.matrix.6*FromMatrix.matrix.4)/FromMatrix.determinant} {(FromMatrix.matrix.6*FromMatrix.matrix.1-FromMatrix.matrix.0*FromMatrix.matrix.7)/FromMatrix.determinant} {(FromMatrix.matrix.0*FromMatrix.matrix.4-FromMatrix.matrix.3*FromMatrix.matrix.1)/FromMatrix.determinant}} } name FromMatrixInverse label FromParimaries-1 xpos -1169 ypos 165 addUserKnob {20 User} addUserKnob {13 white} white {{FromMatrix.white.x/FromMatrix.white.y} 1 {(1-FromMatrix.white.x-FromMatrix.white.y)/FromMatrix.white.y}} addUserKnob {18 S} S {{matrix.0*white.x+matrix.1*white.y+matrix.2*white.z} {matrix.3*white.x+matrix.4*white.y+matrix.5*white.z} {matrix.6*white.x+matrix.7*white.y+matrix.8*white.z}} addUserKnob {6 S_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { inputs 0 matrix { {{(ColorMatrix1.matrix.4*ColorMatrix1.matrix.8-ColorMatrix1.matrix.7*ColorMatrix1.matrix.5)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.7*ColorMatrix1.matrix.2-ColorMatrix1.matrix.1*ColorMatrix1.matrix.8)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.1*ColorMatrix1.matrix.5-ColorMatrix1.matrix.4*ColorMatrix1.matrix.2)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.5*ColorMatrix1.matrix.6-ColorMatrix1.matrix.8*ColorMatrix1.matrix.3)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.8*ColorMatrix1.matrix.0-ColorMatrix1.matrix.2*ColorMatrix1.matrix.6)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.2*ColorMatrix1.matrix.3-ColorMatrix1.matrix.5*ColorMatrix1.matrix.0)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.3*ColorMatrix1.matrix.7-ColorMatrix1.matrix.6*ColorMatrix1.matrix.4)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.6*ColorMatrix1.matrix.1-ColorMatrix1.matrix.0*ColorMatrix1.matrix.7)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.0*ColorMatrix1.matrix.4-ColorMatrix1.matrix.3*ColorMatrix1.matrix.1)/ColorMatrix1.determinant}} } name ColorMatrix2 label XYZ_to_Input note_font "Bitstream Vera Sans" xpos -435 ypos 52 } end_group push $Nec359400 Group { name FreeformGamut8 label "RED\nRedWideGamutRGB" xpos 11173 ypos 439 addUserKnob {20 Primaries} addUserKnob {26 inputPrimaries -STARTLINE T ""} addUserKnob {41 white T FromMatrix.white} addUserKnob {41 red T FromMatrix.red} addUserKnob {41 green T FromMatrix.green} addUserKnob {41 blue T FromMatrix.blue} addUserKnob {26 ""} addUserKnob {41 outputColorspace T ColorMatrix3.gamut} addUserKnob {6 inverse -STARTLINE} addUserKnob {26 ""} addUserKnob {6 showPlot +STARTLINE} addUserKnob {20 plotSettings n 1} plotSettings 0 addUserKnob {7 plotScale R 0 2} plotScale 0.5 addUserKnob {12 plotOffset} plotOffset {409.6 409.6} addUserKnob {20 endGroup n -1} addUserKnob {20 Matrices} addUserKnob {41 rgbToXyzMatrix T ColorMatrix1.matrix} addUserKnob {26 ""} addUserKnob {41 cat T ColorMatrix4.cat} addUserKnob {26 ""} addUserKnob {41 xyzToRgbMatrix T ColorMatrix2.matrix} } Constant { inputs 0 format "1 1 0 0 1 1 1 1_pixel" name Constant1 xpos -1301 ypos 69 } ColorMatrix { matrix { {{red.x/red.y} {green.x/green.y} {blue.x/blue.y}} {1 1 1} {{(1-red.x-red.y)/red.y} {(1-green.x-green.y)/green.y} {(1-blue.x-blue.y)/blue.y}} } name FromMatrix label FromParimaries xpos -1301 ypos 167 addUserKnob {20 User} addUserKnob {12 white} white {0.3127 0.329} addUserKnob {12 red} red {0.780308 0.304253} addUserKnob {12 green} green {0.121595 1.493994} addUserKnob {12 blue} blue {0.095612 -0.084589} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Reformat { format "2048 2048 0 0 2048 2048 1 square_2k" resize distort filter Impulse name Reformat1 xpos -1301 ypos 291 } Shuffle { red black green black blue black alpha black name Shuffle2 label "\[value in]-->\[value out]" xpos -1301 ypos 331 } Transform { translate {{parent.plotOffset.x} {parent.plotOffset.y}} scale {{parent.plotScale}} black_outside false name Transform1 xpos -1301 ypos 363 } ColorWheel { inputs 0 format "512 512 0 0 512 512 1 square_512" centerSaturation 1 name ColorWheel4 xpos -554 ypos -58 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } name ColorMatrix1 label Input_to_XYZ xpos -554 ypos 53 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } set Cf5457120 [stack 0] set Nf5457120 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace4 xpos -434 ypos 109 } push $Nf5457120 Shuffle { red white green white blue white alpha white name Shuffle1 xpos -554 ypos 93 } Multiply { value {1 0 0 1} name Multiply4 xpos -554 ypos 117 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.plotScale}} plot_cie_xy_left_margin {{parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos -554 ypos 159 cached true } Dilate { size 1 name Dilate1 xpos -554 ypos 232 } set Nf547d4b0 [stack 0] push $Nf547d4b0 ShuffleCopy { inputs 2 alpha alpha2 name ShuffleCopy1 xpos -554 ypos 314 } Group { inputs 0 name PlanckianLocus xpos -1030 ypos 256 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 temperature} addUserKnob {7 start -STARTLINE R 1000 100000} start 1000 addUserKnob {7 end R 1000 100000} end 100000 } Constant { inputs 0 channels rgb format "1620 2 0 0 1620 2 1 visible_spectrum_quarter nm" name bg1 xpos 507 ypos -50 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf548f310 [stack 0] Rectangle { area {{"(log10(parent.start)-3)/2 * width"} 0 {"(log10(parent.end)-3)/2 * width"} {height}} name Rectangle7 xpos 289 ypos 130 } push $Nf548f310 Ramp { p0 {0 1} p1 {1619 1} name Ramp4 xpos 507 ypos 55 } Multiply { value {405 405 405 2} name Multiply4 xpos 507 ypos 81 } Add { value {375 375 375 3} name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Expression { expr0 r expr1 g expr2 b expr3 pow(10,a) name Expression1 xpos 507 ypos 181 } BlinkScript { ProgramGroup 1 KernelDescription "1 \"CCT2XYZ\" iterate pixelWise 1e5106c0628b69d1e3286f708ff894031c5f2cc6dcce2f5b6f5a0f9b492ad4d3 2 \"input\" Read Random \"dst\" Write Point 0" kernelSource "// this kernel assumes the following in it's input:\n// an image with a width of 1620 pixels - representing 405 nm range in quarter-nm steps\n// RGB channel : CIE XYZ colour matching functions from 375nm to 780nm\n// Alpha channel : colour temperature in kelvin\n\nkernel CCT2XYZ : public ImageComputationKernel\n\{\n\tImage input; //the input image\n\tImage dst; //the output image\n\n\t//The kernel function is run at every pixel to produce the output.\n\tvoid process(int2 pos)\n\t\{\n \tSampleType(input) in = input(pos.x, pos.y);\n \tSampleType(input) cmf;\n \tfloat kelvin = in.w;\n \tint cmfY = 1;\n\t\tfloat3 ret = float3(0.f);\n\n\t\tfloat C1 = 2.0 * 3.141592653589793 * 6.626176 * 2.99792458 * 2.99792458;\n\t\tfloat C2 = (6.626176 * 2.99792458) / 1.380662;\n\n\t\t\n\t\tfor(int cmfX = 0; cmfX < input.bounds.width(); cmfX += 1)\n\t\t\{\n\t\t\tfloat nm = float(cmfX) / 4.f + 375.f;\n\t\t\tfloat dWavelengthM = nm * 1.0e-3; // * 1.0e-6\n\t\t\tfloat dWavelengthM5 = pow(dWavelengthM, 5.f); // * 1.0e-30\n\t\t\tfloat expArg = C2 / (kelvin * dWavelengthM * 1.0e-3);\n\t\t\tfloat blackbody = C1 / (dWavelengthM5 * 1.0e-12 * ( exp(expArg) - 1.0)); // -12 = -30 - (-18)\n\n\t\t\tcmf = input(cmfX, cmfY);\n\n\t\t\tret.x += (blackbody * cmf.x);\n\t\t\tret.y += (blackbody * cmf.y);\n\t\t\tret.z += (blackbody * cmf.z);\n\n\t\t\}\n\n\n\n\n\n\n\t\tret.x /= ret.y;\n\t\tret.z /= ret.y;\n\t\tret.y = 1.f;\n\n\t\tSampleType(input) out = in;\n\n\t\tout.x = ret.x;\n\t\tout.y = ret.y;\n\t\tout.z = ret.z;\n\n\t\tdst() = out;\n\t\}\n\};\n\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 507 ypos 219 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 267 } set Nf54bd8d0 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 419 } push $Nf54bd8d0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 378 } Multiply { value {0 0 0 1} name Multiply1 xpos 640 ypos 404 } push $Nf54bd8d0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 362 } Expression { temp_name0 max temp_expr0 max(r,g,b) expr0 "r / max" expr1 "g / max" expr2 "b / max" name Expression2 xpos 507 ypos 386 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 462 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 578 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 616 } Output { name Output1 xpos 569 ypos 690 } end_group push 0 Group { inputs 0 name SpectralLocus2 xpos -914 ypos 254 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} addUserKnob {41 plotColorSpace T Switch3.which} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf550a160 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf550ea80 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf550a160 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf550ea80 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf558e430 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf558e430 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf558e430 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos -806 ypos 230 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf5603040 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf560aa50 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf560aa50 push $Nf5603040 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf562fd50 [stack 0] push $Nf562fd50 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf5637760 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf5637760 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos -806 ypos 254 } Merge2 { inputs 4+1 name Merge2 xpos -875 ypos 314 } Merge2 { inputs 2 operation plus name Merge1 xpos -875 ypos 363 } Input { inputs 0 name Input1 xpos 122 ypos -140 } Dot { name Dot2 xpos 156 ypos 11 } set Nf568aa30 [stack 0] Dot { name Dot4 xpos 266 ypos 11 } ColorMatrix { matrix { {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} } name ColorMatrix5 label "output to XYZ" xpos 232 ypos 84 } set Nf568f310 [stack 0] ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } name ColorMatrix8 label "CAT Matrix\nforward" xpos 350 ypos 79 } Multiply { value {{whiteInLMS.r/whiteOutLMS.r} {whiteInLMS.g/whiteOutLMS.g} {whiteInLMS.b/whiteOutLMS.b} 1} name Multiply3 label "Scale White" xpos 350 ypos 121 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix9 label "CAT Matrix\ninverse" xpos 350 ypos 163 } push $Nf568f310 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch4 xpos 232 ypos 172 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } invert true name ColorMatrix6 label "XYZ to Input" xpos 232 ypos 213 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Dot { name Dot5 xpos 266 ypos 272 } push $Nf568aa30 Dot { name Dot1 xpos 46 ypos 11 } clone $Cf5457120 { xpos 12 ypos 74 selected false } set Nf56be900 [stack 0] ColorMatrix { matrix { {{"\[python (1, 1, 0.8951, 0.7328)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.2664, 0.4296)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.1614, -0.1624)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, -0.7502, -0.7036)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.7135, 1.6975)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.0367, 0.0061)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, 0.0389, 0.003)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.0685, 0.0136)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.0296, 0.9834)\\\[\[numvalue cat]\\]]"}} } name ColorMatrix4 label "CAT Matrix\n\[value cat]\n\[python ('forward', 'inverse')\\\[\[numvalue invert]\\]]" xpos -113 ypos 64 addUserKnob {20 User} addUserKnob {4 cat M {None "XYZ Scaling" Bradford CAT02}} cat Bradford } Multiply { value {{whiteOutLMS.r/whiteInLMS.r} {whiteOutLMS.g/whiteInLMS.g} {whiteOutLMS.b/whiteInLMS.b} 1} name Multiply2 label "Scale White" xpos -113 ypos 116 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix7 label "CAT Matrix\ninverse" xpos -113 ypos 158 } push $Nf56be900 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch2 xpos 12 ypos 167 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to output" note_font "Bitstream Vera Sans" xpos 12 ypos 210 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut ACEScg } Dot { name Dot3 xpos 46 ypos 272 } Switch { inputs 2 which {{parent.inverse}} name Switch3 xpos 126 ypos 269 } Switch { inputs 2 which {{parent.showPlot}} name Switch1 xpos 126 ypos 363 } Output { name Output1 xpos 126 ypos 434 } ColorMatrix { inputs 0 matrix { {{(FromMatrix.matrix.4*FromMatrix.matrix.8-FromMatrix.matrix.7*FromMatrix.matrix.5)/FromMatrix.determinant} {(FromMatrix.matrix.7*FromMatrix.matrix.2-FromMatrix.matrix.1*FromMatrix.matrix.8)/FromMatrix.determinant} {(FromMatrix.matrix.1*FromMatrix.matrix.5-FromMatrix.matrix.4*FromMatrix.matrix.2)/FromMatrix.determinant}} {{(FromMatrix.matrix.5*FromMatrix.matrix.6-FromMatrix.matrix.8*FromMatrix.matrix.3)/FromMatrix.determinant} {(FromMatrix.matrix.8*FromMatrix.matrix.0-FromMatrix.matrix.2*FromMatrix.matrix.6)/FromMatrix.determinant} {(FromMatrix.matrix.2*FromMatrix.matrix.3-FromMatrix.matrix.5*FromMatrix.matrix.0)/FromMatrix.determinant}} {{(FromMatrix.matrix.3*FromMatrix.matrix.7-FromMatrix.matrix.6*FromMatrix.matrix.4)/FromMatrix.determinant} {(FromMatrix.matrix.6*FromMatrix.matrix.1-FromMatrix.matrix.0*FromMatrix.matrix.7)/FromMatrix.determinant} {(FromMatrix.matrix.0*FromMatrix.matrix.4-FromMatrix.matrix.3*FromMatrix.matrix.1)/FromMatrix.determinant}} } name FromMatrixInverse label FromParimaries-1 xpos -1169 ypos 165 addUserKnob {20 User} addUserKnob {13 white} white {{FromMatrix.white.x/FromMatrix.white.y} 1 {(1-FromMatrix.white.x-FromMatrix.white.y)/FromMatrix.white.y}} addUserKnob {18 S} S {{matrix.0*white.x+matrix.1*white.y+matrix.2*white.z} {matrix.3*white.x+matrix.4*white.y+matrix.5*white.z} {matrix.6*white.x+matrix.7*white.y+matrix.8*white.z}} addUserKnob {6 S_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { inputs 0 matrix { {{(ColorMatrix1.matrix.4*ColorMatrix1.matrix.8-ColorMatrix1.matrix.7*ColorMatrix1.matrix.5)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.7*ColorMatrix1.matrix.2-ColorMatrix1.matrix.1*ColorMatrix1.matrix.8)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.1*ColorMatrix1.matrix.5-ColorMatrix1.matrix.4*ColorMatrix1.matrix.2)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.5*ColorMatrix1.matrix.6-ColorMatrix1.matrix.8*ColorMatrix1.matrix.3)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.8*ColorMatrix1.matrix.0-ColorMatrix1.matrix.2*ColorMatrix1.matrix.6)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.2*ColorMatrix1.matrix.3-ColorMatrix1.matrix.5*ColorMatrix1.matrix.0)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.3*ColorMatrix1.matrix.7-ColorMatrix1.matrix.6*ColorMatrix1.matrix.4)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.6*ColorMatrix1.matrix.1-ColorMatrix1.matrix.0*ColorMatrix1.matrix.7)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.0*ColorMatrix1.matrix.4-ColorMatrix1.matrix.3*ColorMatrix1.matrix.1)/ColorMatrix1.determinant}} } name ColorMatrix2 label XYZ_to_Input note_font "Bitstream Vera Sans" xpos -435 ypos 52 } end_group push $Nec359400 Group { name FreeformGamut7 label "ARRI\nAlexaWideGamut" xpos 11060 ypos 435 addUserKnob {20 Primaries} addUserKnob {26 inputPrimaries -STARTLINE T ""} addUserKnob {41 white T FromMatrix.white} addUserKnob {41 red T FromMatrix.red} addUserKnob {41 green T FromMatrix.green} addUserKnob {41 blue T FromMatrix.blue} addUserKnob {26 ""} addUserKnob {41 outputColorspace T ColorMatrix3.gamut} addUserKnob {6 inverse -STARTLINE} addUserKnob {26 ""} addUserKnob {6 showPlot +STARTLINE} addUserKnob {20 plotSettings n 1} plotSettings 0 addUserKnob {7 plotScale R 0 2} plotScale 0.5 addUserKnob {12 plotOffset} plotOffset {409.6 409.6} addUserKnob {20 endGroup n -1} addUserKnob {20 Matrices} addUserKnob {41 rgbToXyzMatrix T ColorMatrix1.matrix} addUserKnob {26 ""} addUserKnob {41 cat T ColorMatrix4.cat} addUserKnob {26 ""} addUserKnob {41 xyzToRgbMatrix T ColorMatrix2.matrix} } Constant { inputs 0 format "1 1 0 0 1 1 1 1_pixel" name Constant1 xpos -1301 ypos 69 } ColorMatrix { matrix { {{red.x/red.y} {green.x/green.y} {blue.x/blue.y}} {1 1 1} {{(1-red.x-red.y)/red.y} {(1-green.x-green.y)/green.y} {(1-blue.x-blue.y)/blue.y}} } name FromMatrix label FromParimaries xpos -1301 ypos 167 addUserKnob {20 User} addUserKnob {12 white} white {0.3127 0.329} addUserKnob {12 red} red {0.684 0.313} addUserKnob {12 green} green {0.221 0.848} addUserKnob {12 blue} blue {0.0861 -0.102} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Reformat { format "2048 2048 0 0 2048 2048 1 square_2k" resize distort filter Impulse name Reformat1 xpos -1301 ypos 291 } Shuffle { red black green black blue black alpha black name Shuffle2 label "\[value in]-->\[value out]" xpos -1301 ypos 331 } Transform { translate {{parent.plotOffset.x} {parent.plotOffset.y}} scale {{parent.plotScale}} black_outside false name Transform1 xpos -1301 ypos 363 } ColorWheel { inputs 0 format "512 512 0 0 512 512 1 square_512" centerSaturation 1 name ColorWheel4 xpos -554 ypos -58 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } name ColorMatrix1 label Input_to_XYZ xpos -554 ypos 53 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } set Cf5737cd0 [stack 0] set Nf5737cd0 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace4 xpos -434 ypos 109 } push $Nf5737cd0 Shuffle { red white green white blue white alpha white name Shuffle1 xpos -554 ypos 93 } Multiply { value {1 0 0 1} name Multiply4 xpos -554 ypos 117 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.plotScale}} plot_cie_xy_left_margin {{parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos -554 ypos 159 cached true } Dilate { size 1 name Dilate1 xpos -554 ypos 232 } set Nf575e000 [stack 0] push $Nf575e000 ShuffleCopy { inputs 2 alpha alpha2 name ShuffleCopy1 xpos -554 ypos 314 } Group { inputs 0 name PlanckianLocus xpos -1030 ypos 256 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 temperature} addUserKnob {7 start -STARTLINE R 1000 100000} start 1000 addUserKnob {7 end R 1000 100000} end 100000 } Constant { inputs 0 channels rgb format "1620 2 0 0 1620 2 1 visible_spectrum_quarter nm" name bg1 xpos 507 ypos -50 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf576fe60 [stack 0] Rectangle { area {{"(log10(parent.start)-3)/2 * width"} 0 {"(log10(parent.end)-3)/2 * width"} {height}} name Rectangle7 xpos 289 ypos 130 } push $Nf576fe60 Ramp { p0 {0 1} p1 {1619 1} name Ramp4 xpos 507 ypos 55 } Multiply { value {405 405 405 2} name Multiply4 xpos 507 ypos 81 } Add { value {375 375 375 3} name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Expression { expr0 r expr1 g expr2 b expr3 pow(10,a) name Expression1 xpos 507 ypos 181 } BlinkScript { ProgramGroup 1 KernelDescription "1 \"CCT2XYZ\" iterate pixelWise 1e5106c0628b69d1e3286f708ff894031c5f2cc6dcce2f5b6f5a0f9b492ad4d3 2 \"input\" Read Random \"dst\" Write Point 0" kernelSource "// this kernel assumes the following in it's input:\n// an image with a width of 1620 pixels - representing 405 nm range in quarter-nm steps\n// RGB channel : CIE XYZ colour matching functions from 375nm to 780nm\n// Alpha channel : colour temperature in kelvin\n\nkernel CCT2XYZ : public ImageComputationKernel\n\{\n\tImage input; //the input image\n\tImage dst; //the output image\n\n\t//The kernel function is run at every pixel to produce the output.\n\tvoid process(int2 pos)\n\t\{\n \tSampleType(input) in = input(pos.x, pos.y);\n \tSampleType(input) cmf;\n \tfloat kelvin = in.w;\n \tint cmfY = 1;\n\t\tfloat3 ret = float3(0.f);\n\n\t\tfloat C1 = 2.0 * 3.141592653589793 * 6.626176 * 2.99792458 * 2.99792458;\n\t\tfloat C2 = (6.626176 * 2.99792458) / 1.380662;\n\n\t\t\n\t\tfor(int cmfX = 0; cmfX < input.bounds.width(); cmfX += 1)\n\t\t\{\n\t\t\tfloat nm = float(cmfX) / 4.f + 375.f;\n\t\t\tfloat dWavelengthM = nm * 1.0e-3; // * 1.0e-6\n\t\t\tfloat dWavelengthM5 = pow(dWavelengthM, 5.f); // * 1.0e-30\n\t\t\tfloat expArg = C2 / (kelvin * dWavelengthM * 1.0e-3);\n\t\t\tfloat blackbody = C1 / (dWavelengthM5 * 1.0e-12 * ( exp(expArg) - 1.0)); // -12 = -30 - (-18)\n\n\t\t\tcmf = input(cmfX, cmfY);\n\n\t\t\tret.x += (blackbody * cmf.x);\n\t\t\tret.y += (blackbody * cmf.y);\n\t\t\tret.z += (blackbody * cmf.z);\n\n\t\t\}\n\n\n\n\n\n\n\t\tret.x /= ret.y;\n\t\tret.z /= ret.y;\n\t\tret.y = 1.f;\n\n\t\tSampleType(input) out = in;\n\n\t\tout.x = ret.x;\n\t\tout.y = ret.y;\n\t\tout.z = ret.z;\n\n\t\tdst() = out;\n\t\}\n\};\n\n" rebuild "" rebuild_finalise "" name BlinkScript1 selected true xpos 507 ypos 219 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 267 } set Nf579e420 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 419 } push $Nf579e420 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 378 } Multiply { value {0 0 0 1} name Multiply1 xpos 640 ypos 404 } push $Nf579e420 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 362 } Expression { temp_name0 max temp_expr0 max(r,g,b) expr0 "r / max" expr1 "g / max" expr2 "b / max" name Expression2 xpos 507 ypos 386 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 462 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 578 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 616 } Output { name Output1 xpos 569 ypos 690 } end_group push 0 Group { inputs 0 name SpectralLocus2 xpos -914 ypos 254 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} addUserKnob {41 plotColorSpace T Switch3.which} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf57e6d10 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf57eb630 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf57e6d10 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf57eb630 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf606eb80 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf606eb80 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf606eb80 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos -806 ypos 230 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf60df810 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf60e7220 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf60e7220 push $Nf60df810 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf61104e0 [stack 0] push $Nf61104e0 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf6117ef0 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf6117ef0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding {{1/parent.parent.plotScale}} plot_cie_xy_left_margin {{parent.parent.plotOffset.x}} plot_cie_xy_bottom_margin {{parent.parent.plotOffset.y}} plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos -806 ypos 254 } Merge2 { inputs 4+1 name Merge2 xpos -875 ypos 314 } Merge2 { inputs 2 operation plus name Merge1 xpos -875 ypos 363 } Input { inputs 0 name Input1 xpos 122 ypos -140 } Dot { name Dot2 xpos 156 ypos 11 } set Nf616b1c0 [stack 0] Dot { name Dot4 xpos 266 ypos 11 } ColorMatrix { matrix { {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} {{parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix} {parent.ColorMatrix3.matrix}} } name ColorMatrix5 label "output to XYZ" xpos 232 ypos 84 } set Nf616faa0 [stack 0] ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } name ColorMatrix8 label "CAT Matrix\nforward" xpos 350 ypos 79 } Multiply { value {{whiteInLMS.r/whiteOutLMS.r} {whiteInLMS.g/whiteOutLMS.g} {whiteInLMS.b/whiteOutLMS.b} 1} name Multiply3 label "Scale White" xpos 350 ypos 121 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix9 label "CAT Matrix\ninverse" xpos 350 ypos 163 } push $Nf616faa0 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch4 xpos 232 ypos 172 } ColorMatrix { matrix { {{FromMatrix.matrix.0*FromMatrixInverse.S.r} {FromMatrix.matrix.1*FromMatrixInverse.S.g} {FromMatrix.matrix.2*FromMatrixInverse.S.b}} {{FromMatrix.matrix.3*FromMatrixInverse.S.r} {FromMatrix.matrix.4*FromMatrixInverse.S.g} {FromMatrix.matrix.5*FromMatrixInverse.S.b}} {{FromMatrix.matrix.6*FromMatrixInverse.S.r} {FromMatrix.matrix.7*FromMatrixInverse.S.g} {FromMatrix.matrix.8*FromMatrixInverse.S.b}} } invert true name ColorMatrix6 label "XYZ to Input" xpos 232 ypos 213 addUserKnob {20 User} addUserKnob {7 determinant} determinant {{matrix.0*(matrix.4*matrix.8-matrix.7*matrix.5)+matrix.1*(matrix.5*matrix.6-matrix.8*matrix.3)+matrix.2*(matrix.3*matrix.7-matrix.6*matrix.4)}} } Dot { name Dot5 xpos 266 ypos 272 } push $Nf616b1c0 Dot { name Dot1 xpos 46 ypos 11 } clone $Cf5737cd0 { xpos 12 ypos 74 selected false } set Nf619e810 [stack 0] ColorMatrix { matrix { {{"\[python (1, 1, 0.8951, 0.7328)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.2664, 0.4296)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.1614, -0.1624)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, -0.7502, -0.7036)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.7135, 1.6975)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, 0.0367, 0.0061)\\\[\[numvalue cat]\\]]"}} {{"\[python (0, 0, 0.0389, 0.003)\\\[\[numvalue cat]\\]]"} {"\[python (0, 0, -0.0685, 0.0136)\\\[\[numvalue cat]\\]]"} {"\[python (1, 1, 1.0296, 0.9834)\\\[\[numvalue cat]\\]]"}} } name ColorMatrix4 label "CAT Matrix\n\[value cat]\n\[python ('forward', 'inverse')\\\[\[numvalue invert]\\]]" xpos -113 ypos 64 addUserKnob {20 User} addUserKnob {4 cat M {None "XYZ Scaling" Bradford CAT02}} cat CAT02 } Multiply { value {{whiteOutLMS.r/whiteInLMS.r} {whiteOutLMS.g/whiteInLMS.g} {whiteOutLMS.b/whiteInLMS.b} 1} name Multiply2 label "Scale White" xpos -113 ypos 116 addUserKnob {20 User} addUserKnob {18 whiteInXYZ} whiteInXYZ {{ColorMatrix1.matrix.0+ColorMatrix1.matrix.1+ColorMatrix1.matrix.2} {ColorMatrix1.matrix.3+ColorMatrix1.matrix.4+ColorMatrix1.matrix.5} {ColorMatrix1.matrix.6+ColorMatrix1.matrix.7+ColorMatrix1.matrix.8}} addUserKnob {6 whiteInXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteInLMS} whiteInLMS {{whiteInXYZ.r*ColorMatrix4.matrix.0+whiteInXYZ.g*ColorMatrix4.matrix.1+whiteInXYZ.b*ColorMatrix4.matrix.2} {whiteInXYZ.r*ColorMatrix4.matrix.3+whiteInXYZ.g*ColorMatrix4.matrix.4+whiteInXYZ.b*ColorMatrix4.matrix.5} {whiteInXYZ.r*ColorMatrix4.matrix.6+whiteInXYZ.g*ColorMatrix4.matrix.7+whiteInXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteInLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteInLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutXYZ} whiteOutXYZ {{ColorMatrix3.matrix.0+ColorMatrix3.matrix.1+ColorMatrix3.matrix.2} {ColorMatrix3.matrix.3+ColorMatrix3.matrix.4+ColorMatrix3.matrix.5} {ColorMatrix3.matrix.6+ColorMatrix3.matrix.7+ColorMatrix3.matrix.8}} addUserKnob {6 whiteOutXYZ_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutXYZ_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 whiteOutLMS} whiteOutLMS {{whiteOutXYZ.r*ColorMatrix4.matrix.0+whiteOutXYZ.g*ColorMatrix4.matrix.1+whiteOutXYZ.b*ColorMatrix4.matrix.2} {whiteOutXYZ.r*ColorMatrix4.matrix.3+whiteOutXYZ.g*ColorMatrix4.matrix.4+whiteOutXYZ.b*ColorMatrix4.matrix.5} {whiteOutXYZ.r*ColorMatrix4.matrix.6+whiteOutXYZ.g*ColorMatrix4.matrix.7+whiteOutXYZ.b*ColorMatrix4.matrix.8}} addUserKnob {6 whiteOutLMS_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOutLMS_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteOut_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 whiteIn_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { matrix { {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} {{parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix} {parent.ColorMatrix4.matrix}} } invert true name ColorMatrix7 label "CAT Matrix\ninverse" xpos -113 ypos 158 } push $Nf619e810 Switch { inputs 2 which {{"ColorMatrix4.cat > 0"}} name Switch2 xpos 12 ypos 167 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to output" note_font "Bitstream Vera Sans" xpos 12 ypos 210 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut ACEScg } Dot { name Dot3 xpos 46 ypos 272 } Switch { inputs 2 which {{parent.inverse}} name Switch3 xpos 126 ypos 269 } Switch { inputs 2 which {{parent.showPlot}} name Switch1 xpos 126 ypos 363 } Output { name Output1 xpos 126 ypos 434 } ColorMatrix { inputs 0 matrix { {{(FromMatrix.matrix.4*FromMatrix.matrix.8-FromMatrix.matrix.7*FromMatrix.matrix.5)/FromMatrix.determinant} {(FromMatrix.matrix.7*FromMatrix.matrix.2-FromMatrix.matrix.1*FromMatrix.matrix.8)/FromMatrix.determinant} {(FromMatrix.matrix.1*FromMatrix.matrix.5-FromMatrix.matrix.4*FromMatrix.matrix.2)/FromMatrix.determinant}} {{(FromMatrix.matrix.5*FromMatrix.matrix.6-FromMatrix.matrix.8*FromMatrix.matrix.3)/FromMatrix.determinant} {(FromMatrix.matrix.8*FromMatrix.matrix.0-FromMatrix.matrix.2*FromMatrix.matrix.6)/FromMatrix.determinant} {(FromMatrix.matrix.2*FromMatrix.matrix.3-FromMatrix.matrix.5*FromMatrix.matrix.0)/FromMatrix.determinant}} {{(FromMatrix.matrix.3*FromMatrix.matrix.7-FromMatrix.matrix.6*FromMatrix.matrix.4)/FromMatrix.determinant} {(FromMatrix.matrix.6*FromMatrix.matrix.1-FromMatrix.matrix.0*FromMatrix.matrix.7)/FromMatrix.determinant} {(FromMatrix.matrix.0*FromMatrix.matrix.4-FromMatrix.matrix.3*FromMatrix.matrix.1)/FromMatrix.determinant}} } name FromMatrixInverse label FromParimaries-1 xpos -1169 ypos 165 addUserKnob {20 User} addUserKnob {13 white} white {{FromMatrix.white.x/FromMatrix.white.y} 1 {(1-FromMatrix.white.x-FromMatrix.white.y)/FromMatrix.white.y}} addUserKnob {18 S} S {{matrix.0*white.x+matrix.1*white.y+matrix.2*white.z} {matrix.3*white.x+matrix.4*white.y+matrix.5*white.z} {matrix.6*white.x+matrix.7*white.y+matrix.8*white.z}} addUserKnob {6 S_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 S_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } ColorMatrix { inputs 0 matrix { {{(ColorMatrix1.matrix.4*ColorMatrix1.matrix.8-ColorMatrix1.matrix.7*ColorMatrix1.matrix.5)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.7*ColorMatrix1.matrix.2-ColorMatrix1.matrix.1*ColorMatrix1.matrix.8)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.1*ColorMatrix1.matrix.5-ColorMatrix1.matrix.4*ColorMatrix1.matrix.2)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.5*ColorMatrix1.matrix.6-ColorMatrix1.matrix.8*ColorMatrix1.matrix.3)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.8*ColorMatrix1.matrix.0-ColorMatrix1.matrix.2*ColorMatrix1.matrix.6)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.2*ColorMatrix1.matrix.3-ColorMatrix1.matrix.5*ColorMatrix1.matrix.0)/ColorMatrix1.determinant}} {{(ColorMatrix1.matrix.3*ColorMatrix1.matrix.7-ColorMatrix1.matrix.6*ColorMatrix1.matrix.4)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.6*ColorMatrix1.matrix.1-ColorMatrix1.matrix.0*ColorMatrix1.matrix.7)/ColorMatrix1.determinant} {(ColorMatrix1.matrix.0*ColorMatrix1.matrix.4-ColorMatrix1.matrix.3*ColorMatrix1.matrix.1)/ColorMatrix1.determinant}} } name ColorMatrix2 label XYZ_to_Input note_font "Bitstream Vera Sans" xpos -435 ypos 52 } end_group ContactSheet { inputs 7 width {{input0.width*columns}} height {{input0.height*rows}} rows 2 name ContactSheet2 xpos 11380 ypos 576 } set Nf61e77b0 [stack 0] Dot { name Dot43 xpos 11414 ypos 688 } set Nf61ed3b0 [stack 0] Dot { name Dot44 xpos 11302 ypos 688 } Expression { channel0 {rgba.red rgba.green rgba.blue none} expr0 max(r,g,b) name achromatic3 xpos 11268 ypos 723 } set Nf61f1e70 [stack 0] push $Nf61ed3b0 Merge2 { inputs 2 operation minus bbox B Achannels rgb Bchannels rgb output rgb name Merge27 xpos 11380 ypos 723 } push $Nf61f1e70 Expression { expr0 abs(r) expr1 abs(g) expr2 abs(b) name abs2 xpos 11268 ypos 772 } Merge2 { inputs 2 operation divide bbox B Achannels rgb Bchannels rgb output rgb name Merge28 xpos 11380 ypos 772 } Add { value -1 name Add2 xpos 11380 ypos 809 } push $Nf61e77b0 push $Nf61e77b0 Group { inputs 2 name PlotGamut5 xpos 11812 ypos 576 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} colorize true addUserKnob {4 gamut M {"Adobe (1998)" Apple "Best RGB" "Beta RGB" "Bruce RGB" "CIE (1931)" ColorMatch DCI-P3 "Don RGB 4" "ECI RGB" "Ekta Space PS5" "NTSC (1953)" PAL/SECAM ProPhoto SMPTE-C sRGB "Wide Gamut" AlexaV3LogC "Sony S-Gamut" ACES Rec.2020 ACEScg "CIE XYZ"}} gamut ACEScg addUserKnob {41 value l color T Multiply4.value} addUserKnob {4 plotColorspace M {"CIE 1931 xy" "CIE 1976 u'v'"}} } Input { inputs 0 name Input1 xpos 444 ypos 16 } Dot { name Dot3 xpos 478 ypos 82 } set Nf622aba0 [stack 0] Dot { name Dot2 xpos 723 ypos 82 } set Nf622d010 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace2 xpos 787 ypos 166 } push $Nf622d010 ColorMatrix { matrix { {0.6624541811 0.1340042065 0.156187687} {0.2722287168 0.6740817658 0.0536895174} {-0.0055746495 0.0040607335 1.0103391} } name ColorMatrix1 label "ACEScg -> XYZ (none)" xpos 689 ypos 152 } Colorspace { colorspace_in CIE-XYZ illuminant_in ACES primary_in ACES colorspace_out CIE-Yxy name Colorspace1 xpos 689 ypos 184 } push $Nf622d010 Colorspace { primary_in {{parent.gamut}} colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace14 xpos 579 ypos 170 } Switch { inputs 3 which {{"parent.gamut == 21 ? 1 : parent.gamut == 22 ? 2 : 0"}} name Switch1 xpos 689 ypos 249 } Dot { name Dot8 xpos 723 ypos 279 } set Nf6254b20 [stack 0] Dot { name Dot9 xpos 829 ypos 279 } Expression { expr0 r expr1 (4*g)/(-2*g+12*b+3) expr2 (9*b)/(-2*g+12*b+3) name Expression1 label "Yxy -> Yu'v'" xpos 795 ypos 304 } push $Nf6254b20 Switch { inputs 2 which {{parent.plotColorspace}} name Switch3 xpos 689 ypos 308 } Dot { name Dot1 xpos 723 ypos 342 } Input { inputs 0 name Color xpos 327 ypos 16 number 1 } Dot { name Dot7 xpos 361 ypos 243 } push $Nf622aba0 Dot { name Dot6 xpos 478 ypos 106 } set Nf626b740 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 444 ypos 149 } Multiply { value {0 1 1 1} name Multiply4 xpos 444 ypos 175 } push $Nf626b740 Dot { name Dot4 xpos 554 ypos 106 } Dot { name Dot5 xpos 554 ypos 243 } Switch { inputs 3 which {{"\[exists parent.input1] ? 2 : parent.colorize"}} name Switch2 xpos 444 ypos 239 } BlinkScript { inputs 2 recompileCount 2 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise fc48d30b761944f4622c7e7cade9c548789bc618dc38d8ca992161542531f81f 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 3 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 3 \"padding\" 1 1 \"left_margin\" 1 1 \"process_input\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 0.2 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input selected true xpos 444 ypos 335 } Output { name Output1 xpos 444 ypos 403 } end_group Group { inputs 0 name Group3 label "Gamut Boundary" xpos 11992 ypos 605 } Constant { inputs 0 channels rgb format "256 256 0 0 256 256 1 square_256" name Constant3 xpos 430 ypos 180 } Ramp { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} p0 {0 {input.height/2}} p1 {{input.width-1} {input.height/2}} name Ramp1 xpos 430 ypos 252 } Ramp { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} p0 {{input.width/2} 0} p1 {{input.width/2} {input.height-1}} name Ramp2 xpos 430 ypos 276 } Multiply { value {{1/input.height} {(input.height-1)/input.height} 1 1} name Multiply5 xpos 430 ypos 300 } Expression { expr0 r+g expr1 1 expr2 1 name Expression1 xpos 430 ypos 332 } Colorspace { colorspace_in HSV name Colorspace1 xpos 430 ypos 356 } Output { name Output1 selected true xpos 430 ypos 380 } end_group Group { name GamutCompress_blink5 label "\[value direction]\n\nRough default values" xpos 11992 ypos 668 addUserKnob {20 GamutCompress} addUserKnob {6 use_gpu l "use gpu" t "use gpu for blinkscript node" -STARTLINE} use_gpu true addUserKnob {18 threshold t "Percentage of the gamut protect. A value of 0.8 means 20% of the outer gamut will be utilized for gamut compression." R 0.4 1} threshold {0.81459934 0.80294287 0.87963814} addUserKnob {6 threshold_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 threshold_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {7 power t "Adjust the aggressiveness of the curve. 1 is equal to reinhard. Higher values bias compressed values closer to the gamut boundary." R 1 3} power 1 addUserKnob {26 distance_limit_label l " " t "Specifies the distance beyond the gamut boundary to map to the gamut boundary for each color component." T "distance limit"} addUserKnob {7 cyan t "Maximum distance beyond the green-blue gamut boundary to compress to the gamut boundary." R 0.001 1} cyan 0.147279 addUserKnob {7 magenta t "Maximum distance beyond the blue-red gamut boundary to compress to the gamut boundary." R 0.001 1} magenta 0.264283 addUserKnob {7 yellow t "Maximum distance beyond the red-green gamut boundary to compress to the gamut boundary." R 0.001 1} yellow 0.312372 addUserKnob {6 overlay l "graph overlay" +STARTLINE} addUserKnob {22 reset t "Reset knobs to default values. Distance limits are calculated based on an the average of a selection of digital cinema cameras." T "n = nuke.thisNode()\nnuke.root().begin()\ndefaults = \{\n 'threshold': 0.8,\n 'power': 1.2,\n 'cyan': 0.09,\n 'magenta':0.24,\n 'yellow': 0.12,\n\}\nfor k, v in defaults.items():\n n\[k].setValue(v)" +STARTLINE} addUserKnob {26 ""} addUserKnob {4 direction M {forward inverse}} direction inverse addUserKnob {20 info_tab l Info} addUserKnob {26 info_label l " " T "\n\nGamutCompress
\nmaps out of gamut colors back into gamut.\n

Documentation"} addUserKnob {26 about_label l " " T "\n
\nAbout
\nWritten by Jed Smith
with help from the ACES Gamut Mapping VWG"} } Input { inputs 0 name Input xpos -40 ypos -10 } AddChannels { name AddChannels xpos -40 ypos 32 } BlinkScript { recompileCount 27 ProgramGroup 1 KernelDescription "2 \"GamutCompression\" iterate pixelWise 145be670507b989fefed31d1e3d61091a96dc9f58a4df29d9fbbe005884e64ca 2 \"src\" Read Point \"dst\" Write Point 8 \"threshold\" Float 3 AAAAAAAAAAAAAAAAAAAAAA== \"p\" Float 1 AAAAAA== \"cyan\" Float 1 AAAAAA== \"magenta\" Float 1 AAAAAA== \"yellow\" Float 1 AAAAAA== \"p_Height\" Float 1 AAAAAA== \"invert\" Bool 1 AA== \"overlay\" Bool 1 AA== 8 \"threshold\" 3 1 \"p\" 1 1 \"cyan\" 1 1 \"magenta\" 1 1 \"yellow\" 1 1 \"p_Height\" 1 1 \"invert\" 1 1 \"overlay\" 1 1 3 \"thr\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA== \"lim\" Float 3 1 AAAAAAAAAAAAAAAAAAAAAA== \"pi\" Float 1 1 AAAAAA==" kernelSource "kernel GamutCompression : public ImageComputationKernel \{\n Image src;\n Image dst;\n\n param:\n float3 threshold;\n float p;\n float cyan;\n float magenta;\n float yellow;\n float p_Height;\n bool invert;\n bool overlay;\n\n local:\n float3 thr;\n float3 lim;\n float pi;\n\n void init() \{\n pi = 3.14159265359;\n\n // thr is the percentage of the core gamut to preserve\n thr = float3(min(0.9999f, threshold.x), min(0.9999f, threshold.y), min(0.9999f, threshold.z));\n\n // lim is the max distance from the gamut boundary that will be compressed\n // 0 is a no-op, 1 will compress colors from a distance of 2.0 from achromatic to the gamut boundary\n lim = float3(cyan+1.0f, magenta+1.0f, yellow+1.0f);\n \}\n\n // calculate compressed distance\n float compress(float x, float l, float t) \{\n float cx, s;\n if (x < t) \{\n cx = x;\n \} else \{\n // power(p) compression function plot https://www.desmos.com/calculator/54aytu7hek\n if (l < 1.0001) \{\n return x; // disable compression, avoid nan\n \}\n s = (l-t)/pow(pow((1.0f-t)/(l-t),-p)-1.0f,1.0f/p); // calc y=1 intersect\n if (invert == 0) \{\n cx = t+s*((x-t)/s)/(pow(1.0f+pow((x-t)/s,p),1.0f/p)); // compress\n \} else \{\n if (x > (t + s)) \{\n cx = x; // avoid singularity\n \} else \{\n cx = t+s*pow(-(pow((x-t)/s,p)/(pow((x-t)/s,p)-1.0f)),1.0f/p); // uncompress\n \}\n \}\n \}\n return cx;\n \}\n\n\n void process(int2 pos) \{\n // source pixels\n SampleType(src) rgba = src();\n float3 rgb = float3(rgba.x, rgba.y, rgba.z);\n\n // normalised pixel coordinates\n float2 fpos = float2((float)pos.x / dst.bounds.width(), (float)pos.y / p_Height);\n\n // achromatic axis \n float ach = max(rgb.x, max(rgb.y, rgb.z));\n\n // distance from the achromatic axis for each color component aka inverse rgb ratios\n // distance is normalized by achromatic, so that 1.0f is at gamut boundary, avoid 0 div\n float3 dist = ach == 0 ? float3(0.0f, 0.0f, 0.0f) : (ach-rgb)/fabs(ach);\n\n // compress distance with user controlled parameterized shaper function\n float sat;\n float3 csat, cdist;\n cdist = float3(\n compress(dist.x, lim.x, thr.x),\n compress(dist.y, lim.y, thr.y),\n compress(dist.z, lim.z, thr.z));\n\n // recalculate rgb from compressed distance and achromatic\n // effectively this scales each color component relative to achromatic axis by the compressed distance\n float3 crgb = ach-cdist*fabs(ach);\n\n // Graph overlay method based on one by Paul Dore\n // https://github.com/baldavenger/DCTLs/tree/master/ACES%20TOOLS\n if (overlay) \{\n float3 cramp = float3(\n compress(2.0f * fpos.x, lim.x, thr.x),\n compress(2.0f * fpos.x, lim.y, thr.y),\n compress(2.0f * fpos.x, lim.z, thr.z));\n bool overlay_r = fabs(2.0f * fpos.y - cramp.x) < 0.004f || fabs(fpos.y - 0.5f) < 0.0005f ? true : false;\n bool overlay_g = fabs(2.0f * fpos.y - cramp.y) < 0.004f || fabs(fpos.y - 0.5f) < 0.0005f ? true : false;\n bool overlay_b = fabs(2.0f * fpos.y - cramp.z) < 0.004f || fabs(fpos.y - 0.5f) < 0.0005f ? true : false;\n crgb.x = overlay_g || overlay_b ? 1.0f : crgb.x;\n crgb.y = overlay_b || overlay_r ? 1.0f : crgb.y;\n crgb.z = overlay_r || overlay_g ? 1.0f : crgb.z;\n \}\n\n // write to output\n dst() = float4(crgb.x, crgb.y, crgb.z, rgba.w);\n \}\n\};" useGPUIfAvailable {{parent.use_gpu}} rebuild "" GamutCompression_threshold {{parent.threshold} {parent.threshold} {parent.threshold}} GamutCompression_p {{parent.power}} GamutCompression_cyan {{parent.cyan}} GamutCompression_magenta {{parent.magenta}} GamutCompression_yellow {{parent.yellow}} GamutCompression_p_Height {{height}} GamutCompression_invert {{parent.direction}} GamutCompression_overlay {{parent.overlay}} rebuild_finalise "" name GamutCompress selected true xpos -40 ypos 80 } Output { name Output xpos -40 ypos 134 } end_group Group { name PlotGamut6 xpos 11992 ypos 762 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} colorize true addUserKnob {4 gamut M {"Adobe (1998)" Apple "Best RGB" "Beta RGB" "Bruce RGB" "CIE (1931)" ColorMatch DCI-P3 "Don RGB 4" "ECI RGB" "Ekta Space PS5" "NTSC (1953)" PAL/SECAM ProPhoto SMPTE-C sRGB "Wide Gamut" AlexaV3LogC "Sony S-Gamut" ACES Rec.2020 ACEScg "CIE XYZ"}} gamut ACEScg addUserKnob {41 value l color T Multiply4.value} addUserKnob {4 plotColorspace M {"CIE 1931 xy" "CIE 1976 u'v'"}} } Input { inputs 0 name Input1 xpos 444 ypos 16 } Dot { name Dot3 xpos 478 ypos 82 } set Nf62dbcf0 [stack 0] Dot { name Dot2 xpos 723 ypos 82 } set Nf62de160 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace2 xpos 787 ypos 166 } push $Nf62de160 ColorMatrix { matrix { {0.6624541811 0.1340042065 0.156187687} {0.2722287168 0.6740817658 0.0536895174} {-0.0055746495 0.0040607335 1.0103391} } name ColorMatrix1 label "ACEScg -> XYZ (none)" xpos 689 ypos 152 } Colorspace { colorspace_in CIE-XYZ illuminant_in ACES primary_in ACES colorspace_out CIE-Yxy name Colorspace1 xpos 689 ypos 184 } push $Nf62de160 Colorspace { primary_in {{parent.gamut}} colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace14 xpos 579 ypos 170 } Switch { inputs 3 which {{"parent.gamut == 21 ? 1 : parent.gamut == 22 ? 2 : 0"}} name Switch1 xpos 689 ypos 249 } Dot { name Dot8 xpos 723 ypos 279 } set Nf6309d20 [stack 0] Dot { name Dot9 xpos 829 ypos 279 } Expression { expr0 r expr1 (4*g)/(-2*g+12*b+3) expr2 (9*b)/(-2*g+12*b+3) name Expression1 label "Yxy -> Yu'v'" xpos 795 ypos 304 } push $Nf6309d20 Switch { inputs 2 which {{parent.plotColorspace}} name Switch3 xpos 689 ypos 308 } Dot { name Dot1 xpos 723 ypos 342 } Input { inputs 0 name Color xpos 327 ypos 16 number 1 } Dot { name Dot7 xpos 361 ypos 243 } push $Nf62dbcf0 Dot { name Dot6 xpos 478 ypos 106 } set Nf6320940 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 444 ypos 149 } Multiply { value {0 1 1 1} name Multiply4 xpos 444 ypos 175 } push $Nf6320940 Dot { name Dot4 xpos 554 ypos 106 } Dot { name Dot5 xpos 554 ypos 243 } Switch { inputs 3 which {{"\[exists parent.input1] ? 2 : parent.colorize"}} name Switch2 xpos 444 ypos 239 } BlinkScript { inputs 2 recompileCount 2 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise fc48d30b761944f4622c7e7cade9c548789bc618dc38d8ca992161542531f81f 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 3 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 3 \"padding\" 1 1 \"left_margin\" 1 1 \"process_input\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 0.2 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input selected true xpos 444 ypos 335 } Output { name Output1 xpos 444 ypos 403 } end_group Merge2 { inputs 2 name Merge29 xpos 11812 ypos 762 } Group { inputs 0 name SpectralLocus3 xpos 11965 ypos 841 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf634f020 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf6353940 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf634f020 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf6353940 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf63d5930 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf63d5930 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf63d5930 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 409.6 plot_cie_xy_bottom_margin 409.6 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill xpos 12056 ypos 835 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf644a1a0 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf6451bb0 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf6451bb0 push $Nf644a1a0 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf6476eb0 [stack 0] push $Nf6476eb0 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf647e8c0 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf647e8c0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 409.6 plot_cie_xy_bottom_margin 409.6 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 selected true xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply1 xpos 12056 ypos 859 } Merge2 { inputs 2 name Merge32 xpos 11999 ypos 901 } Merge2 { inputs 2 name Merge33 xpos 11812 ypos 901 } Dot { name Dot1 label "View Plot" note_font_size 32 xpos 11846 ypos 1020 } Group { inputs 0 name Group1 label "Gamut Boundary" xpos 10366 ypos 375 } Constant { inputs 0 channels rgb format "256 256 0 0 256 256 1 square_256" name Constant3 xpos 430 ypos 180 } Ramp { output {rgba.red -rgba.green -rgba.blue -rgba.alpha} p0 {0 {input.height/2}} p1 {{input.width-1} {input.height/2}} name Ramp1 xpos 430 ypos 252 } Ramp { output {-rgba.red rgba.green -rgba.blue -rgba.alpha} p0 {{input.width/2} 0} p1 {{input.width/2} {input.height-1}} name Ramp2 xpos 430 ypos 276 } Multiply { value {{1/input.height} {(input.height-1)/input.height} 1 1} name Multiply5 xpos 430 ypos 300 } Expression { expr0 r+g expr1 1 expr2 1 name Expression1 xpos 430 ypos 332 } Colorspace { colorspace_in HSV name Colorspace1 xpos 430 ypos 356 } Output { name Output1 selected true xpos 430 ypos 380 } end_group Dot { name Dot3 xpos 10400 ypos 430 } set Nf6503480 [stack 0] Dot { name Dot4 xpos 10219 ypos 430 } Expression { channel0 {rgba.red rgba.green rgba.blue none} expr0 max(r,g,b) name achromatic1 xpos 10185 ypos 448 } set Nf6508090 [stack 0] Dot { name Dot5 xpos 10219 ypos 612 } push $Nf6508090 Dot { name Dot8 xpos 10295 ypos 451 } set Nf6511b40 [stack 0] Expression { expr0 abs(r) expr1 abs(g) expr2 abs(b) name abs1 xpos 10261 ypos 472 } set Nf6514040 [stack 0] Dot { name Dot7 xpos 10295 ypos 588 } push $Nf6511b40 push $Nf6503480 Merge2 { inputs 2 operation minus bbox B Achannels rgb Bchannels rgb output rgb name Merge5 xpos 10366 ypos 448 } push $Nf6514040 Merge2 { inputs 2 operation divide bbox B Achannels rgb Bchannels rgb output rgb name Merge6 xpos 10366 ypos 472 } Multiply { channels rgb value {0.8145989776 0.8029429913 0.8796380162 0.9999999404} name Multiply4 label "threshold values" xpos 10366 ypos 526 } Merge2 { inputs 2 operation multiply bbox B Achannels rgb Bchannels rgb output rgb name Merge7 xpos 10366 ypos 585 } Merge2 { inputs 2 operation minus bbox B Achannels rgb Bchannels rgb output rgb name Merge8 xpos 10366 ypos 609 } Group { name PlotGamut2 xpos 10366 ypos 689 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} colorize true addUserKnob {4 gamut M {"Adobe (1998)" Apple "Best RGB" "Beta RGB" "Bruce RGB" "CIE (1931)" ColorMatch DCI-P3 "Don RGB 4" "ECI RGB" "Ekta Space PS5" "NTSC (1953)" PAL/SECAM ProPhoto SMPTE-C sRGB "Wide Gamut" AlexaV3LogC "Sony S-Gamut" ACES Rec.2020 ACEScg "CIE XYZ"}} gamut ACEScg addUserKnob {41 value l color T Multiply4.value} addUserKnob {4 plotColorspace M {"CIE 1931 xy" "CIE 1976 u'v'"}} } Input { inputs 0 name Input1 xpos 444 ypos 16 } Dot { name Dot3 xpos 478 ypos 82 } set Nf6547b20 [stack 0] Dot { name Dot2 xpos 723 ypos 82 } set Nf6549f90 [stack 0] Colorspace { colorspace_in CIE-XYZ primary_in ACES colorspace_out CIE-Yxy name Colorspace2 xpos 787 ypos 166 } push $Nf6549f90 ColorMatrix { matrix { {0.6624541811 0.1340042065 0.156187687} {0.2722287168 0.6740817658 0.0536895174} {-0.0055746495 0.0040607335 1.0103391} } name ColorMatrix1 label "ACEScg -> XYZ (none)" xpos 689 ypos 152 } Colorspace { colorspace_in CIE-XYZ illuminant_in ACES primary_in ACES colorspace_out CIE-Yxy name Colorspace1 xpos 689 ypos 184 } push $Nf6549f90 Colorspace { primary_in {{parent.gamut}} colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace14 xpos 579 ypos 170 } Switch { inputs 3 which {{"parent.gamut == 21 ? 1 : parent.gamut == 22 ? 2 : 0"}} name Switch1 xpos 689 ypos 249 } Dot { name Dot8 xpos 723 ypos 279 } set Nf6571aa0 [stack 0] Dot { name Dot9 xpos 829 ypos 279 } Expression { expr0 r expr1 (4*g)/(-2*g+12*b+3) expr2 (9*b)/(-2*g+12*b+3) name Expression1 label "Yxy -> Yu'v'" xpos 795 ypos 304 } push $Nf6571aa0 Switch { inputs 2 which {{parent.plotColorspace}} name Switch3 xpos 689 ypos 308 } Dot { name Dot1 xpos 723 ypos 342 } Input { inputs 0 name Color xpos 327 ypos 16 number 1 } Dot { name Dot7 xpos 361 ypos 243 } push $Nf6547b20 Dot { name Dot6 xpos 478 ypos 106 } set Nf65886c0 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 444 ypos 149 } Multiply { value {0 1 1 1} name Multiply4 xpos 444 ypos 175 } push $Nf65886c0 Dot { name Dot4 xpos 554 ypos 106 } Dot { name Dot5 xpos 554 ypos 243 } Switch { inputs 3 which {{"\[exists parent.input1] ? 2 : parent.colorize"}} name Switch2 xpos 444 ypos 239 } BlinkScript { inputs 2 recompileCount 2 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise fc48d30b761944f4622c7e7cade9c548789bc618dc38d8ca992161542531f81f 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 3 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 3 \"padding\" 1 1 \"left_margin\" 1 1 \"process_input\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 0.2 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input selected true xpos 444 ypos 335 } Output { name Output1 xpos 444 ypos 403 } end_group Group { inputs 0 name PlotColorChecker1 xpos 10455 ypos 690 } Group { inputs 0 name ACESColorChecker note_font "Bitstream Vera Sans" xpos 317 ypos 186 } Constant { inputs 0 color {0.03745 0.03766 0.03895 1} format "512 512 0 0 512 512 1 square_512" name Constant25 label "Black\n" note_font "Bitstream Vera Sans" xpos 509 ypos 165 } Constant { inputs 0 color {0.09467 0.0952 0.09637 1} format "512 512 0 0 512 512 1 square_512" name Constant24 label "Neutral 3.5\n" note_font "Bitstream Vera Sans" xpos 413 ypos 167 } Constant { inputs 0 color {0.20253 0.20243 0.20287 1} format "512 512 0 0 512 512 1 square_512" name Constant26 label "Neutral 5\n" note_font "Bitstream Vera Sans" xpos 316 ypos 167 } Constant { inputs 0 color {0.35346 0.35337 0.35391 1} format "512 512 0 0 512 512 1 square_512" name Constant23 label "Neutral 6.5\n" note_font "Bitstream Vera Sans" xpos 220 ypos 166 } Constant { inputs 0 color {0.57356 0.57256 0.57169 1} format "512 512 0 0 512 512 1 square_512" name Constant22 label "Neutral 8\n" note_font "Bitstream Vera Sans" xpos 124 ypos 168 } Constant { inputs 0 color {0.86653 0.86792 0.85818 1} format "512 512 0 0 512 512 1 square_512" name Constant21 label "White\n" note_font "Bitstream Vera Sans" xpos 29 ypos 169 } Constant { inputs 0 color {0.149 0.23377 0.35939 1} format "512 512 0 0 512 512 1 square_512" name Constant19 label "Cyan\n" note_font "Bitstream Vera Sans" xpos 507 ypos 83 } Constant { inputs 0 color {0.30904 0.14818 0.27426 1} format "512 512 0 0 512 512 1 square_512" name Constant18 label "Magenta\n" note_font "Bitstream Vera Sans" xpos 411 ypos 85 } Constant { inputs 0 color {0.58921 0.53944 0.09157 1} format "512 512 0 0 512 512 1 square_512" name Constant20 label "Yellow\n" note_font "Bitstream Vera Sans" xpos 314 ypos 85 } Constant { inputs 0 color {0.21743 0.0707 0.0513 1} format "512 512 0 0 512 512 1 square_512" name Constant17 label "Red\n" note_font "Bitstream Vera Sans" xpos 218 ypos 84 } Constant { inputs 0 color {0.15366 0.25692 0.09071 1} format "512 512 0 0 512 512 1 square_512" name Constant16 label "Green\n" note_font "Bitstream Vera Sans" xpos 122 ypos 86 } Constant { inputs 0 color {0.08731 0.07443 0.27274 1} format "512 512 0 0 512 512 1 square_512" name Constant15 label "Blue\n" note_font "Bitstream Vera Sans" xpos 25 ypos 86 } Constant { inputs 0 color {0.48657 0.36686 0.08061 1} format "512 512 0 0 512 512 1 square_512" name Constant13 label "Orange Yellow\n" note_font "Bitstream Vera Sans" xpos 508 ypos -1 } Constant { inputs 0 color {0.34877 0.43655 0.10613 1} format "512 512 0 0 512 512 1 square_512" name Constant12 label "Yellow Green\n" note_font "Bitstream Vera Sans" xpos 412 ypos 1 } Constant { inputs 0 color {0.0931 0.06347 0.13525 1} format "512 512 0 0 512 512 1 square_512" name Constant14 label "Purple\n" note_font "Bitstream Vera Sans" xpos 315 ypos 1 } Constant { inputs 0 color {0.30203 0.13752 0.12758 1} format "512 512 0 0 512 512 1 square_512" name Constant11 label "Moderate Red\n" note_font "Bitstream Vera Sans" xpos 219 } Constant { inputs 0 color {0.13822 0.13037 0.33703 1} format "512 512 0 0 512 512 1 square_512" name Constant10 label "Purplish Blue\n" note_font "Bitstream Vera Sans" xpos 123 ypos 2 } Constant { inputs 0 color {0.38607 0.22744 0.05777 1} format "512 512 0 0 512 512 1 square_512" name Constant9 label "Orange\n" note_font "Bitstream Vera Sans" xpos 26 ypos 2 } Constant { inputs 0 color {0.32283 0.46208 0.40606 1} format "512 512 0 0 512 512 1 square_512" name Constant8 label "Bluish Green\n" note_font "Bitstream Vera Sans" xpos 508 ypos -89 } Constant { inputs 0 color {0.26684 0.24604 0.40932 1} format "512 512 0 0 512 512 1 square_512" name Constant7 label "Blue Flower\n" note_font "Bitstream Vera Sans" xpos 412 ypos -87 } Constant { inputs 0 color {0.10901 0.13511 0.06493 1} format "512 512 0 0 512 512 1 square_512" name Constant6 label "Foliage\n" note_font "Bitstream Vera Sans" xpos 315 ypos -87 } Constant { inputs 0 color {0.18476 0.20398 0.31311 1} format "512 512 0 0 512 512 1 square_512" name Constant4 label "Blue Sky\n" note_font "Bitstream Vera Sans" xpos 219 ypos -88 } Constant { inputs 0 color {0.40003 0.31916 0.23737 1} format "512 512 0 0 512 512 1 square_512" name Constant3 label "Light Skin\n" note_font "Bitstream Vera Sans" xpos 123 ypos -86 } Constant { inputs 0 color {0.11877 0.08709 0.05895 1} format "512 512 0 0 512 512 1 square_512" name Constant2 label "Dark Skin\n" note_font "Bitstream Vera Sans" selected true xpos 26 ypos -86 } ContactSheet { inputs 24 width 1920 height 1280 rows 4 columns 6 roworder TopBottom name ContactSheet1 note_font "Bitstream Vera Sans" xpos 253 ypos 343 } Output { name Output1 xpos 253 ypos 443 } end_group Reformat { type "to box" box_width 6 box_height 4 box_fixed true resize distort filter Impulse name Reformat2 xpos 317 ypos 210 } ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } name ColorMatrix44 label "ACES to XYZ" note_font "Bitstream Vera Sans" selected true xpos 317 ypos 234 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} } set Nf662a330 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 317 ypos 270 } push $Nf662a330 ColorMatrix { matrix { {{"\[python (0.9525523959, 0.6624541811, 0.4123907993, 0.6369580483, 0.4865709486, 0.6380076193, 0.4581609159, 0.4878301118, 0.4516946649, 0.5070147865, 0.4462154077, 0.7352752459, 0.7064827132, 0.7064827132, 0.5990839208, 0.7976672348, 1.0000000000, 1.48804061)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.1340042065, 0.3575843394, 0.1446169036, 0.2656676932, 0.2147038563, 0.3832048061, 0.3432736678, 0.3178467119, 0.3587783652, 0.3157557129, 0.0686094106, 0.1288010498, 0.1288010498, 0.2489255161, 0.1351922306, 0.0000000000, -0.23423647)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000936786, 0.1561876870, 0.1804807884, 0.1688809752, 0.1982172852, 0.0977444514, 0.1112803526, 0.1215422950, 0.1831046977, 0.0868529229, 0.1906749540, 0.1465712705, 0.1151721641, 0.1151721641, 0.1024464902, 0.0313525290, 0.0000000000, -0.3011580651)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.3439664498, 0.2722287168, 0.2126390059, 0.2627002120, 0.2289745641, 0.2919537790, 0.1694420971, 0.2289038124, 0.2119478695, 0.2207240223, 0.1942557952, 0.2866940995, 0.2709796708, 0.2709796708, 0.2150758201, 0.2880374539, 0.0000000000, 0.2501373809)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.7281660966, 0.6740817658, 0.7151686788, 0.6779980715, 0.6917385218, 0.8238410415, 0.8648282025, 0.7808598244, 0.7230197720, 0.8391880546, 0.7385568692, 0.8429791340, 0.7866064112, 0.7866064112, 0.8850685017, 0.7118768834, 1.0000000000, 1.210452347)\\\[\[numvalue gamut]\\]]\n"} {"\[python (-0.0721325464, 0.0536895174, 0.0721923154, 0.0593017165, 0.0792869141, -0.1157948205, -0.0342702996, -0.0097636368, 0.0650323585, -0.0599120769, 0.0671873356, -0.1296732335, -0.0575860820, -0.0575860820, -0.1001443219, 0.0000856626, 0.0000000000, -0.4605897283)\\\[\[numvalue gamut]\\]]\n"}} {{"\[python (0.0000000000, -0.0055746495, 0.0193308187, 0.0000000000, 0.0000000000, 0.0027982790, -0.1061849690, -0.0210075899, -0.0194509094, -0.0544519405, -0.0479226710, -0.0796808569, -0.0096778454, -0.0096778454, -0.0320658495, 0.0000000000, 0.0000000000, -0.4416591448)\\\[\[numvalue gamut]\\]]\n"} {"\[python (0.0000000000, 0.0040607335, 0.1191947798, 0.0280726930, 0.0451133819, -0.0670342357, 0.0255435258, 0.0178269864, 0.0165064159, -0.0003228254, -0.0002844886, -0.3473432170, 0.0046000375, 0.0046000375, -0.0276583907, 0.0000000000, 0.0000000000, -0.2480497808)\\\[\[numvalue gamut]\\]]\n"} {"\[python (1.0088251844, 1.0103391003, 0.9505321522, 1.0609850577, 1.0439443689, 1.1532937074, 1.0894666276, 1.0120057879, 1.0117696778, 1.0635999502, 1.0570323440, 1.5160818246, 1.0941355587, 1.0941355587, 1.1487819910, 0.8251882845, 1.0000000000, 1.69853411)\\\[\[numvalue gamut]\\]]\n"}} } invert true name ColorMatrix3 label "XYZ to \[value gamut]" note_font "Bitstream Vera Sans" xpos 170 ypos 322 addUserKnob {20 User} addUserKnob {4 gamut M {ACES ACEScg "Rec709 / sRGB" Rec2020 P3 AlexaWideGamut REDColor2 REDColor3 REDColor4 DRAGONcolor DRAGONcolor2 REDWideGamutRGB SGamut SGamut3 SGamut3.Cine ProPhoto "CIE XYZ" "Huge Gamut AP0 x 2" ""}} gamut "Rec709 / sRGB" } BlinkScript { inputs 2 recompileCount 2 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise fc48d30b761944f4622c7e7cade9c548789bc618dc38d8ca992161542531f81f 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 3 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 3 \"padding\" 1 1 \"left_margin\" 1 1 \"process_input\" 1 1 2 \"outsize\" Float 1 1 AAAAAA== \"offset\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offset;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offset = dst.bounds.height()*left_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offset, xy.y * outsize + offset);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 0.2 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input xpos 317 ypos 381 } set Nf66434a0 [stack 0] Dilate { size 2.7 name Dilate1 xpos 317 ypos 413 } push $Nf66434a0 Shuffle { red white green white blue white name Shuffle1 xpos 438 ypos 406 } Merge2 { inputs 2 name Merge1 xpos 317 ypos 445 } Dilate { channels alpha size 1 name Dilate2 xpos 317 ypos 469 } Premult { name Premult1 xpos 317 ypos 501 } Output { name Output1 xpos 317 ypos 545 } end_group push 0 Group { inputs 0 name SpectralLocus1 xpos 10550 ypos 691 addUserKnob {20 User} addUserKnob {6 colorize +STARTLINE} addUserKnob {41 value T Multiply1.value} addUserKnob {26 wavelength} addUserKnob {7 start -STARTLINE R 375 780} start 375 addUserKnob {7 end R 375 780} end 780 addUserKnob {6 purples l "show \"line of purples\"" +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 507 ypos -17 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } set Nf52ca060 [stack 0] Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 507 ypos 55 } set Nf52ce980 [stack 0] Dot { name Dot8 note_font "Bitstream Vera Sans" xpos 681 ypos 58 } Multiply { value {-0.001319684205 -0.565 -0.26 1} name Multiply2 note_font "Bitstream Vera Sans" xpos 647 ypos 122 } Add { value {0.001419684151 0.737 0.2637 1} name Add7 note_font "Bitstream Vera Sans" xpos 647 ypos 158 } Shuffle { alpha white name Shuffle22 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 647 ypos 207 } Transform { translate {13300 0} scale {0.1883 1} center {0 1} filter Impulse name Transform1 note_font "Bitstream Vera Sans" xpos 647 ypos 243 } Dot { name Dot9 note_font "Bitstream Vera Sans" xpos 681 ypos 376 } push $Nf52ca060 Rectangle { area {{width*((parent.start-375)/405)} 0 {width*((parent.end-375)/405)} 2} name Rectangle7 xpos 289 ypos 130 } push $Nf52ce980 Multiply { value 405 name Multiply4 xpos 507 ypos 81 } Add { value 375 name Add3 xpos 507 ypos 119 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 507 ypos 157 } Merge2 { inputs 2 operation multiply name Merge22 xpos 507 ypos 226 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace1 note_font "Bitstream Vera Sans" xpos 507 ypos 297 } Crop { box {500 0 13800 2} name Crop13 xpos 507 ypos 321 } Transform { translate {-500 0} center {8192 1} name Transform3 note_font "Bitstream Vera Sans" xpos 507 ypos 349 } Merge2 { inputs 2 name Merge1 note_font "Bitstream Vera Sans" xpos 507 ypos 373 disable {{!parent.purples}} } Expression { expr0 "r < 0 ? r * sole.r + lift.r : r < lift.r * 2 ? pow( (lift.r *2 - r) / (lift.r * 2), 2) * lift.r + r : r" expr1 "g < 0 ? g * sole.g + lift.g : g < lift.g * 2 ? pow( (lift.g *2 - g) / (lift.g * 2), 2) * lift.g + g : g" expr2 "b < 0 ? b * sole.b + lift.b : b < lift.b * 2 ? pow( (lift.b *2 - b) / (lift.b * 2), 2) * lift.b + b : b" name ToeExpr1 xpos 507 ypos 397 addUserKnob {20 User} addUserKnob {18 lift} lift {0.15 0 0} addUserKnob {6 lift_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} lift_panelDropped true addUserKnob {6 lift_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {18 sole R 0 0.1} sole {0 0 0} addUserKnob {6 sole_panelDropped l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 sole_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} addUserKnob {6 lift_panelDropped_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1 l "panel dropped state" -STARTLINE +HIDDEN} } Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace2 note_font "Bitstream Vera Sans" xpos 507 ypos 421 } set Nf6754d90 [stack 0] Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy primary_out "CIE (1931)" name Colorspace15 xpos 347 ypos 612 } push $Nf6754d90 Shuffle { red white green white blue white alpha white name Shuffle1 xpos 640 ypos 571 } Multiply { value {1 1 1 1} name Multiply1 xpos 640 ypos 597 } push $Nf6754d90 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 xpos 507 ypos 572 } Shuffle { alpha white name Shuffle2 label "\[value in]-->\[value out]" note_font "Bitstream Vera Sans" xpos 507 ypos 596 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 569 ypos 655 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 409.6 plot_cie_xy_bottom_margin 409.6 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 569 ypos 737 cached true } Dilate { size 1 name Dilate1 xpos 569 ypos 769 } Output { name Output1 xpos 569 ypos 875 } end_group Group { inputs 0 name SpectralLocusFill1 xpos 10641 ypos 685 addUserKnob {20 User} addUserKnob {41 value T Multiply1.value} addUserKnob {6 colorize +STARTLINE} } Constant { inputs 0 channels rgb format "16384 2 0 0 16384 2 1 14bit_lut" name bg1 xpos 510 ypos -223 addUserKnob {20 User} addUserKnob {7 wl} wl {{clamp(frame+375,375,780)}} } Ramp { p0 {0 1} p1 {16383 1} name Ramp4 xpos 510 ypos -152 } Multiply { value 405 name Multiply4 xpos 510 ypos -134 } Add { value 375 name Add3 xpos 510 ypos -86 } ColorLookup { lut {master {} red {curve x380 0.0014 x385 0.0022 0.0042 0.0076 0.0143 0.0232 0.0435 0.0776 0.1344 0.2148 0.2839 0.3285 0.3483 0.3481 0.3362 0.3187 0.2908 0.2511 0.1954 0.1421 0.0956 0.058 0.032 0.0147 0.0049 0.0024 0.0093 0.0291 0.0633 0.1096 0.1655 0.2257 0.2904 0.3597 0.4334 0.5121 0.5945 0.6784 0.7621 0.8425 0.9163 0.9786 1.0263 1.0567 1.0622 1.0456 1.0026 0.9384 0.8544 0.7514 0.6424 0.5419 0.4479 0.3608 0.2835 0.2187 0.1649 0.1212 0.0874 0.0636 0.0468 0.0329 0.0227 0.0158 0.0114 0.0081 0.0058 0.0041 0.0029 0.002 0.0014 0.001 0.0007 0.0005 0.0003 0.0002 0.0002 0.0001 0.0001 0.0001 0} green {curve x380 0 x385 0.0001 0.0001 0.0002 0.0004 0.0006 0.0012 0.0022 0.004 0.0073 0.0116 0.0168 0.023 0.0298 0.038 0.048 0.06 0.0739 0.091 0.1126 0.139 0.1693 0.208 0.2586 0.323 0.4073 0.503 0.6082 0.71 0.7932 0.862 0.9149 0.954 0.9803 0.995 1 0.995 0.9786 0.952 0.9154 0.87 0.8163 0.757 0.6949 0.631 0.5668 0.503 0.4412 0.381 0.321 0.265 0.217 0.175 0.1382 0.107 0.0816 0.061 0.0446 0.032 0.0232 0.017 0.0119 0.0082 0.0057 0.0041 0.0029 0.0021 0.0015 0.001 0.0007 0.0005 0.0004 0.0002 0.0002 0.0001 0.0001 0.0001 0 0 0 0} blue {curve x375 0 x380 0.0065 0.0105 0.0201 0.0362 0.0679 0.1102 0.2074 0.3713 0.6456 1.0391 1.3856 1.623 1.7471 1.7826 1.7721 1.7441 1.6692 1.5281 1.2876 1.0419 0.831 0.6162 0.4652 0.3533 0.272 0.2123 0.1582 0.1117 0.0782 0.0573 0.0422 0.0298 0.0203 0.0134 0.0087 0.0057 0.0039 0.0027 0.0021 0.0018 0.0017 0.0014 0.0011 0.001 0.0008 0.0006 0.0003 0.0002 0.0002 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} alpha {}} name ColorLookup2 xpos 510 ypos -56 } Crop { box {500 0 13800 2} reformat true crop false name Crop13 xpos 510 ypos -5 } Colorspace { colorspace_in CIE-XYZ colorspace_out CIE-Yxy name Colorspace9 xpos 510 ypos 84 } Reformat { type "to box" format "2048 2048 0 0 2048 2048 1 square_2k" box_width 2048 box_height 240 box_fixed true resize distort filter Impulse name Reformat5 xpos 510 ypos 162 } set Nf67c55b0 [stack 0] Crop { box {0 0 {input.width/2.5} {height}} reformat true crop false name Crop4 xpos 429 ypos 269 } set Nf67ccfc0 [stack 0] Shuffle { red black green black blue black alpha black name Shuffle7 label "\[value in]-->\[value out]" xpos 359 ypos 422 } Ramp { p0 {{width/2} 0} p1 {{width/2} {height-1}} name Ramp8 xpos 359 ypos 460 } push $Nf67ccfc0 push $Nf67c55b0 Crop { box {{Crop4.box.r} 0 {width} {height}} reformat true crop false name Crop5 xpos 578 ypos 269 } Reformat { type "to box" box_width {{Crop4.box.r-Crop4.box.x}} box_height {{Crop4.box.t-Crop4.box.y}} box_fixed true scale {1 0.5} resize distort flop true name Reformat7 xpos 578 ypos 306 } Keymix { inputs 3 name Keymix5 xpos 522 ypos 525 } Reformat { type scale scale 2 name Reformat1 xpos 522 ypos 557 } set Nf67f22c0 [stack 0] push $Nf67f22c0 Colorspace { colorspace_in CIE-Yxy colorspace_out CIE-XYZ name Colorspace1 xpos 643 ypos 656 } set Nf67f9cd0 [stack 0] Shuffle { red white green white blue white alpha white name Shuffle1 xpos 643 ypos 762 } Multiply { value 0.5 name Multiply1 xpos 643 ypos 804 } push $Nf67f9cd0 ColorMatrix { matrix { {1.04981102 0 -9.748e-05} {-0.49590302 1.37331305 0.09824004} {0 0 0.99125202} } name ColorMatrix3 selected true xpos 767 ypos 781 } Switch { inputs 2 which {{parent.colorize}} name Switch1 xpos 643 ypos 858 } Multiply { value {{parent.value.r} {parent.value.g} {parent.value.b} {parent.value.a}} name Multiply2 xpos 643 ypos 902 } BlinkScript { inputs 2 recompileCount 4 ProgramGroup 1 KernelDescription "2 \"plot_cie_xy\" iterate pixelWise 4f09b488f640fe57a9b92d835cc81424078e447e427d9f43fb8d958e7333c795 3 \"col\" Read Random \"Yxy\" Read Random \"dst\" Write Random 4 \"padding\" Float 1 AAAAAA== \"left_margin\" Float 1 AAAAAA== \"bottom_margin\" Float 1 AAAAAA== \"process_input\" Bool 1 AA== 4 \"padding\" 1 1 \"left_margin\" 1 1 \"bottom_margin\" 1 1 \"process_input\" 1 1 3 \"outsize\" Float 1 1 AAAAAA== \"offsetX\" Float 1 1 AAAAAA== \"offsetY\" Float 1 1 AAAAAA==" kernelSource "kernel plot_cie_xy : public ImageComputationKernel\n\{\n Image col;\n Image Yxy;\n Image dst;\n\nparam:\n float padding;\n float left_margin;\n float bottom_margin;\n bool process_input;\n\n\nlocal:\n float outsize;\n float offsetX;\n float offsetY;\n\n void init() \{\n // calculate output width and height and offset based on padding\n outsize = dst.bounds.height()/padding;\n // xy offset for margin on lower left corner\n offsetX = left_margin;\n offsetY = bottom_margin;\n \}\n\n void process(int2 pos) \{\n // All the work will be done in the first pixel of the iteration. Essentially a single thread.\n if ( pos.x > 1 || pos.y > 1) \{ return; \}\n // Loop over all pixels in input Yxy\n if (process_input) \{\n for ( int j = Yxy.bounds.y1; j < Yxy.bounds.y2; j++) \{\n for ( int i = Yxy.bounds.x1; i < Yxy.bounds.x2; i++) \{\n // sample Yxy pixel at position i, j\n float2 xy = float2(Yxy(i, j, 1), Yxy(i, j, 2));\n // don't process black pixels\n if( xy.x == 0.0f && xy.y == 0.0f) \{ continue; \}\n // calculate output position: xy chromaticity coordinates at centered output pixel position\n float2 out_pos = float2(xy.x * outsize + offsetX, xy.y * outsize + offsetY);\n // Write color value to xy sample position in dst\n if ( dst.bounds.inside(out_pos.x, out_pos.y)) \{ dst(out_pos.x, out_pos.y) = col(i, j); \}\n \}\n \}\n \}\n \}\n\};" vectorize false rebuild "" plot_cie_xy_padding 2 plot_cie_xy_left_margin 409.6 plot_cie_xy_bottom_margin 409.6 plot_cie_xy_process_input true format "2048 2048 0 0 2048 2048 1 square_2K" specifiedFormat true rebuild_finalise "" name Plot_Input1 xpos 522 ypos 986 cached true } Dilate { size 2.5 name Dilate1 xpos 522 ypos 1018 } Dilate { size -2.5 name Dilate2 xpos 522 ypos 1050 } Output { name Output1 xpos 522 ypos 1117 } end_group Multiply { value 0.18 name Multiply2 xpos 10641 ypos 709 } Merge2 { inputs 3+1 name Merge1 xpos 10550 ypos 765 } Merge2 { inputs 2 name Merge4 xpos 10550 ypos 819 } Dot { name Dot2 label "View Plot" note_font_size 32 xpos 10584 ypos 1030 } Viewer { inputs 2 frame_range 1-56 colour_sample_bbox {0.34765625 -0.2109375 0.349609375 -0.208984375} samplepoints {{0.28515625 -0.056640625} } name Viewer1 xpos 10910 ypos 1363 } Constant { inputs 0 channels rgb color {0.147279 0.264283 0.312372 0} format "2048 2048 0 0 2048 2048 1 square_2K" name Constant5 label "Sampled MAX(R,G,B)\nis used as distance limit" xpos 11380 ypos 868 }