How to install ScriptingListener plug-in in photoshop 2024 on macOs (M1) Monterey

Hi,

I am on the way of understanding this dev plugin thing on adobe product.

I would like to Install the ScriptingListener plug-in ( I know there is this UXP world with batchPlay but I have to follow my path of learning ).

my limited knowledge comes from two resources :

and this one That I just got from another forum (I think it’s a better place here to share my issue)

Scripting with the Photoshop ScriptListener Plug-in - Photo Tips @ Earthbound Light.

I got it from here : https://community.adobe.com/t5/photoshop-ecosystem-discussions/scripting-listener/td-p/12370454

On my Mac here is the tree of the installed plugin :

.
└── Contents
├── Info.plist
├── MacOS
│ └── ScriptingListener
├── PkgInfo
└── Resources
├── Info.plist
└── ScriptingListener.rsrc

I copy the ScriptingListener file under MacOs ( I just guessed because the structure is completely different from previous resources ) in the plugins directory on my mac which is :
/Applications/Adobe Photoshop 2024/Plug-ins

I closed Photoshop, reopened it, did some dumb action and I was at that moment all excited at the idea of seeing logs on the desktop.

But… nooo logs.

Could you please tell me if I did something wrong?
Does this process still work in my ecosystem?

Thanks,
Kasra

ScriptingListener is not suitable for creating scripts for uxp, to create useful files for uxp there are various ways such as:
in the action palette you will find the item copy as javascript
or in the plugin menu you will find the development/record action commands item
finally there is an excellent plugin called alchemist developed by Jarda which is always present in the forum.

I’d agree with that - Alchemist is the new Scripting Listener.

1 Like

I Understand, but it was for didactic purpose . As I was following the tutorial I wanted the see the differences between the output code of ScriptingListener and what action.batchPlay takes as argument

The next video introduces actually Alchemist I will use it for sure.

I just met yesterday in Photoshop under Plugins > Developments

  • Record Action Commands
  • Record Action Notifications

I am analyzing the JSON output file it seems that all these things are related…

Thanks for your help.

The output of ScriptListener and Alchemist are completely different because they relate to different scripting frameworks.

ScriptListener is for CEP - Adobe’s previous framework - which used ExtendScript, a crusty old version of JavaScript. It outputs very hard to read Action Descriptor code. The last release of CEP was 2015.

Alchemist is for UXP - Adobe’s current framework, released in 2020/1? - which uses modern JavaScript and outputs batchPlay descriptors which are in JSON format.

They are not interchangeable. ScriptListener code doesn’t work in UXP and Alchemist code doesn’t work in CEP.

CEP can still be used, but UXP is the future of Adobe scripting and if you’re a newbie it is absolutely the learning route to take.
Dave Barranca’s video series that you linked is about UXP and is the best place to start learning.

If you want to understand how does it translate you can check GitHub - jardicc/am-to-uxp: Polyfill for support AM code in UXP

2 Likes

Jarda
Sorry if I ask
How do I convert this example you entered.

import { ActionDescriptor } from "../../src/ActionDescriptor"
import { stringIDToTypeID, executeAction, DialogModes } from '../../src';
import { ActionReference } from '../../src/ActionReference';

var idMk = stringIDToTypeID("make");
var desc21 = new ActionDescriptor();
	var idnull = stringIDToTypeID("_target");
	var ref2 = new ActionReference();
		var idLyr = stringIDToTypeID("layer");
		ref2.putClass(idLyr);
	desc21.putReference(idnull, ref2);
	var idLyrI = stringIDToTypeID("layerID");
desc21.putInteger(idLyrI, 3);
executeAction(idMk, desc21, DialogModes.NO);

desc21.toBatchPlay()

ok
once this is done where do I put the file, in which folder,
I save the file with the .js extension

import {ActionDescriptor } from "../../src/ActionDescriptor"
import { stringIDToTypeID, executeAction, DialogModes } from '../../src';
import { ActionReference } from '../../src/ActionReference';

var idMk = stringIDToTypeID("make");
var desc21 = new ActionDescriptor();
	var idnull = stringIDToTypeID("_target");
	var ref2 = new ActionReference();
		var idLyr = stringIDToTypeID("layer");
		ref2.putClass(idLyr);
	desc21.putReference(idnull, ref2);
	var idLyrI = stringIDToTypeID("layerID");
desc21.putInteger(idLyrI, 3);
console.log(desc21.toBatchPlay()); // converted

thanks for all these informations.

@Erin_Finnegan I will use Alchemist for sure

@Timothy_Bennett Your insight somewhat validated my initial understanding

@Jarda this will really help, thanks !

Here is my fundamental issue…
One of my clients wants an extension that evolves multiple adobe products : Photoshop and PremierePro for sure and maybe After Effect.

