Skip to main content
marior90336416
Inspiring
January 13, 2017
Answered

Cycle through Tool Presets with shortcut?

  • January 13, 2017
  • 2 replies
  • 7499 views

Is it actually possible to cycle through the Tool Presets just like it is with brushes using shortcuts?

I've searched all over google and the forums and while I've found some posts with similar question, it looked like a dead end.

I know it is possible to select specific Tool Preset using a shortcut/action but I wanted to know if they can be cycled, like "next tool preset,", "previous tool preset".

Can a script do that?

Thanks

This topic has been closed for replies.
Correct answer JJMack

Hi JJMack, yes I did read and tried to follow the instructions to the best of my capabilities. I tested with 3 presets, "marker_80", "marker_60" and a 40. All loaded up and selected marker 80. I edited the script file to make sure these 3 names were replaced but the flat angle etc. Selected the marker_80. Ran the script, got that error. I'm still getting that error when I run your script before the cycling script.


You disappointed me you never posted your try.  Here is what I came up with for you.

Here the link this web site messes up script formatting

http://www.mouseprints.net/old/dpr/CycleBrushes.jsx

/* =================================================================================

              Cycling Forward and Backward through Sets of Tool Presets

=====================================================================================

2017  John J. McAssey (JJMack)

=====================================================================================

Naming Your Script so that it identify the tool and Presets Set will helpful.

    Copy this script to a new Name for each set of presets you want to cycle through.

  Run that script via shortcut keys. Set two Shortcuts keys

  F(n) Forward  Modifier+F(n) Backward

  There are three required parameters for the cycling function:

  1.) Correct Photoshop Tools Name

  2.) Presets Set file name the * part of the *.tpl file

  The *.tpl file must reside in the scripts folder

  3.) Array of preset names in your desired cycling order

=====================================================================================

Note: This script only deals with Tool Preset files .tpl for tools preset are easily

  reset back to Adobe's defaults using the Preset manager. Tool presets may require

  other Photoshop add-ons like brush .abr, patterns .pat, swatch .aco, etc files to

  also be loaded this script will not load them this script will only load .tpl

  files if there is a need too. You must add what your presets require to Photoshop

================================================================================== */

#target photoshop;

app.bringToFront();

// Required three parameters  tool,Set,list

var tool = 'paintbrushTool';                     // Photoshop Tool name your Presets set is for. Only one tool's presets

// For this sample script the presets set can be from DeviantArt "The Sketch Arsenal" that's "the_sketch_arsenal_by_thatld.tpl"

// http://thatld.deviantart.com/art/The-Sketch-Arsenal-161678023 Download link on Top Right of the Page not the one on the bottom

var presetSet  = 'the_sketch_arsenal_by_thatld'; // Presets set name *.tpl file need to be same folder as this Photoshop script.

var presetNames = [                              // Preset names list start. Presets you want to cycle through. Set can have more.

  'Color Brush - Flat',

  'Color Brush - Magic Edge',

  'Color Pencil - Hard',

  'Color Pencil - Soft',

  'Drawing Pencil - B Lead',

  'Drawing Pencil - Blue Line',

  'Drawing Pencil - H Lead',

  'Linework Pen - Fine',

  'Marker - Lower the Flow to Dry',

  'Shading Brush - Pressure Hold',

  'Shading Brush - Soft Texture',

  'Shading Pencil - General',

  'Shading Pencil - Hard',

  'Shading Pencil - Soft',

  'Sketch Pencil - H Lead',

  'Sketch Pencil - The Ultimate!',

  'Watercolor Brush - General'

  ];                                              // Presets names list end. Order the way you want to cycle through them

// End Required Parameters

cycle(tool,presetSet,presetNames);                  // Cycle Forward and Backward through tool presets set names

// End of Script

// =================================================== Main function ======================================================== //

