Commit Graph
53 Commits
Author SHA1 Message Date
digital-garbageandClaude Sonnet 5.5 6249d5342b SLA/Veda: a run cancelled in its first step no longer leaves its stabilize-motion memory or kernel failure to the next run
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 22:12:45 +02:00
digital-garbage a5f35ea5b9 Veda: split the kernel call into index, quantize and attend timings; cheaper host prep with equal output 2026-11-05 22:10:34 +02:00
digital-garbage affa3a863e Veda: opt-in per-phase timing, one line naming every size of a Two stages run, fewer device reads
veda_timing (loader, method veda) logs the time in gather, score, select, kernel and scatter
for a run; off by default and it changes no number. The run line now names the size and tile
plan of each stage, not only the last. Cheap speed-ups that keep the numbers exactly: the
list width of kept tiles comes from the layout instead of a device read, the head groups and
the per-row pattern stay on the device, and the predictor's projections are copied from pinned
memory.
2026-11-05 21:57:31 +02:00
digital-garbage 1e2ac5ca67 Sparse attention method veda for MiniMax H3 (experimental), with an optional predictor download
Learned tile-sparse attention (Veda, arXiv 2605.30325): tiles, tile plans, predictor
scoring and selection in plain torch (tested on CPU, including a real tiny H3 with a
stand-in kernel), an INT8 Triton kernel derived from SageAttention (untested on a GPU),
installed through the same override and per-step wrapper as SLA. Runs at the predictor's
trained budget; LoRA, MXFP8, Two stages, dense steps and the attention backend compose.
Settings > Models offers the official Hugging Face download of the predictor on a click,
with its licence beside it; taggers and this share one downloader (core/fetch.py).
2026-11-05 21:32:39 +02:00
digital-garbage 5f6ed35929 Matrix: every modifier is listed or exempt with a reason, must report active, and must wire in; crossed with samplers and Two stages
Brownian leaves the stock sampler alone when torchsde internals differ. LoRA: unwrapped refiner layout, absent blocks, LoKr.
2026-11-05 15:58:29 +02:00
digital-garbage 4b306ae65f Round 3: Brownian noise equals stock noise at any sigma height; every LoRA wrapper reaches every Diffusers module
Queries are limited as plain numbers inside the sampler call. Tests for 11 wrappers and sigma 14.6.
2026-11-05 15:44:24 +02:00
digital-garbage 3351fbf503 LoRA: a wrapped Diffusers file reaches the fused qkv rows; a wrong-width qkv pair is dropped, not merged
README credits Karras et al. for the churn idea in Turbo. Tests for three wrappers and the width check.
2026-11-05 15:23:43 +02:00
digital-garbage 2f1a0df7a0 Review: only H3 LoRAs are renamed to H3 names (LTX transformer_blocks LoRAs load again)
Interpolate Always warns once, not per render. README credits the resize kernels; hint and example text corrected.
2026-11-05 15:13:03 +02:00
digital-garbageandClaude Sonnet 5.5 f7b1da518d Test: the VAE loader stub has a model, as the loader now requires
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjV3UWsHHjJiAXix29B
2026-11-05 14:48:36 +02:00
Claude 4579d31585 LoRA Loader: a slot's settings and the next slot's picker appear only once a LoRA is chosen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjV2UVj2u3F3mbnYrQW
2026-11-05 11:23:35 +00:00
Claude 5eabca5839 LoRA loader: Apply to stage (First/Second/Both) for Two stages, and Diffusers-layout H3 LoRAs now load
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjVKTwSL4mCUi3hd811
2026-11-02 12:56:50 +00:00
Claude f7d17cfb15 Diffusion Model Loader: read the stacked output head count from the weights when the file metadata lacks it
A few-step H3 file whose metadata keeps explicit head sizes but not the head
count was built with one head and failed on the head biases. The count is now
taken from the head bias and patch projection shapes (shapes only, any device
or dtype), with a test through the real loader at every weight dtype.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjUsYDkyEtLCrzqv7jo
2026-11-02 10:57:56 +00:00
Claude 41559e188b VAE loader: a decode-only VAE this ComfyUI cannot read no longer stops the run; the main VAE decodes and the log says so
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjWzZx5QzcqkheSuhsy
2026-10-30 17:39:37 +00:00
Claude 3862f3ec36 LoRA Loader: up to eight LoRAs in one node, applied in order; slot 1 keeps its inputs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjU1A5dzqoK4stWcmzk
2026-10-29 19:23:48 +00:00
Claude 3837d585e0 VAE Loader: optional decode-only VAE (Sol-H3-VAE, X2 Detail) while the main VAE encodes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjW75aYB8UyVRZo6fCr
2026-10-29 10:59:06 +00:00
Claude b108d4f4f5 H3 loader: MXFP8 option for the middle blocks (Sol-H3 recipe), credit in README
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjW75aYB8UyVRZo6fCr
2026-10-29 09:44:49 +00:00
Claude a9f5c9f35d VAE loader: pass the file header to the VAE (audio VAEs need their config)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BzJLJWVu7RZnbRqm3nYAnX
2026-10-27 08:06:34 +00:00
Claude 5bc3ce3f95 SLA: test that the rising-share field is drawn only for the sla method
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176SHndmQj7T1VtWAWZiNcq
2026-10-25 16:06:31 +00:00
Claude 527d368c82 SLA: optional rising sparsity (sla_sparsity_start), GSRS idea; CPU test env script
Skip fewer attention blocks on early steps and more on late ones, in a straight
line up to sla_sparsity. Off at 0, untested on H3. Credit GSRS (arXiv 2610.21129).
tools/test_env.sh and tools/cpuforce.py set up the suite on a GPU-less machine.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176SHndmQj7T1VtWAWZiNcq
2026-10-25 16:05:33 +00:00
Claude 3adebb731f Rename FunPack to FunUI (5.0.3 Classy Chopper): /fun endpoint, wink logo, load-time migration of old names
Old project/workflow names and browser settings migrate on load; /funpack redirects to /fun.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016acRss69eH1235eRdFTZHY
2026-10-25 13:11:03 +00:00
Claude 156f86e618 fix: checkpoint loader reports a missing VAE; a start picture no pipeline slot takes is named as unused
Tests: VAE, LoRA (7 key dialects), CLIP and checkpoint loaders; every preset x every kind of picked file is used or named.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WP6HMLLhRYcghAEXK4KLwK
2026-10-21 04:36:20 +00:00
digital-garbageandClaude Sonnet 5.5 4549ffc2b3 feat: Diffusion Model Loader says when fp32 compute is picked over bf16 weights
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-17 03:19:36 +03:00
digital-garbageandClaude Sonnet 5.5 a88b814b28 fix: modules no longer import each other (shared taste helper is a plain file); UI gates match real ids and are tested; boot cannot stall; empty pipelines refused; truncated .gguf listing says so (attacker round 15)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 22:10:20 +03:00
digital-garbageandClaude Sonnet 5.5 0f86ffd909 fix: .gguf listing walks by folder identity (sibling cycles, root links, case); dangling links not listed (attacker round 14)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 20:26:47 +03:00
digital-garbageandClaude Sonnet 5.5 3042532c0c fix: a symlinked folder aliasing a sibling is listed under both names; an undequantizable gguf tensor type names the file (attacker round 13)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 19:28:02 +03:00
digital-garbageandClaude Sonnet 5.5 76d534adb7 fix: symlink loops no longer stall the .gguf listing; a name with .. is refused after a link too (attacker round 12)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 19:17:23 +03:00
digital-garbageandClaude Sonnet 5.5 6416c1b032 fix: a symlinked .gguf inside the model folder loads again (attacker round 11)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 19:09:22 +03:00
digital-garbageandClaude Sonnet 5.5 b08fba7d58 fix: .gguf loading stays inside the model folder, ignores a Manager-disabled pack, keeps big fp32 values finite; text-encoder picker hides .gguf without the pack; truthful refusal text (attacker round 10)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 19:03:32 +03:00
digital-garbageandClaude Sonnet 5.5 40c3366214 fix: a text encoder with vision tensors beside mapped text loads; clear messages for a pack missing its gguf library and for pack breakage (attacker round 9)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 18:53:45 +03:00
digital-garbageandClaude Sonnet 5.5 dfa8f8edf2 fix: a vision-projector .gguf is not accepted as a text encoder; a pack whose gguf library is missing says how to fix it (attacker round 8)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 18:41:18 +03:00
digital-garbageandClaude Sonnet 5.5 f37a647d85 fix: the ComfyUI-GGUF pack's (state dict, extras) result is unpacked; a text-encoder .gguf with no backend says the pack, not pip; the Enhance picker hides .gguf encoders without the pack; docs name the pack requirement, restart, thresholds (attacker round 7)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 18:33:07 +03:00
digital-garbageandClaude Sonnet 5.5 e5568ec02b fix: a text-encoder .gguf is refused when ComfyUI-GGUF is absent too; docs no longer overclaim Ready to generate, failure behaviour, rating thresholds, Export; Start shots hint shortened (attacker round 6)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 18:22:38 +03:00
digital-garbageandClaude Sonnet 5.5 08550e3569 fix: H3 second-pass preset held back; unsupported .gguf text encoders are refused instead of loading as the wrong model; Start shots hint is true for H3; LTX module titled UNTESTED; docs corrected (failure behaviour, Taste key location, install caution, gguf, second pass) (attacker round 5)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 18:10:57 +03:00
digital-garbageandClaude Opus 5.5 8ce237dcdd feat: loader logs the file's real weight format (int8 file at bf16 says int8); warns when a cu12 torch on Blackwell halves int8 speed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:34:58 +03:00
digital-garbageandClaude Haiku 5.5 77748b7a7e fix: dense steps '0' means none, as the tooltip and the earlier commit say (was flagged as a bad token)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-10 16:15:51 +03:00
digital-garbageandClaude Haiku 5.5 78a418812b fix: SLA light references on comfy_kitchen pool in plain torch, so they run without Triton
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-10 16:13:15 +03:00
digital-garbageandClaude Opus 5.5 f313ed6ef6 fix: Triton SLA no longer falls back to dense when K arrives in another layout than Q
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:52:37 +03:00
digital-garbageandClaude Opus 5.5 71892d05fd fix: SLA dense steps count from 1 like a person does ('1' is the first; 0 means none in both fields); the run log names the steps that ran at full attention
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:49:15 +03:00
digital-garbageandClaude Opus 5.5 8fabfe3b3f feat: the model loader's fields read in order: file, storage, attention, then SLA as its choices narrow it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:40:01 +03:00
digital-garbageandClaude Opus 5.5 fc92e5869b feat: the model loader shows each SLA field only in the mode it belongs to (sparsity for sla/vsa, tau for sol-attn, block size and stabilize for Triton, tail for comfy_kitchen)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:38:45 +03:00
digital-garbageandClaude Opus 5.5 8eaf5be5f4 feat: SLA method choice (sla / sol-attn / vsa via ComfyUI's Model Sparse Attention); first step dense by default; dense steps read from the schedule, so a cancel or a two-call sampler no longer shifts them
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:30:59 +03:00
digital-garbageandClaude Opus 5.5 91f9cdb70d feat: SLA gains comfy_kitchen's int8 sol_attn engine, precise word/audio protection, reference tiers, dense steps, block 32, tail, stabilize motion; later wrappers no longer skipped
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 01:00:58 +03:00
digital-garbageandClaude Opus 5.5 837a4215a4 fix: v4 regressions before the rental: taste judge trains under inference mode; LoRA keys unwrapped, misfits dropped, no-match said; unsupported dtype said; missed run finish read from history; prompt nudge no longer holds the model
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 03:08:29 +03:00
digital-garbageandClaude Sonnet 5.5 054f18a525 fix: Generate reads the live screen, not a save; autosave delay is a setting that waits for typing; H3 preset always carries a LoRA loader (None = untouched)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 15:51:40 +03:00
digital-garbageandClaude Sonnet 5.5 b9717ed1cc feat: int8_convrot option on the diffusion model loader (H3 bf16 file -> int8 + rotation at load)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 14:09:24 +03:00
digital-garbageandClaude Sonnet 5.5 f41136e3e0 fix: learners teach only from pushes that were felt, per setup; sla counter ignores throwaway calls; camera frame change; shot memory amount 0
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 09:44:24 +03:00
digital-garbageandClaude Sonnet 5 548d99a39b fix: SLA's H3 gate now matches the qualified class, not a bare name
Round 1 of extensive_testing on 79ca8cf found is_h3_model() matched on
diffusion_model's bare class name ("MiniMaxH3Model"), inherited
unchanged from v4. This codebase's own core/traits.py.has_block()
documents exactly why that's unsafe for a name this generic: a
same-named class from an unrelated custom node or a future FunPack
model would be silently treated as H3 and sparsified at 0.90 with
H3-specific audio-prefix pinning -- the identical LTX-collision risk
this file's own docstring already warns about, just not guarded
against strongly enough. modules/models/minimax_h3 already qualifies
its own identical check (MODEL_CLASS = the dotted path); this port
carried over the private, weaker duplicate instead of reusing that
pattern.

Switched to core/traits.py's has_block() with the same qualified dotted
name, kept as a local string (not an import of modules/models/minimax_h3
itself, which pulls in comfy_extras at import time -- this file
deliberately stays importable without ComfyUI on the path). Added a
test exercising the exact collision the bare match would have missed:
a class named MiniMaxH3Model from an unrelated module.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 15:20:51 +03:00
digital-garbageandClaude Sonnet 5 79ca8cfb6b feat: SLA block-sparse attention for MiniMax H3, ported from v4
Loader-level attention option: mean-pool Q and a smoothed K into
blocks, score them with one small matmul, attend only the top
1-sparsity fraction of key blocks per query block, via a vendored
Triton kernel. Runs alongside the chosen attention backend rather than
replacing it (one override slot; the backend becomes SLA's dense
fall-through for the text refiner, masked calls, and trailing dense
steps), and refuses cleanly -- naming why -- on anything that is not
MiniMax H3 or a machine without CUDA+Triton.

modules/loaders/sla_block_map.py and sla_kernel.py are near-verbatim
ports of v4's vendored files (no FunPack-specific imports, so nothing
to adapt); sla_attention.py is the loader-facing glue (H3 gate,
override composition, per-step wrapper), same content as v4's with a
"not a module" note added to match gguf_support.py's convention.
Wired into FunPackDiffusionModelLoader as six new optional widgets,
following v4's loaders.py wiring but expressed in v5's io.Schema style.

