Commit Graph

8942 Commits

Author SHA1 Message Date
CalamitousFelicitousness 5e1a0719ab feat(model): detect header metadata and nvfp4 in the model probe
detect_quant now reads _quantization_metadata as the authoritative quant
source when present, and resolves marker-file formats from the marked
layers' stored weight dtypes instead of file-wide dtype voting, which
mislabeled fp8 files carrying extra uint8 tensors and had no nvfp4
mapping at all. Schema bump so cached probe entries refresh.
2026-07-12 03:44:54 +01:00
CalamitousFelicitousness f05a3ae3e9 fix(sdnq): skip compiled dequant for fp8 weights without hardware support
Triton has no e4m3 conversions before sm_89, so any compiled graph
touching fp8 storage weights fails with an InductorError on Ampere.
Select the eager dequant and re-quantize paths for e4m3 weights when
the hardware cannot compile them; other dtypes keep compiled dequant.
SDNQ_ALLOW_FP8_COMPILE overrides the detection.
2026-07-12 03:44:54 +01:00
CalamitousFelicitousness 6e63f351eb refactor(ui): drop quicksettings companion machinery for secondary unet
The secondary unet loads from the networks panel toggle or the settings
page; companion ordering and dynamic visibility pushes in ui_settings.py
are not worth their footprint for one setting.
2026-07-12 03:44:20 +01:00
CalamitousFelicitousness 3fe54d1045 chore: rename probe cache files to signatures.json and civitai.json 2026-07-12 03:44:19 +01:00
CalamitousFelicitousness 4785dedc32 fix(ui): set refiner option from networks panel refine toggle
The hidden change_refiner button passed key='sd_model_checkpoint', so
loading a card with the refine toggle active reloaded the base model
and never set sd_model_refiner.
2026-07-11 20:26:12 +01:00
CalamitousFelicitousness 8291365955 refactor(model): simplify probe cache handling
json_helpers does its own error handling and file locking, so the
try/except wrappers, threading locks and isfile checks were dead
weight; probe cache file paths are now defined in paths.py.
2026-07-11 20:26:12 +01:00
CalamitousFelicitousness c54c0535c0 fix(civitai): accept civitai.red urls in header peek
The .red mirror rewrites downloadUrl to its own host; normalize to
civitai.com so the ssrf guard, cache hash and fetch host agree.
2026-07-11 20:26:12 +01:00
Disty0 ad400ba817 SDNQ handle subnormals in FP formats and cleanup Triton MM 2026-07-11 21:52:51 +03: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
CalamitousFelicitousness 3831e4563f feat(model): variant-specific fp8 precision tokens
fp8_e4m3fn and fp8_e5m2 differ in kernel support, so a bare fp8 token
is not enough to know whether a file runs on a given architecture;
scaled_fp8 derives its token from the detected format.
2026-07-11 06:40:07 +01:00
CalamitousFelicitousness c72e68e888 feat(model): read exact comfy_quant format from local marker tensors
Local probes read the marker tensor bytes for the true format string
(nvfp4, mxfp8, int8_tensorwise) instead of inferring from weight
dtypes; remote ranged peeks stay dtype-inferred. precision_token maps
quant format or dominant dtype to the short filename token.
2026-07-11 06:40:07 +01:00
CalamitousFelicitousness 055388aa70 feat(civitai): attach model probe analysis to header peeks
peek-header now returns the full probe (architecture fingerprint,
dtypes, quant scheme) alongside the metadata block, and caches the
response persistently by civitai file id; file content per id is
immutable, so cached probes skip the ranged fetch entirely.
2026-07-11 06:40:07 +01:00
CalamitousFelicitousness e5800b005e feat(model): add header-only model probe with arch fingerprints
Analyzes safetensors/gguf headers without reading weights: curated
tensor-name fingerprints for common families, container kind detection
(model/lora/vae/text-encoder), element-weighted precision over core
tensors, comfy_quant/scaled-fp8/gguf quant detection, lora base
resolution via trainer metadata with shape arbitration, and full
__metadata__ passthrough. Results cached by mtime in
data/model_probe.json.

- analyze_header is pure and shared by remote ranged peeks and local
  file reads
- fingerprints verified against the local library and live civitai
  headers; unmatched families report unknown rather than guessing