function cycle(toolName,toolPresetSet,toolPresetNames){

  try {selectTool(toolName);} // Insure the tool is select so preset can be selected

  catch(e) {alert("Unable to Select the Tool "+toolName); return;}// Tool name wrong or unavailable

  var desc = new ActionDescriptor(); // Set up Photoshop to remember variables

  try{var desc = app.getCustomOptions ('Cycle' + toolPresetSet);} // Try to get CustomOption for cycling this tool presets set

  catch(e){ // Each Photoshop session this should fail first time reset

  try {selectToolPreset(toolPresetNames[0]);} // Insure Tool Presets Set has been loaded

  catch(e) { // Will fail if tools presets set is not loaded

  if (loadToolPresetSet(toolPresetSet)) { // Load Tool presets set

  try {selectToolPreset(toolPresetNames[0]);} // Load sets first preset

  catch(e) {alert("Was unable to Select the Tools Preset "+toolPresetNames[0]); return;} // Failed to select preset

  }

  else {alert("Was unable to load Tools Presets Set " + toolPresetSet); return;} // Failed to load tools presets set

  }

  desc.putInteger (0,0); // This line save the variable while Photoshop is open,

  app.putCustomOptions('Cycle'+toolPresetSet , desc, false ); // Initialize presets set CustomOption for cycling

  desc = app.getCustomOptions ('Cycle'+toolPresetSet); // Get CustomOption Cycle starting point

    }

  var presetNumber = desc.getInteger(0); // Get the preset index

  if(ScriptUI.environment.keyboardState.ctrlKey||ScriptUI.environment.keyboardState.altKey||

  ScriptUI.environment.keyboardState.shiftKey) { // Previous preset if Ctrl or Shift key is down

  presetNumber = presetNumber-2; // Back up two preset for it will be bumped one

  if (presetNumber<0){presetNumber = toolPresetNames.length-1;} // Set preset index to the end of the list

  }

  if (presetNumber < toolPresetNames.length){desc.putInteger(0,presetNumber+1);} // Update preset index number

  else{presetNumber=0; desc.putInteger(0,1);} // Reset preset index pointer to the begging of the list

  app.putCustomOptions('Cycle'+toolPresetSet,desc,false); // Put Update the Custom option

  try {selectToolPreset(toolPresetNames[presetNumber]);} // Set tool with preset

  catch(e) {alert("Was unable to Select the Tools Preset " + toolPresetNames[presetNumber]);} // Failed to select preset

};

// =================================================== Helper functions ===================================================== //

function selectTool(tool) {

    var desc9 = new ActionDescriptor();

        var ref7 = new ActionReference();

        ref7.putClass( app.stringIDToTypeID(tool) );

    desc9.putReference( app.charIDToTypeID('null'), ref7 );

    executeAction( app.charIDToTypeID('slct'), desc9, DialogModes.NO );

};

function selectToolPreset(PresetName) {

  var desc = new ActionDescriptor();

  var ref = new ActionReference();

  ref.putName( stringIDToTypeID( "toolPreset" ), PresetName );

  desc.putReference( charIDToTypeID( "null" ), ref );

  executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );

}

