Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
f70ba6b
Spike whether UXP renders sliders and which icon technique survives
MehranMarxian Aug 19, 2026
090672c
Spike round 2: work with UXP's native slider instead of against it
MehranMarxian Aug 19, 2026
40951e7
Extract CSS colour tokens so a theme is an override, not a fork
MehranMarxian Aug 19, 2026
2a440e0
Spike round 3: dark slider track, and record what rounds 1-2 settled
MehranMarxian Aug 19, 2026
dcd94cd
Add Artist-Friendly Dark as a token override, and retire the spike
MehranMarxian Aug 19, 2026
f00524e
Give Artist-Friendly Dark a slider face for the numeric parameters
MehranMarxian Aug 19, 2026
6a50077
Fix the artist sliders leaking into Compact, and the crash on theme s…
MehranMarxian Aug 21, 2026
c56a6fe
Stop fighting the compact rules for the slider face; move out of thei…
MehranMarxian Aug 21, 2026
3298ecc
Fix the progress bar glitch, and add a dice button for the seed fields
MehranMarxian Aug 21, 2026
a8e972f
Remember which "Advanced settings" screens the user left open
MehranMarxian Aug 21, 2026
209b9d9
Fix the seed dice, the jagged progress bar, and the touching prompt b…
MehranMarxian Aug 21, 2026
d6bee44
Fix seeds mangling to 214748.36, and label the roll button with text
MehranMarxian Aug 21, 2026
c41815e
Give FLUX.2 Klein an inpaint preset, and let crop-and-stitch do the work
MehranMarxian Aug 22, 2026
7efe703
Release v0.16.0-alpha: the paperwork
MehranMarxian Aug 22, 2026
779f83b
Run CI on Node 22 so the new jsdom UI tests can start
MehranMarxian Aug 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 22
cache: npm

- name: Install dependencies
Expand Down
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# Changelog

## v0.16.0-alpha - 2026-08-22

This release is mostly about the panel you look at while you work. There is a new dark theme built for artists rather than for matching Photoshop's chrome, the numeric parameters can be sliders now, the seed field has a dice button — and, underneath that button, a fix for a bug that has quietly been failing generations since long before the button existed. The one new generation capability is an inpaint preset for FLUX.2 Klein, so the fast Klein stack you may already have downloaded can now repaint a selection.

### Added

- **Artist-Friendly Dark, a third theme.** Offered in Settings alongside Compact Adobe Dark and Classic v0.4. It is a deeper, softer dark meant to sit behind artwork rather than blend into the Photoshop toolbar, and it is the theme that turns the numeric parameters into sliders. Compact Adobe Dark is deliberately untouched — every existing rule is byte-identical — so switching themes changes nothing about the panel you already know.

The groundwork under it: the stylesheet's colours were extracted into tokens first, so a theme is now a small set of token overrides rather than a fork of the whole panel. Artist-Friendly Dark is forty overrides and nothing else.
- **Sliders for the numeric parameters, in Artist-Friendly Dark.** Detail (steps), Guidance (CFG), Strength (denoise), sketch influence and Live Painting strength become sliders; Compact Adobe Dark keeps the number boxes it always had. It is one control with two faces — the number input is still the single source of truth, and the slider writes through to it — so nothing about how a value is read or validated changed, and the labels keep the technical word searchable next to the artist one.
- **A dice button on the seed field**, on all five tools that have one. Press it to roll a fresh random seed instead of typing one. The die is drawn from the panel's own primitives rather than an icon font, for the same reason the rest of the panel is: Photoshop's UXP renders almost no embedded icon markup.
- **The Advanced settings disclosure remembers whether you left it open.** Each tool's parameter grid sits behind an "Advanced settings" toggle, and the panel used to re-collapse every one of them on reopen. Your choice is now remembered per screen — Text to Image expanded and Outpaint collapsed, if that is how you work — and stored separately from the generation defaults, so Reset Settings does not silently re-collapse a screen you chose to keep open.
- **FLUX.2 Klein inpainting: `inpaint-flux2-klein`.** The first inpaint preset that is not built on a Flux Fill model. It reuses the FLUX.2 Klein 4B stack you already have for Text to Image and Image to Image — no extra model download — and repaints a selection at four steps. Its only new requirement is the same `comfyui-inpaint-cropandstitch` node pack the crop-and-stitch Flux Fill preset uses, and it works the same way: it crops to your mask plus context, samples that at 1024, and stitches the patch back with a blended seam.

