Commit Graph

5887 Commits

Author SHA1 Message Date
benjcooley fd3bea9156 refactor: replace typed vendor domains with a named integrations dispatch
Eleven vendor-shaped Protocols are replaced by one IntegrationsDomain with
`call(integration, operation, **params)` and `describe()`. The published API
was growing by one class per third-party service while the enforcement point
— `integrations.<name>`, checked at the broker — never varied. The hand-kept
public stub had already fallen behind that growth: Luma, ImgBB and SenseNova
existed in the implementation but had never been published.

Three defects surfaced and are fixed here:

- LlamaCppModelRef.generate reached the vendor by attribute, so every pack
  using the returned handle broke at the wire, not at the call site.
- The in-process path exposed vendors as public attributes and had no
  `call`, so a node could work unsandboxed and fail once sandboxed. The
  vendors are now private and reached only by name, giving both paths the
  same surface.
- `describe` was declared sync in the Protocol but implemented async in the
  guest, which must round-trip to the host.

Also removes a test for load_onnx_image_classifier, deleted from core in
2076700f without its tests; the surviving _validate_onnx_weight_file test
is kept.
2026-09-03 16:40:13 -07:00
benjcooley 677acea1d4 Remove SegFormer from the core node API 2026-09-03 14:10:34 -07:00
benjcooley 2076700f5e refactor: remove pack-owned classifiers from core API 2026-09-03 14:04:04 -07:00
benjcooley e88c901199 refactor: remove transparent VAE decoder from core API 2026-09-03 13:56:17 -07:00
benjcooley a559a53955 refactor: move pack-specific operations out of the dispatcher
The twenty handlers for IP-Adapter, SAM, CLIPSeg, image classification,
advanced ControlNet, transparent VAE, segmentation, inpainting, image
preprocessing and interpolation state used no instance state: they were
module functions parked on a class. They now live in _vendor_ops and
register through the same table, which leaves InProcessOps holding the
engine primitives and collects every pack-specific operation in one file
that can move out to the packs that own them.