function loadToolPresetSet(SetName) {

  returncode = true;

  var scriptLocation = String(findScript());

  var path = scriptLocation.substr(0, scriptLocation.lastIndexOf("/") + 1 ) ;

  var SetFile = new File(path + SetName + ".tpl");   // Requited to be in the script's folder

  if (!SetFile.exists) { returncode = false; }

  else {

  var desc = new ActionDescriptor();

  var ref = new ActionReference();

  ref.putProperty( charIDToTypeID( "Prpr" ), stringIDToTypeID( "toolPreset"  ));

  ref.putEnumerated( charIDToTypeID( "capp" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt"  ) );

  desc.putReference( charIDToTypeID( "null" ), ref );

  desc.putPath( charIDToTypeID( "T   " ), new File( SetFile ) );

  desc.putBoolean( charIDToTypeID( "Appe" ), true );

  try {executeAction( charIDToTypeID( "setd" ), desc, DialogModes.NO );}

  catch(e) { returncode = false; }

  }

  return returncode ;

}

function findScript() {// Find the location where this script resides

  var where = "";

  try { FORCEERROR = FORCERRROR;}

  catch(err) { where = File(err.fileName);}

  return where ;

}

/* Photoshop tool names

'moveTool'                     'cloneStampTool'            'typeCreateOrEditTool'

'marqueeRectTool'              'patternStampTool'          'typeVerticalCreateOrEditTool'

'marqueeEllipTool'             'historyBrushTool'          'typeCreateMaskTool'

'marqueeSingleRowTool'         'artBrushTool'              'typeVerticalCreateMaskTool'

'marqueeSingleColumnTool'      'eraserTool'                'pathComponentSelectTool'

'lassoTool'                    'backgroundEraserTool'      'directSelectTool'

'polySelTool'                  'magicEraserTool'           'rectangleTool'

'magneticLassoTool'            'gradientTool'              'roundedRectangleTool'

'quickSelectTool'              'bucketTool'                'ellipseTool'

'magicWandTool'                'blurTool'                  'polygonTool'

'cropTool'                     'sharpenTool'               'lineTool'

'sliceTool'                    'smudgeTool'                'customShapeTool'

'sliceSelectTool'              'dodgeTool'                 'textAnnotTool'

'spotHealingBrushTool'         'burnInTool'                'soundAnnotTool'

'magicStampTool'               'saturationTool'            'eyedropperTool'

'patchSelection'               'penTool'                   'colorSamplerTool'

'redEyeTool'                   'freeformPenTool'           'rulerTool'

'paintbrushTool'               'addKnotTool'               'handTool'

'pencilTool'                   'deleteKnotTool'            'zoomTool'

'colorReplacementBrushTool'    'convertKnotTool'

*/

2 replies

JJMack
Community Expert
Community Expert
January 13, 2017

This may help

var ToolName       = "paintbrushTool";              // Brush Tool

var ToolPresetName = "JJMack soft oval red brush";  // The Photoshop Tool preset name that you created and saved into a set  

var ToolPresetSet  = "JJMackToolsPresetsSet";       // The SetName.tpl file need to be same folder as this Photoshop script.

Main(ToolName,ToolPresetName,ToolPresetSet);

function Main(Tool,Preset,Set) {

  try {SelectTool(Tool);}

  catch(e) { alert('Select Tool "' + Tool + '" failed'); return;}

  try {SelectToolPreset(ToolPresetName);}

  catch(e) {

     if (LoadToolPresetSet(ToolPresetSet)) {

        try {SelectToolPreset(ToolPresetName);}

        catch(e) {alert('Select Tool Preset "' + ToolPresetName + '" failed');}

     }

     else {alert("Was unable to load Tools Presets Set " + ToolPresetSet);}

  }

}

// =================================================== Helper functions ===================================================== //

function SelectTool(tool) {

    var desc = new ActionDescriptor();

        var ref = new ActionReference();

        ref.putClass( app.stringIDToTypeID(tool) );

    desc.putReference( app.charIDToTypeID('null'), ref );

    executeAction( app.charIDToTypeID('slct'), desc, DialogModes.NO );

};

function SelectToolPreset(PresetName) {

  var desc = new ActionDescriptor();

  var ref = new ActionReference();

  ref.putName( stringIDToTypeID( "toolPreset" ), PresetName );

  desc.putReference( charIDToTypeID( "null" ), ref );

  executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );

}

function LoadToolPresetSet(SetName) {

  returncode = true;

  var scriptLocation = String(findScript());

  var path = scriptLocation.substr(0, scriptLocation.lastIndexOf("/") + 1 ) ;

  var SetFile = new File(path + SetName + ".tpl");   // Requited to be in the script's folder

  if (!SetFile.exists) { returncode = false; }

  else {

  try {LoadToolsSet(SetFile);}

  catch(e) { returncode = false; }

  }

  return returncode ;

}

function LoadToolsSet(tplFile) {

  // ========load a set of Tools Presets=========================

  var desc = new ActionDescriptor();

  var ref = new ActionReference();

  ref.putProperty( charIDToTypeID( "Prpr" ), stringIDToTypeID( "toolPreset"  ));

  ref.putEnumerated( charIDToTypeID( "capp" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt"  ) );

  desc.putReference( charIDToTypeID( "null" ), ref );

  desc.putPath( charIDToTypeID( "T   " ), new File( tplFile ) );

  desc.putBoolean( charIDToTypeID( "Appe" ), true );

  executeAction( charIDToTypeID( "setd" ), desc, DialogModes.NO );

}

// Find the location where this script resides

function findScript() {

  var where = "";

  try { FORCEERROR = FORCERRROR;}

  catch(err) { where = File(err.fileName);}

  return where ;

}

JJMack
marior90336416
Inspiring
January 13, 2017

Thanks for the script JJMack, I'll try and see how it goes!

JJMack
Community Expert
Community Expert
January 13, 2017

Got, it I tried the script, replaced the variables but so far I only get the script to select one tool, instead of cycling through them. What I'm doing wrong?

Thanks


I'm not writing your script for you. I am just trying to help you understand what you need to do to select a preset and to load a preset if it is not loaded.  If you want to cycle through a list of presets you need to create an array of presets names  in the script.  And create an script option or external  list index  to notes where in the list you are.  So each time the script is run it can select the  next preset in the list and update the option or external index for the position in the preset array. You need to do that.

JJMack
JJMack
Community Expert
Community Expert
January 13, 2017

If you know the tool you want to cycle through it loaded presets you should be able to.  I qite sure I have seen a script posted here that retrieve tool loaded presets names  Try the search

https://forums.adobe.com/search.jspa?place=%2Fplaces%2F1383833&q=preset+list .

JJMack
marior90336416
Inspiring
January 13, 2017

Thanks JJMack, let's see if I got right what you mean. Let's say I have a set of smudge presets on the Tool presets. Let's say I have 3 types, Hard, medium, Soft. I can assign a hotkey, say, F6 to load a script that will cycle through them? Like, I select the Hard, press F6, the script load up and move to medium, F6 again, move to Soft. Press F6 again, go to Hard. Is it how it would work?

I haven't tested but I've found this thread

Re: Is it possible to cycle through brushes (tpls) using a script?

marior90336416
Inspiring
January 13, 2017

I tried the script on that post, put my brushes name there and got this message. Not the the line I've changed hehe.