diff --git a/docs/beta-gate.md b/docs/beta-gate.md
index c574598..e3ddc73 100644
--- a/docs/beta-gate.md
+++ b/docs/beta-gate.md
@@ -18,7 +18,7 @@ the same change.
| G1 | **Runs on a current ComfyUI.** Every runnable preset's nodes and inputs match a recorded `/object_info` from the newest ComfyUI release, and a test fails when they drift. | Roadmap U2: a snapshot in the repo, a test of every preset's `requiredNodes` against it, and a script that diffs a live ComfyUI against the snapshot. Its output against a current ComfyUI is pasted in the PR. | **Done in v0.41.** `tests/fixtures/comfyui-object-info.json` is recorded from ComfyUI 0.44.0 (80 node classes) by `npm run object-info`, and `tests/comfy/objectInfoSnapshot.test.ts` checks every node, input, nested input and fixed choice of all 39 presets against it. All match. Running Workflow Health against 0.44 found a real fault: it read only required inputs and marked 13 working presets "Missing ComfyUI node"; fixed, it now reports 28 ready, 10 experimental and 1 model in the wrong folder on the test machine. `npm run object-info -- --check` against a fresh Comfy Desktop 0.38.1 lists only the custom node packs it has not installed. |
| G2 | **Finds Comfy Desktop.** The port scan includes Comfy Desktop's default port. | A test on `COMFY_PORT_CANDIDATES`, plus Settings › Find ComfyUI Active Port against a ComfyUI started on that port. | **Done in v0.41.** 8000 is scanned second, right after 8188, with a test. Not yet run against a real Comfy Desktop: on the test machine a ComfyUI on 8188 always answers first. A clean-install tester (G6) using Comfy Desktop checks it for real. |
| G3 | **Says so when there is no GPU.** When ComfyUI reports only a CPU device, the panel says which tools will be too slow to use, rather than failing or hanging. | A unit test with a CPU-only `/system_stats` fixture, plus one run against ComfyUI started with `--cpu`. | **Done in v0.41.** Check ComfyUI says "ComfyUI is online, but on CPU only." with the reason underneath, and Detect Hardware reports "Processor only, no graphics card", VRAM none, tier No GPU. A CPU device no longer counts its system RAM as VRAM. Checked in Photoshop 2025 on 2026-11-04 against a real Comfy Desktop instance started with `--cpu` (ComfyUI 0.38.1, port 8189), and against a GPU ComfyUI 0.44.0 on 8188, which still reports normally. |
-| G4 | **Passes the full smoke checklist on the release build.** All blocks of [the UXP smoke checklist](uxp-smoke-checklist.md) on the build that will be tagged, with a row in its Results table. | The Results table. | **Passed on 2026-11-05 on main at fd679fc** (footer 0.40.0, ComfyUI 0.44.0, Photoshop 2025): blocks 0 to 5, every step, with five findings recorded in the Results table. Run again on the exact build that is tagged if code changes before then. The first finding (Live Painting fails while Text to Image is on Klein, the default since v0.39) hits every new user, so fix it before the beta. |
+| G4 | **Passes the full smoke checklist on the release build.** All blocks of [the UXP smoke checklist](uxp-smoke-checklist.md) on the build that will be tagged, with a row in its Results table. | The Results table. | **Passed on 2026-11-05 on main at fd679fc** (footer 0.40.0, ComfyUI 0.44.0, Photoshop 2025): blocks 0 to 5, every step, with five findings recorded in the Results table. Run again on the exact build that is tagged if code changes before then. The first finding (Live Painting fails while Text to Image is on Klein, the default since v0.39) hits every new user, so fix it before the beta. Fixed in v0.41: Live Painting now picks an SD 1.5 checkpoint itself and leaves Text to Image alone. |
| G5 | **Works on Photoshop 2024.** Someone other than the author runs blocks 0 to 2 of the smoke checklist on Photoshop 2024 with the beta candidate. | Their report, linked here. | **Open.** One tester confirmed the panel works on Photoshop 2024 with v0.37.1 ([issue 127](https://github.com/MehranMarxian/OpenLayer/issues/127)). Nothing newer has been run on 2024. |
| G6 | **A first image on a clean install.** From an empty ComfyUI to a first layer by following [Getting started](getting-started.md), on a machine that is not the author's. | The tester's step count and any place they got stuck, linked here. | **Open.** v0.39 timed it at seven clicks on the author's machine only. |
diff --git a/src/ui/App.ts b/src/ui/App.ts
index d8e73f4..24e2607 100644
--- a/src/ui/App.ts
+++ b/src/ui/App.ts
@@ -302,6 +302,8 @@ import {
} from "./historyMetadata";
import {
getLivePaintingStateBadgeLabel,
+ chooseLivePaintingCheckpoint,
+ type LivePaintingCheckpointChoice,
LivePaintingSessionV2,
type LivePaintingState
} from "./tools/livePainting";
@@ -7845,10 +7847,26 @@ export function renderApp(rootElement: HTMLElement) {
return;
}
- const checkpointName = readSelectValue(elements.checkpoint);
+ // The live graph is SD 1.5 only, so the Text to Image model is used only
+ // when it is an SD checkpoint; see chooseLivePaintingCheckpoint.
+ setLiveStatus("Finding an SD 1.5 checkpoint for the live tier...");
+ let checkpointChoice: LivePaintingCheckpointChoice;
+
+ try {
+ checkpointChoice = chooseLivePaintingCheckpoint(
+ readSelectValue(elements.checkpoint),
+ withoutSegmentationModels(await new ComfyClient(elements.serverUrl.value).getCheckpointNames()),
+ RECOMMENDED_SKETCH_CHECKPOINT
+ );
+ } catch (caughtError) {
+ setLiveStatus(getErrorMessage(caughtError));
+ return;
+ }
+
+ const checkpointName = checkpointChoice.checkpointName;
if (!checkpointName) {
- setLiveStatus("Choose a checkpoint on the Text to Image screen first.");
+ setLiveStatus(checkpointChoice.message);
return;
}
@@ -7892,6 +7910,11 @@ export function renderApp(rootElement: HTMLElement) {
try {
await session.start();
+
+ if (checkpointChoice.substituted && livePaintingSession === session && session.isRunning()) {
+ setLiveStatus(checkpointChoice.message);
+ }
+
void session.checkRefineAvailability()
.then((gapMessage) => {
if (gapMessage && livePaintingSession === session && session.isRunning()) {
diff --git a/src/ui/appMarkup.ts b/src/ui/appMarkup.ts
index 08838ba..b264f4c 100644
--- a/src/ui/appMarkup.ts
+++ b/src/ui/appMarkup.ts
@@ -642,11 +642,11 @@ export function createAppMarkup() {
Two-tier session
- The live tier runs the model picked in the Model dropdown on the Text to Image screen,
- paired with your local SD 1.5 LCM LoRA. Refine uses Krea-2 Turbo.
- If no model is selected there yet, open Text to Image, choose a workflow and a model,
- then come back here. Once the session is running, paint in the document and the preview
- follows your strokes.
+ The live tier runs an SD 1.5 checkpoint with your local LCM LoRA: the Text to Image
+ model when that is SD 1.5, otherwise the first SD 1.5 checkpoint ComfyUI has. FLUX.2
+ Klein and the other large models are too slow to follow strokes live. Refine uses
+ Krea-2 Turbo. Once the session is running, paint in the document and the preview follows
+ your strokes.