Commit Graph

5523 Commits

Author SHA1 Message Date
Simon Pinfold 72d0f86a1d fix(assets): refresh loader_path when re-ingesting an existing reference
upsert_reference only wrote loader_path on the INSERT branch, so
re-ingesting an existing reference (an output overwritten in place, or a
file re-registered after its loader_path derivation changed) kept the
stale or NULL value forever. Write it on the UPDATE branch too, with a
null-safe change guard so a loader_path difference alone is enough to
trigger the update, and identical values stay a no-op.
2026-07-07 08:59:46 +12:00
Simon Pinfold 09086138db fix(assets): only extension-matching buckets contribute a loader_path
The model-base match in get_asset_category_and_relative_path ignored
each bucket's extension set, so a file inside a registered base whose
extension the bucket cannot load (e.g. a .txt uploaded into
model_type:checkpoints) advertised a loader_path that no loader list
would ever resolve, while the tag side of the same stack already
excluded it. Apply the extension check used for backend tags (empty set
accepts any extension), keeping loader_path null exactly when no loader
can resolve the file.
2026-07-07 08:55:53 +12:00
Simon Pinfold 72f239a0e3 fix(assets): persist subfolder-qualified loader_path for ingested outputs
ingest_existing_file built its seed spec with the file's basename, so
outputs saved into a subfolder persisted loader_path (and the
user_metadata filename that preview URLs split for their subfolder
param) as just the basename: the served locator pointed at a file that
does not exist at that path. Scanner and seeder specs already derive
fname via compute_loader_path; use the same derivation here.
2026-07-07 08:55:53 +12:00
Simon Pinfold a37b178116 test(assets): lock loader_path matrix (asymmetry, null, persist/read)
Cover the behaviour that has no production change but is easy to regress:
the extra-path asymmetry (loadable but no storage namespace), null
loader_path persistence for orphan files, and the response reading the
stored column with a compute fallback for un-backfilled rows.
2026-07-07 08:33:59 +12:00
Simon Pinfold 958a7f1f19 feat(assets): replace response file_path with persisted loader_path
The old file_path response field was a namespaced storage locator
(models/checkpoints/foo.safetensors): not an absolute path, not unique
identity, and not the value a loader consumes. Nothing needs that shape
on the wire (hash/ID-based locating is the long-term direction), so it
is dropped rather than renamed; the storage-root matching stays internal,
powering display_name.

What loaders DO need is the in-root loader path (category dropped:
models/checkpoints/foo/bar.safetensors -> foo/bar.safetensors). Serve it
as a first-class loader_path field, persisted on asset_references
(migration 0006) and written by every ingest pipeline at insert, so
responses read the column verbatim.

Like the model_type tags, loader_path is a seed-time derivative of the
model folder registry, maintained by the same scan lifecycle (new files seed
fresh values, pruning retires rows whose bucket disappeared). Rows
predating the column serve a null loader_path; databases from before
this stack already need recreating for the base branch's tag changes.

loader_path resolves every registered base including extra_model_paths
entries; display_name only the canonical storage roots. A file can
therefore be loadable with no display name (extra-path models) or the
reverse (unregistered files under the models root), and loader_path is
null exactly when no loader can resolve the file.
2026-07-07 08:33:47 +12:00
Simon Pinfold 8130443398 fix(assets): filter model_type tags by bucket extension sets
Buckets sharing a base directory (e.g. diffusion_models and a custom
unet_gguf) tagged every file in the directory regardless of whether the
bucket could load it, so .safetensors files were tagged
model_type:unet_gguf and vice versa. Carry each bucket's registered
extension set through get_comfy_models_folders and only emit a
model_type tag when the file extension matches, keeping the empty-set
match-all convention from folder_paths.filter_files_extensions.