2026-07-11 06:40:07 +01:00
CalamitousFelicitousness e0ed573d66 feat(civitai): add ranged safetensors header peek endpoint
The API carries no field distinguishing dual-transformer expert files;
conversion tools embed it in the header __metadata__. peek-header
range-fetches the JSON header and returns the metadata block without
downloading the file. Restricted to civitai.com urls.
2026-07-11 06:40:07 +01:00
Disty0 736012d5af SDNQ Atten use FMA on PV 2026-07-10 14:27:53 +03:00
Vladimir Mandic 8ce3313f9a improve log viewer
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-10 13:14:27 +02:00
CalamitousFelicitousness d087c3e687 feat(civitai): route text encoder files to te_dir
Versions bundle companion files typed by the file, not the model;
'Text Encoder' had no TYPE_MAP entry so companions landed in the
checkpoint folder where the loader never scans.
2026-07-10 02:17:33 +01:00
CalamitousFelicitousness 24683dc608 feat(civitai): parse gguf quantType in file metadata
GGUF variants are distinguished by quantType, not fp; the model
endpoint carries it in file metadata.
2026-07-10 02:09:14 +01:00
CalamitousFelicitousness e615b6e22b feat(civitai): sweep abandoned download partials at startup
Interrupted downloads leave url-hash .tmp resume files that nothing
cleans up; the queue that knows about them is in-memory only.

- iter_type_roots lists every folder downloads resolve into
- partials older than 7 days by mtime are deleted when the download
  manager starts; active partials always have a fresh mtime
2026-07-10 01:54:27 +01:00
CalamitousFelicitousness ef6030b871 feat(civitai): expose file variant metadata and scan results
Multi-variant versions serve one canonical filename per file; the
precision, size class, format, and scan status that distinguish them
were dropped at the model layer.

- CivitFile gains metadata (format, size, fp), pickle and virus scan
  results, and scannedAt
2026-07-10 01:54:27 +01:00
Disty0 7578d9b6bc remove dynamic from sdnq atten 2026-07-10 03:22:14 +03:00
CalamitousFelicitousness 9b18aad1c1 feat(civitai): record search filters in history entries
History entries stored only the query or tag term, so restoring a
search dropped every filter, and filter-only browsing was never
recorded at all.

- SearchHistory.add takes an optional params dict stored on the entry
- get_search records non-default filters: type, sort, period, base
  models, nsfw, username, favorites
- filter-only searches are recorded as 'filter' entries labeled with
  the filter values
2026-07-10 00:50:01 +01:00
CalamitousFelicitousness 9f9a350e53 fix(civitai): restart download when server ignores range request
A 200 reply to a resumed download carries the full file, not the
remainder; appending it to the partial produced a corrupt file that
passed the size check and only failed at hash verification. Truncate
the temp file and restart from byte 0 when a Range request comes back
as 200 instead of 206.
2026-07-10 00:05:37 +01:00
CalamitousFelicitousness a274f57aab fix(civitai): tolerate null availability, expose early access fields
The /model-versions endpoint now serializes availability as null, which
failed str validation and turned every version lookup into a 404. Coerce
null to the default like the creator username validator already does.

Pass through earlyAccessEndsAt and earlyAccessConfig so clients can see
that a download requires a Buzz purchase before requesting the file.
2026-07-09 23:49:37 +01:00
Disty0 c35201de30 cleanup triton mm 2026-07-09 16:21:47 +03:00
Disty0 8cc5faa877 remove math import 2026-07-09 14:14:50 +03:00
Disty0 3641d12274 Inductor breaks down with math.log 2026-07-09 14:06:02 +03: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
Disty0 3476125374 fix hadamard on sdnq atten with sd 1.5 2026-07-09 01:03:26 +03:00
Disty0 f8623d7879 Update SDNQConfig docstring 2026-07-08 21:49:28 +03:00
Disty0 2490023570 SDNQ skip quant if numel is less than 16384 and add nn.Embedding to no spilt modules on offload 2026-07-08 21:38:28 +03:00
Disty0 87684e1a21 SDNQ fix hadamard with non pow2 shapes and add 16bit types to quant list 2026-07-08 19:29:57 +03:00
Vladimir Mandic bcd597cd8a improve ui models
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-08 14:50:29 +02:00
CalamitousFelicitousness 56dc1b5a39 fix(models): prefetch configs skipped by hf hub downloads on windows
diffusers pipeline downloads build subfolder config.json allow-patterns
with os.path.join, and huggingface_hub>=1.22 matches patterns with
fnmatchcase which does not normalize path separators
(huggingface/huggingface_hub#4435). On windows the resulting backslash
patterns match nothing, so per-component config.json files are never
downloaded and the incomplete snapshot still passes the diffusers
cache-completeness check, failing every subsequent load with
"no file named config.json".

Prefetch component configs with forward-slash patterns before pipeline
load. This covers all model families and also repairs snapshots already
broken by the bug on the next load attempt. No-op on linux, in offline
mode, and for local folder or single-file models.
2026-07-08 12:18:11 +01:00
Vladimir Mandic 70c503f58e fix non-english git and add faster stat
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-08 11:14:40 +02:00
Vladimir Mandic 3158468dc4 add server restart api endpoint
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-08 10:09:36 +02:00
Vladimir Mandic cfd31599b4 fix lint
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-08 09:50:26 +02:00
Vladimir Mandic 9a2c76ade3 Merge pull request #4987 from vladmandic/fix/lora-te-fixes
Fix/lora te fixes
2026-07-08 09:48:06 +02:00
CalamitousFelicitousness 1f549839dd fix(lora): disable diffusers-method loras on removal
Removing all loras never called set_adapters, so peft adapters stayed
active until model reload. Removal now uses disable_lora, which keeps
modules intact; unload_lora_weights would detach balanced offload hooks.
Load calls enable_lora after set_adapters since peft set_adapter does
not clear the disabled flag. Removal of fused diffusers loras remains
unhandled.
2026-07-08 03:06:47 +01:00
CalamitousFelicitousness 2605764f43 fix(lora): honor te multiplier for text encoder keys
NetworkModule.multiplier matched text encoders via 'transformer' in the
key prefix, which fits dit keys but never lora_te keys, so text encoder
modules followed unet_multiplier[0] and the te= tag strength was ignored.
2026-07-08 03:06:14 +01:00
CalamitousFelicitousness 4554b9a277 fix(lora): apply te networks before encode and honor lora_apply_te
Network activation ran after prompt encoding, so text encoder lora
weights never affected embeds on the first generation and the stale
result was then served from the embed cache. The trailing unfiltered
activate in network_load also overrode the te exclude filter, so the
lora_apply_te setting was never honored.

- parse and activate networks in process_base before pipeline args are built
- activate_filtered gates text encoder components on per-request or global
  lora_apply_te; used by base, hires, detailer and faceid call sites
- network_load accepts activate=False for callers that run their own
  deactivate/activate sequence with include/exclude
- network_activate walks excluded components in restore-only mode so a
  filtered text encoder reverts to backup instead of keeping stale deltas
- loaded_loras cache is single-entry since per-filter entries go stale when
  the setting toggles
- prompt embed cache key includes the effective lora_apply_te value
2026-07-08 03:06:04 +01:00
CalamitousFelicitousness 917dd3a109 fix(lora): handle flattened clip text model in kohya te keys
transformers >=5.6 removed the text_model wrapper from CLIPTextModel, so
kohya te keys no longer matched the network layer mapping and text encoder
weights were silently skipped. KeyConvert retries te keys with the
text_model segment dropped; lora extraction keeps writing canonical kohya
naming for flattened encoders.
2026-07-08 03:05:30 +01:00
0xDELUXA 6460601407 rocm: detect hipBLASLt lazy library in per-arch subfolder and zlib form 2026-07-07 23:12:04 +03:00
Disty0 afe6394833 SDNQ add and enable use_contiguous_fp16_mm for ROCm 2026-07-07 03:48:30 +03:00
Disty0 ae4b116f95 dedupe and cleanup sdnq code 2026-07-06 21:40:29 +03:00
Vladimir Mandic c254eff191 revert stat
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-06 17:58:50 +02:00
Vladimir Mandic 870cca30fa schedulers fix zero-sigma final-step
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-06 13:21:19 +02:00
Vladimir Mandic fc2231b6cf fix wan vae postprocessing step
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-06 10:30:33 +02:00
Vladimir Mandic d5ad5bab24 pin correct tokenizers
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-07-06 08:12:09 +02:00
CalamitousFelicitousness 9ffaed47ba feat(te): reset text-encoder override when base model architecture changes
When a checkpoint change switches the model type, a custom sd_text_encoder no
longer fits, so reset it to Default and clear loaded_te, mirroring the sd_unet
reset. The type is resolved with detect_pipeline on both the loaded and incoming
checkpoints, so same-arch switches (Krea2 Base and Turbo share one pipeline
class) do not reset. The checkpoint handler also returns sd_text_encoder
alongside sd_unet so the dropdown reflects it.
2026-07-06 02:29:36 +01:00