• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
3

Kyle's brushes - names are too long.

Contributor ,
Dec 20, 2017 Dec 20, 2017

Copy link to clipboard

Copied

Kyle's brushes are a nice addition, but not very usable thanks to the naming convention. Can we delete "Kyle's concept brushes..." at the start of every brush name to make it clearer what the brushes are in the brushes panel? Identifying the brushes via the thumbnail isn't practical.

 

Screengrab in the link.

 

Imgur: The magic of the Internet

TOPICS
Actions and scripting

Views

3.4K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Dec 20, 2017 Dec 20, 2017

In the brushes panel - right click on a brush then choose  rename brush

Dave

Votes

Translate

Translate
Adobe
Community Expert ,
Dec 20, 2017 Dec 20, 2017

Copy link to clipboard

Copied

In the brushes panel - right click on a brush then choose  rename brush

Dave

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 20, 2017 Dec 20, 2017

Copy link to clipboard

Copied

Thanks but that's not at all practical for every single brush, any way to batch process the renaming?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 20, 2017 Dec 20, 2017

Copy link to clipboard

Copied

No. It may be worth asking in the scripting forum if there is a way to script it.

Photoshop Scripting

Dave

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 28, 2017 Dec 28, 2017

Copy link to clipboard

Copied

This is so frustrating. Hundreds of new brushes, and they all have the same name visible: "Kyle's Drawing Box..."

Obviously no user testing. And the only solution is for me to spend a few hours renaming them all? Ridiculous.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Apr 17, 2018 Apr 17, 2018

Copy link to clipboard

Copied

Derrick Barth's Brushbox is now compatible with Photoshop CC and it allows you to elongate the spaces enough to read the entire name. It's also a good organizational tool!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 17, 2018 Apr 17, 2018

Copy link to clipboard

Copied

Dear Adobe / Kyle. Please consider!...

 

