Commit Graph

14358 Commits

Author SHA1 Message Date
CalamitousFelicitousness 5837dcdd63 refactor(video): carry output resolution on the video result
Both runners round the requested resolution and the two-stage LTX path derives
its own, so the request never recorded what came out. Read it off the decoded
frames instead.
2026-08-19 01:45:46 +01:00
CalamitousFelicitousness 7dc10e0b5f feat(sdnq): wire fp16 accumulation into the attention benchmark
Add accum configs, value-side stress rows, a recommendation row, block
specs, and a triton-mm variant for the new use_fp16_accum surface. The
unsafe unquantized-pv mode is measured but never starred or recommended;
accum rows skip on sdnq builds without the kwarg. Also move the dequant
compile verdict off the removed sdnq_dequantize_compile option to a note
keyed on SDNQ_USE_TORCH_COMPILE, fixing the crash after 2250d8052.
2026-08-19 01:40:04 +01:00
Vladimir Mandic 133ba10c06 update todo and changelog
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-18 20:46:54 +02:00
Dity0 0218a0aadc Add FP16 Accumulation option to SDNQ Atten 2026-08-18 20:44:05 +03:00
Vladimir Mandic 05eef5e919 update nunchaku-lite
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-18 18:00:34 +02:00
Vladimir Mandic 8fa9eda7c1 Merge pull request #5036 from vladmandic/fix/scripts-empty-arg-vector
Fix/scripts empty arg vector
2026-08-18 17:35:05 +02:00
Vladimir Mandic 3e64c2d92a Merge pull request #5038 from vladmandic/fix/video-tiny-vae
Fix/video tiny vae
2026-08-18 10:47:40 +02:00
Vladimir Mandic 116ae6d46e Merge pull request #5037 from vladmandic/feat/video-dispatch-mode
Feat/video dispatch mode
2026-08-18 10:46:50 +02:00
CalamitousFelicitousness 8774cc72b9 fix(video): return none when the av package is unavailable
check_av returned the module on success and False on failure, so the two
callers testing for None treated a failed import as a working av and reached
into it anyway. It now returns None, and the guard that had to test for both
tests for one.
2026-08-18 03:13:00 +01:00
CalamitousFelicitousness 05574bc30a fix(video): route tiny decode through the vae hijack
Tiny decode lost its call site when the video vae hijack was replaced by the
shared one, which has no tiny branch, so selecting it on the video tab quietly
decoded through the full vae for every engine. The decode hijack now takes the
tiny path when the run asked for it, falling back to the full vae whenever
there is no tiny counterpart to use.

The class test also spelled Wan in capitals and matched none of the four Wan
pipeline classes. Alongside that:

- the requested type travels on the pipe rather than a module global, so the
  hijack reads the same value the run set
- a latent whose channel count taehv cannot take is reported and falls back
  instead of failing inside the first convolution
- decode_video already returns the range the pipelines expect, so the second
  normalization that followed it is gone
2026-08-18 03:13:00 +01:00
CalamitousFelicitousness 6779707fde fix(vae): honor an explicitly requested taesd variant
get_model discarded the variant its caller asked for and re-derived one from
the loaded model type. None of the video model types appear in those sets, so
every video caller got None back and no tiny decoder at all, while kandinsky5
matched the flux group and would have been handed an image decoder.

The derivation now runs only when the caller named nothing. Callers that name
nothing are unaffected, and the one video type that resolved before keeps the
same variant and cache key.
2026-08-18 00:54:30 +01:00
CalamitousFelicitousness 3629246841 test(video): cover the registry invariants and mode derivation
Pins the sentinel contract, row uniqueness, and the equivalence between
dispatch_mode and the ladder it replaced. A row that declares neither a name
marker nor a mapped pipeline class now fails here instead of reaching a runner
that would generate it as text to video.
2026-08-18 00:47:48 +01:00
CalamitousFelicitousness ab5056199d fix(video): align ltx frame counts on the shared path with the tab
LTX generates 8n+1 frames and floors anything else internally, so a request
for 120 frames on the shared path silently produced 113. The tab has always
snapped the count before requesting it; the shared path now applies the same
rule, next to the width and height rounding it already did.
2026-08-18 00:46:22 +01:00
CalamitousFelicitousness bd6abfc3e4 fix(video): resolve dropdown model selection through the registry
Both load buttons matched the dropdown value against the raw row list, so the
separators the list uses for grouping resolved to a row with no repo. The
loader returned early on that row without loading or reporting, and the ltx
tab went on to record load and offload timings for a load that never ran.

Selection now goes through models_def.find, which knows a separator names no
model, and both buttons say what happened. The ltx button had no output bound
at all, so its message went nowhere.
2026-08-18 00:46:16 +01:00
CalamitousFelicitousness 2c66039c37 feat(video): derive input mode from the registry row
Two ladders decided how a model's inputs get wired, and they had drifted: the
api reported an unrecognized row as t2v while run() fell through to a branch
that wires nothing. Eight LTX condition rows sat in that gap, advertised as
text to video and generating without their conditioning.

dispatch_mode answers once from the row, reading name markers before the
pipeline class because one class serves several modes: six LTXConditionPipeline
rows are named T2V or I2V and generate as such. Rows that declare nothing now
resolve as condition, and the api reports that instead of guessing t2v.
2026-08-18 00:44:28 +01:00
CalamitousFelicitousness daf8c0d9bd test(scripts): cover script argument resolution
Pins the cases that separate a complete slice from a truncated one, including
the zero-argument script whose empty slice is complete, and asserts no hook
runner slices the vector on its own.
2026-08-18 00:38:32 +01:00
CalamitousFelicitousness 9f987aad8e fix(scripts): range-check the selectable script arg slice
The selectable run and after paths sliced the incoming vector behind an
attribute check alone, so a short vector reached the script as too few
positionals and raised a TypeError out of the runner. Both now resolve the
slice the same way the alwayson hooks do and report the mismatch instead.
2026-08-18 00:36:05 +01:00
CalamitousFelicitousness b12cae1327 fix(scripts): skip a hook whose declared args outrun the vector
The alwayson hook runners checked that a script declared an argument range
but never that the processing object's vector could fill it, so a caller
that did not bootstrap script args splatted fewer positionals than the hook
signature takes. Every registered script raised a TypeError per hook, and
postprocess_image runs per image, so one video generation produced a
traceback per script per frame.

resolve_script_args now answers with the slice or None, and each runner
skips on None. A script that declares no arguments still runs, since its
empty slice is complete rather than truncated.
2026-08-18 00:35:13 +01:00
CalamitousFelicitousness 680005c61d fix(framepack): default the vae dropdown to a value it offers
The FP VAE dropdown defaulted to Local, which is not among its choices, so
the control rendered with an out-of-list value. The decode dispatch treats
anything unrecognized as Full, so Full is the value the default already
meant.
2026-08-18 00:32:50 +01:00
CalamitousFelicitousness 41be54eb01 fix(video): correct the cosmos row duplication and its model url
The nVidia Cosmos engine carried two byte-identical Predict2 2B I2V rows,
so the dropdown showed the name twice. The surviving row's url now points
at the Video2World repo it loads; it pointed at the Text2Image image model.
2026-08-18 00:32:44 +01:00
Vladimir Mandic e23a70af34 fix processing api
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-17 18:07:06 +02:00
Vladimir Mandic aa8cd9980e lint
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-17 14:35:52 +02:00
Vladimir Mandic 1bc3420dfb update todo/changelog/submodules
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-17 10:42:51 +02:00
Vladimir Mandic f75e38c4ef krea2 optional dense masking
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-17 10:18:32 +02:00
Vladimir Mandic 9f650367cb multiple cleanups
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-17 09:35:07 +02:00
Vladimir Mandic 392c969754 add offload state_dict
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-17 08:52:46 +02:00
Vladimir Mandic 94eac2a517 Merge pull request #5032 from vladmandic/fix/triton-autotune-diagnostics
feat(triton): report autotune spread and register spills
2026-08-17 08:13:10 +02:00
Vladimir Mandic 993fa4a2c6 Merge pull request #5031 from vladmandic/fix/video-codec-options
fix(video): correct codec option strings to the key=value form
2026-08-17 08:11:52 +02:00
Vladimir Mandic 7bced6d868 Merge pull request #5034 from vladmandic/feat/video-mixed-references
Feat/video mixed references
2026-08-17 08:09:54 +02:00
Vladimir Mandic c053fb6c95 Merge pull request #5033 from vladmandic/fix/video-frame-count
fix(video): count generated frames on the first output axis
2026-08-17 08:05:23 +02:00
CalamitousFelicitousness c4a29bfb94 test(video): note what the reference server probe matches on 2026-08-17 04:12:33 +01:00
CalamitousFelicitousness 885fc34e6b refactor(minimax): delegate tab reference marshalling to the core
The tab held the only code that built video and audio references, sniffed the
file type itself, and dropped anything it did not recognize: an unknown
extension, a file that had gone missing, and any decode failure were all skipped
without a word, leaving a request that generated from fewer references than were
uploaded.

Reference marshalling now goes through the same funnel the api path uses, and
runs before the load, so a rejected file costs nothing and says which file and
why. The workflow comes from the registry row, which is where the loader reads
it from as well.

- a rejected input returns its reason to the output box, since the general
  handler only reaches the log
- references uploaded against a keyframe workflow warn instead of vanishing:
  the accordion hides on a row change but the files it held do not
- guard p.close() in the finally, which the model-not-loaded return has always
  reached before p exists
2026-08-17 04:12:33 +01:00
CalamitousFelicitousness aa86c762bb feat(triton): report autotune spread and register spills
A sweep only logged how long it took, so a config list holding candidates the
hardware runs badly stayed invisible until someone profiled a run that looked
hung. The completion listener already receives every candidate's timing, so the
spread between worst and best is free to report.

- log the winning config, the spread, and any candidates that could not run
- warn once per config when the selected one spills registers, naming it, since
  the sweep line that carries it is debug
2026-08-17 03:47:35 +01:00
CalamitousFelicitousness 7792b1ab62 fix(video): count generated frames on the first output axis
The shape branch read axis 1, which held the frame count back when animatediff
returned (batch, channels, frames, height, width). Diffusers now returns
(batch, frames, channels, height, width) and the modular video path puts
channels last, so axis 1 reads channels or height and the line printed a
plausible wrong number: a 124 frame 1024x576 generation logged frames=576.
len() is the frame count under both layouts and is what the sibling call site
in process_decode already uses.
2026-08-17 03:41:46 +01:00
CalamitousFelicitousness cce3a80b0c fix(video): correct codec option strings to the key=value form
parse_options reads : and , as separators and = as the only assignment, so a
segment without = becomes a valueless flag set to 1. The shipped strings used
ffmpeg command line spelling, which parses without error into other values.

- crf:16 parsed to {'crf': '1', '16': '1'}, encoding every api, framepack and
  seedvr video near lossless rather than at crf 16
- crf=23:b:v=0 pinned the generic bitrate option to 1 bit per second on vp8 and
  vp9, collapsing their output
- qscale:v=3 reached mpeg4 and mjpeg as nothing at all, replaced by an explicit
  quantizer range
- test-video-codecs.py asserts every preset segment carries an assignment
2026-08-17 03:04:59 +01:00
CalamitousFelicitousness 005fc5c86e refactor(video): accept video and audio references in the shared core
The core took reference images only, so no api caller could send the video and
audio references the ref2va workflow conditions on, and the marshalling that
handles them existed solely in the MiniMax tab.

