22 Commits
Author SHA1 Message Date
cicalooo 55da4ee624 Drop extra credits and the stale audit
Keep the alibaba-pai file connection and note that the stack row UI matured from rgthree-comfy's Power Lora Loader.
2026-10-11 15:38:09 +11:00
cicalooo 17f019c061 Blend PDD heads as row 0 plus offsets
Core treats later bank rows as offsets from the first head. set_weight files already use that layout; proj_out banks are converted before the same blend.
2026-10-11 15:31:21 +11:00
cicalooo 023f1451ad Match current H3 PDD ABI and slice large LoRA residuals
Current ComfyUI passes sigma, sample_sigmas, and shifts into FinalLayer. Accept those directly and keep the thread-local schedule as a fallback. Apply large LoRA residuals in token slices so fc1/qkv does not allocate a second full activation, and broadcast the bias instead of slicing it when sequence length equals the output width.
2026-10-11 13:24:28 +11:00
cicalooo 896f65c96e Keep LoRA stack rows across refresh
ComfyUI compacts widgets_values inside configure, before onConfigure, and drops slots aligned with the serialize:false buttons. Snapshot the rows first and store them on node.properties.h3Rows so the enabled list survives a reload.
2026-10-11 13:19:33 +11:00
cicalooo 9ddfc0c841 Remove tracked pycache bytecode 2026-09-10 18:19:51 +10:00
doggeddalle de8bb95257 Replace README screenshot with current stack layout 2026-09-06 23:28:00 +10:00
doggeddalle 47f3ef0abd Fold README details; handle LoRAs already on MODEL 2026-09-06 23:23:00 +10:00
doggeddalle 3f7bf0d762 Capture H3 adaLN sidecars & loader hook
Add h3lora/sidecars.py to peel adaln_basis, adaln_mean, and silu_t_emb_grid from checkpoint state dicts and stash them on model/patcher objects so ComfyUI doesn't drop them. Install a load_model_weights wrapper (ensure_load_hook) in __init__.py and call it from h3lora.apply; use sidecar collect when creating AdalnContext. Include unit tests (tests/test_sidecars.py) for peel/attach/collect and the wrapper. Also update README with no attribution by proxy. Thanks pl0x
2026-09-06 18:34:25 +10:00
doggeddalle 4ef4de0a5d Robust adaln, pdd, keymap, modality fixes
Multiple improvements and hardening across the Power LoRA stack:

- adaln: stronger caching (file-version keys), device-safe grid/basis computation, normalized tensor hashing for basis cache, more robust table-to-table rebasing with residual checks and fallback, better detection of adaLN weight name variants.
- apply: validate numeric strengths, reject unsupported passengers, handle loading errors, detect shape mismatches, track rejected/skipped/quantized merges, improved PDD handoff and reporting.
- pdd: introduce movable PddBank/PddState, register banks as additional models, thread-local PDD context, strength-scheduled blending and safer interval clamping.
- keymap/detect/gain/modality/nodes/branch: add support for varied LoRA key spellings, more validation, skip incomplete adapters, and small bugfixes.
- server: surface partial calibration note.
- pyproject/README/.gitignore: packaging, docs, and ignore cleanup; add Python >=3.10 requirement and publisher repo fix.
- web UI: fix balance button behavior, safer auto-balance error handling and factor sanitization.
- tests: add unit tests for adaln, modality and pdd.

Overall: better robustness to varied LoRA formats, mixed devices, malformed inputs, and improved user-facing error/reporting.
2026-08-28 02:22:53 +10:00
doggeddalle f38d084232 Add PDD support and improve adaLN grid handling
Introduce PDD/Acc head handling and a robust adaLN grid/basis pipeline.

