Commit Graph

13198 Commits

Author SHA1 Message Date
Vladimir Mandic eaf06fbc74 all direct input images
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-30 09:30:11 +02:00
Vladimir Mandic 44a13f9b63 nano banana prototype multi-image
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-29 20:38:23 +02:00
Vladimir Mandic 304918baec monkey-patch multi-image
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-29 19:53:14 +02:00
Vladimir Mandic ebc875d224 reorg control type
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-29 11:20:22 +02:00
Vladimir Mandic d9d1d92791 remove control init video/batch/folder
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-29 08:36:10 +02:00
Vladimir Mandic 60143027a0 remove media input buttons
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-29 08:18:02 +02:00
Vladimir Mandic 68f1c73e1f remove process preview
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-29 07:59:43 +02:00
Vladimir Mandic 079776bda6 Merge branch 'master' into dev 2026-04-29 07:13:35 +02:00
Vladimir Mandic 91fc249e59 update readme
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-29 07:12:34 +02:00
CalamitousFelicitousness a028b56687 fix(lora): restore native weights when LoRA removed on diffusers-path models
Flux2/Klein loads LoRAs as native modules through the diffusers method
path. network_activate() was only called when new native modules existed,
so removing a LoRA from the prompt left backed-up weights unrestored.

Check applied_layers to detect previously active native modules and
trigger network_activate() for the restore path.
2026-04-29 02:00:33 +01:00
Vladimir Mandic d060d16af5 Merge pull request #4813 from vladmandic/dev
refresh master
2026-04-28 19:33:03 +02:00
Vladimir Mandic 6ddc4ff455 fix history
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-28 19:32:31 +02:00
Vladimir Mandic 29cd811441 Merge pull request #4812 from vladmandic/dev
refresh master
2026-04-28 16:51:30 +02:00
Vladimir Mandic 9cc9acce26 fix history select
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-28 16:29:36 +02:00
Vladimir Mandic 700682247e Merge pull request #4810 from vladmandic/master
refresh dev
2026-04-28 11:14:25 +02:00
Vladimir Mandic fb0ddd3a2d fix ts2utc
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-28 11:00:19 +02:00
Vladimir Mandic 4001ad55f6 Merge pull request #4807 from vladmandic/dev
merge dev
2026-04-28 09:04:02 +02:00
Vladimir Mandic ff5bdd1b62 update diffusers and extra lint
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-28 08:58:49 +02:00
Vladimir Mandic d862b15953 Merge pull request #4806 from awsr/callback-order-fix
Fix settings not being initialized for tabs
2026-04-28 08:50:05 +02:00
awsr 65c2129b8a Move functions to match new execution order 2026-04-27 17:15:05 -07:00
awsr 27ddbd60e4 Fix settings not being initialized for tabs 2026-04-27 15:02:41 -07:00
Vladimir Mandic bd7cfe1a57 Merge pull request #4804 from awsr/rocm-adv-update
ROCm Adv Mgr: Only autoload if config file exists
2026-04-27 20:23:02 +02:00
awsr 0cb7f426f9 Only autoload if config file exists. 2026-04-27 10:55:53 -07:00
Vladimir Mandic 58377216f1 update diffusers
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-27 07:57:12 +02:00
Vladimir Mandic a654ece3cb Merge pull request #4798 from vladmandic/feat/rife-upgrade
Feat/rife upgrade
2026-04-27 07:17:47 +02:00
Vladimir Mandic 0a02e005ce Merge pull request #4802 from awsr/path-typing
(typing) Update filename / path typing
2026-04-27 07:16:37 +02:00
awsr 3a13d6049d Update filename / path typing 2026-04-26 20:21:00 -07:00
CalamitousFelicitousness ba4436916d fix(control): prevent duplicate save_video and unmask video module shadow
When a video script (animatediff, text2video, image2video, stablevideodiffusion)
runs via Control tab, both the script's save and control_run's end-of-run save
fired. The latter crashed silently because the local `video` cv2 capture name at
control_run:584 shadowed the modules.video import, so the duplicate was hidden
and the gallery video link never propagated.

