- Add module_skip_keys entry for HiDreamO1Qwen3VLTransformer so SDNQ
leaves embedding/output layers (lm_head, embed_tokens, x_embedder,
t_embedder1, final_layer2, patch_embed, pos_embed) at full precision.
- Flip allow_quant to True in load_hidream_o1 and surface the resolved
quant type in the load log.
`get_version()` previously stored the raw `git remote get-url origin`
output in `ver['url']`. For ssh-form remotes (`git@host:owner/repo` or
`ssh://git@host/owner/repo`), the GitHub branches API url builder in
`check_version()`, which strips the `https://github.com/` prefix,
produced a malformed url that returned 404. The 404 response (a dict
with `message`) was then iterated by a list comprehension filtering on
`'name' in b`, yielding an empty branch list and a misleading
"branch=dev skipping update" warning.
- normalize ssh and ssh:// remotes to canonical https form in
`get_version()`, so every consumer of `ver['url']` sees one shape
- guard `check_version()` against non-list api responses with an
`isinstance` check that logs the actual payload instead of silently
yielding `[]`
Rename `autocomplete_replace_underscores` to `autocomplete_keep_underscores`
(default false) so both autocomplete toggles read as "keep" semantics.
`insertTag` now honors the setting for both tag and artist modes, matching
the dropdown display. Embedding insertion always preserves underscores
because the names are filesystem identifiers.
- ui_definitions: rename option, flip default, update label
- scripts/autocomplete: rename handler, checkbox, and config-bridge keys
- javascript/autocomplete: invert render polarity; insertTag takes a `kind`
parameter; drop the artist-mode hardcoded underscore replacement so the
setting controls tags and artists uniformly
Closes#4827
Move the family-iteration loop into pipelines/flux/flux2_lora.try_load
so the f2 branch in lora_load.load_safetensors becomes a one-line call.
Per-family try_load_* entry points stay public for direct testing.
Addresses review feedback on PR #4841.
Gate finds the on-disk preview via resolve_preview_file and a
non-empty UserComment check so previews lacking embedded params enter
the worker. embed_preview_parameters writes via temp + os.replace,
converts RGBA to RGB before JPEG save, removes unreadable sources, and
invalidates any co-located .thumb.jpg. get_exif decodes EXIF
UserComment so regenerated thumbs propagate the source's params. For
.mp4 and .webm previews, embed targets the .thumb.jpg frame extracted
by save_video_frame instead of the unembeddable video file.
backfill_preview_parameters and resolve_preview_file share
find_ui_preview_file, which mirrors find_preview's iteration order so
backfill embeds into the file the modernUI actually surfaces (handles
LoRAs with multiple coexisting variants like .jpg + .jpeg).
civitai_meta_to_parameters drops generator-specific noise keys (comfy,
comfyui, workflow, extraMetadata) and applies a 512-char cap on
pass-through values to keep the embedded chunk compact.
When download_civit_preview short-circuits at 304 (file exists), the
rescan path now falls back to backfill_preview_parameters: checks
whether the file already carries an embedded parameters chunk and, if
not, embeds img.meta in place. Existing libraries get retroactive
metadata via the existing "Search metadata" rescan, no model
re-download required.
Civitai's CDN strips PNG tEXt/EXIF chunks during delivery, leaving the
modernUI Preview metadata tab empty for downloaded networks. Format the
version API's images[].meta into sdnext's standard parameters channel
(PNG tEXt / JPEG-WEBP EXIF UserComment) so read_info_from_image picks
it up through the existing path. Embedding is wrapped in try/except
and never blocks the download.
get_method now returns (method, reason). The reason distinguishes
user opt-in (lora_force_diffusers), class-forced, hash-forced, and
arch-unsupported routes from the default native path; surfaced in
the info-level "Network load: type=LoRA load=<method>(<reason>)"
line so users can tell why a given load took a particular path.
36 tests across parsing primitives, family loaders, calc_updown shape
sanity, and the lora_apply ex_bias accumulation path. Builds a mock
Flux2-shaped transformer (HIDDEN=128, 2 double + 2 single blocks) and
writes synthesized state dicts to tempfile-managed safetensors so the
loaders' real read_state_dict path runs.
Loader fixtures include the full nine-family menu plus four prefix
variants (kohya, BFL/AI-toolkit, PEFT, bare-BFL) and the two real
ground-truth formats observed on Hugging Face: base_model.model.
(peft.save_pretrained wrapper) and lycoris_ (LyCORIS-standalone).