- Add h3lora/pdd.py: peel Acc/PDD output-head banks from LoRAs, keep banks aside, and blend rows at sample time (PddFinalLayer + attach wrapper) to avoid crashes.
- Refactor h3lora/adaln.py: generate/load silu grids from time_embedder, safetensors, or live embedder; add hashing, basis cache, sidecar support, residual acceptance threshold, and scanning of diffusion_model safetensors.
- Integrate PDD into apply.py, detect.py, nodes.py and README; add .gitignore entries.
2026-08-27 19:43:07 +10:00
doggeddalle fc1bba6a4e Remove module-level Lora list cache
Eliminates the module-global loraListPromise and makes fetchLoraList always query /object_info/LoraLoaderModelOnly. This avoids caching a promise (which could be serialized into saved workflows or return stale folder listings) and simplifies error handling to log and return an empty list. Comments updated to reflect per-open fetching.
2026-08-09 18:54:17 +10:00
doggeddalle 0e47a77976 Add H3 LoRA scheduling for runtime strength
Introduce runtime scheduling of per-row LoRA strengths. Adds h3lora/schedule.py (Schedule, ScheduleState, parsing, progress_from), new H3LoraSchedule node in nodes.py, and wiring in apply.py to resolve per-row schedules and preserve bias deltas. branch.py extended with FusedBranch, schedule-aware fusion, LoraBank/LoraBranch changes, and ScheduleController wrapper (attach now returns controller). README updated and unit tests added (tests/test_schedule.py, tests/test_branch_schedule.py) to validate curves, domains, thread-local state and controller nesting.
2026-08-09 17:14:56 +10:00
doggeddalle 7db1c8d918 DOCS update 2026-08-09 02:03:20 +10:00
doggeddalle 8c4aad1135 Add audit report and Apache-2.0 license
Add a full technical AUDIT_REPORT.md (2026-08-08) documenting priority findings and recommended fixes. Add Apache-2.0 LICENSE file and update README to reference the license. Update pyproject.toml to declare license as Apache-2.0 (replacing MIT). These changes add project licensing and a comprehensive audit summary for maintainers and users.
2026-08-08 22:29:25 +10:00
doggeddalle 400770aa66 Merge branch 'master' of https://github.com/cicalooo/ComfyUI-H3-PowerLoraStack 2026-08-08 21:42:04 +10:00
doggeddalle 92f634ccfd Fix LoRA widget serialization/restore
Prevent duplicated stack rows by changing how widget values are serialized and restored. Adds a ROW_FORMAT marker and LEGACY_BUTTON_SLOTS constant, stamps the node.properties with the new format, and introduces isRowValue for robust row detection. Marks the Add/Balance/Restore buttons as non-serializing and tags the add button with h3Role so rows insert correctly. onConfigure now recognizes legacy saved arrays (trims trailing button slots) and migrates them to the new format when loading. This fixes the bug where saved workflows would repeatedly grow extra rows on load/clone.
2026-08-08 21:41:44 +10:00
cicalooo 8b4f7b9a66 Update README with formatted Nodes section and image
Reformatted the Nodes section to include a table for better clarity and added an image.
2026-08-08 21:16:45 +10:00
cicalooo e14d31704f Revise README with new image and Nodes section
Updated README to include a new image and restructured the Nodes section.
2026-08-08 21:16:24 +10:00
doggeddalle 8cb35b41ed Merge branch 'master' of https://github.com/cicalooo/ComfyUI-H3-PowerLoraStack 2026-08-08 21:15:19 +10:00
doggeddalle 0fc822da8c Add auto-balance & adaLN modality control
Introduce auto-balance measurement and per-modality adaLN scaling for MiniMax H3.

- Add gain.py to measure LoRA perturbation (rel, factor) and cache results; expose measure_file/measure_state_dict.
- Add modality.py to scale adaLN rows by {video,text,audio} and describe/apply those changes.
- Add server route /h3_power_lora_stack/balance (h3lora/server.py) and register it in __init__.py to support the UI button.
- Integrate measurement and modality scaling into apply_stack and report LoRA rel/factor suggestions.
- Add H3AdalnModality node and adaln_modality input in nodes.py.
- Update web UI (web/h3_power_lora_stack.js) with auto-balance/restore buttons, server call, badges, and client-side behavior.
- Document features and rationale in README.md.

These changes keep measurements cached and never boost measured LoRAs (factor clamped ≤1).
2026-08-08 21:15:17 +10:00
cicalooo a26cdfd1b0 Update README with image and introduction
Added an image and expanded the introduction section.
2026-08-08 19:28:53 +10:00
doggeddalle 28ac439a26 Add MiniMax H3 Power LoRA Stack
Add a ComfyUI plugin implementing a stacked multi-LoRA loader for MiniMax H3. Introduces H3PowerLoraStack and H3LoraInspector node classes, plus modules: adaln (adaLN dense↔curve basis conversion), branch (runtime low-rank branches for quantized weights), apply (stack orchestration), detect (safetensors header introspection), keymap (key normalization), nodes, and a web UI (h3_power_lora_stack.js). Includes pyproject metadata and README. Preserves quantized kernels via branching, rebases adaLN pairs, handles many naming conventions, and provides a browser picker and per-LoRA reporting.
2026-08-08 19:27:06 +10:00