If you'd like to remove "Kyle's Paintbox - " part from each item all at once just use my script with changes to lines 7th & 10th:

 

    if ((reg = /Kyle's Paintbox - /).test(nme = lst.getString(i))) {

 

          dsc1.putString(sTT('to'), nme.replace(reg, ''))

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Jun 24, 2020 Jun 24, 2020

Copy link to clipboard

Copied

Sorry to resurrect this old topic, but I just downloaded the Kyle brush packs now in 2020 and am annoyed by the exact same thing as the original poster, and the officially marked "correct answer" would be tons of tedious work like people have already said. It's hundreds if not thousands of brushes.

 

The link to Kukurykus' script doesn't work anymore because of changes to the forum, (and even the numerical ID when spliced into a modern URL is some unrelated InDesign topic now, so the changes seem to run pretty deep). I would like to use the scripting solution, but couldn't find the script he was referring to (or equivalent) on the current community site.

 

An updated link (or an equivalent script) would be greatly appreciated, thanks!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jul 04, 2020 Jul 04, 2020

Copy link to clipboard

Copied

I found the original comment from Kukurykus: Dear Adobe / Kyle. Please consider!... and followed it this morning for PSCC2020. I had to change procedure slightly for mac (no need for the quotes in file name, had to open up document info to save as a jsx etc) but it's worked for me.
In case that link breaks, I'll reproduce his comment here:

 

"It's quite easy to rename them at once by scripting. You simply remove 'Kyle's Inkbox ' from each name running the script in up to few secs for thousand presets I guess. When you're decided for such move, move your topic to Photoshop Scripting

 

There're some examplary codes that alert you of clicked Brush Preset name, but may be modified or completely rewritten to loop over all presets and simply rename common part to empty space:

 

function sTT(v) {return stringIDToTypeID(v)}

(ref = new ActionReference()).putEnumerated(sTT('application'), sTT('ordinal'), sTT('target'))

lst = executeActionGet(ref).getList(sTT('presetManager')).getObjectValue(0).getList(sTT('name')) 

for (i = 0; i < lst.count; i++) {

     if ((reg = /Kyle's Inkbox - /).test(nme = lst.getString(i))) {

          (ref1 = new ActionReference()).putName(sTT('brush'), nme);

          (dsc1 = new ActionDescriptor()).putReference(sTT('null'), ref1)

          dsc1.putString(sTT('to'), 'Ink-' + nme.replace(reg, ''))

          executeAction(sTT('rename'), dsc1, DialogModes.NO)

     }

}

 

Copy it, open Notepad, save as "Inks.jsx" (note you have to replace *.txt in Fiie's name field to that exact name, including double quotes!) Put this script at end of: C:\Program Files\Adobe\Adobe Photoshop CC 2018\Presets\Scripts (it may be little different for you). Reopen Photoshop (if launched). Finally you should find your script in File / Scripts. â€‹After you click Inks, and open Brushes Panel, you will see changed names. "

Thank you to Kukurykus
 for solving this problem two years ago.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 17, 2020 Sep 17, 2020

Copy link to clipboard

Copied

A slightly more speedy version of @davescm solution:

  1. Select multiple brushes at once (Select first brush, Shift + select last brush to select all brushes in between),
  2. Right click and select Rename Brush,
  3. Place the cursor just before the useful part of the Brush Name (and after Kyle's name),
  4. Shift + Command + Delete to delete everything before the cursor.
  5. The next brush will pop up automatically
  6. Repeat.

Asinine to have to run a script, and out of my comfort zone, so I'm trying to be as efficient as possible.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Oct 02, 2020 Oct 02, 2020

Copy link to clipboard

Copied

Replying with the slightly modified solution I ended up using, thanks to Kukurykus and PhillipBrandon for the original script (see their replies for more detailed instructions on how to run the script)! With the Photoshop-specific commands figured out I could add some extra logic to do multiple passes in one script run, though this is an unoptimized brute force solution and Photoshop actually hung for a sec and errored out of the script, I suspect because I tried to do too many at once. I just commented out (with the // marks) and edited things in the dict definition to get everything done in smaller batches and multiple runs. Maybe half a dozen at a time is probably safe?

 

And again, this is just what I personally used, with the renaming logic to my own tastes. I don't have every single brush pack either so you'll need to edit the dict to add lines etc. for your own purposes. The syntax should be fairly self-explanatory though, it looks for the text before the colon and replaces it with what comes after. If you want to fully remove text without replacing, you can just use the empty string "" as the replacement.

function sTT(v) {return stringIDToTypeID(v)}

(ref = new ActionReference()).putEnumerated(sTT('application'), sTT('ordinal'), sTT('target'))

lst = executeActionGet(ref).getList(sTT('presetManager')).getObjectValue(0).getList(sTT('name'))

var dict = {
	"Kyle's Paintbox - ": "KPB ",
	"Kyle's Real Oils - ": "KRO ",
	"Kyle's Dry Media - ": "KDM ",
	"Kyle's Letterers - ": "KL ",
	"Kyle's Concept Brushes - ": "KCB ",
	"Kyle's AM - ": "KAM ",
	"Kyle's FX Box - ": "KFX ",
	"Kyle's Inkbox - ": "KIB ",
	"Kyle's Drawing Box - ": "KDB ",
	"Kyle's Manga - ": "KM ",
	"Kyle's Eraser - ": "KE "//,
	// "Kyle's ":"K ",
	// "KYLE ": "K "
} 

for (var key in dict) {

	for (i = 0; i < lst.count; i++) {

		 if ((reg = new RegExp(key)).test(nme = lst.getString(i))) {

			  (ref1 = new ActionReference()).putName(sTT('brush'), nme);

			  (dsc1 = new ActionDescriptor()).putReference(sTT('null'), ref1)

			  dsc1.putString(sTT('to'), dict[key] + nme.replace(reg, ''))

			  executeAction(sTT('rename'), dsc1, DialogModes.NO)
		 }
		 
	}
	
}

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Oct 02, 2020 Oct 02, 2020

Copy link to clipboard

Copied

(couldn't find a way to edit my post above)

Also, bear in mind this isn't a true arbitrary text replace, it assumes it's a prefix, i.e. that the text to replace is at the beginning of the brush name!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Dec 10, 2020 Dec 10, 2020

Copy link to clipboard

Copied

Hey! Thank you so much! I used this solution and edited it to rename all the remaining brushes in a second run (all but the ugly Rakes wich I did not download). Worked out perfectly. Here's the second script for you lazy boys. (I used the blank "" instead)

 

function sTT(v) {return stringIDToTypeID(v)}

(ref = new ActionReference()).putEnumerated(sTT('application'), sTT('ordinal'), sTT('target'))

lst = executeActionGet(ref).getList(sTT('presetManager')).getObjectValue(0).getList(sTT('name'))

var dict = {
"Ink- ": "",
"Kyle's Real Watercolor - ": "",
"Kyle's Spatter Brushes - ": "",
"Kyle's Runny Inkers - ": "",
"Kyle's Screentones - ": "",
"Kyle's Halftone - ": "",
"Kyle's Copier - ": "",
"Kyle's Tech Pens - ": "",
"Kyle Ultimate": "",
"KYLE Ultimate": "",
// "Kyle's ":"",
// "KYLE ": ""
}

for (var key in dict) {

for (i = 0; i < lst.count; i++) {

if ((reg = new RegExp(key)).test(nme = lst.getString(i))) {

(ref1 = new ActionReference()).putName(sTT('brush'), nme);

(dsc1 = new ActionDescriptor()).putReference(sTT('null'), ref1)

dsc1.putString(sTT('to'), dict[key] + nme.replace(reg, ''))

executeAction(sTT('rename'), dsc1, DialogModes.NO)
}

}

}

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 10, 2021 Mar 10, 2021

Copy link to clipboard

Copied

Thank you all. I installed the script, ran it and did not work on first run. Tried again with a blank document open, and voila, all perfect. You have saved me so much time!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Mar 21, 2023 Mar 21, 2023

Copy link to clipboard

Copied

THANK YOU. I updated your script with some new lines to include more of the brush varieties:

 

function sTT(v) {return stringIDToTypeID(v)}

(ref = new ActionReference()).putEnumerated(sTT('application'), sTT('ordinal'), sTT('target'))

lst = executeActionGet(ref).getList(sTT('presetManager')).getObjectValue(0).getList(sTT('name'))

var dict = {
"Ink- ": "",
"Kyle's Real Watercolor - ": "",
"Kyle's Spatter Brushes - ": "",
"Kyle's Runny Inkers - ": "",
"Kyle's Screentones - ": "",
"Kyle's Halftone - ": "",
"Kyle's Copier - ": "",
"Kyle's Concept Brushes - ": "",
"Kyle's Paintbox - ": "",
"Kyle's Real Oil - ": "",
"Kyle's - ": "",
"Kyle's Ultimate ": "",
"Kyle's Inkbox - ": "",
"Kyle's Tech Pens - ": "",
"Kyle Ultimate": "",
"KYLE Ultimate": "",
"Kyle's ": "",
"Kyle ": "",
"Kyle's FX Box - ": "",
// "Kyle's ":"",
// "KYLE ": ""
}

for (var key in dict) {

for (i = 0; i < lst.count; i++) {

if ((reg = new RegExp(key)).test(nme = lst.getString(i))) {

(ref1 = new ActionReference()).putName(sTT('brush'), nme);

(dsc1 = new ActionDescriptor()).putReference(sTT('null'), ref1)

dsc1.putString(sTT('to'), dict[key] + nme.replace(reg, ''))

executeAction(sTT('rename'), dsc1, DialogModes.NO)
}

}

}

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Jul 26, 2021 Jul 26, 2021

Copy link to clipboard

Copied

Thanks for this super helpful script!! I restructured your code a little to make it run more efficiently. Reversing the loops lets it run through all the names just once instead of once for each dictionary item. Moving the setting of the "nme" object out of the inner loop also helps by reducing the number of times it is created and destroyed. This version ran without any comments in the dictionary in an instant. 

 

function sTT(v) {return stringIDToTypeID(v)}

(ref = new ActionReference()).putEnumerated(sTT('application'), sTT('ordinal'), sTT('target'))

lst = executeActionGet(ref).getList(sTT('presetManager')).getObjectValue(0).getList(sTT('name'))

var dict = {
	"Kyle's Paintbox - ": "KPB ",
	"Kyle's Real Oils - ": "KRO ",
	"Kyle's Dry Media - ": "KDM ",
	"Kyle's Letterers - ": "KL ",
	"Kyle's Concept Brushes - ": "KCB ",
	"Kyle's AM - ": "KAM ",
	"Kyle's FX Box - ": "KFX ",
	"Kyle's Inkbox - ": "KIB ",
	"Kyle's Drawing Box - ": "KDB ",
	"Kyle's Manga - ": "KM ",
	"Kyle's Eraser - ": "KE "//,
	// "Kyle's ":"K ",
	// "KYLE ": "K "
}

// reverse loops
// step through name list, match each name against keys in inner loop

for (i = 0; i < lst.count; i++) {

//move creation of nme object out of inner loop
nme = lst.getString(i);

	for (var key in dict) {

		if ((reg = new RegExp(key)).test(nme)) {

			  (ref1 = new ActionReference()).putName(sTT('brush'), nme);

			  (dsc1 = new ActionDescriptor()).putReference(sTT('null'), ref1)

			  dsc1.putString(sTT('to'), dict[key] + nme.replace(reg, ''))

			  executeAction(sTT('rename'), dsc1, DialogModes.NO)
		 }
		 
	}
	
}

.

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Jul 27, 2021 Jul 27, 2021

Copy link to clipboard

Copied

You can make it to work even faster:

 

sTT = stringIDToTypeID, dctnr = {
	"Kyle's FX Box - ": "KFX ",
	"Kyle's Paintbox - ": "KPB ",
	"Kyle's Real Oils - ": "KRO ",
	"Kyle's Drawing Box - ": "KDB ",
	"Kyle's Concept Brushes - ": "KCB ",
	"Kyle's Dry Media - ": "KDM ",
	"Kyle's Letterers - ": "KL ",
	"Kyle's Inkbox - ": "KIB ",
	"Kyle's Eraser - ": "KE ",
	"Kyle's Manga - ": "KM ",
	"Kyle's AM - ": "KAM "
};

(ref = new ActionReference()).putEnumerated(sTT('application'), sTT('ordinal'), sTT('target'))
lst = (dsc = executeActionGet(ref)).getList(sTT('presetManager')).getObjectValue(0).getList(sTT('name'))

cntnt = dctnr.reflect.properties.splice(0, dctnr.__count__).join('|'); for(i = 0; i < lst.count;) {
	(chngd = (nme = lst.getString(i++)).replace(RegExp(cntnt), function(v){return dctnr[v]})) != nme &&
		((ref = new ActionReference()).putName(sTT('brush'), nme), dsc.putReference(sTT('null'), ref),
		dsc.putString(sTT('to'), chngd), executeAction(sTT('rename'), dsc))
}

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 28, 2021 Jul 28, 2021

Copy link to clipboard

Copied

A really realy easy way to solve this...   Turn off Brush Name in the options

image.png

I mean it's not like knowing this preset is called Max Headroom is going tell you what it is going to look like.

image.png

 

On the other hand, if you did know you wanted to find Kyles Concept Max Headroom, then just use the search bar.  That has to be better than trawling through 170 presets in just one group.

image.png

 

BTW  He has some killer presets in his Concept group.  Check out the fur and hair brushes as an example.  He really is a genius with Photoshop's brush engine.

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Oct 12, 2023 Oct 12, 2023

Copy link to clipboard

Copied

LATEST

This is still a problem 6 years after the original poster.  The links to the "easy" scripting solutions don't lead to any kind of explanations or tutorials.  I'm sure I could eventually track down a source to learn scripting and then implement it, but this should've been addressed already.  If anyone knows of any better resources, I'm all ears!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines