Commit Graph

5803 Commits

Author SHA1 Message Date
bymyself
49a8ab4aef Address video save review findings 2026-08-20 12:36:54 -07:00
bymyself
43eeb06239 Harden video save compatibility and regressions 2026-08-20 12:23:40 -07:00
bymyself
6ce57f3cce Keep subtitles when the transcode path runs
_save_transcoded had no subtitle output path, so every stream was dropped
whenever save_to re-encoded: both on the explicit format/codec/trim route and
on the fallback out of _save_remuxed. Compatible subtitles survived a remux and
vanished the moment anything forced a transcode.

Subtitle streams are now carried through untouched, rebased onto the same
trimmed timeline as the video and clipped to the trim window. There is no
subtitle encoder binding in PyAV, so a stream the output container cannot store
as-is is still dropped -- but named in a warning, matching what _save_remuxed
already does rather than disappearing silently.

The remux fallback warning no longer claims subtitles are dropped, because the
transcode it hands off to now keeps the ones it can.
2026-08-20 11:54:32 -07:00
bymyself
46afe68af4 Make the buffer regression test reach the code it covers
A WebM source with format=MP4 never entered the remux path: "mp4" is
absent from the source demuxer's name, so the pre-existing
reuse_streams guard already forced a transcode and the test passed
against an unfixed tree. A mov source carrying pcm_u8 keeps
reuse_streams true and is refused by the mp4 muxer, which is the case
the test was meant to describe, and it is the only test that reaches
the BytesIO truncate.

Also decode the outputs rather than trusting stream headers, encode the
audio-fallback source as mpeg4 so the h264 assertion distinguishes a
re-encode from a copy, stop pinning the mp4 demuxer's full alias list,
and skip rather than error when a build lacks an encoder the sources
need.
2026-08-20 11:54:17 -07:00
bymyself
88a3f8fabf Name the real cause when an audio-only source cannot be stored
The transcode fallback needs a video stream, so an audio-only source
whose codec the destination cannot store failed with "No video stream
found in file", hiding the codec that actually stopped the save.
2026-08-20 11:54:17 -07:00
bymyself
04dfab9eae Use PyAV's own predicate instead of querying supported codecs
OutputContainer.supported_codecs only keeps codecs for which
avformat_query_codec returns 1, while add_stream_from_template rejects
only a falsy result. Muxers that implement neither a query_codec
callback nor a codec_tag table return AVERROR_PATCHWELCOME, so they
accept a stream copy that supported_codecs reports as impossible: an
h264 mpegts source saved with format=auto was fully re-encoded and
silently rehoused in mp4.

Attempt the copy and let PyAV answer instead. All streams are added
before the first packet is muxed, so a stream the destination rejects
is caught before anything is written. Handling it per stream also means
a subtitle track the destination cannot store is dropped on its own
rather than diverting the video alongside it into a needless re-encode.

Log the whole-file re-encode at warning, since it is lossy and discards
the extra audio and subtitle streams the transcode path does not carry.
2026-08-20 11:54:17 -07:00
bymyself
acd563bfa0 Transcode when the output container cannot store the source codec
Saving a VP8 WebM with format=auto named the file .mp4 and then stream
copied VP8 into it, which PyAV rejects. Check the destination muxer's
supported codecs before copying and fall back to re-encoding when any
source stream cannot be stored.
2026-08-20 11:53:50 -07:00
comfyanonymous
97677a8ea3 Support HDR video saving, AV1 codec, mkv and webm. 2026-08-19 23:15:08 -04:00
rattus
5ab2f7a2d6 Limit Windows multi-GPU visibility (#15737) 2026-08-19 19:31:47 -04:00
Alexander Piskun
c67885b145 [Partner Nodes] feat(Gemini-LLM): Add Gemini 3.7 Flash to the Gemini text node (#15688)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-08-19 10:59:50 +04:00
Simon Pinfold
3aba3daef3 Derive asset preview URLs from the file path (#15509)
preview_url was assembled from a /api/view link whose type was chosen by
matching the asset's tags against "input" then "output". Anything written
anywhere else - temp above all, where preview nodes put their images - fell
off the end of that chain and came back with no preview at all. Tags are
user-editable, so removing one also silently destroyed the URL.

Derive the URL from where the file actually sits instead. That covers every
root /api/view serves, temp included, and no longer depends on tags or on a
filename in user_metadata. A file outside those roots, or content no client
can render from its own bytes, gets no preview URL rather than one that
cannot work.

Nominated previews are resolved a page at a time rather than per row, so a
list costs one extra query however long it is. A preview that is soft-deleted
or not visible to the caller drops out of that lookup and is no longer
advertised.

Co-authored-by: guill <jacob.e.segal@gmail.com>
2026-08-18 21:00:28 -07:00
comfyanonymous
a3e5cce506 Add friendly errors to the dynamic vram safetensors loader. (#15722) 2026-08-18 19:59:52 -07:00
Christian Byrne
187eda8ef5 Drop the duplicate first image from the Qwen-Image-Layered blueprint (#15364) 2026-08-18 17:32:05 -07:00
rattus
8b2d29176f Prs/ace graphs (#15698) 2026-08-18 14:58:57 -04:00
Simon Pinfold
cc0fc21fea Keep temp-directory assets visible while their files exist (#15510)
* Keep temp-directory assets visible while their files exist

Assets written to the temp directory were flagged as missing and dropped
from GET /api/assets, even with the file sitting on disk. One list of
directories was answering two different questions -- where the scanner
looks for new files, and which files ComfyUI considers its own -- and
temp belongs only in the second, so every temp reference was disowned by
the prune that runs at startup and on POST /api/assets/prune.

Ownership now covers temp. Discovery still does not: the temp directory
is wiped before the scan runs, and assets written there are already
registered with a hash, mime type and dimensions, so walking it would
find nothing. Temp references are instead reconciled against the
filesystem directly, so a temp file that really is gone is still retired
rather than lingering as a broken entry.

get_prefixes_for_root becomes get_scan_prefixes_for_root so the two
questions are told apart by name rather than by comment.

* Cover the unhashed temp asset in the reconciliation tests

The existing temp tests all registered hashed assets, so they never
exercised the path an unhashed asset takes when its file is gone: the
orphaned rows are removed rather than kept as missing, exactly as under
any other root.
2026-08-17 22:57:55 -07:00
Silver
e5a38e3f7b feat(minimax): support prompt embeddings (#15697) 2026-08-18 00:25:38 -04:00
comfyanonymous
8e869efc87 Add support for taeh3. (#15695) 2026-08-17 23:20:28 -04:00
Barish Ozbay
ff6c8a8af1 Support per-token video and audio latent noise masks on MiniMax-H3 (#15375) 2026-08-17 23:18:18 -04:00
Daxiong (Lin)
c1739380c6 chore: update workflow templates to v0.11.43 (#15690) 2026-08-18 01:11:10 +08:00
Alexander Piskun
edd2ddb0e6 [Partner Nodes] feat(ByteDance): add 1080p resolution to Seedance 2.5 (#15684)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-08-17 20:59:40 +04:00
Alexander Piskun
7d39997e9f [Partner Nodes] feat(FishAudio): implement basic nodes (#15612)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-08-17 20:34:20 +04:00
Christian Byrne
0d80858061 Forward node class attributes into schema for dataset nodes (#15683) 2026-08-16 23:19:53 -07:00
Alexander Piskun
784462cbbd Remove kling-v2 from Kling Image Generation node (#15676) 2026-08-17 08:37:50 +03:00
comfyanonymous
0696f61dce Allow regular single image Empty Latent Image node to be used with H3. (#15677) 2026-08-16 21:34:39 -04:00
Alexander Piskun
b963f4ad21 [Partner Nodes] feat(x-comfy-credits): remove custom price extractor logic (#15655)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-08-16 15:30:58 +04:00
comfyanonymous
aaabf34258 Add MiniMax Music 3 to readme. (#15656) 2026-08-15 19:34:53 -04:00
Alexander Piskun
37ac9ff44f fix(tests): accept Python 3.14 math error messages (#15645)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-08-15 22:43:20 +04:00
Christian Byrne
a9ab2b62da [Partner Nodes] Stop adding an opaque alpha channel to API node images (#15369)
* Stop adding an opaque alpha channel to API node images

bytesio_to_image_tensor converted every downloaded image to RGBA, so nodes
whose API returns no transparency still emitted a 4 channel IMAGE. Keep the
alpha when the decoded image has one, stay RGB when it does not.

---------

Signed-off-by: bigcat88 <bigcat88@icloud.com>
Co-authored-by: bigcat88 <bigcat88@icloud.com>
2026-08-15 21:27:24 +04:00
Alexander Piskun
0f1fa67ad8 [Partner Nodes] feat(ByteDance): add Seedance 2.5 task_type for video extension (#15579)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-08-15 07:37:17 +03:00
comfyanonymous
a7365071e4 Enable dynamic vram by default on ROCm 7.14 and higher. (#15633) 2026-08-14 20:34:40 -04:00
Jukka Seppänen
55b6a9b11d Fix thinking handling (#15611) 2026-08-14 15:17:18 -04:00
Daxiong (Lin)
1c6d8d45b3 chore: update embedded docs to v0.5.10 (#15613) 2026-08-14 10:31:38 -07:00
Jukka Seppänen
7fe8a61385 Speedup Gemma4 text generation (CORE-371) (#15054) 2026-08-13 21:12:55 -04:00
Comfy Org PR Bot
a779de4d89 Bump comfyui-frontend-package to 1.49.6 (#15526)
Co-authored-by: Alexis Rolland <alexisrolland@hotmail.com>
2026-08-13 16:55:28 -07:00
Comfy Org PR Bot
8f37cf8c83 chore(openapi): sync shared API contract from cloud@94d0f1b (#15041)
Co-authored-by: mattmillerai <7741082+mattmillerai@users.noreply.github.com>
Co-authored-by: Matt Miller <mattmiller@comfy.org>
2026-08-13 13:22:05 -07:00
Barish Ozbay
e01fb4c56b Add MiniMaxH3AddGuide for anchoring image and audio guides at any frame (#15439) 2026-08-13 15:55:36 -04:00
comfyanonymous
03fa4e48ba Fix minimax music not working on non dynamic vram. (#15588) 2026-08-13 15:47:44 -04:00
comfyanonymous
2f35f4a081 ComfyUI v0.33.0 v0.33.0 2026-08-13 13:20:22 -04:00
rattus
ddbaa87528 minimax: early detect qkv vs q,k,v (#15581)
avoid a commit charge surge on non-dynamic windows due to double linear
creation.
2026-08-13 13:08:08 -04:00
Daxiong (Lin)
86aedfd943 chore: update workflow templates to v0.11.41 (#15578) 2026-08-13 12:23:02 -04:00
rattus
af3d2153a7 llama: fix non-local x path (#15580) 2026-08-13 12:21:26 -04:00
Alexander Piskun
e535e59e13 [Partner Nodes] feat(Bria): add GenFill, Eraser, Expand and Increase Resolution nodes (#15572)
Signed-off-by: Alexander Piskun <bigcat88@icloud.com>
2026-08-13 19:18:12 +03:00
rattus
efd4e951a0 Implement Minimax Music 3 + Core Support for Cuda Graphs (#15570) 2026-08-13 12:10:08 -04:00
Alexander Piskun
12666983cb [Partner Nodes] feat(MiniMax): add ContextIR and Regenerate nodes (#15471)
Signed-off-by: bigcat88 <bigcat88@icloud.com>
2026-08-13 17:46:08 +03:00
comfyanonymous
b323a345bb Update comfy-kitchen package version to 0.2.31 (#15564) 2026-08-12 23:01:31 -04:00
Alexander Brown
addd479729 Fix Generate Text ignoring thinking=false on Gemma4 E2B/E4B (#15278) 2026-08-12 22:44:14 -04:00
Alex Harper
2220d111c8 Query pytorch for aotriton support instead of listing its lib directory (#15412) 2026-08-12 21:40:11 -04:00
comfyanonymous
6b30dc2068 Don't disable dynamic vram on WSL. (#15562) 2026-08-12 21:39:00 -04:00
comfyanonymous
725e6ec606 Support anima tunes with extra blocks. (#15555) 2026-08-12 16:22:50 -04:00
comfyanonymous
bd34f338ac Fix float64 device in ltx diffusion decoder. (#15516) 2026-08-12 03:55:08 -04:00