Commit Graph

91 Commits

Author SHA1 Message Date
CalamitousFelicitousness abfb5ac3ed feat(offload): on-demand vae under group offload
Vae-class components never take group hooks, so group mode kept them
resident on the gpu; a MiniMax-class video vae holds about 10GB that
way while running only seconds per generation. Components above 1GB
now rest in system memory: the apply_forward_hook bridge on encode and
decode fires an on-demand hook that moves the whole module to the
device, so tiled calls find every weight already loaded, and the
processing seams return it to cpu once outputs are materialized. Small
vaes stay resident since the transfer would cost more than it frees.

- placement is decided per component by measured size and requires the
  entry bridge; components without it stay resident
- move_model no longer forces on-demand vaes to the gpu for
  non-txt2img tasks, and full_vae_encode onloads before binding the
  input, which otherwise lands on the resting device
- mode switches clear the stamp and hook in both directions
2026-08-10 22:10:42 +01:00
CalamitousFelicitousness 46c30a00f2 feat(offload): per-component group offload engine
Group offload is applied per component through one engine shared by
regular and modular pipelines. Each component carries a config
signature: re-application with unchanged settings is a no-op instead
of raising before the first forward or silently keeping a stale
config, and changed settings remove the hooks and reapply. Switching
offload modes cleans up the previous mode's hooks in both directions.

- text encoders always offload at leaf level without streams, so
  their weights are never held in pinned host memory
- the vae never takes group hooks and stays resident: the hooks are
  forward-scoped, while pipelines enter through encode/decode and
  tiled calls re-enter per tile
- new pin offload memory option: disabled pins one group at a time
  instead of holding the whole module in non-pageable memory, and
  modules larger than half of system memory degrade automatically
- record stream is clamped to stream mode; the standalone
  combination is rejected upstream
2026-08-10 22:10:42 +01:00
CalamitousFelicitousness 248c5c6b7b feat(offload): match balanced offload lists by component name
Entries in the always and never lists are matched against the pipeline
component name (text_encoder, vae) as well as the model class name, so
one entry covers every architecture instead of needing a new class name
per model. Class entries keep working unchanged.

Never is still tested first, so a class entry there exempts a single
model from a component entry in the always list.
2026-08-10 22:10:42 +01:00
Vladimir Mandic 8b1f0d60b5 cleanup
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-10 11:13:28 +02:00
Vladimir Mandic 40fb45a546 improve handling of hf auth
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-10 10:55:25 +02:00
Vladimir Mandic de4b4b2c62 Merge pull request #5013 from awsr/gallery-fix
Remove incorrect gallery cleanup check
2026-08-10 08:47:12 +02:00
awsr d20ee5f26b Partial revert "Remove incorrect gallery cleanup check"
This partially reverts commit 8a66206023.
2026-08-09 16:09:25 -07:00
awsr 788d05db6c Revert "Rerun UI compile"
This reverts commit 6bc43ef20c.
2026-08-09 16:07:48 -07:00
Vladimir Mandic ca955ba1c2 update handlers for all authenticated workflows
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-09 22:47:17 +02:00
awsr 6bc43ef20c Rerun UI compile
No idea why the `.map` file is the only change, but I ran this after the rebase just in case.
2026-08-08 19:20:08 -07:00
awsr 8a66206023 Remove incorrect gallery cleanup check
This line resulted in the cleanup check never running if the current gallery has fewer than 1000 files, no matter how many excess entries there are in the cache.
2026-08-08 19:08:08 -07:00
Vladimir Mandic e10ec40e2c detailer enable vl models
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-08 16:24:00 +02:00
Vladimir Mandic 48cf0166f3 separate progress monitoring from live preview, live preview improvements, progress details
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-07 11:41:40 +02:00
Vladimir Mandic 0efd18aed5 skip sdnq openvino on non-cpu devices
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-05 20:10:51 +02:00
Vladimir Mandic 84905f77da improve server monitor and profiling
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-05 12:19:07 +02:00
Vladimir Mandic 514a68b1af add storage analyzer
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-02 11:22:12 +02:00
Vladimir Mandic 9dec85040e video: support for scripts/extensions
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-28 10:43:58 +02:00
Vladimir Mandic 66f90eb31e fix stuck live preview
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-22 21:08:56 +02:00
Vladimir Mandic 203ed183f2 lint
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-22 10:01:19 +02:00
Vladimir Mandic f4ee2c22c1 process button busy tracking
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-22 09:39:55 +02:00
Vladimir Mandic e503d88934 fix hotkeys
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-22 08:43:10 +02:00
Vladimir Mandic 1281cf8132 add process video
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-20 21:44:43 +02:00
Vladimir Mandic 903ed868ce networks multi-string search
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-20 09:34:13 +02:00
Vladimir Mandic 326fa643fc preview fix cache
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-20 09:05:07 +02:00
Vladimir Mandic c39a0ab488 clean and propagate tracebacks to ui
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-19 11:54:45 +02:00
CalamitousFelicitousness ff658a9358 fix(sdnq): align benchmark recommendations with matmul mode options
- fold the enable rows into the type rows: disabled, enabled or an explicit dtype
- pv keep-unquantized value is disabled; enabled means int8 pv
- add a text encoder row judged at te geometry
- update locale hints, drop the orphaned checkbox hint
2026-07-16 02:42:00 +01:00
Vladimir Mandic 7214ee9d42 triton/dynamo/inductor cache location and timer stats
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-15 15:06:40 +02:00
Vladimir Mandic f8cfc408e9 strict subpaths
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-13 21:48:42 +02:00
Vladimir Mandic 31da9cce6f gallery improve sort
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-13 20:35:05 +02:00
Vladimir Mandic fb71f63d77 fix gallery delete and save
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-13 19:08:59 +02:00
Vladimir Mandic 03473c1316 add loaded-loras api endpoint
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-12 13:10:35 +02:00
Vladimir Mandic d31a99edb0 ui format gallery
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-12 10:38:46 +02:00
Vladimir Mandic 22e132e6f0 rebuild ts
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-12 09:06:15 +02:00
CalamitousFelicitousness 00d1b7cff6 feat(ui): load unet into secondary slot from networks panel
The refine toggle doubles as the slot selector on the UNet/DiT page:
with it active a card click sets sd_unet_secondary instead of sd_unet,
mirroring base/refiner selection on the model page.
2026-07-12 03:50:48 +01:00
CalamitousFelicitousness 8c884c1e02 feat(model): secondary unet override slot and ideogram4 native loading
One UNET override cannot serve dual-transformer arches: ideogram4
conditional/unconditional and wan combined-stage experts need separate
files, and previously a single override landed on both experts.