It is marked experimental. It is strong at *adding* something to a small selection — the case where a naive masked sampler tends to repaint the surroundings and ignore you — and at replacing a large region. As with every inpaint preset, verify the result before relying on it.

### Fixed

- **The seed field mangled any wide seed to `214748.36`, and this failed generations.** A Photoshop UXP `<input type="number">` cannot hold a value above roughly 214748.36, so any seed wider than six digits — including every seed you loaded from session History, which are full-width server-side rolls — came back out as that one mangled string. Because a seed has to be a whole number, the run was then rejected outright with "Seed must be a whole number". This predates the dice button; `214748.36` is visible in the seed field in screenshots from before it existed. All five seed fields are now plain text fields that accept a numeric keypad, and hold the full range.
- **The progress bar glitched and rendered with a jagged edge.** Both are fixed, and a related round of interface tidying went with them — the prompt buttons no longer touch each other.

### Changed

- **The panel's colours now live in one set of tokens.** No visible change on its own; it is what made a real second theme possible without re-implementing the whole panel, and what any future theme will build on.

### Known limitations

- **`inpaint-flux2-klein` is experimental**, like the other inpaint presets. Its Krea2-Turbo sibling was evaluated and deliberately not shipped because it would not match the tone of the surrounding pixels reliably; Klein does. A Klein *outpaint* preset is still not shipped — the technique works in isolated tests but is not yet trusted through the panel.
- The slider faces and Artist-Friendly Dark are new; if a parameter reads differently between the slider and the number box, the number box is the truth. Please report it.

## v0.15.0-alpha - 2026-08-19

OpenLayer's tools can be driven by an AI assistant now, not only by clicking the panel. Ask Claude — or Codex, or anything else that speaks the Model Context Protocol — to generate an image, upscale a layer or caption a selection, and it drives the panel's own buttons in your open Photoshop document. It runs entirely on your machine, and it is off until you turn it on.
Expand Down
33 changes: 25 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,18 @@ OpenLayer is an open-source Adobe Photoshop UXP plugin that connects Photoshop t

## Alpha Release

`v0.15.0-alpha` is the current public alpha checkpoint. It is intended for testing the core local workflows in Photoshop UXP, not for production work yet.
`v0.16.0-alpha` is the current public alpha checkpoint. It is intended for testing the core local workflows in Photoshop UXP, not for production work yet.

New in `v0.15.0-alpha`:
New in `v0.16.0-alpha`:

- **Artist-Friendly Dark, a third theme.** A deeper, softer dark meant to sit behind artwork rather than match the Photoshop toolbar, offered in Settings alongside Compact Adobe Dark and Classic v0.4. It is the theme that turns the numeric parameters into sliders. Compact Adobe Dark is untouched — switching themes changes nothing about the panel you already know.
- **Sliders for the numeric parameters, in Artist-Friendly Dark.** Detail (steps), Guidance (CFG), Strength (denoise) and the others become sliders; Compact Adobe Dark keeps its number boxes. One control, two faces — the number input is still the source of truth and the slider writes through to it, so nothing about how a value is read or validated changed.
- **A dice button on the seed field**, on every tool that has one — roll a fresh random seed instead of typing one.
- **The Advanced settings disclosure remembers whether you left it open**, per screen, stored separately from the generation defaults so Reset Settings does not re-collapse a screen you chose to keep open.
- **FLUX.2 Klein inpainting: `inpaint-flux2-klein`.** The first inpaint preset that is not a Flux Fill model. It reuses the Klein 4B stack you already have for Text to Image — no extra model download — and repaints a selection at four steps, using the same `comfyui-inpaint-cropandstitch` node pack as the crop-and-stitch Flux Fill preset. Experimental; strongest at adding to a small selection or replacing a large region.
- **The seed field no longer mangles wide seeds to `214748.36`.** A UXP number input cannot hold a value that large, so any seed wider than six digits — including every seed loaded from History — came back mangled and then failed the run with "Seed must be a whole number". The seed fields are plain numeric text fields now and hold the full range.

