Restoring a session no longer hands the model a blank image, and the AI assistant edits the prompt you are actually looking at.
Fixes
- Restore could make a generation come back solid white or solid black. The session was capturing the canvas transport binds — the hidden textareas that carry whole images between the inpaint canvas and the server. Their contents point at one particular upload, so restoring a stale marker was not a no-op: it is not a loadable URL, the canvas's image never loads, and an empty frame is uploaded instead. Server-side that flattens to the img2img background colour, white by default, so the model was handed a blank init image and returned white outside the mask and black inside it. Decoding a saved grid settles it — the final image is exactly 255 minus the mask everywhere, and the masked edge is smooth in pixel space rather than blocky at the latent grid. It only bit sometimes because a 100 ms poller watches those textareas for outside changes, and the verify pass writes the marker a second time. They are no longer captured, no longer applied, and are stripped from stored sessions.
- Restore could silently switch a feature on. A linked input accordion ties its open state to its enable checkbox, so opening one enables that script server-side. The safe expand helper is attached late and gradio 6 mounts accordions later still, so an unlucky restore fell through to a plain click — enabling the Refiner with a foreign checkpoint and swapping the UNet partway through sampling. If it cannot be expanded safely it now stays shut: a value we fail to restore is recoverable, a feature we silently enable is not.
- The assistant typed your prompt into Replacer. Control lookup fell back to any label containing the requested text, in page order, so a bare "prompt" matched Replacer's, SUPIR's and the detection prompt equally. A bare prompt request now resolves to the tab's own box by its stable element id.
- A prompt edit did not count as a prompt edit. The follow-through check required the label "positive prompt", but the control is called "Prompt" — which is what the assistant correctly used. Every genuine edit was scored as "described a change but did not make one", nudged, and restarted before it could generate: five turns, five rewrites, no generation between any of them.
- A rewritten prompt could silently unload a LoRA. Tags present before an edit and missing after it are now carried over. Dropping one changes the output completely, and a rewrite is prose work, not a decision to unload a model.
- Inpaint area went missing from saved sessions. An unlabelled radio is captured under its first option's text, and the rule treating that as "still on its default" is wrong wherever a control's default is not its first option — as img2img's Inpaint area is. That silently lost a real setting.
- Replacer's quick-add LoRA chips ignored the mode you were in. The list and its heading were read once, when the server built its UI, so a server started in xl offered xl LoRAs for the rest of its life however often you switched. Every mode's chips now carry their own tag and the browser shows those matching the live mode radio.
Features
- The assistant can see your inpaint selection. It reads the mask straight off the canvas: no settings to enable, nothing extra added to the gallery, and it works before you generate, so a bad selection is catchable without spending a run. It is also told each turn whether it has actually looked, and forbidden from claiming otherwise — it had been asserting "the mask appears to cover the area correctly" without ever having fetched one.
- Restore says what it could not put back. Unmatched values previously went only to the browser console, so a setting that failed to apply looked identical to one that was never saved.
Reliability
- A generation no longer starts while the LLM still holds the VRAM. The assistant asks it to hibernate and used to trust the acknowledgement, but llama.cpp will not hibernate mid-completion, so a long reply kept the memory for tens of seconds while a run began on a card that was already full. It now waits for the real state and kills the LLM if it will not park — a run stalled at 0% recovered the instant it was killed, and another had died mid-sampling with weights split across CPU and GPU under the same pressure.
- The saved session cannot claim "nothing was edited" before it has read the stored one, which would otherwise strip every other tab from the file.
Upgrading
Pull and restart. JavaScript and Python changes both need a real server restart rather than a browser reload. No configuration or model changes are required.
Two things stated plainly rather than left implied. The VAE decode work in v1.7.12 shipped a measurement, not a fix — three plausible causes were each tested against real numbers and all three were wrong. And the intermittent sampling stall remains unattributed; the console log added in v1.7.12 is what will settle it.