- sd_unet_secondary option with per-slot tracking, consumed-state sync,
  arch-change reset, and incompatible-override fallback
- dropdown renders beside the primary, follows it into quicksettings,
  and is visible only for dual-transformer model types
- ideogram4 native single-file spec with a quant-aware fused-qkv
  converter; such converters run before comfy_quant detection via
  TransformerSpec.converter_handles_quant
- quicksettings render in configured order (sort keyed on the option
  object and always fell back to alphabetical)
- post-load dtype warning skips quantized transformers
2026-07-11 06:40:07 +01:00
Vladimir Mandic 8ce3313f9a improve log viewer
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-10 13:14:27 +02:00
Vladimir Mandic f4348bcb69 server info handle multi-gpu
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-09 11:18:04 +02:00
Vladimir Mandic 5cda0aeeb2 update reference displays
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-03 12:51:28 +02:00
Vladimir Mandic 17c8fe91e2 cleanup performance tags
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-02 19:14:04 +02:00
Vladimir Mandic 743d585faa audit: api response models
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-01 11:19:55 +02:00
Vladimir Mandic b3cf481c11 Merge pull request #4970 from vladmandic/feat/video-models
Feat/video models
2026-07-01 11:11:57 +02:00
Vladimir Mandic 7e21e17d08 Merge pull request #4971 from vladmandic/fix/resolution-ar-controls
fix(ui): debounce aspect-ratio linked width/height controls
2026-07-01 11:07:57 +02:00
CalamitousFelicitousness 10647c7b67 fix(video): apply Wan 2.2 MoE boundary at runtime in both image and video paths
Wan 2.2 A14B ships a per-model boundary_ratio (0.9 I2V, 0.875 T2V) that selects the high- or low-noise expert per step. The video and base-model image loaders both load the shipped value; the slider override is applied at generation time in set_pipeline_args, the one point both paths pass through before invoking the pipeline.

The denoising loop reads config.boundary_ratio each call, so tuning takes effect with no reload for video and base-model images alike. The slider defaults to -1, meaning use the model's value; 0 to 1 set the boundary explicitly. Single-expert stages stay load-time because they drop a transformer to free VRAM.
2026-06-30 23:00:26 +01:00
Vladimir Mandic 0e35079f06 attempt to load incomplete model
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-06-29 13:39:46 +02:00
CalamitousFelicitousness 17b7176e0d fix(ui): debounce aspect-ratio linked width/height controls
A single handler bound to the AR dropdown, width and height (in the
shared create_resolution_inputs and the resize section) wrote both
sliders on every change. With a ratio selected it locked one axis and
snapped it back on each edit, the two sliders looped, and the math ran
server-side one round-trip per keystroke, echoing a value back into the
field being typed in and yanking it.

Move aspect-ratio linking to the browser (ui/resolutionLock.ts): a
debounced edit writes only the partner axis, never the field being
edited, and commits immediately on blur, enter, or slider release. Keep
the kanvas notify on notifyKanvasResize wired to the resize sliders'
gradio .change, so it still fires on programmatic size updates (detect,
paste, swap) that client-side listeners miss. Drop the per-change AR
wiring, res_apply, and the resolutionChange* helpers.
2026-06-29 00:20:36 +01:00
CalamitousFelicitousness 7b42f25cf7 docs(i18n): clarify control size and resize Mode hints 2026-06-27 22:23:00 +01:00
Vladimir Mandic c0a4db64e2 ui
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-06-26 21:31:14 +02:00
Vladimir Mandic f44dd11b05 fixes
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-06-26 21:30:09 +02:00
Vladimir Mandic b61475574e preview check for output panel visibility
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-06-25 10:54:35 +02:00
Vladimir Mandic fd9de21da1 update locale
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-06-24 21:34:43 +02:00