So I started to read adobe documentations and spend times in a lot of forums to smell a little the spirit.
And I understood that we are in a transition period in this particular “Extension” area.
CEP → UXP.
The problem is that this transition depends on the product.
Photoshop is much more mature in this transition than others.
Another (even bigger) problem is that it’s impossible to understand what is going on for others.

Indeed, I saw posts in PremierePro specific forum ( and same arguments applied for AE, AI…) of 1, 2, 3, even 4 years old that talks about UXP, and seriously If I have to resume the conclusion is :
It will come. It’s like the messiah it will come :smile:
Some members gave an ETA that has completely passed.

Project Requirements :

  1. panels on each application with user interaction.
  2. IO
  3. network requests
  4. and of course use the exposed API ( require(“photoshop”) for UXP in PS and I guess this ExtendScript-based thing for others ).

And by the way in my head “plugins” means => SDK for me.
Extension means UXP or CEP
Scritping is just a script in javascript or ExtendScript.

So here are my options:

  1. heterogeneous environment: UXP for PS and CEP for PPRO and AE
  2. CEP for all.
  3. Plugins (Dig to the SDK of each software… crazy )
  4. give up.

I just need an advice, a direction to follow (damn it am I waiting for the messiah either ? :smile: ).

And Just a few words about me, to give a bit of context. I am an experienced software engineer (I am 40… the picture is OOOLD lol) and I am fluent in C/C++ js/ts, and I know a bit of python.
I worked a lot with nodejs runtime and did client-side work with react/redux

Thanks in advance for any advice that could help.

PS: If you consider that I should expose my issue in another thread, please tell me

Jarda
When I start the script I get this error
Where am I doing wrong?

That repository is experimental. I do not provide support or guidance to that code. Advanced developers have to figure it out on their own. If anyone wants to fork it and continue feel free to do so.

That code is intended to be used along with Webpack and TypeScript. And you have to import files using valid paths.

1 Like

Jarda
OK! I got it
as always thanks for your help

There are some good quotes in here, thanks :joy:

I’ll answer what I can, but first on the terminology, here’s what we’re using internally on the Devex team at Adobe:

  • “plugin” with no hyphen = JavaScript based, uncompiled
  • “plug-in” with a hyphen = contains C++ binaries, compiled code
  • “extensions” = what the Premiere Pro team and community calls plugins :sweat_smile:

The terms change every few years to keep things spicy.

I am an experienced software engineer (I am 40… the picture is OOOLD lol)

This actually works to your advantage, because CEP works with ExtendScript, which is based on JavaScript from 1999. (UXP uses modern JavaScript.)

Photoshop is much more mature in this transition than others.
Another (even bigger) problem is that it’s impossible to understand what is going on for others.

You’ve summarized the problem really well so far, but you might be missing one really big problem with Photoshop: Photoshop has dropped CEP support for Apple Silicon Macs from M1 on up.

As you start to build for your client you must carefully consider if they are macOS users… or, inversely, if they use a lot of Windows ARM machines, because ARM devices aren’t well supported either.

Overall, I think you might build considering carefully how often the client updates both their Creative Cloud apps and their hardware.

I hate to be accused of being a false prophet, but say Premiere Pro goes public with UXP in early 2025 (not official, just an example). Does your client always update to the latest and greatest Premiere Pro right away? You might want to be ready to roll out a UXP update ASAP.

Here’s some CEP links I’ve collected over the past few years that might help you:

1 Like

If you still want to use the ScriptingListener plug-in, then you need to run it under Rosetta (it’s not compatible with Silicon). Get Info on Photoshop in the Finder and check Open using Rosetta.

(Unless they did create a Silicon-compatible version of the plug-in sometime recently, I didn’t check.)

I think in C++ SDK are plugin samples and one of them is almost like ScriptListener so I guess you could recompile it or make your own version. If you know C++ ...\SDK\pluginsdk\samplecode\automation\listener\common\Listener.cpp

@Erin_Finnegan : You hate to be accused of being a false prophet, AND I am waiting for the messiah… Let’s create an Organization! few of them got very successful :smile: :smile:
More seriously thanks for the internal information and for all the cep links !

@Leo I tried your suggestion but It did not work, I guess I have to compile on my machine to have the right binaries ( What Jarda suggested )

@Jarda Yep I agree.

In addition to Alchemist, the built in “Copy as Javascript” option in the actions dropdown menu is awesome too!

It copies a Photoshop action to javascript into the clipboard and you can paste into your code editor.

I like this method because you can create an action and tweak it until you get it performing exactly like you want. Then it super easy to export it as a usable script and also built the scripting into a plugin. I often will just grab the JSON object out of it to use in the plugin with my own system for executing the batchPlay.

You will need to enable Developer mode in the preferences to be able to see the Copy As Javascript option.

1 Like

Sounds like I could/should do Alchemist more like action panel… :smiley:

1 Like