validate_references now gates on the workflow and hands the entries to the
architecture that owns them, which accepts decoded images and local file paths
in any mix and preserves their order, since order fixes the labels a prompt
addresses. reference_caps exposes the same limits the validation enforces, so a
client reads them instead of mirroring the numbers.

- MAX_IMAGE_REFERENCES is gone: the limits now cover all three kinds and a total
- the run body no longer builds reference objects or knows their class
- an image is converted where it is built rather than at the call site, so a
  reference decoded from a file and one posted as base64 arrive the same way
- pipeline args summarize a reference list by kind, since a decoded video would
  otherwise print its frames into the per-generation log line
- the video endpoint documents what it actually accepts: images alone, because
  video and audio decode from files rather than from the wire, and an upload
  reference only where an extension provides the store that resolves one
2026-08-16 21:56:37 +01:00
CalamitousFelicitousness 9892a3f05f feat(minimax): add mixed-media reference caps and resolver
MiniMax-H3 conditions on image, video and audio references, and the limits it
enforces on them are constructor defaults on a block class the package does not
re-export, so they cannot be imported and are mirrored here instead.

The resolver takes decoded images and local file paths and returns the reference
objects the pipeline reads, checking cheapest first: classification and counts
open no files, container headers are read without decoding, and only then is the
media decoded. Everything runs before the model load, so a rejected request costs
nothing.

- reference limits as a frozen dataclass, keyed by workflow since the rows that
  carry ref2va differ only in which repo they load
- media classification and container probing as generic video helpers
- a url is refused before construction: the reference classes fetch one and
  decode whatever comes back
- a video is bounded by duration and by what it decodes to, since the pipeline
  truncates it to the generated length and the decode is held across the load
- the frame floor is counted on the decoded video at the rate it resamples to,
  which is what the conditioner measures
- torchaudio and av are checked up front rather than surfacing as an import
  failure once the weights are resident
2026-08-16 20:04:43 +01:00
Vladimir Mandic 6b499b7d17 cleanup
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 19:00:55 +02:00
Vladimir Mandic 7172fd3eb2 api auth for ws and api validate allowed paths
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 18:57:26 +02:00
Vladimir Mandic 290a620df3 update changelog
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 18:21:23 +02:00
Vladimir Mandic 8be5be487f Merge pull request #5028 from cjmcgee/fix/rocm-disable-mmap
fix(rocm): add option to load models without mmap
2026-08-16 18:19:38 +02:00
Vladimir Mandic ae8d559b50 swtich to igwn-segments
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 18:15:59 +02:00
Christopher McGee a9b9de63ab fix(rocm): add option to load models without mmap
On ROCm, host-to-device DMA from mmap'd safetensors pages stalls ~1s per
copy, so weights move to the GPU at ~27 MB/s instead of ~28 GB/s. With
offload enabled this re-copies weights every forward, so generation
appears to hang.

Adds `diffusers_disable_mmap` (Settings > Model Loading), off by default,
which makes diffusers read shards into anonymous memory instead. Costs
peak RAM equal to the model size, so it is opt-in.

SD3.5-large on RX 9070 (gfx1201), same prompt and steps:
  off: no image after 120s
  on:  image in 20s

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 11:46:07 -04:00
Vladimir Mandic 5b0a732db3 update codec presets
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 15:08:26 +02:00
Vladimir Mandic 0963bf54ac reduce group offload logging
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 12:45:50 +02:00
Vladimir Mandic ce418265e2 add lint full script
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 12:45:50 +02:00
Vladimir Mandic e3c57af560 pipeline init reordering
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 12:45:50 +02:00
Vladimir Mandic 76941efc7e strict typechecking
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 12:45:50 +02:00
Vladimir Mandic f30e6baa67 codespell
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 12:45:50 +02:00
Vladimir Mandic fbd0020ad4 refactor offloading
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-16 12:45:50 +02:00