Skip to content

forge-again v1.7.10

Choose a tag to compare

@logan71f100 logan71f100 released this 16 Aug 20:49
· 28 commits to main since this release

Restoring a session now puts back what you actually had, and saves only what you actually changed.

Fixes

  • Restore no longer overwrites itself. The UI-mode radio is not an ordinary setting: switching sd/xl/flux runs set_mode, which rewrites the checkpoint, the VAE/text-encoder list, GPU weights and the whole resolution/CFG/steps/sampler block — in a response that lands hundreds of milliseconds after the click returns. Restoring it in label order meant the mode went in, the saved checkpoint and resolution went in next, and then the preset's answer landed on top of both, finishing "successfully" with the wrong model loaded. The mode is now applied alone and first, is never replayed when the UI already matches it (a redundant switch costs a full model reload), and everything else waits for the checkpoint, VAE, GPU weights and resolution block to stop changing.
  • Values overwritten mid-restore are put back. Every write goes into a UI that answers asynchronously, so a checkpoint reload or a late refresh could still clobber a value set several tabs earlier. Restore now ends with a verify pass that re-reads everything it wrote and re-applies whatever drifted, quicksettings first and allowed to settle.
  • A saved session holds what you changed, not a copy of the page. Values were compared against ui-config.json as text, so the "1" a slider reports never matched the 1.0 it was built with — 160 of 216 surviving entries were untouched ControlNet, FreeU, PAG and LatentModifier sliders. Comparison is now numeric, with half a step of tolerance for sliders that quantize, plus rules for empty multiselects, for radios still on their first option, and for label matches whose type disagrees (the "Hires. fix" accordion toggle was matching a same-named dropdown).
  • Restore stops opening tabs you never configured. Value pruning alone cannot empty a tab like Checkpoint Merger, whose model dropdowns legitimately read back whatever is loaded, so opening it once kept it in the session — and every later restore re-opened it, which in Gradio 6 means rebuilding it. A tab is now kept only if something in it was actually changed. End to end on a real session: 413 entries across 5 tabs became 45 across the 3 that were used.
  • A restart no longer costs you your settings. When the connection watchdog reloads the page after the server comes back, the full session is restored automatically instead of the prompts alone.
  • The GPU Weights slider and the VRAM reserve stay in step. Switching modes moved the reserve without moving the slider that displays it, so the number on screen disagreed with the number in use.

Reliability

  • Debug instrumentation is off unless you ask for it. The client forensics added while chasing connection faults are now behind a setting, default off; with it off the logging endpoint does no work at all.
  • VRAM is sized correctly on AMD and Apple silicon. The reserve calculation reads AMD's sysfs mem_info_vram_total, and macOS reports torch.mps.recommended_max_memory() instead of claiming all system RAM as VRAM.
  • The session rules are covered by the test suite. A new static check asserts that a default is dropped, an unconfigured tab is dropped, and a value you actually changed is never dropped or altered — verified by mutation: disabling either pruning rule makes it fail.
  • Connection forensics record the two facts that were missing. Tab visibility changes are stamped on both edges, and every queue join records how long it took to leave the browser — which separates "the request sat in a throttled background tab" from "the submit was fine and delivery failed" without guesswork.
  • Session backups can't wander into git. last_session.json was ignored but the .prev rotation and .tmp written beside it were not, leaving a full copy of a session one git add . away from being published.

Upgrading

Pull and restart. JavaScript changes need a real server restart rather than a browser reload — the cache-buster is baked into the page at UI-creation time. No configuration or model changes are required. Existing last_session.json files are read as-is and shrink to just your changes on the next save; if you want the instrumentation from the forensics entry above, enable Log connection forensics for debugging in Settings.