They reach the SDK through the module rather than by importing names, so
substitution still resolves at call time.
2026-09-02 13:21:08 -07:00
benjcooley 118e34eb99 fix: keep comfy_api importable without the engine
comfy_api is the API layer; importing it must not require comfy core.
Load comfy.utils at the one call site that needs the progress bar.
2026-09-02 12:19:17 -07:00
benjcooley 0c34f9a98e fix: run the executor loop on Python 3.10
asyncio.Runner is 3.11+; on 3.10 fall back to an equivalent that keeps
one persistent event loop across prompts.
2026-09-02 11:28:10 -07:00
benjcooley 0dee840a53 fix: satisfy ruff across the V2 SDK surface 2026-09-02 11:24:55 -07:00
benjcooley 21f3a1cad1 merge: origin/master into v2-nodes-api 2026-09-02 11:22:46 -07:00
benjcooley eef9033de8 fix: keep the SDK seam inert unless a node or provider engages it
A stock install — no overlay, no SDK markers on the node — now takes the
original invocation path: no ExecutionPlan, no ref table, no runtime
binding, and the pre-existing async task semantics. The seam engages per
node when it declares SDK_REFS/SDK_PERMISSIONS/SDK_REQUIRED_WEIGHTS, or
globally once any default provider is replaced, so a registered backend
still sees every node and provenance-based sandboxing cannot be bypassed
by a node simply declaring nothing.
2026-09-02 11:20:45 -07:00
Daxiong (Lin) a87667f72f chore: update workflow templates to v0.11.54 (#16045) 2026-09-02 10:46:37 -07:00
benjcooley ce2f08182e refactor: move the IP-Adapter typed facade to the packs
The pipeline patches a live model, so its operations stay in core. What
leaves is the typed facade over them: IpAdapterRef and IpAdapterEmbedsRef
were published contract, so every one of their methods was a permanent
commitment. The same ergonomics now ship with the packs that want them,
built on the generic dispatch, and core keeps the operations without
keeping the surface.

ipadapter.apply, apply_tiled, encode and ipadapter_embeds.combine all
remain available by name. Handles cross as generic Refs carrying the
IPADAPTER_PIPE and IPADAPTER_EMBEDS kinds, which is what the validation and
the marshaller now check.

Ref gains _wrap so a handle with no dedicated class can still be re-typed
by the marshaller; the base keeps the resolver's kind while a subclass that
declares KIND asserts its own.
2026-09-02 10:14:04 -07:00
Alexander Piskun ec803fc97e [Partner Nodes] feat(Minimax-H3): add the Max model to the Reference node (#16041)
* [Partner Nodes] feat(MiniMax): add H3 Max option to H3 reference-to-video node

Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-09-02 19:29:30 +04:00
Terry Jia ace9172e95 Annotate temp paths in Preview3DAdvanced / PreviewGaussianSplat / PreviewPointCloud outputs (#16038) 2026-09-02 07:35:27 -04:00
comfyanonymous 4e024cb1e8 Lower trellis workflow remesh memory usage. (#16034) 2026-09-01 22:43:25 -04:00
benjcooley e7f7524ec7 feat: let any handle reach the operation vocabulary
op() was defined only on ImageRef, so a pack holding any other handle had
no way to call a named operation on it and had to wait for core to grow a
typed method. The dispatch itself was always generic: the broker's wire
parameter is named image but passes straight through to
ops.apply(op, subject, params), and core's own vendor wrappers already send
non-image handles along it.

Moving op() to the base Ref is what lets a pack build its own typed
accessor over a capability core knows nothing about, so the operation
vocabulary can keep growing while the API does not. ImageRef keeps its
override to narrow the return type.
2026-09-01 18:29:32 -07:00
Daxiong (Lin) 03468f4e3e chore: update workflow templates to v0.11.52 (#16024)
Co-authored-by: Purz <97489706+purzbeats@users.noreply.github.com>
2026-09-01 21:02:12 -04:00
Purz 624f56565b [Partner Nodes] feat(MiniMax): add H3 Max option to H3 text-to-video and first-last-frame nodes (#16025)
* [Partner Nodes] feat(MiniMax): add H3 Max option to H3 text-to-video and first-last-frame nodes

Signed-off-by: Alexander Piskun <bigcat88@icloud.com>

* [Partner Nodes] fix(downscale): never make a downscaled image more elongated than its source

Signed-off-by: Alexander Piskun <bigcat88@icloud.com>

* [Partner Nodes] fix(M3-Max): add check fpr max prompt length

Signed-off-by: Alexander Piskun <bigcat88@icloud.com>

* [Partner Nodes] chore(Minimax): correct route name

Signed-off-by: bigcat88 <bigcat88@icloud.com>

---------

Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
Signed-off-by: bigcat88 <bigcat88@icloud.com>
Co-authored-by: Alexander Piskun <13381981+bigcat88@users.noreply.github.com>
Co-authored-by: Alexander Piskun <bigcat88@icloud.com>
2026-09-01 20:58:21 -04:00
Tijana Vukovic cf7aedc1e6 Enable PyTorch SDPA attention and FP8 ops for gfx1170 (#16014) 2026-09-01 20:20:43 -04:00
benjcooley dbae8051e7 refactor: keep the ONNX detector inside the packs that use it
Removes OnnxDetectorRef, ctx.models.load_onnx_detector, the
onnx_detector.detect operation, its entry type, loader and cache, and the
secure_kind inference branch that mapped to the removed type.

The detector is one model family, and running an untrusted ONNX graph
belongs in the sandbox rather than in the trusted host process, so the packs
now load and execute it themselves through the generic asset broker.
2026-09-01 16:59:58 -07:00
comfyanonymous 3258eb3a4d Disable ck attention when fp32 + low_precision_attention False. (#16029) 2026-09-01 19:59:29 -04:00
benjcooley b05c60f5c5 refactor: drop ViTMatte from the public stub
Completes the removal: the hand-maintained public surface still declared
MattingModelRef and load_vitmatte after the implementation moved to the
LayerStyle pack.
2026-09-01 16:30:12 -07:00
benjcooley c5d4c384cf refactor: keep ViTMatte inside the LayerStyle pack
ViTMatte is one pack's model family, so the architecture, the loader and the
refinement move to the pack that uses it. Removes MattingModelRef,
ctx.models.load_vitmatte, the matting.refine operation, the ViTMatte entry
type, its loader and its cache from core.

The pack asks only for generic primitives: resolve a declared weight and read
its state dict. It selects and offloads its own device, because the model is
its own and runs in its own process.
2026-09-01 16:28:30 -07:00
Jukka Seppänen 02aa70781a Allow using references with MiniMax-H3 Fun Union and fix prefetch race condition (#16020) 2026-09-01 19:09:42 -04:00
benjcooley 7a941e6e8b feat: add a versioned, self-describing capability registry
Ports de91e80c from api-v2-runtime so both cores expose the same mechanism
for describing and negotiating the operation vocabulary.
2026-09-01 16:01:57 -07:00
benjcooley f23c8a57c2 refactor: extract bounded weight cache and fix LRU eviction
Ports 31d76988 from api-v2-runtime so both cores carry the same cache
behaviour. Seven of the thirteen copy-pasted caches evicted with
dict.popitem(), dropping the most recently inserted entry rather than the
least recently used, which pinned whichever model loaded first.
2026-09-01 16:01:57 -07:00
benjcooley 42678d3b6b refactor: keep BLIP out of the secure core V2 SDK
Ports the core half of the LayerStyle BLIP move to this branch, which had
only received the pack half. Removes VqaModelRef, ctx.models.load_vqa, the
VQA cache and the 30,522-token BERT vocabulary from core; LayerStyle now
carries that implementation and its own vocabulary and asks for weights
through the generic asset broker.

Brings this core back into step with api-v2-runtime, where this landed as
f1510546.
2026-09-01 15:57:13 -07:00
benjcooley 61d06654cb checkpoint: cloud media surface on the secure core
Preserves in-progress work so it is not lost: a new _cloud_media module
plus the SDK, public-surface, and model-transform changes that reference
it. All four files compile; committed as a recovery point rather than a
validated release.
2026-09-01 15:34:38 -07:00
T8star-Aix 3216c62e99 Support SenseNova U1.5 (CORE-411) (#15922) 2026-08-31 20:05:53 -07:00
comfyanonymous d3eaf6adb3 Minimax h3 controlnet as a model patch instead of a controlnet. (#15975) 2026-08-31 19:44:42 -04:00
comfyanonymous a8b4fa6410 Add how to cache model stuff to AGENTS.md (#16003) 2026-08-31 19:09:43 -04:00
benjcooley 13a341d673 Add cloud node runtime SDK support 2026-08-31 15:37:58 -07:00
benjcooley 6e42b35e78 Clamp system metrics to safe integers 2026-08-31 10:48:41 -07:00
benjcooley ec955d53ba Expand secure V2 SDK surface 2026-08-31 10:42:20 -07:00
comfyanonymous 95d755cd81 Disable push event trigger for failing workflow. (#15995) 2026-08-30 23:19:14 -04:00
Terry Jia f938505952 feat: add VideoTrim and VideoCrop nodes with VIDEO_EDIT widget inputs (#15637) 2026-08-30 15:54:48 -07:00
comfyanonymous 8a33128f2f Improve some warning messages. (#15977) 2026-08-29 20:10:20 -04:00
Alexander Piskun 5bdcb5f4ed [Partner Nodes] fix(HeyGen): update Avatar Video price badge (#15945)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
2026-08-29 21:53:58 +04:00
comfyanonymous e7051b0375 Add section about user input tolerance to AGENTS.md (#15955) 2026-08-28 20:00:29 -04:00
Jukka Seppänen 2504e68d4d MiniMax-H3: Support PDD LoRA (#15908) 2026-08-28 18:12:36 -04:00
comfyanonymous 3ac5d7941d Add cfgpp_ud10_ab sampler. (#15951)
This is the result of an experiment where I asked a LLM to create a better
sampler for the base Anima model and gave it a lot of different things to
try.

I wouldn't call this revolutionary but from my basic testing it seems to be
a bit better than the other samplers at lower steps so I have decided to
include it in ComfyUI.

For best result use it at CFG 2.0 on base Anima. It should also work on
other models but I'm not sure about the optimal parameters.
2026-08-28 15:33:18 -04:00
comfyanonymous 0a33ed6c28 Add to readme that we support HDR and high bit depth. (#15940) 2026-08-27 22:57:30 -04:00
Terry Jia a255b96872 feat(3d): File3DToMesh node — parse GLB/GLTF/OBJ/STL into MESH (#15919) 2026-08-27 18:35:30 -07:00
Alexander Piskun 4c6359f2e3 [Partner Nodes] feat(Google-Omni): add support for Omni 1.1 model (#15929)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
Co-authored-by: Purz <97489706+purzbeats@users.noreply.github.com>
2026-08-27 18:29:35 -04:00
Daxiong (Lin) e20d433a49 chore: update workflow templates to v0.11.50 (#15931) 2026-08-27 12:21:54 -07:00
benjcooley 52fab0fec6 Make comfy_api importable without ComfyUI core 2026-08-27 09:33:02 -07:00
Alexander Piskun 77739723a3 fix(memory): respect the container cgroup memory limit instead of host RAM (#15927) 2026-08-27 07:57:31 -07:00
benjcooley e7cbc0bf8d feat(execution): route legacy custom nodes through backend 2026-08-27 02:16:31 -07:00
benjcooley b4b7b14b25 feat(sdk): transport unchanged V2 node values 2026-08-27 02:05:23 -07:00
benjcooley 4416b35be2 feat(io): publish MAX_RESOLUTION on the io surface
Pack schemas use it for input bounds, and the module that has always
defined it (nodes.py) is a host module a sandboxed pack cannot import.
Same value by definition: 16384 is frozen into every workflow that
ever serialized a bound.
2026-08-27 00:03:54 -07:00