Adobe Illustrator Integrations
GitHubOfficialFirst committed by jhaugaDistributed by GitHub
- Skill
- Tool integration
- Software development
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides comprehensive guidance for extending Adobe Illustrator. It covers the full lifecycle of integration development, from choosing the right delivery method—such as CEP extension panels, native C++ plug-ins, or external automation via MCP servers and OS scripts—to packaging and documentation. It emphasizes maintaining a clean separation between the user interface and the core ExtendScript logic to ensure future compatibility with emerging technologies like UXP.
What it does
- Guides the selection of the appropriate integration tier for Illustrator features.
- Provides patterns for building CEP extension panels and native C++ (.aip) plug-ins.
- Details methods for running Illustrator scripts from external environments like PowerShell, bash, or Python.
- Supports the design of MCP servers to enable AI-driven interaction with Illustrator.
- Outlines best practices for packaging, signing, and documenting Illustrator tools for distribution.
- Offers strategies for maintaining compatibility across different Illustrator versions and operating systems.
When to use it
- When you need to create a custom panel or tool for Adobe Illustrator.
- When automating Illustrator tasks from an external command-line tool or AI agent.
- When deciding between a script, a CEP extension, or a native C++ plug-in.
- When preparing documentation for an Illustrator tool or extension you intend to publish.
- When debugging communication between an external process and the Illustrator host application.
Advantages
- Promotes a modular architecture that simplifies future migration to UXP.
- Provides clear, version-aware guidance for managing the transition away from CEP.
- Standardizes the approach to external automation and parameter passing.
- Encourages safe development practices like working on document copies and avoiding hardcoded secrets.
Usage examples
- “How do I trigger an Illustrator script from a Python script on Windows?”
- The agent provides a code snippet using win32com.client to dispatch the Illustrator.Application and execute the script via DoJavaScriptFile.
- “What is the recommended folder structure for a new CEP extension?”
- The agent outlines the standard directory layout, including CSXS/manifest.xml, index.html, and the required jsx/host.jsx file.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/github/adobe-illustrator-integrations/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip adobe-illustrator-integrations.zip -d .agents/skills
Documentation by jhauga
Adobe Illustrator Integrations
Guidance for everything that sits around an Illustrator script: the panel a user clicks, the native plug-in that adds a tool, the command line or AI agent that starts Illustrator work from outside, and the documentation that ships with it. For the Illustrator DOM itself (documents, layers, paths, colors, exports), use the adobe-illustrator-scripting skill.
When to Use This Skill
Choosing how to deliver an Illustrator feature: a script, a CEP extension, a C++ plug-in, a UXP plugin, an MCP server, or an OS automation script
Building or fixing a CEP extension panel (HTML, JavaScript, and an ExtendScript host)
Building or fixing a C++ plug-in (
.aip) with the Illustrator SDKRunning
.jsxscripts from batch, PowerShell, bash, Python, or AppleScript, including passing parameters and reading resultsBuilding or reviewing an MCP server that lets an AI tool drive Illustrator
Working in Illustrator through a computer-use tool when no scripting route exists
Writing step-by-step instructions people follow by hand, or install and usage docs for an asset, script, extension, or plug-in someone will publish
Organizing the files of an Illustrator project (sources, linked assets, exports, docs) so automation can find them
Script, Extension, or Plug-in
Adobe's own terms:
A script is ExtendScript (
.jsx), AppleScript, or VBScript run against Illustrator's scripting object model. It has no persistent UI beyond ScriptUI dialogs.An extension is a CEP panel: an HTML and JavaScript UI hosted in Illustrator that calls ExtendScript through
CSInterface.evalScript.A plug-in is native code built with the Illustrator C++ SDK (
.aip). In apps that already run UXP (Photoshop, InDesign, Premiere Pro), "plugin" also means a UXP plugin; Illustrator UXP plugins are not public yet.
| Option | What it is | UI | Installs to | Ships as | Pick it when |
|---|---|---|---|---|---|
| Manual instructions | Steps a person follows | Illustrator's own | Nothing | A document | The task is rare, or needs judgment at every step |
| ExtendScript script | .jsx run in Illustrator | Optional ScriptUI dialog | Presets/<locale>/Scripts or anywhere (File > Scripts > Other Script) | .jsx file | One action, batch work, or a step another tool calls |
| CEP extension | HTML panel plus ExtendScript host | Dockable panel | CEP extensions folder | Signed .zxp | Users need a persistent panel with controls and previews |
| C++ plug-in | Native .aip from the Illustrator SDK | Tools, menus, notifiers, native dialogs | Plug-ins folder or the Additional Plug-ins Folder | .aip per OS and major version | You need a custom tool, live effects, speed, or events scripts cannot reach |
| UXP plugin | Modern JavaScript plugin model | Panels and dialogs | Through Creative Cloud | .ccx | Plan for it; Illustrator's public beta is due by Spring 2027 |
| MCP server | A process an AI tool calls, which runs scripts in Illustrator | The AI tool's chat | The AI tool's MCP config | A package or repo | An agent should create or inspect artwork through tools |
| OS automation | Batch, PowerShell, bash, or AppleScript that starts scripts | None | Anywhere | Script files | Illustrator work is one step of a larger pipeline |
Start with the lowest tier that meets the need. A script that works is the core of every higher tier: a CEP panel, an MCP tool, and an OS script all end up calling ExtendScript.
Extensibility Timeline
From Adobe's announcement "Investing in the future of Creative Cloud extensibility" (blog.developer.adobe.com, September 2026):
Illustrator UXP plugins: public beta by Spring 2027.
CEP in Illustrator, After Effects, and Media Encoder: the Adobe Marketplace stops accepting new CEP submissions in December 2028, and CEP is disabled by default from December 2028.
CEP leaves these apps from December 2029, with at least two years between each app's UXP public beta and CEP's removal from new versions.
ExtendScript is not affected by the transition.
So a CEP extension built today has a working life of a few years. Keep its logic in plain ExtendScript files the panel calls, which carry over to a UXP plugin or an MCP server unchanged.
Workflow
Scope: what the user does, which Illustrator versions and OSes it must run on, and who installs it.
Pick the tier from the table above.
Write the ExtendScript core first with the adobe-illustrator-scripting skill, as functions that take a plain settings object and return a result string, so any front end can call them.
Add the front end:
CEP panel: references/cep-extensions.md (folder layout, manifest,
CSInterface, debug mode, signing, install)C++ plug-in: references/cpp-plugins.md (SDK, build, PiPL, suites, notifiers, debugging)
Command line, MCP server, or computer use: references/automation-and-mcp.md (COM, AppleScript, parameters, results, MCP design, safety)
Test inside Illustrator on a copy of a real document: run every option, export a PNG of the result, and compare it with the expected output.
Package: a signed ZXP for CEP, a per-OS
.aipfor plug-ins, a versioned folder or package for scripts and servers.Document with references/publishing-docs.md: requirements, compatibility, install steps per OS, a walkthrough with screenshots, a GIF, troubleshooting, and a changelog.
Running a Script From Outside Illustrator
| Platform | Route | Notes |
|---|---|---|
| Windows | COM Illustrator.Application | DoJavaScriptFile(JavaScriptFile, [Arguments], [ExecutionMode]) and DoJavaScript(JavaScriptCode, [Arguments], [ExecutionMode]); ExecutionMode 1 never shows the debugger |
| macOS | AppleScript do javascript | do javascript "$.evalFile(new File(arguments[0]))" with arguments {scriptPath}, with the path passed to osascript as an argument so it never enters script source; check the exact app name for your version |
| Both | VS Code ExtendScript Debugger | Adobe's extension for running and debugging .jsx against a running app |
| Windows (legacy) | ExtendScript Toolkit -run | 32-bit, does not run on macOS 10.15 or later; keep only for old pipelines |
Pass parameters through a sidecar key=value file (no JSON parser or eval needed in ES3) and have the script write its result to a file, because arguments handling differs between launchers. The patterns are in references/automation-and-mcp.md.
Instructions People Follow by Hand
When the deliverable is a set of steps rather than code (for a complex graphic, or for an asset someone downloads):
Name the Illustrator version the steps were checked on, and give menu paths exactly as they appear (
Object > Path > Offset Path).One action per step, with the panel and the value to set (
Stroke panel: Weight 2 pt, Align Stroke to Inside).Show the expected result after each group of steps, with a screenshot or a small PNG.
Mark the steps that differ on Windows and macOS (shortcuts, file dialogs, font paths).
Offer the scripted route next to the manual one when a script exists.
Guardrails
Work on copies of user documents; never overwrite an original without a backup.
Ask before writing into Adobe's install folders, the system CEP folder, or the registry.
Development mode (
PlayerDebugMode) belongs on development machines only. Ship signed ZXPs to users.Never commit signing certificates, certificate passwords, API keys, or tokens. Read secrets from environment variables.
Prefer scripting, COM, or AppleScript over clicking through the UI; use computer use only for what has no scripting route.
Never automate around sign-in, licensing, or account dialogs.
Fonts from Adobe Fonts cannot be bundled in a plug-in or extension; document them as a requirement instead.
Version-specific details (CEP version, SDK version, menu names) change; say which version you checked and point to Adobe's docs.
References
references/cep-extensions.md: CEP panels from folder layout to signed ZXP
references/cpp-plugins.md: C++ plug-ins with the Illustrator SDK
references/automation-and-mcp.md: command-line runs, MCP servers, and computer use
references/publishing-docs.md: install and usage docs for a published Illustrator tool
Adobe CEP Resources (CEP 12 cookbook,
CSInterface.js, ZXPSignCMD): Adobe-CEP/CEP-ResourcesAdobe CEP getting-started guides (packaging, signing, distribution): Adobe-CEP/Getting-Started-guides
UXP and CEP timeline: Investing in the future of Creative Cloud extensibility
Files
- ATTRIBUTION.mdAdded by AutoGineer889 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md9.6 KiB
- references/automation-and-mcp.md10.8 KiB
- references/cep-extensions.md10.5 KiB
- references/cpp-plugins.md4.9 KiB
- references/publishing-docs.md4.0 KiB
references/cep-extensions.md
CEP Extensions for Illustrator
A CEP extension is an HTML and JavaScript panel that runs inside Illustrator in an embedded Chromium (CEF) and calls ExtendScript in the host application. Illustrator 2026 (30.x) ships CEP 12.1, so the runtime is CSXS 12 and debug settings live under CSXS.12. Check the version your Illustrator ships with: the CEPHtmlEngine folder in the install has a versioned CEPHtmlEngine.exe on Windows.
CEP is on its way out (Marketplace stops new CEP submissions for Illustrator in December 2028, CEP is disabled by default from December 2028, and removed from December 2029). Keep the drawing logic in plain ExtendScript so it moves to UXP later.
Folder Layout
com.example.gridtool/
CSXS/
manifest.xml Extension, host, runtime, and panel definition
index.html Panel UI
css/panel.css
js/
CSInterface.js From Adobe-CEP/CEP-Resources/CEP_12.x (do not edit)
panel.js UI logic; calls the host through CSInterface
jsx/
host.jsx ExtendScript loaded into Illustrator (ScriptPath)
assets/ Icons and files the host script places
.debug Development only; remove before packagingGet CSInterface.js from the CEP_12.x folder of Adobe-CEP/CEP-Resources. CEPEngine_extensions.js is built into CEP and must not be bundled.
manifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<ExtensionManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
ExtensionBundleId="com.example.gridtool"
ExtensionBundleVersion="1.0.0"
Version="12.0">
<ExtensionList>
<Extension Id="com.example.gridtool.panel" Version="1.0.0"/>
</ExtensionList>
<ExecutionEnvironment>
<HostList>
<!-- Illustrator 2025 (29.x) through any later 2x/3x release; [ ] are inclusive -->
<Host Name="ILST" Version="[29.0,99.9]"/>
</HostList>
<LocaleList>
<Locale Code="All"/>
</LocaleList>
<RequiredRuntimeList>
<RequiredRuntime Name="CSXS" Version="12.0"/>
</RequiredRuntimeList>
</ExecutionEnvironment>
<DispatchInfoList>
<Extension Id="com.example.gridtool.panel">
<DispatchInfo>
<Resources>
<MainPath>./index.html</MainPath>
<ScriptPath>./jsx/host.jsx</ScriptPath>
</Resources>
<Lifecycle>
<AutoVisible>true</AutoVisible>
</Lifecycle>
<UI>
<Type>Panel</Type>
<Menu>Grid Tool</Menu>
<Geometry>
<Size><Height>520</Height><Width>320</Width></Size>
<MinSize><Height>360</Height><Width>260</Width></MinSize>
</Geometry>
</UI>
</DispatchInfo>
</Extension>
</DispatchInfoList>
</ExtensionManifest>Host Name="ILST"is Illustrator. A range in[]is inclusive;)makes the upper bound exclusive.Menuis the name under Window > Extensions.Typecan also beModalDialogorModelessfor dialog-style windows.Lower
RequiredRuntimeonly if older Illustrator versions must load the panel, and test on each.
Panel to Host Calls
The panel runs modern JavaScript in Chromium. The host runs ExtendScript, which is ES3: no let, const, arrow functions, template literals, or built-in JSON.
js/panel.js:
const cs = new CSInterface();
function drawGrid(settings) {
// JSON.stringify output is a valid ES3 object literal; escape U+2028 and U+2029,
// which are legal in JSON strings but not in ES3 string literals.
const literal = JSON.stringify(settings)
.replace(/\u2028/g, '\\u2028')
.replace(/\u2029/g, '\\u2029');
return new Promise((resolve) => {
cs.evalScript(`gridTool.draw(${literal})`, (result) => {
if (result === 'EvalScript error.') {
resolve({ ok: false, message: 'Host script error. Check jsx/host.jsx for ES3 syntax.' });
return;
}
resolve(parseHostResult(result));
});
});
}
function parseHostResult(text) {
try {
return JSON.parse(text);
} catch (err) {
return { ok: false, message: String(text) };
}
}jsx/host.jsx:
// ES3 only. Every public function returns a string the panel can JSON.parse.
var gridTool = (function () {
// JSON string literal: escapes backslash, quote, and every control character.
function quote(value) {
return '"' + String(value).replace(/[\\"\u0000-\u001f]/g, function (ch) {
if (ch === '\\' || ch === '"') { return '\\' + ch; }
return '\\u' + ('000' + ch.charCodeAt(0).toString(16)).slice(-4);
}) + '"';
}
function result(ok, message) {
return '{"ok":' + (ok ? 'true' : 'false') + ',"message":' + quote(message) + '}';
}
function toInt(value, min, max) {
if (typeof value !== 'number' && typeof value !== 'string') { return null; }
var n = Number(value);
if (!isFinite(n) || Math.floor(n) !== n || n < min || n > max) { return null; }
return n;
}
function draw(settings) {
try {
if (!settings) { return result(false, 'No settings received.'); }
var rows = toInt(settings.rows, 1, 20);
var cols = toInt(settings.cols, 1, 10);
if (rows === null || cols === null) { return result(false, 'Rows must be 1 to 20 and columns 1 to 10.'); }
var doc = app.documents.length ? app.activeDocument : app.documents.add();
var layer = doc.layers.add();
layer.name = 'Grid Tool';
// Drawing code goes here (see the adobe-illustrator-scripting skill).
return result(true, 'Drew ' + rows + ' x ' + cols + '.');
} catch (e) {
return result(false, 'Line ' + e.line + ': ' + e.message);
}
}
return { draw: draw };
}());Rules that prevent most panel bugs:
Validate in the panel for fast feedback and again in the host, which must never throw past
evalScript.Return strings from the host. Objects come back as
[object Object].EvalScript error.means the host script failed to compile or threw; test the.jsxon its own first.Paths to files bundled with the extension: get the extension folder in the panel with
cs.getSystemPath(SystemPath.EXTENSION)and pass it to the host.
Development Mode
Unsigned extensions load only when PlayerDebugMode is set for the CSXS version the app uses.
Windows (per user, string value):
reg add "HKCU\Software\Adobe\CSXS.12" /v PlayerDebugMode /t REG_SZ /d 1 /fmacOS:
defaults write com.adobe.CSXS.12 PlayerDebugMode 1Restart Illustrator afterwards (on macOS, log out and back in if the setting does not take). Set it on development machines only, and remove it with reg delete "HKCU\Software\Adobe\CSXS.12" /v PlayerDebugMode /f or defaults delete com.adobe.CSXS.12 PlayerDebugMode.
Install Folders
| Scope | Windows | macOS |
|---|---|---|
| Current user | C:\Users\<user>\AppData\Roaming\Adobe\CEP\extensions\ | ~/Library/Application Support/Adobe/CEP/extensions/ |
| All users | C:\Program Files\Common Files\Adobe\CEP\extensions\ (also C:\Program Files (x86)\Common Files\Adobe\CEP\extensions\) | /Library/Application Support/Adobe/CEP/extensions/ |
During development, copy or link the extension folder into the per-user folder. Writing to the all-users folders needs administrator rights.
Debugging
Add .debug at the extension root:
<?xml version="1.0" encoding="UTF-8"?>
<ExtensionList>
<Extension Id="com.example.gridtool.panel">
<HostList>
<Host Name="ILST" Port="8088"/>
</HostList>
</Extension>
</ExtensionList>Open the panel, then browse to http://localhost:8088 in a Chromium browser for DevTools. Ports must be between 1024 and 65534 and unique per extension. Debug the host .jsx separately with the VS Code ExtendScript Debugger.
Packaging and Signing
Get ZXPSignCmd from the ZXPSignCMD folder of Adobe-CEP/CEP-Resources.
# Self-signed certificate for testing (keep the .p12 and its password out of the repo)
ZXPSignCmd -selfSignedCert US CA "Acme Corp" "Acme Grid Tool" "$CERT_PASSWORD" acme-cert.p12
# Sign with a timestamp so the signature outlives the certificate
ZXPSignCmd -sign com.example.gridtool gridtool-1.0.0.zxp acme-cert.p12 "$CERT_PASSWORD" -tsa http://time.certum.pl/
# Check the package
ZXPSignCmd -verify gridtool-1.0.0.zxp -certinfoBefore signing: remove .debug, node_modules you do not need, .DS_Store files, and symlinks (replace them with real files). Adobe's November 2024 known issue: sign the ZXP on the OS it is meant for (macOS ZXPs on macOS, Windows ZXPs on Windows).
Installing a ZXP
Adobe's Unified Plugin Installer Agent (UPIA) ships with the Creative Cloud desktop app.
Windows:
"C:\Program Files\Common Files\Adobe\Adobe Desktop Common\RemoteComponents\UPI\UnifiedPluginInstallerAgent\UnifiedPluginInstallerAgent.exe" /install "C:\Users\<user>\Downloads\gridtool-1.0.0.zxp"
"...\UnifiedPluginInstallerAgent.exe" /list all
"...\UnifiedPluginInstallerAgent.exe" /remove com.example.gridtoolmacOS: the agent lives under /Library/Application Support/Adobe/Adobe Desktop Common/RemoteComponents/UPI/UnifiedPluginInstallerAgent/. Run its binary with /help first to see the option syntax for your version.
Extension Manager CC and ExManCmd are end of life; use UPIA or the Adobe Marketplace instead.
Distribution
Adobe Marketplace (Adobe Exchange) through the Developer Distribution portal: Developer Distribution guides
Direct download of the signed ZXP, with UPIA install steps in the docs (see publishing-docs.md)
Common Problems
| Symptom | Likely cause | Fix |
|---|---|---|
| Panel missing from Window > Extensions | Host range excludes this Illustrator version, or the folder is not in an extensions folder | Widen Host Version, check the folder path and ExtensionBundleId (in Photoshop, CEP panels are under Window > Extensions (Legacy)) |
| Panel is blank or will not load | Unsigned and PlayerDebugMode not set for this CSXS version | Set it under the right CSXS.<n> key, or sign the ZXP |
EvalScript error. | Host .jsx syntax error (often ES5+ syntax) or an uncaught throw | Run host.jsx alone, keep it ES3, wrap entry points in try |
Host returns undefined | Function name wrong, or ScriptPath not loaded | Check ScriptPath, call $.evalFile on load as a fallback |
| ZXP installs but panel is blank | Signature problem (symlinks, signed on the other OS) | Re-sign on the target OS without symlinks |
Requirements and compatibility
Written for: GitHub Copilot
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs an API key
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- First committed by
jhauga
- Publisher
- GitHub (Official)
- Distributed by
- GitHub
- Source
- github/awesome-copilot · skills/adobe-illustrator-integrations · commit 797337f
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- jhauga
AutoGineer is not affiliated with or endorsed by jhauga or GitHub.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download adobe-illustrator-integrations.zip