// v3.5 // // wvwwvwvww // \ / // \______/ // // Joe's Filters // for Final Cut Pro // (C) 2002 Joe Maller // http://www.joesfilters.com // http://www.fxscriptreference.org filter "Joe's Saturation & Colorize"; group "Joe's Adjustments"; input hue, "Hue Angle", Angle, 0, -360, 360 input desat, "Saturation", Slider, 0, 0, 1000 ramp 93 label "%" detent 100 input colorize, "Colorize", checkbox, 0; input title, "Joe's Filters", Label,""; input title1, "www.joesfilters.com", Label,""; code float rTGT, gTGT, bTGT, rr, rg, rb, gr, gg, gb, br, bg, bb, offset0[3], mat[3][3]; //define initial matrix values for straight pass-through rr = 1; rg = 0; rb = 0; gr = 0; gg = 1; gb = 0; br = 0; bg = 0; bb = 1; hue = (hue + 360 )mod 360; desat = (colorize == 1) ? desat/100 : 1 - desat/100; //makes the desaturate value a decimal value between 0 and 1 if (hue < 120); //need a range of 0-120 on either side of zero rTGT = (120 - hue)/60; else if (hue > 240); rTGT = (120 - (abs(hue - 360)))/60; else rTGT = 0; end if gTGT = (hue < 240) ? (120 - (abs(hue - 120)))/60 : 0; bTGT = (hue > 120) ? (120 - (abs(hue - 240)))/60 : 0; rTGT = (rTGT > 1) ? 1 : rTGT //to prevent blowouts during colorization gTGT = (gTGT > 1) ? 1 : gTGT bTGT = (bTGT > 1) ? 1 : bTGT if (colorize == 0 && (rTGT + gTGT + bTGT > 1)); //colorize values add up to more than 1 rTGT/=(rTGT + gTGT+bTGT); gTGT/=(rTGT + gTGT+bTGT); bTGT/=(rTGT + gTGT+bTGT); end if; rr -= (rr - rTGT) * desat rg -= (rg - rTGT) * desat rb -= (rb - rTGT) * desat gr -= (gr - gTGT) * desat gg -= (gg - gTGT) * desat gb -= (gb - gTGT) * desat br -= (br - bTGT) * desat bg -= (bg - bTGT) * desat bb -= (bb - bTGT) * desat if colorize != 1; mat = {rr, rg, rb, gr, gg, gb, br, bg, bb}; else mat = {rr, gg*desat/3, bb*desat/3, rr*desat/3, gg, bb*desat/3, rr*desat/3, gg*desat/3, bb}; end if colorTransform(Src1, Dest, mat, offset0, offset0);