Skip to content

forge-again v1.7.5

Choose a tag to compare

@logan71f100 logan71f100 released this 11 Aug 14:18
· 64 commits to main since this release

A quality-of-life and stability wave: a mask eraser, sensible inpaint defaults, the white-image root cause fixed, and a self-healing, fully-instrumented connection layer. Full test suite green (48 passed, including the GPU tier).

Features

  • Eraser brush for mask/sketch canvases. New toolbar toggle on the inpaint/sketch canvases: paint the mask, hit the eraser, and drawing removes mask instead of adding it. Reuses the canvas's existing erase branch under the hood, resets the drawing tool state correctly on toggle-off, and survives gradio 6's pane rebuilds. Undo/redo work on erase strokes.
  • Sensible per-mode inpaint defaults. Mode switch / launch now also seeds the img2img inpaint controls: masked content original, inpaint area Only masked (full-resolution crop — the big quality win for small-region fixes), padding 64 (sd) / 96 (xl, flux), and mask blur scaled to the mode's resolution.

Fixes

  • The white/blank inpaint output bug. Flux's VAE + text encoders could leak into sd/xl mode: a stale VAE-dropdown event replayed after an in-place mode switch re-wrote the flux modules over the switch's correct list, and flux's 16-channel VAE then loaded into the SD/XL model — white or uniform-gray decodes at best, a hard size mismatch for IntegratedAutoencoderKL at worst. modules_change now drops flux-only modules outside flux mode and refuses a stale empty-clear inside flux mode.
  • "Resize by" said "no image selected" on the Inpaint tab. The source-resolution helper matched sub-tab panes by inline style; a never-visited pane (no inline style at all) shadowed the real image with its empty placeholder canvas. Visibility now comes from offsetParent, and ≤1px placeholders are skipped.
  • Replacer: "Distilled CFG Scale (Flux only)" now hides outside flux mode, live — its visibility used to be decided once at page build, so it stuck around after an in-place switch to sd/xl.
  • Replacer: quick-add LoRA chips single-fire. On a long-lived page one click could append every LoRA tag at once (gradio 6 re-binding per-button event deps across remounts). The chips are now plain HTML with one delegated listener — structurally single-fire.
  • XL/SD generations stay warm. The adaptive VRAM reserve's real-CFG doubling (added for Chroma) double-counted on xl/sd, whose constants were already sized for CFG>1 — XL at 1024×1024 reserved ~3.7 GB and evicted weights that fit fine, paying a model reload on every run. Doubling is now flux-only.

Reliability

  • Orphaned generations self-heal. If gradio's completion stream dies mid-job, the server finishes but the page shows "generating" forever. /internal/ping now reports real server busyness; when the UI disagrees with an idle server for ~16 s, the watchdog resets the generate controls in place (no reload) and points at the output folder.
  • Never-started queue tasks are reaped. A queue join whose session died before starting used to be lost silently and wedged the busy signal permanently; pending entries that never start are now dropped after 10 minutes.
  • Connection forensics. The page now logs the full queue-event stream (decoded), gallery image-load failures (with an HTTP probe of the failing URL), and a snapshot of the img2img source at every Generate click — all shipped server-side to a rotating client-debug.log, so any "the image never showed up" report is diagnosable from the machine without browser console spelunking.

Upgrading

Pull and restart. No config or model changes needed — the new inpaint defaults apply on your next mode switch or launch.