Files under a model base matching no bucket now keep only the models
tag instead of every directory-matching model_type tag.
2026-07-07 08:23:24 +12:00
Simon Pinfold ca5adea2e3 test(assets): make duplicate path normalization portable
Amp-Thread-ID: https://ampcode.com/threads/T-019ecf39-2e6f-747d-ae80-addba6b8e4f5
Co-authored-by: Amp <amp@ampcode.com>
2026-07-02 08:24:30 +12:00
Simon Pinfold ccc9387298 fix(assets): merge duplicate scan specs
Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-019ecf39-2e6f-747d-ae80-addba6b8e4f5
2026-07-02 08:21:14 +12:00
guill 04198cd192
Merge branch 'master' into synap5e/assets-namespaced-tags 2026-06-29 14:59:13 -07:00
Daxiong (Lin) a58473fd9b
chore: update embedded docs to v0.5.6 (#14668)
Co-authored-by: Alexis Rolland <alexisrolland@hotmail.com>
2026-06-29 17:08:06 +08:00
comfyanonymous 79c555ce6b
Fix int8 mm being skipped on offloaded lora weights. (#14669) 2026-06-28 23:52:36 -04:00
Matt Miller f19735759e
ci: add team-gated Cursor review (thin caller for github-workflows) (#14527) 2026-06-27 23:34:30 -07:00
comfyanonymous a95e461916
int8 support on turing GPUs. (#14662) 2026-06-27 15:53:11 -07:00
Simon Pinfold f74388346e fix(assets): mark path-derived upload tags automatic
Amp-Thread-ID: https://ampcode.com/threads/T-019ecf39-2e6f-747d-ae80-addba6b8e4f5
Co-authored-by: Amp <amp@ampcode.com>
2026-06-27 15:35:10 +12:00
Simon Pinfold 44b3239068 feat(assets): add namespaced model type tags
Amp-Thread-ID: https://ampcode.com/threads/T-019ecf39-2e6f-747d-ae80-addba6b8e4f5
Co-authored-by: Amp <amp@ampcode.com>
2026-06-27 15:14:20 +12:00
pythongosssss 603d891eaf
Update GLSL node to use ANGLE library (CORE-162) (#13195) 2026-06-27 08:40:31 +08:00
comfyanonymous 470ac36a0a
Fix int8 loras causing lower quality requant with wrong settings. (#14650)
* Update comfy-kitchen

* Support requantizing with same settings as orig quant.
2026-06-26 16:41:29 -07:00
comfyanonymous 7cb784e0f4
Faster int8. (#14641) 2026-06-25 15:25:47 -07:00
comfyanonymous 1a510f0423
Support int8 models. (#14636) 2026-06-25 11:23:58 -07:00
Daxiong (Lin) 639c8fa788
chore: update workflow templates to v0.10.7 (#14632) 2026-06-25 23:05:34 +08:00
Alexander Piskun e22f1500f9
[Partner Nodes] feat(ByteDance): add support for SeeDance-2.0-Mini video model (#14626)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
2026-06-25 17:57:04 +03:00
Terry Jia dac4ea3a80
feat: Bounding boxes canvas and Ideogram JSON prompt (#14537) 2026-06-25 22:34:09 +08:00
Comfy Org PR Bot b0ec19804f
chore(openapi): sync shared API contract from cloud@4118910 (#14619) 2026-06-25 13:54:53 +08:00
comfyanonymous 64e1d740b8
Add advanced krea 2 model merging node. (#14621) 2026-06-24 20:37:30 -07:00
Yousef R. Gamaleldin b22d0fb9c0
feat: Add Support For Simple Seed (CORE-295) (#14616) 2026-06-25 09:39:10 +08:00
Alexander Piskun 5236cd02e6
[Partner Nodes] feat(ByteDance): add 4K resolution support for SeeDance 2.0 (#14614)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
2026-06-24 17:57:46 +03:00
Alexander Piskun cabb7342d1
[Partner Nodes] feat(Grok): add 1080p resolution to Grok Image node (#14612)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
2026-06-24 16:28:56 +03:00
Daxiong (Lin) 12218db68a
Update the template to bring the HH1.1 templates back (#14613) 2026-06-24 21:01:25 +08:00
Alexander Piskun 44955d783b
[Partner Nodes] feat(Alibaba): add support for HappyHorse 1.1 model (#14611)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
2026-06-24 13:37:28 +03:00
Comfy Org PR Bot 1f275fcba6
chore(openapi): sync shared API contract from cloud@363764b (#14607) 2026-06-24 18:22:59 +08:00
comfyanonymous f6c162ddcf ComfyUI v0.26.0 2026-06-23 13:22:28 -04:00
Daxiong (Lin) 261bdb7cac
chore: update workflow templates to v0.10.3 (#14603) 2026-06-23 13:06:26 -04:00
Alexander Piskun 4a03056632
[Partner Nodes] revert last 3 PRs: #14597 #14588 #14581 (#14602) 2026-06-23 12:49:16 -04:00
Alexander Piskun 0f949d0faf
[Partner Nodes] feat(Grok): add 1080p resolution to Grok Image node (#14597) 2026-06-23 23:38:46 +08:00
Daxiong (Lin) d0b640fff7
chore: update workflow templates to v0.10.2 (#14600) 2026-06-23 23:35:21 +08:00
Alexander Piskun 0ba903bd5b
[Partner Nodes] feat(ByteDance): add 4K resolution support for SeeDance 2.0 (#14588)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
2026-06-23 16:18:35 +03:00
Alexander Piskun 0a92ed161e
[Partner Nodes] feat(Alibaba): add support for HappyHorse 1.1 model (#14581)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
Co-authored-by: Alexis Rolland <alexisrolland@hotmail.com>
2026-06-23 13:29:46 +03:00
comfyanonymous b910f4fa2a
More accurate memory usage factor for krea 2. (#14594) 2026-06-23 16:50:48 +08:00
comfyanonymous 833bfb572e
Please try native formats instead of disabling dynamic vram. (#14577) 2026-06-22 21:06:19 -07:00
Jukka Seppänen 2a61015582
feat: Support Krea2 (#14589) 2026-06-22 14:35:00 -07:00
Daxiong (Lin) 6978a466b8
chore: update embedded docs to v0.5.5 (#14585) 2026-06-22 18:29:02 +08:00
Alexis Rolland b0f9e326af
Add output socket to save nodes (#13866) 2026-06-22 10:15:28 +08:00
comfyanonymous 0d8b7510bd
Update extra model paths example. (#14570) 2026-06-20 19:28:09 -07:00
Alexander Piskun dc3f8f314a
[Partner Nodes] chore(Google): remove preview versions of models that will be deprecated soon (#14555)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
Co-authored-by: Alexis Rolland <alexisrolland@hotmail.com>
2026-06-20 09:13:37 +03:00
Comfy Org PR Bot d282ef7201
chore(openapi): sync shared API contract from cloud@1aea581 (#14562) 2026-06-20 12:53:10 +08:00
comfyanonymous e00b55631a
Small anima optimization. (#14557) 2026-06-20 08:05:28 +08:00
Alexis Rolland 69d34f2654
Rename a bunch of nodes (#14547) 2026-06-20 08:01:28 +08:00
Barish Ozbay cd77c551d6
feat: Context Windows sampling with LTX2 models and IC-LoRa guides (CORE-3) (#13325) 2026-06-20 07:47:31 +08:00
Matt Miller 4e716f7c57
Add jobs-namespace cancel endpoints (POST /api/jobs/{job_id}/cancel, POST /api/jobs/cancel) (#14493)
* Add jobs-namespace cancel endpoints

Add two cancel endpoints under the jobs namespace so a job can be
cancelled by id without the caller needing to know whether the job is
running or pending, or branching between /interrupt and /queue.

- POST /api/jobs/{job_id}/cancel cancels one job by id. Idempotent: an
  already-finished or unknown id returns 200 {"cancelled": false} rather
  than an error.
- POST /api/jobs/cancel takes {"job_ids": [...]} and cancels a batch.
  Fail-fast: if any id is unknown the request returns 404 listing the
  unknown ids and cancels nothing (no partial side effects).

Both are state-agnostic and map onto the existing queue mechanics: a
running job is interrupted (same path as /interrupt), a pending job is
dequeued (same path as /queue {"delete": [...]}). The cancel logic lives
in comfy_execution.jobs as pure, unit-tested helpers; the server handlers
are thin wrappers. openapi.yaml documents both routes.

* fix: resolve review feedback on cancel endpoints

- Guard cancel_job() against TOCTOU: when dequeue() returns False the
  pending job left the queue between snapshot and delete; return
  CANCEL_UNKNOWN so callers never report cancelled=True for a remove
  that did not happen.
- Validate each job_ids element in the batch cancel endpoint before
  any queue access; unhashable or non-UUID values now return 400
  instead of raising TypeError (500).
- Update batch HTTP tests to use canonical UUID ids (required now that
  the endpoint validates id format) and add tests for the new guards.

* fix: make job cancel atomic and best-effort

Addresses two cancel races/edges raised in review.

Targeted, atomic interrupt. cancel_job's interrupt callback now takes the
prompt id and returns whether it fired; the single-cancel route backs it
with the new PromptQueue.interrupt_if_running, which checks the running set
and signals the interrupt under the queue mutex. This closes the TOCTOU
where a pending job that starts executing between the snapshot and dequeue
(or a running job that finishes between the snapshot and interrupt) could be
missed or, worse, cause an unrelated prompt to be interrupted. The per-prompt
interrupt-flag reset in execute_async keeps a finished job from leaking the
interrupt onto its successor.

Best-effort batch cancel. POST /api/jobs/cancel no longer fails the whole
batch with 404 when one id is unknown/finished; such ids are treated as
no-ops, so "cancel all" still cancels the in-progress jobs even if some
finished between the client's snapshot and the request. Malformed ids are
still rejected with 400.
2026-06-19 16:39:35 -07:00
Terry Jia 2ab3816dcf
feat: add Load3DAdvanced node (#14316) 2026-06-20 07:06:55 +08:00