Also new in `v0.15.0-alpha`:

- **An AI assistant can drive OpenLayer's tools.** Ask Claude — or Codex, or anything else that speaks the Model Context Protocol — to generate an image, upscale a layer or caption a selection, and it works the panel's own buttons in your open document. All seven tools are reachable. It runs entirely on your machine and is **off until you turn it on**, in Setup → Agent Bridge.

Expand Down Expand Up @@ -134,13 +143,21 @@ The earlier card-based dashboard established OpenLayer's honest available/experi

</details>

v0.15.0-alpha tester focus:
v0.16.0-alpha tester focus:

- **Confirm the panel footer reads `v0.16.0`.** It read the wrong version for the whole of v0.14.0-alpha, so this is worth a glance before anything else.
- **Switch to Artist-Friendly Dark** in Settings. The panel should restyle into the softer dark theme. Switch back to Compact Adobe Dark and confirm it looks exactly as it did before — nothing about it should have changed.
- **In Artist-Friendly Dark, confirm the numeric parameters are sliders.** Drag Detail (steps) or Strength (denoise), confirm the number updates, and generate — the value the slider shows must be the value used. In Compact Adobe Dark the same parameters must still be number boxes.
- **Press the dice button on a seed field.** Each press should roll a different seed, and the field must never show `214748.36`. Then **load an entry from session History and generate from it** — its seed must load and run, not fail with "Seed must be a whole number". That failure hit every History load before this release.
- **Expand Advanced settings on one tool, collapse it on another, and reopen the panel.** Each screen must remember what you left it as. Then Reset Settings — it must not re-collapse a screen you chose to keep open.
- **Open Inpaint, make a selection, switch to `inpaint-flux2-klein`, and generate.** Confirm the repaint blends into the surrounding image. It is strongest at *adding* something to a small selection — try that, and try replacing a larger region. It needs the `comfyui-inpaint-cropandstitch` node pack; if it is missing, Workflow Health should name it.

Also worth rechecking from `v0.15.0-alpha`:

- **Generate with `txt2img-flux2-klein`.** It should complete in under 15 seconds on a 4070 Ti at 1024x1024. Confirm the result is coherent and the prompt was followed.
- **Open Image to Image, switch to `img2img-flux2-klein`, capture a layer, and generate.** The result should follow your layer. Then switch to `edit-flux2-klein`, enter a change instruction ("make the sky orange"), and generate again — the edit should apply the instruction while keeping the rest of the scene.
- **Open Inpaint, make a selection, and switch to `inpaint-flux-fill-cropstitch`.** Generate and confirm the inpainted area blends into the surrounding image. Compare with `inpaint-flux-fill-basic` at the same selection — crop-and-stitch should produce sharper detail on small selections in large documents.
- **Generate an Image to Image result from a layer that is not at the canvas origin**, then import it. The imported layer must land where the source layer was, not centred on the canvas.
- **Confirm the panel footer reads `v0.15.0`.** It read the wrong version for the whole of v0.14.0-alpha, so this is worth a glance before anything else.
- **Confirm ordinary use is unaffected if you never turn the Agent Bridge on.** Text to Image gains one new button, "Ask the Agent for a Prompt" — clicking it with the bridge off should show a clear "not connected" status, not an error or a broken panel. Everything else should behave exactly as it did in v0.14. This is the most important check in the list: everything below is opt-in.
- Open **Setup** and find the **Agent Bridge** section at the bottom. With nothing running, press **Turn Agent Bridge On** — it must report that no bridge is listening and tell you how to start one, not hang or claim to be connected.
- Start the hub (`cd bridge && npm install && npm run hub`), then turn the toggle on. It should connect **without any AI client running at all** — the hub is independent of them.
Expand Down Expand Up @@ -196,7 +213,7 @@ Also worth rechecking from v0.9.0-alpha:
- Run `npm run setup-pack` and confirm it reports no source/API mismatches at all.
- Recheck the existing local generation, cancel, preview, import, History, and Workflow Health paths for regressions.