The Triton kernel itself is unexercisable on this Mac (no CUDA) --
matches how real generation is verified in this project (rented GPU,
not local). Ported the CPU-testable half of v4's test suite (the
override contract, the H3 gate, the per-step wrapper); the three
kernel-correctness tests carry the same CUDA+Triton skip guard v4 used.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 15:13:05 +03:00
digital-garbageandClaude Sonnet 5 7a226830b1 feat: GGUF loader support, and fix silent pipeline-editor state loss
GGUF: port v4's gguf_support.py (backend selection, content-based .gguf
detection, dequantize fallback) and wire it into both the diffusion-model
and CLIP loaders.

Pipeline editor: reopening the Models-and-pipeline settings window was
silently discarding the whole edited pipeline (a loaded preset, every
loader file, every sampler setting) because GET /api/pipeline is
deliberately stateless server-side and boot.js never fed its own
already-saved slots back into a freshly remounted editor -- found live
while walking through the MiniMax-H3 setup flow. Fixed by re-validating
the saved slots through check() on reopen instead of always replaying
the raw stateless default.

Also fixes, found via the extensive_testing adversarial loop over both
of the above: a stale file-listing cache in the pipeline window (no way
to see a newly-added model file without a full page reload), and a
chain of races/leaks in its own refresh/commit error-banner handling
that surfaced across five review rounds -- a rejection from a superseded
request overwriting a fresher success, a failure banner never clearing
on success, banners bleeding across groups on navigation, and a
commit()'s refusal landing on the wrong view after the user backs out
before it answers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 18:14:46 +03:00
digital-garbageandClaude Opus 5 74671329f9 log: a severity, a source, and a message
[Log] Info: FunPack Diffusion Model Loader | flux.safetensors loaded, attention sage
    [Log] Alert: MiniMaxH3ImageToVideo node | no "first_image" input is connected
    [Log] Warning: FunPack LoRA Loader | style.safetensors is empty and will not load
    [Log] Critical: torch | cannot allocate 14 GB (3 GB free); the run will not start

The difference between the middle two is the one that matters. Alert is a
choice you may not have made on purpose. Warning is something that will NOT
do what its name says -- the level v4 needed and did not have, which is how
560 handlers came to swallow a failure and carry on, so a feature could be
switched on, do nothing, and never say so.

Info is not decoration either: "loaded on GPU using sage attention" is how
an attention setting that did nothing gets noticed months before the
pictures look wrong enough to investigate.

Every call site moved -- there is no note() left to be vague through -- and
the loaders now say what they actually loaded rather than only what they
were asked for. Records are kept in a bounded ring as well as printed, so a
long rental session cannot turn the log into a memory leak, and served at
/funpack/api/log so a person can read it somewhere other than a terminal
full of ComfyUI's own output. There is a page for it.

Also dropped the preflight this was traded for: min and max are already
declared and already enforced at both doors, and a second protection layer
around a check that exists is ceremony.

Two mistakes worth keeping: a log line reached into the model's shape to
describe it and could have failed the load it was only narrating; and both
new pages passed `children` to an element that takes `rows`, which the kit
accepted and silently dropped. It throws on an unknown element and not on an
unknown prop.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-29 17:09:33 +03:00