- alias import as video_module to bypass the shadow
- p.video_saved marker set by each script
- control_run skips its end-of-run save when the marker is set
2026-04-27 01:32:30 +01:00
CalamitousFelicitousness b48bf5236b fix(ltx): handle PIL list output from refine path in interpolation wiring
LTX refine pipe uses output_type='pil' so result.frames[0] returns a list, not a 5-D tensor. Convert via images_to_tensor before the helper sees it, mirroring what save_video already does for the same input.
2026-04-27 01:13:47 +01:00
Vladimir Mandic c85cf0dec3 fix monitor loop
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-26 10:02:00 +02:00
Vladimir Mandic 94915cdf31 update todo
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-26 10:00:11 +02:00
Vladimir Mandic 614c83fab5 update monitoring timers
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-26 09:29:55 +02:00
Vladimir Mandic afc6e1d41f update changelog
Co-authored-by: Copilot <copilot@github.com>
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-04-26 07:42:48 +02:00
Vladimir Mandic 40ac6fd981 Merge pull request #4796 from vladmandic/feat/autocomplete-upgrade
feat(autocomplete): additional features for autocomplete
2026-04-26 07:31:40 +02:00
CalamitousFelicitousness 7da3a15305 merge dev: video.py outdir fix 2026-04-26 03:14:48 +01:00
CalamitousFelicitousness 352c6fc7ca fix(video): resolve outdir_video against outdir_samples in PIL save path
Mirror of 0541843a8 for the legacy PIL/cv2 save_video. Relative
outdir_video was leaking files to cwd; route through resolve_output_path.
2026-04-26 03:13:04 +01:00
CalamitousFelicitousness 7d77b01c3d feat(video): wire scripts and control to video_interpolate field
Set p.video_interpolate at run() entry so process_images_inner picks up
the helper. Save calls keep their existing kwargs; the sentinel guard
skips re-interpolation when the helper already ran.

- animatediff, text2video, image2video, stablevideodiffusion route
  mp4_interpolate into p.video_interpolate
- modules/control/run.py routes the request video_interpolate arg
- xyz_grid intentionally untouched: its end-of-axis save_video stitches
  the cell slideshow, not per-cell videos; a future video_interpolate
  axis would set p.video_interpolate per cell via axis_options
2026-04-26 03:09:27 +01:00
CalamitousFelicitousness 6acde69467 feat(video): route video pipelines through interpolation helper
LTX, video_run, and framepack_worker bypass process_images_inner, so
they call apply_video_interpolation explicitly before save_video. Save
receives already-inflated frames; the sentinel guard skips its own pass.

- LTX and video_run scale mp4_fps by interpolation_factor(p) so duration
  is preserved instead of stretched (LTX is conditioned on source fps)
- FramePack pre-divides at gen time per get_latent_paddings, so save fps
  stays at mp4_fps; worker passes p=None so save call uses
  mp4_interpolate=0 to skip directly
- replaces the inline (mp4_interpolate+1) fps math at LTX with the
  helper-driven equivalent
2026-04-26 03:08:19 +01:00
CalamitousFelicitousness e42f1fd8fb feat(video): video_interpolate as execution-time stage
Promote RIFE interpolation from a save-time kwarg to a real stage of the
processing pipeline so per-frame work (detailer, color correction,
postprocess scripts) operates on source-rate frames and the inflated
stream becomes the saved output.

- new modules/processing_video.py with apply_video_interpolation,
  interpolation_factor, expand_infotexts; PIL/tensor/numpy dispatch
- video_interpolate, video_interpolate_scale, video_interpolated fields
  on StableDiffusionProcessingVideo
- process_images_inner runs the helper after the batch loop and inflates
  infotexts in lockstep
- save_video in modules/video.py and modules/video_models/video_save.py
  short-circuit re-interpolation when p.video_interpolated is set; the
  user-facing kwarg still flows into metadata
2026-04-26 03:08:07 +01:00
CalamitousFelicitousness 956a573a68 merge dev into feat/rife-upgrade
Brings in framepack torchvision.io.video monkey-patch fix and recent
postprocess/grading metadata work so further branch testing has parity
with dev.
2026-04-26 01:28:35 +01:00
CalamitousFelicitousness bf0f26cad5 feat(grading): record applied params in postprocess metadata
Color grading mutated pp.image but never wrote to pp.info, so the
chosen brightness/contrast/gamma/LUT/etc. were invisible in the
saved file's postprocessing/extras chunks and in the live Output
panel — unlike every other postprocessor (Upscale, Rembg, NudeNet,
PixelArt) which all stamp their settings.

Stamp every non-default GradingParams field as 'Grading <name>' so
the trail is consistent with the rest of the Process tab. LUT file
is recorded by basename rather than full path to keep the metadata
string compact.
2026-04-25 23:32:50 +01:00
CalamitousFelicitousness 70630bc6b4 fix(metadata): preserve parameters and stop polluting info dict
read_info_from_image had three issues that together corrupted
metadata in the Process tab and img2img batch:

- items aliased image.info, so items.pop('parameters', ...) mutated
  the source PIL image's info dict in place
- after popping, parameters was never restored to items, so callers
  that re-stamp items onto a downstream image (postprocessing.py,
  img2img.py) silently dropped the original generation params for
  any input without EXIF UserComment
- synthetic width/height/mode keys were stuffed into items and ended
  up persisted as PNG tEXt chunks even though no caller reads them