Known v0.15.0-alpha boundaries:
Known v0.16.0-alpha boundaries:

- **The Agent Bridge is not in the `.ccx`/`.zip` download.** A Photoshop plugin package cannot install or start a Node program, so it lives in the repository — see `bridge/README.md`. It is off by default in the panel either way. "Ask the Agent for a Prompt" additionally depends on your AI client supporting MCP *sampling*, which is optional in the protocol; a client that does not offer it gets a clear, instant refusal rather than the button working.
- **The Setup screen downloads missing models, but not custom nodes.** A missing model's row offers **Download** beside Copy Link, and OpenLayer fetches the file from the URL the registry pins — in resumable 8 MiB chunks, one model at a time, and never before a confirmation naming the size, the destination folder and the download host. What it will not do is unchanged and deliberate: licence-gated weights are never fetched anonymously, because an unauthenticated request saves an HTML sign-in page under the model's filename; a model already on disk in the wrong folder asks you to move it rather than downloading a second copy; and an entry published as a repository folder rather than a single file points you at the model page. Custom node packages keep Copy Link and go through ComfyUI-Manager. Full reasoning in the CHANGELOG.
Expand Down Expand Up @@ -371,10 +388,10 @@ npm run package
This creates a zip package from `dist` in the `packages` folder. For the current alpha, the expected package name is:

```text
packages/openlayer-v0.15.0-alpha.zip
packages/openlayer-v0.16.0-alpha.zip
```

`npm run package` also writes `packages/openlayer-v0.15.0-alpha.ccx` beside it, from the same files.
`npm run package` also writes `packages/openlayer-v0.16.0-alpha.ccx` beside it, from the same files.

## One-click install (verified 2026-08-03)

Expand Down Expand Up @@ -539,7 +556,7 @@ Inpaint output quality, mask interpretation, and Photoshop alignment are still b

## Pre-release Tester Checklist

Use this quick pass before reporting a v0.15.0-alpha test result:
Use this quick pass before reporting a v0.16.0-alpha test result:

1. Start ComfyUI on `http://127.0.0.1:8190`.
2. Build OpenLayer and load `dist/manifest.json` in Adobe UXP Developer Tool.
Expand Down
4 changes: 2 additions & 2 deletions bridge/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion bridge/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "openlayer-mcp-bridge",
"version": "0.15.0",
"version": "0.16.0",
"private": true,
"description": "Lets an MCP client drive the OpenLayer Photoshop panel's existing tools",
"license": "MIT",
Expand Down
12 changes: 6 additions & 6 deletions docs/become-a-tester.html
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<main id="top">
<section class="hero" aria-labelledby="hero-title">
<div class="hero-copy">
<p class="hero-badge"><span class="pulse-dot" aria-hidden="true"></span> Alpha v0.15.0 &middot; testers wanted</p>
<p class="hero-badge"><span class="pulse-dot" aria-hidden="true"></span> Alpha v0.16.0 &middot; testers wanted</p>
<h1 id="hero-title">Five minutes to<br><span class="grad">your first AI layer.</span></h1>
<p class="hero-lede">
OpenLayer is an alpha. It works on the author's machine, and that is exactly the problem —
Expand All @@ -53,7 +53,7 @@ <h1 id="hero-title">Five minutes to<br><span class="grad">your first AI layer.</
and an honest report of where those five minutes went wrong.
</p>
<div class="hero-actions">
<a class="button button-primary" href="https://github.com/MehranMarxian/OpenLayer/releases/tag/v0.15.0-alpha">Download v0.15.0-alpha</a>
<a class="button button-primary" href="https://github.com/MehranMarxian/OpenLayer/releases/tag/v0.16.0-alpha">Download v0.16.0-alpha</a>
<a class="button button-secondary" href="https://github.com/MehranMarxian/OpenLayer/issues/new?template=tester_report.yml">Send a tester report</a>
</div>
<ul class="signal-list" aria-label="What testing costs you">
Expand Down Expand Up @@ -93,8 +93,8 @@ <h2 id="path-title">Install, connect, generate, import, report.</h2>
<article class="setup-step">
<span>1</span>
<h3>Install OpenLayer</h3>
<p>Download <code>openlayer-v0.15.0-alpha.ccx</code> from the release and <strong>double-click it</strong>. Creative Cloud installs the panel — no developer tool, nothing to unzip. Creative Cloud will warn that the plugin is not verified by Adobe, because it is not from Adobe Exchange; that prompt is expected. Keep the file on the same drive as Photoshop. Then open Photoshop: <strong>Plugins &gt; OpenLayer</strong>.</p>
<p><strong>If double-clicking does nothing at all</strong> — a known Windows 11 quirk — the release also has <code>openlayer-v0.15.0-alpha.zip</code>, which loads through the <a href="https://developer.adobe.com/photoshop/uxp/2022/guides/devtool/">UXP Developer Tool</a>: <strong>Add Plugin</strong>, select the unzipped <code>manifest.json</code>, then <strong>Load</strong>. And if that is what you had to do, please say so in your report — the one-click path has only ever been verified on Windows 11 with Photoshop 2025.</p>
<p>Download <code>openlayer-v0.16.0-alpha.ccx</code> from the release and <strong>double-click it</strong>. Creative Cloud installs the panel — no developer tool, nothing to unzip. Creative Cloud will warn that the plugin is not verified by Adobe, because it is not from Adobe Exchange; that prompt is expected. Keep the file on the same drive as Photoshop. Then open Photoshop: <strong>Plugins &gt; OpenLayer</strong>.</p>
<p><strong>If double-clicking does nothing at all</strong> — a known Windows 11 quirk — the release also has <code>openlayer-v0.16.0-alpha.zip</code>, which loads through the <a href="https://developer.adobe.com/photoshop/uxp/2022/guides/devtool/">UXP Developer Tool</a>: <strong>Add Plugin</strong>, select the unzipped <code>manifest.json</code>, then <strong>Load</strong>. And if that is what you had to do, please say so in your report — the one-click path has only ever been verified on Windows 11 with Photoshop 2025.</p>
</article>
<article class="setup-step">
<span>2</span>
Expand Down Expand Up @@ -194,15 +194,15 @@ <h2 id="closing-title">Ready?</h2>
talk it through than file a report, the discussion board has a Setup Help category.
</p>
<div class="hero-actions">
<a class="button button-primary" href="https://github.com/MehranMarxian/OpenLayer/releases/tag/v0.15.0-alpha">Download v0.15.0-alpha</a>
<a class="button button-primary" href="https://github.com/MehranMarxian/OpenLayer/releases/tag/v0.16.0-alpha">Download v0.16.0-alpha</a>
<a class="button button-secondary" href="https://github.com/MehranMarxian/OpenLayer/discussions">Open discussions</a>
</div>
</div>
</section>
</main>

<footer class="site-footer">
<p>OpenLayer v0.15.0-alpha. Developed by Mehran Ahmadi, 2026.</p>
<p>OpenLayer v0.16.0-alpha. Developed by Mehran Ahmadi, 2026.</p>
<p>
<a href="./">Overview</a> &middot;
<a href="https://github.com/MehranMarxian/OpenLayer">GitHub</a>
Expand Down
Loading
Loading