Result for the Process tab: upscaled outputs lacked the original
parameters chunk and instead had useless width/height/mode chunks
holding the source's pre-upscale dimensions. With this fix items is
a copy, parameters is restored after parsing, and width/height/mode
no longer leak into saved files.
2026-04-25 22:10:16 +01:00
CalamitousFelicitousness 3c3b0a8c6f fix(grading): preserve image .info across grade_image
Image.fromarray returns a fresh PIL image with empty .info, so the
source's parameters/UserComment metadata was silently dropped on the
grading roundtrip. In the Process tab this caused upscale + color
grading to save PNGs without the original generation parameters,
while upscale alone (via PIL resize/filter ops that preserve .info)
still worked.
2026-04-25 21:44:09 +01:00
CalamitousFelicitousness 47e78cdbab fix(framepack): remove broken torchvision.io.video monkey-patch
torchvision 0.26 removed the torchvision.io.video submodule entirely
(only image I/O remains). The monkey-patch in install_requirements
(`torchvision.io.video.av = av`) was attempting to swap PyAV into a
torchvision-internal that no longer exists, raising AttributeError on
every FramePack run. The patch is fully vestigial against modern
torchvision; PyAV is still installed by `install('av')`, and the
sdnext save path uses PyAV directly via av.open().
2026-04-25 21:15:50 +01:00
CalamitousFelicitousness a2cccddee0 fix(ltx): scale fps to preserve duration with RIFE interpolation
LTX conditions the model on mp4_fps as the source frame rate, then
RIFE inflates frame count at save. Without compensation, save fps
stays equal to source fps and the video becomes (mp4_interpolate+1)x
slow-motion (e.g. 121 frames at 24 fps with mp4_interpolate=1 saved
as 242 frames at 24 fps = 10s instead of the intended 5s). Scale the
saved fps by the interpolation factor at the LTX call site so output
duration matches user intent.

FramePack already pre-divides mp4_fps at generation time (compute-
saving semantic baked into UI math), so it does not need this fix.
The pipelines now produce duration-correct output via two different
mechanisms; standardization is tracked for the RIFE-in-processing
follow-up.
2026-04-25 21:15:06 +01:00
CalamitousFelicitousness 121b357ba0 fix(video): normalize pixel range to [0,1] before RIFE
video_save passes [-1,1]-range pixels to rife.interpolate_nchw, but
RIFE v4.25's IFNet explicitly clamps inputs to [0,1] (Head and IFNet
forward pass), turning every negative pixel value into zero. v3.9
silently extrapolated and produced soft artifacts; v4.25 produces
washout. Convert to [0,1] before the RIFE call and back to [-1,1] for
downstream save.
2026-04-25 21:14:36 +01:00
CalamitousFelicitousness dc4c58d0cb feat(rife): upgrade vendored RIFE to Practical-RIFE v4.25
- Vendor IFNet_HDv3 v4.25 (5 IFBlocks, Head encoder, feat channel) and
  v4 warplayer with explicit (tenFlow_div, backwarp_tenGrid) signature
- Rewrite RifeModel.inference for the new forward signature with
  per-(H,W,device,dtype) caching of tenFlow_div and backwarp_tenGrid
- Force fp32 inference: bf16 produced visible checkerboard at the new
  IFNet's depth (was hidden by v3.9's shallower architecture)
- Crop padded frames in interpolate_nchw before output (was missing,
  produced gray bar on non-128-aligned inputs)
- Drop training scaffolding (AdamW, EPE/SOBEL, update method)
- Log obsolete legacy v3.9 weights file on first v4.25 load instead of
  silently deleting user data
- Default download URL is HolyWu vs-rife mirror (MIT, byte-identical
  upstream weights); swap to project-hosted URL before merge
2026-04-25 21:14:18 +01:00
CalamitousFelicitousness 54fba340ae feat(autocomplete): translations opt-in + companion skip filters
- new autocomplete_translations setting (default off); checkbox in script accordion + locale hint
- get_cached gates companion load on the opt; toggle-flip auto-syncs missing files in a background thread
- list_all_sync, local_names and config_json filter out *.translations.json so companion files never surface as selectable dicts
- one-time per-name warning when opt is on but companion is missing locally
2026-04-25 16:13:15 +01:00
CalamitousFelicitousness f6d3436398 feat(autocomplete): bare-< lora browse, reopen on refocus
- bare `<` (or partial `<lo`) surfaces full LoRA list; accept overwrites the typed prefix
- empty-query XnIndex.search returns first N items so trigger chars alone yield results
- refocusing a textarea re-fires onInput so a partial tag at the cursor reopens the dropdown
2026-04-25 16:12:59 +01:00
Vladimir Mandic ce92c574c7 Merge pull request #4795 from vladmandic/feat/anima-custom-transformer
Feat/anima custom transformer and lora
2026-04-25 15:05:51 +02:00